OK=" OK" FAIL=" FAIL" TESTDIR=`mktemp -d` IMGFILE=$TESTDIR/tbdiff.img ORIGIN=$TESTDIR/orig TARGET=$TESTDIR/target # check_same_mtime FILE_A FILE_B check_same_mtime () { test $(stat -c %Y $1) = $(stat -c %Y $2) } # check_same_uidgid FILE_A FILE_B check_same_uidgid () { test $(stat -c "%u.%g" $1) = $(stat -c "%u.%g" $2) } # check_same_mode FILE_A FILE_B check_same_mode () { test $(stat -c "%f" $1) = $(stat -c "%f" $2) } # check_perm FILE EXPECTED_OCTAL_PERMISSIONS check_perm () { test $(stat -c %a $1) = $2 } # check_symlink FILE EXPECTED_PATH check_symlink () { test $(readlink $1) = $2 } # check_content FILE EXPECTED_CONTENT check_content () { test $(cat $1) = $2 } # check_group FILE EXPECTED_GROUP_NAME check_group () { test $(stat -c %G $1) = $2 } # check_xattrs FILE1 FILE2 # check that two files have the same attributes check_xattrs () { test "`getfattr --dump --encoding=base64 $1 | tail -n +2`" = \ "`getfattr --dump --encoding=base64 $2 | tail -n +2`" } # check_xattr_exists FILE KEY check_xattr_exists () { # attr doesn't use user. prefix, but getfattr returns 0 on non-existant noprefix=`echo $2 | sed s/user.//` attr -g $2 $1 >dev/null 2>/dev/null } # xattr_get FILE KEY xattr_get () { getfattr --only-values --name=$2 $1 } # check_xattr_value FILE KEY VALUE check_xattr_value () { check_xattr_exists && test "`xattr_get $1 $2`" = "$3" } # tests whether a command exists is_command () { type $1 >/dev/null 2>/dev/null } #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_command "$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 echo "ERROR: Not enough arguments." cleanup_and_exit fi if [ ! -f $1 ] then echo "ERROR: $1 is an invalid tbdiff-create path" 1>&2 cleanup_and_exit fi if [ ! -f $2 ] then echo "ERROR: $1 is an invalid tbdiff-deploy path" 1>&2 cleanup_and_exit fi } cleanup_and_exit () { rm -rf $TESTDIR exit 1 } main () { start $@ echo -n "$TEST_ID Setting up $TEST_NAME test: " if [ ! -d $TESTDIR ] then echo $FAIL echo "Couldn't create temporary directory for test. " \ "Please check mktemp accepts -d and permissions." >&2 cleanup_and_exit fi mkdir -p $ORIGIN && \ mkdir -p $TARGET && \ setup if [ $? -ne 0 ] then echo $FAIL echo "Couldn't setup the test directory structure. Check your privileges" 1>&2 cleanup_and_exit fi echo $OK echo "$TEST_ID Performing $TEST_NAME image creation and deployment: " 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" then echo $FAIL echo "Applying image did not produce the expected results" 1>&2 cleanup_and_exit fi echo $OK }