Skip to content

Commit

Permalink
Use a single more maintainable file for the test data
Browse files Browse the repository at this point in the history
* Use a script to generate the individual test files from the single source.
  • Loading branch information
pbatard committed Nov 24, 2023
1 parent 7ebdd91 commit 0ce5851
Show file tree
Hide file tree
Showing 63 changed files with 188 additions and 115 deletions.
5 changes: 4 additions & 1 deletion .github/workflows/Linux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,9 @@ jobs:
echo '#define VERSION_STRING L"${{steps.set_version.outputs.version}}"' > version.h
- name: Set up Linux environment
run: sudo apt-get update && sudo apt-get -y --no-install-recommends install ${{ matrix.TARGET_PKGS }}
run: |
sudo apt-get update
sudo apt-get -y --no-install-recommends install ${{ matrix.TARGET_PKGS }}
- name: Set up EDK2
run: |
Expand Down Expand Up @@ -113,4 +115,5 @@ jobs:
if: matrix.TARGET_TYPE != 'riscv64'
run: |
export QEMU_CMD="qemu-system-${{ matrix.QEMU_ARCH }} ${{ matrix.QEMU_OPTS }} -smbios type=0,vendor=\"GitHub Actions Test\",version=\"v1.0\" -L . -drive if=pflash,format=raw,unit=0,file=${{ matrix.FW_BASE }}.fd,readonly=on -drive format=raw,file=fat:rw:image -nodefaults -nographic -serial stdio -net none"
./gen_tests.sh
./run_tests.sh
40 changes: 40 additions & 0 deletions gen_tests.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
#!/bin/env bash

## @file
# Test generation script for MD5Sum.
#
# Copyright (c) 2023, Pete Batard <pete@akeo.ie>
#
# SPDX-License-Identifier: GPL-2.0-or-later
#
##

TEST_DIR=test

rm -rf $TEST_DIR
mkdir $TEST_DIR

test_number=0

while IFS=$'\r\n' read -r line; do
if [[ ${line:0:1} == "#" ]]; then
test_number=$((test_number + 1))
data_file=$(printf "%s/%03d %s.dat" $TEST_DIR $test_number "${line:2}")
setup_file=$(printf "%s/%03d setup.sh" $TEST_DIR $test_number)
teardown_file=$(printf "%s/%03d teardown.sh" $TEST_DIR $test_number)
elif [[ ${line:0:1} == ">" ]]; then
if [[ ! -f "$setup_file" ]]; then
echo "#!/bin/env bash" > "$setup_file"
chmod 755 "$setup_file"
fi
echo "${line:2}" >> "$setup_file"
elif [[ ${line:0:1} == "<" ]]; then
if [[ ! -f "$teardown_file" ]]; then
echo "#!/bin/env bash" > "$teardown_file"
chmod 755 "$teardown_file"
fi
echo "${line:2}" >> "$teardown_file"
elif [[ ! -z "$line" ]]; then
echo "${line}" >> "$data_file"
fi
done < gen_tests.txt
142 changes: 142 additions & 0 deletions gen_tests.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
# No Hash list
> rm -f image/md5sum.txt
[FAIL] Unable to locate 'md5sum.txt': [14] Not Found

# Empty Hash list
> rm -f image/md5sum.txt
> touch image/md5sum.txt
[FAIL] 'md5sum.txt' is too small: [3] Unsupported

# Hash list too small
> echo -n "00112233445566778899aabbccddeeff." > image/md5sum.txt
[FAIL] 'md5sum.txt' is too small: [3] Unsupported

# Hash list min size
> echo -n "00112233445566778899aabbccddeeff ." > image/md5sum.txt
Found 1 entries (Total Bytes = 0x0)

# Hash list too large
> dd if=/dev/zero of=image/md5sum.txt bs=1M count=65
[FAIL] 'md5sum.txt' is too large: [3] Unsupported

# Hash list too many lines
> tr '\0' '\n' < /dev/zero | head -c 100001 > image/md5sum.txt
[FAIL] 'md5sum.txt' contains too many lines: [3] Unsupported

