diff options
Diffstat (limited to 'tests/jittertest/filename_bounds.sh.in')
| -rwxr-xr-x | tests/jittertest/filename_bounds.sh.in | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/tests/jittertest/filename_bounds.sh.in b/tests/jittertest/filename_bounds.sh.in new file mode 100755 index 0000000..0dfba74 --- /dev/null +++ b/tests/jittertest/filename_bounds.sh.in @@ -0,0 +1,115 @@ +#!/bin/sh + +TESTBINDIR=${TESTBINDIR-@TESTBINDIR@} + +tmpdir= +jt_pid= +watchdog_pid= + +fatal() +{ + echo "Error: $1" 1>&2 + exit 1 +} + +cleanup() +{ + if [ -n "$watchdog_pid" ]; then + kill "$watchdog_pid" >/dev/null 2>&1 || : + wait "$watchdog_pid" 2>/dev/null || : + fi + + if [ -n "$jt_pid" ]; then + kill "$jt_pid" >/dev/null 2>&1 || : + wait "$jt_pid" 2>/dev/null || : + fi + + if [ -n "$tmpdir" ]; then + rm -rf "$tmpdir" + fi +} + +trap 'status=$?; trap - EXIT; cleanup; exit $status' EXIT +trap 'exit 1' HUP INT QUIT TERM + +make_name() +{ + char="$1" + length="$2" + name= + i=0 + + while [ "$i" -lt "$length" ]; do + name="${name}${char}" + i=$((i + 1)) + done + + printf '%s' "$name" +} + +tmpdir=$(mktemp -d "${TMPDIR:-/tmp}/mtd-utils-jittertest.XXXXXX") || + fatal "mktemp failed" +cd "$tmpdir" || fatal "cannot change to temp dir" + +plot_valid=$(make_name a 249) +: > "$plot_valid" || fatal "cannot create valid plot input" +"$TESTBINDIR/plotJittervsFill" -f "$plot_valid" >plot-valid.out 2>plot-valid.err || + fatal "plotJittervsFill rejected a 249-byte file name" +if grep -q "exceeds maximum length" plot-valid.out plot-valid.err; then + fatal "plotJittervsFill reported a max-length error for a 249-byte file name" +fi + +plot_invalid=$(make_name b 250) +"$TESTBINDIR/plotJittervsFill" -f "$plot_invalid" >plot-invalid.out 2>plot-invalid.err || : +if ! grep -q "exceeds maximum length" plot-invalid.out plot-invalid.err; then + fatal "plotJittervsFill did not reject a 250-byte file name" +fi +if grep -q "Unable to open input log file" plot-invalid.out plot-invalid.err; then + fatal "plotJittervsFill reached fopen() for an overlong file name" +fi + +jt_read_valid=$(make_name r 32) +"$TESTBINDIR/JitterTest" -c /dev/null -f out.dat -r "$jt_read_valid" >jt-valid.out 2>jt-valid.err & +jt_pid=$! +( + sleep 10 + kill -TERM "$jt_pid" >/dev/null 2>&1 || : + sleep 1 + kill -KILL "$jt_pid" >/dev/null 2>&1 || : +) & +watchdog_pid=$! +sleep 1 +kill -INT "$jt_pid" >/dev/null 2>&1 || fatal "cannot stop JitterTest" +wait "$jt_pid" || fatal "JitterTest failed with a 32-byte read file name" +jt_pid= +kill "$watchdog_pid" >/dev/null 2>&1 || : +wait "$watchdog_pid" 2>/dev/null || : +watchdog_pid= +if ! grep -q "Press Ctrl+C to exit the program." jt-valid.out; then + fatal "JitterTest did not start normally with a 32-byte read file name" +fi +if ! grep -q "JitterTest exiting." jt-valid.out; then + fatal "JitterTest did not exit cleanly after SIGINT" +fi + +jt_read_invalid=$(make_name s 33) +"$TESTBINDIR/JitterTest" -c /dev/null -f out.dat -r "$jt_read_invalid" \ + >jt-read-invalid.out 2>jt-read-invalid.err || : +if ! grep -q "exceeds maximum length" jt-read-invalid.out jt-read-invalid.err; then + fatal "JitterTest did not reject a 33-byte read file name" +fi +if grep -q "Press Ctrl+C to exit the program." jt-read-invalid.out jt-read-invalid.err; then + fatal "JitterTest started despite an overlong read file name" +fi + +jt_console_invalid=$(make_name c 33) +"$TESTBINDIR/JitterTest" -c "$jt_console_invalid" -f out.dat \ + >jt-console-invalid.out 2>jt-console-invalid.err || : +if ! grep -q "exceeds maximum length" jt-console-invalid.out jt-console-invalid.err; then + fatal "JitterTest did not reject a 33-byte console file name" +fi +if grep -q "Press Ctrl+C to exit the program." jt-console-invalid.out jt-console-invalid.err; then + fatal "JitterTest started despite an overlong console file name" +fi + +echo "SUCCESS" |
