tests: Improve code coverage by testing corner cases
This patch adds shell scripts that deliberately go through some extra program invocations, e.g. erroneous use of fex2bin. The goal of these test cases is to improve on code (branch) coverage. Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
This commit is contained in:
parent
cd5a0a3303
commit
6ec3876b55
@ -5,11 +5,19 @@
|
||||
BOARDS_URL := https://github.com/linux-sunxi/sunxi-boards/archive/master.zip
|
||||
BOARDS_DIR := sunxi-boards
|
||||
|
||||
check: check_all_fex
|
||||
check: check_all_fex coverage
|
||||
|
||||
# Conversion cycle (.fex -> .bin -> .fex) test for all sunxi-boards
|
||||
check_all_fex: $(BOARDS_DIR)/README unify-fex
|
||||
./test_all_fex.sh $(BOARDS_DIR)
|
||||
|
||||
coverage:
|
||||
# Usage help / invocation with no args
|
||||
../sunxi-fexc -? 2> /dev/null ; exit 0
|
||||
# Improve code coverage for corner cases (e.g. erroneous parameters)
|
||||
./test_fex2bin_corner_cases.sh
|
||||
./test_bin2fex_corner_cases.sh
|
||||
|
||||
# Retrieve and extract sunxi-boards archive (containing all .fex)
|
||||
$(BOARDS_DIR).zip:
|
||||
curl -fLsS -o $@ $(BOARDS_URL)
|
||||
|
||||
13
tests/test_bin2fex_corner_cases.sh
Executable file
13
tests/test_bin2fex_corner_cases.sh
Executable file
@ -0,0 +1,13 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# === Test errors / corner cases of "bin2fex", improving on code coverage ===
|
||||
#
|
||||
BIN2FEX=../bin2fex
|
||||
TESTFILE=sunxi-boards/sys_config/a10/a10-olinuxino-lime
|
||||
# use sunxi-fexc in "fex2bin" mode, testing explicit parameters at the same time
|
||||
FEX2BIN="../sunxi-fexc -v -q -I fex -O bin"
|
||||
|
||||
${FEX2BIN} ${TESTFILE}.fex ${TESTFILE}.bin
|
||||
# have bin2fex explicitly read /dev/stdin, to force use of fexc.c's "read_all()"
|
||||
cat ${TESTFILE}.bin | ${BIN2FEX} /dev/stdin > /dev/null
|
||||
rm -f ${TESTFILE}.bin
|
||||
74
tests/test_fex2bin_corner_cases.sh
Executable file
74
tests/test_fex2bin_corner_cases.sh
Executable file
@ -0,0 +1,74 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# === Test errors / corner cases of "fex2bin", improving on code coverage ===
|
||||
#
|
||||
FEX2BIN=../fex2bin
|
||||
|
||||
function expect () {
|
||||
OUT=`${FEX2BIN} 2>&1`
|
||||
if (! echo ${OUT} | grep -q "$1"); then
|
||||
echo ERROR: Expected substring \"$1\" not found in output:
|
||||
echo ${OUT}
|
||||
exit 1
|
||||
fi
|
||||
#echo ${OUT}
|
||||
}
|
||||
|
||||
# missing section, CRLF line ending
|
||||
echo -e "foobar\r\n" | expect "data must follow a section"
|
||||
|
||||
# malformed sections
|
||||
expect "incomplete section declaration" <<-EOF
|
||||
[foobar
|
||||
EOF
|
||||
expect "invalid character at 5" <<-EOF
|
||||
[foo#bar]
|
||||
EOF
|
||||
|
||||
# invalid entry
|
||||
expect "invalid character at 4" <<-EOF
|
||||
[foo]
|
||||
bar
|
||||
EOF
|
||||
|
||||
# bad port specifiers
|
||||
expect "parse error at 12" <<-EOF
|
||||
[foo]
|
||||
bar = port:P@0
|
||||
EOF
|
||||
expect "invalid character at 14" <<-EOF
|
||||
[foo]
|
||||
bar = port:PA*
|
||||
EOF
|
||||
expect "port out of range at 14" <<-EOF
|
||||
[foo]
|
||||
bar = port:PA666
|
||||
EOF
|
||||
expect "value out of range at 17" <<-EOF
|
||||
[foo]
|
||||
bar = port:PA00<-1>
|
||||
EOF
|
||||
expect "invalid character at 18" <<-EOF
|
||||
[foo]
|
||||
bar = port:PA00<0 >
|
||||
EOF
|
||||
|
||||
# bad <key> = <value> pairs
|
||||
expect "invalid character at 8" <<-EOF
|
||||
[foo]
|
||||
bar = 0*
|
||||
EOF
|
||||
expect "value out of range" <<-EOF
|
||||
[foo]
|
||||
bar = 4294967296
|
||||
EOF
|
||||
expect "unquoted value 'bad', assuming string" <<-EOF
|
||||
[foo]
|
||||
bar = bad
|
||||
EOF
|
||||
|
||||
# test truncation of very long identifiers
|
||||
${FEX2BIN} > /dev/null <<-EOF
|
||||
[an_overly_long_section_name_to_truncate]
|
||||
an_overly_long_entry_name_to_truncate = 0
|
||||
EOF
|
||||
Loading…
x
Reference in New Issue
Block a user