# Hash list invalid entry
> echo "This entry is invalid and should fail" > image/md5sum.txt
[FAIL] Invalid data in 'This entry is invalid and should': [21] Aborted

# Hash containing NUL
> echo "001122334455 6778899aabbccddeeff This hash contains a NUL" | tr '\11' '\0' > image/md5sum.txt
[FAIL] 'md5sum.txt' contains invalid data: [21] Aborted

# Hash containing space
> echo "001122334455 6778899aabbccddeeff This hash contains a space" > image/md5sum.txt
[FAIL] Invalid data in '001122334455 6778899aabbccddeeff': [21] Aborted

# Hash containing an invalid character
> echo "00112233445566778899azbbccddeeff This hash contains an invalid character" > image/md5sum.txt
[FAIL] Invalid data in '00112233445566778899azbbccddeeff': [21] Aborted

# Hash too short
> echo "00112233445566778899aabbccddeef Hash is too short" > image/md5sum.txt
[FAIL] Invalid data in '00112233445566778899aabbccddeef ': [21] Aborted

# Hash too long
> echo "00112233445566778899aabbccddeeffa Hash is too long" > image/md5sum.txt
[FAIL] Invalid data after '00112233445566778899aabbccddeeff': [21] Aborted

# Hash containing uppercase
> echo "00112233445566778899AaBbCcDdEeFf Mixed case hash" > image/md5sum.txt
Found 1 entries (Total Bytes = 0x0)

# Path containing NUL
> echo "00112233445566778899aabbccddeeff This path contains a NUL" | tr '\11' '\0' > image/md5sum.txt
[FAIL] 'md5sum.txt' contains invalid data: [21] Aborted

# Path containing TAB
> echo "00112233445566778899aabbccddeeff This file name contains a TAB" > image/md5sum.txt
[FAIL] Invalid data after '00112233445566778899aabbccddeeff': [21] Aborted

# Path too long
> echo -n "00112233445566778899aabbccddeeff " > image/md5sum.txt
> cat /dev/zero | tr '\0' 'a' | head -c 513 - >> image/md5sum.txt
[FAIL] Invalid data after '00112233445566778899aabbccddeeff': [21] Aborted

# Max Path size
> echo -n "00112233445566778899aabbccddeeff " > image/md5sum.txt
> cat /dev/zero | tr '\0' 'a' | head -c 512 - >> image/md5sum.txt
Found 1 entries (Total Bytes = 0x0)

# Comment preceded by whitespaces
> echo " # Comment preceded by whitespaces" > image/md5sum.txt
> echo "0123456789abcdef0123456789abcdef file" >> image/md5sum.txt
Found 1 entries (Total Bytes = 0x0)

# Comment followed by whitespaces
> echo "# Comment followed by whitespaces " > image/md5sum.txt
> echo "0123456789abcdef0123456789abcdef file1" >> image/md5sum.txt
Found 1 entries (Total Bytes = 0x0)

# Comment containing a NUL
> echo "00112233445566778899aabbccddeeff file1" > image/md5sum.txt
> echo "# This comment contains a NUL" | tr '\11' '\0' >> image/md5sum.txt
> echo "abcdef12345678900987654321fedcba file2" >> image/md5sum.txt
[FAIL] 'md5sum.txt' contains invalid data: [21] Aborted

# Comment in the middle
> echo "00112233445566778899aabbccddeeff file1" > image/md5sum.txt
> echo "# Comment in the middle" >> image/md5sum.txt
> echo "0123456789abcdef0123456789abcdef file2" >> image/md5sum.txt
Found 2 entries (Total Bytes = 0x0)

# Unterminated hash list
> echo "00112233445566778899aabbccddeeff file1" > image/md5sum.txt
> echo -n "0123456789abcdef0123456789abcdef file2" >> image/md5sum.txt
Found 2 entries (Total Bytes = 0x0)

# Empty path
> echo "00112233445566778899aabbccddeeff " > image/md5sum.txt
> echo "0123456789abcdef0123456789abcdef file" >> image/md5sum.txt
[FAIL] Invalid data after '00112233445566778899aabbccddeeff': [21] Aborted

