Commit 6ec3876b authored by Bernhard Nortmann's avatar Bernhard Nortmann
Browse files

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: default avatarBernhard Nortmann <bernhard.nortmann@web.de>
parent cd5a0a33
...@@ -5,11 +5,19 @@ ...@@ -5,11 +5,19 @@
BOARDS_URL := https://github.com/linux-sunxi/sunxi-boards/archive/master.zip BOARDS_URL := https://github.com/linux-sunxi/sunxi-boards/archive/master.zip
BOARDS_DIR := sunxi-boards 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 check_all_fex: $(BOARDS_DIR)/README unify-fex
./test_all_fex.sh $(BOARDS_DIR) ./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) # Retrieve and extract sunxi-boards archive (containing all .fex)
$(BOARDS_DIR).zip: $(BOARDS_DIR).zip:
curl -fLsS -o $@ $(BOARDS_URL) curl -fLsS -o $@ $(BOARDS_URL)
......
#!/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
#!/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
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment