diff options
-rw-r--r-- | README.testing | 12 | ||||
-rwxr-xr-x | tests/12_socket_remove.sh | 38 | ||||
-rwxr-xr-x | tests/13_socket_add.sh | 34 | ||||
-rwxr-xr-x | tests/14_socket_diff.sh | 38 | ||||
-rw-r--r-- | tests/test_lib.sh | 61 |
5 files changed, 170 insertions, 13 deletions
diff --git a/README.testing b/README.testing index 0dd1b33..f7c39a4 100644 --- a/README.testing +++ b/README.testing @@ -65,3 +65,15 @@ contents and metadata (mtime, ownership and permissions): check_group $ORG_FILE cdrom && \ check_same_mtime $ORG_FILE $TGT_FILE } + +If either create or deploy should fail then define a test_return function that +compares the exit code of the program. If it is supposed to fail with a specific +exit code then check that the codes are equal, if it is just supposed to fail +then check that it is non-zero + + # create must succeed + create_test_return () { test $1 = 0; } + # create must fail + create_test_return () { test $1 != 0; } + # create must fail with error code 1 + create_test_return () { test $1 = 1; } diff --git a/tests/12_socket_remove.sh b/tests/12_socket_remove.sh new file mode 100755 index 0000000..db44380 --- /dev/null +++ b/tests/12_socket_remove.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +TEST_ID="12" +TEST_NAME="Socket device removal" + +CREATE=`pwd`/$1 +DEPLOY=`pwd`/$2 +TEST_TOOLS=$3 + +. ./test_lib.sh + +############# Test specific code ############ +# sockets can only be moved, linked or removed by the file system +# creation is only performed by the program that acts as the server +# tbdiff won't be doing that so the only sensible operation is removal +SOCKBIND=`mktemp` +setup () { + # sockbind creates a socket then writes any data written to it to stdout + # have to fork it because it will never stop, have to wait for it to + # make the socket + gcc sockbind.c -o $SOCKBIND 2>/dev/null >/dev/null + $SOCKBIND "$ORIGIN/toremove" & + SOCKBINDPID=$! + until test -S "$ORIGIN/toremove"; do :; done + kill $SOCKBINDPID && wait $SOCKBINDPID 2>/dev/null + rm -f $SOCKBIND +} + +create_test_return () { + test $1 = 0 +} + +check_results () { + test ! -S "$ORIGIN/toremove" +} + +############################################# +main $@ diff --git a/tests/13_socket_add.sh b/tests/13_socket_add.sh new file mode 100755 index 0000000..daa4f8f --- /dev/null +++ b/tests/13_socket_add.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +TEST_ID="13" +TEST_NAME="Socket device addition" + +CREATE=`pwd`/$1 +DEPLOY=`pwd`/$2 +TEST_TOOLS=$3 + +. ./test_lib.sh + +############# Test specific code ############ +# sockets can't be added sensibly, test that it hasn't been +SOCKBIND=`mktemp` +setup () { + gcc sockbind.c -o $SOCKBIND 2>/dev/null >/dev/null + $SOCKBIND "$TARGET/toadd" & + SOCKBINDPID=$! + until test -S "$TARGET/toadd"; do :; done + kill $SOCKBINDPID && wait $SOCKBINDPID 2>/dev/null + rm -f $SOCKBIND +} + +#tbdiff-create should fail when it would have to add a socket +create_test_return () { + test "$1" != "0" +} + +check_results () { + false #test should never reach this +} + +############################################# +main $@ diff --git a/tests/14_socket_diff.sh b/tests/14_socket_diff.sh new file mode 100755 index 0000000..9cf9195 --- /dev/null +++ b/tests/14_socket_diff.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +TEST_ID="14" +TEST_NAME="Socket device difference" + +CREATE=`pwd`/$1 +DEPLOY=`pwd`/$2 +TEST_TOOLS=$3 + +. ./test_lib.sh + +############# Test specific code ############ +# sockets can't be changed sensibly, test that it hasn't been + +SOCKBIND=`mktemp` +setup () { + gcc sockbind.c -o $SOCKBIND 2>/dev/null >/dev/null + $SOCKBIND "$ORIGIN/tochange" & + SOCKBINDPID1=$! + $SOCKBIND "$TARGET/tochange" & + SOCKBINDPID2=$! + until test -S "$TARGET/tochange" -a -S "$ORIGIN/tochange"; do :; done + kill $SOCKBINDPID1 $SOCKBINDPID2 && + wait $SOCKBINDPID1 $SOCKBINDPID2 2>/dev/null #surpress terminated output + rm -f $SOCKBIND +} + +#tbdiff-create should fail to make a patch if it would have to change a socket +create_test_return () { + test "$1" != 0 +} + +check_results () { + false #test should never reach this +} + +############################################# +main $@ diff --git a/tests/test_lib.sh b/tests/test_lib.sh index 4645166..5112cea 100644 --- a/tests/test_lib.sh +++ b/tests/test_lib.sh @@ -41,6 +41,46 @@ check_group () { test $(stat -c %G $1) = $2 } +#declare -f is faster, but won't work in dash +is_function () { + type $1 2>/dev/null | grep 'function' +} + +#check_command COMMAND_STRING TEST_COMMAND COMMAND_DESCRIPTION +check_command () { + COMMAND_STRING=$1 + TEST_COMMAND=$2 + COMMAND_DESCRIPTION="$3" + eval $COMMAND_STRING + RETVAL=$? + if is_function "$TEST_COMMAND"; then #test explicitly checks return + if $TEST_COMMAND $RETVAL; then + if [ "$RETVAL" != "0" ]; then + echo $COMMAND_STRING expected failure in \ + $COMMAND_DESCRIPTION >&2 + echo $OK + exit 0 + fi + else + if [ "$RETVAL" = "0" ]; then + echo $COMMAND_STRING Unexpected success in \ + $COMMAND_DESCRIPTION >&2 + echo $FAIL + cleanup_and_exit + else + echo $COMMAND_STRING Unexpected failure in \ + $COMMAND_DESCRIPTION >&2 + echo $FAIL + cleanup_and_exit + fi + fi + elif [ "$RETVAL" != "0" ]; then #return value expected to be 0 + echo $COMMAND_STRING Unexpected failure $COMMAND_DESCRIPTION >&2 + echo $FAIL + cleanup_and_exit + fi +} + start () { if [ $# -ne 2 ] then @@ -88,20 +128,15 @@ main () { echo $OK echo "$TEST_ID Performing $TEST_NAME image creation and deployment: " - CWD=$(pwd) - $CREATE $IMGFILE $ORIGIN $TARGET && \ - cd $ORIGIN && \ - $DEPLOY $IMGFILE && \ - RETVAL=$? - cd $CWD - if test "x$RETVAL" != "x0" - then - echo $FAIL - echo "Could not create and deploy image." 1>&2 - cleanup_and_exit - fi - echo $OK + CWD=$(pwd) && + check_command "$CREATE $IMGFILE $ORIGIN $TARGET" 'create_test_return' \ + "$TEST_ID-$TEST_NAME: creating image" + cd $ORIGIN && + check_command "$DEPLOY $IMGFILE" 'deploy_test_return' \ + "$TEST_ID-$TEST_NAME: deploying image" + + cd $CWD echo -n "$TEST_ID Checking $TEST_NAME results: " check_results if test "x$?" != "x0" |