# Empty TotalBytes
> echo "00112233445566778899aabbccddeeff file" > image/md5sum.txt
> echo "# TotalBytes:" >> image/md5sum.txt
[WARN] Ignoring invalid TotalBytes value
Found 1 entries (Total Bytes = 0x0)

# Invalid TotalBytes
> echo "00112233445566778899aabbccddeeff file" > image/md5sum.txt
> echo "# TotalBytes: invalid" >> image/md5sum.txt
[WARN] Ignoring invalid TotalBytes value
Found 1 entries (Total Bytes = 0x0)

# TotalBytes invalid 0x prefix
> echo "00112233445566778899aabbccddeeff file" > image/md5sum.txt
> echo "# TotalBytes: 0 x1234" >> image/md5sum.txt
[WARN] Ignoring invalid TotalBytes value
Found 1 entries (Total Bytes = 0x0)

# TotalBytes missing 0x prefix
> echo "00112233445566778899aabbccddeeff file" > image/md5sum.txt
> echo "# TotalBytes: 1234" >> image/md5sum.txt
[WARN] Ignoring invalid TotalBytes value
Found 1 entries (Total Bytes = 0x0)

# TotalBytes 1 character value
> echo "# TotalBytes: 0x8 " > image/md5sum.txt
> echo "00112233445566778899aabbccddeeff file" >> image/md5sum.txt
Found 1 entries (Total Bytes = 0x8)

# TotalBytes 16 characters value
> echo "00112233445566778899aabbccddeeff file" > image/md5sum.txt
> echo "#TotalBytes: 0x12345678abcdef0" >> image/md5sum.txt
Found 1 entries (Total Bytes = 0x12345678ABCDEF0)

# TotalBytes 17 characters value
> echo "00112233445566778899aabbccddeeff file" > image/md5sum.txt
> echo "# TotalBytes: 0xabcdabcdabcdabcd0 " >> image/md5sum.txt
[WARN] Ignoring invalid TotalBytes value
Found 1 entries (Total Bytes = 0x0)
6 changes: 2 additions & 4 deletions run_tests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,9 @@ if [[ -z "$QEMU_CMD" ]]; then
exit 1
fi

rm -f image/md5sum.txt
for t in $TEST_DIR/*.dat; do

for t in $TEST_DIR/*.txt; do

base=$(basename "${t%.txt}")
base=$(basename "${t%.dat}")
test_number=${base:0:3}
test_name=${base:4}
test_desc="Test #$test_number: ${test_name}... "
Expand Down
1 change: 0 additions & 1 deletion test/001 No Hash list.txt

This file was deleted.

1 change: 0 additions & 1 deletion test/002 Empty Hash list.txt

This file was deleted.

2 changes: 0 additions & 2 deletions test/002 setup.sh

This file was deleted.

1 change: 0 additions & 1 deletion test/003 Hash list too small.txt

This file was deleted.

2 changes: 0 additions & 2 deletions test/003 setup.sh

This file was deleted.

1 change: 0 additions & 1 deletion test/004 Hash list min size.txt

This file was deleted.

2 changes: 0 additions & 2 deletions test/004 setup.sh

This file was deleted.

1 change: 0 additions & 1 deletion test/005 Hash list too large.txt

This file was deleted.

2 changes: 0 additions & 2 deletions test/005 setup.sh

This file was deleted.

1 change: 0 additions & 1 deletion test/006 Hash list too many lines.txt

This file was deleted.

2 changes: 0 additions & 2 deletions test/006 setup.sh

This file was deleted.

1 change: 0 additions & 1 deletion test/007 Garbage entry.txt

This file was deleted.

2 changes: 0 additions & 2 deletions test/007 setup.sh

This file was deleted.

1 change: 0 additions & 1 deletion test/008 Hash containing NUL.txt

This file was deleted.

2 changes: 0 additions & 2 deletions test/008 setup.sh

This file was deleted.

1 change: 0 additions & 1 deletion test/009 Hash containing space.txt

This file was deleted.

2 changes: 0 additions & 2 deletions test/009 setup.sh

This file was deleted.

1 change: 0 additions & 1 deletion test/010 Hash containing an invalid character.txt

This file was deleted.

2 changes: 0 additions & 2 deletions test/010 setup.sh

This file was deleted.

1 change: 0 additions & 1 deletion test/011 Hash too short.txt

This file was deleted.

2 changes: 0 additions & 2 deletions test/011 setup.sh

This file was deleted.

1 change: 0 additions & 1 deletion test/012 Hash too long.txt

This file was deleted.

2 changes: 0 additions & 2 deletions test/012 setup.sh

This file was deleted.

1 change: 0 additions & 1 deletion test/013 Hash containing uppercase.txt

This file was deleted.

2 changes: 0 additions & 2 deletions test/013 setup.sh

This file was deleted.

1 change: 0 additions & 1 deletion test/014 Path containing TAB.txt

This file was deleted.

2 changes: 0 additions & 2 deletions test/014 setup.sh

This file was deleted.

1 change: 0 additions & 1 deletion test/015 Path containing NUL.txt

This file was deleted.

2 changes: 0 additions & 2 deletions test/015 setup.sh

This file was deleted.

1 change: 0 additions & 1 deletion test/016 Path too long.txt

This file was deleted.

3 changes: 0 additions & 3 deletions test/016 setup.sh

This file was deleted.

1 change: 0 additions & 1 deletion test/017 Max Path size.txt

This file was deleted.

3 changes: 0 additions & 3 deletions test/017 setup.sh

This file was deleted.

1 change: 0 additions & 1 deletion test/018 Comment preceded by whitespaces.txt

This file was deleted.

3 changes: 0 additions & 3 deletions test/018 setup.sh

This file was deleted.

1 change: 0 additions & 1 deletion test/019 Comment followed by whitespaces.txt

This file was deleted.

3 changes: 0 additions & 3 deletions test/019 setup.sh

This file was deleted.

1 change: 0 additions & 1 deletion test/020 Comment in the middle.txt

This file was deleted.

4 changes: 0 additions & 4 deletions test/020 setup.sh

This file was deleted.

1 change: 0 additions & 1 deletion test/021 Unterminated hash list.txt

This file was deleted.

3 changes: 0 additions & 3 deletions test/021 setup.sh

This file was deleted.

1 change: 0 additions & 1 deletion test/022 Empty path.txt

This file was deleted.

3 changes: 0 additions & 3 deletions test/022 setup.sh

This file was deleted.

2 changes: 0 additions & 2 deletions test/023 Empty TotalBytes.txt

This file was deleted.

3 changes: 0 additions & 3 deletions test/023 setup.sh

This file was deleted.

2 changes: 0 additions & 2 deletions test/024 Invalid TotalBytes.txt

This file was deleted.

3 changes: 0 additions & 3 deletions test/024 setup.sh

This file was deleted.

2 changes: 0 additions & 2 deletions test/025 TotalBytes invalid 0x prefix.txt

This file was deleted.

3 changes: 0 additions & 3 deletions test/025 setup.sh

This file was deleted.

2 changes: 0 additions & 2 deletions test/026 TotalBytes missing 0x prefix.txt

This file was deleted.

3 changes: 0 additions & 3 deletions test/026 setup.sh

This file was deleted.

1 change: 0 additions & 1 deletion test/027 TotalBytes 1 character value.txt

This file was deleted.

3 changes: 0 additions & 3 deletions test/027 setup.sh

This file was deleted.

1 change: 0 additions & 1 deletion test/028 TotalBytes 16 characters value.txt

This file was deleted.

3 changes: 0 additions & 3 deletions test/028 setup.sh

This file was deleted.

2 changes: 0 additions & 2 deletions test/029 TotalBytes 17 characters value.txt

This file was deleted.

3 changes: 0 additions & 3 deletions test/029 setup.sh

This file was deleted.

1 change: 0 additions & 1 deletion test/030 Comment containing a NUL.txt

This file was deleted.

4 changes: 0 additions & 4 deletions test/030 setup.sh

This file was deleted.

0 comments on commit 0ce5851

Please sign in to comment.