Isolate test cases; allow concurrent execution
authorEric Biggers <ebiggers3@gmail.com>
Wed, 6 Feb 2013 00:25:00 +0000 (18:25 -0600)
committerEric Biggers <ebiggers3@gmail.com>
Wed, 6 Feb 2013 00:25:00 +0000 (18:25 -0600)
tests/test-imagex
tests/test-imagex-capture_and_apply
tests/test-imagex-mount
tests/test-imagex-ntfs
tests/tests-common.sh

index 4669767..234683e 100755 (executable)
@@ -9,21 +9,12 @@ srcdir="${srcdir:-.}/.."
 srcdir="$(cd $srcdir; pwd)"
 . "$srcdir/tests/tests-common.sh"
 
-imagex() {
-       echo "imagex $@"
-       ../imagex "$@" > /dev/null
-}
-
-imagex_info() {
-       echo "imagex info $@"
-       ../imagex info "$@"
-}
-
-cleanup() {
-       fusermount -u tmp &> /dev/null || true
-       rm -rf dir* tmp* *.wim *.swm &> /dev/null || true
-}
-cleanup
+TEST_SUBDIR=tmpdir_test-imagex
+
+# Execute the tests in a subdirectory to avoid conflicts with concurrent tests
+default_cleanup
+mkdir $TEST_SUBDIR
+cd $TEST_SUBDIR
 
 # Make test directory
 mkdir dir
@@ -39,14 +30,6 @@ mkdir dir2
 echo 'testing' > dir2/file
 dd if=/dev/zero of=dir2/zeroes bs=4096 count=5
 
-error() {
-       echo "**********************************************"
-       echo "                  Test failure                "
-       echo $*
-       echo "**********************************************"
-       exit 1
-}
-
 # Capturing and applying WIM with None, LZX, and XPRESS compression
 
 for comp_type in None LZX XPRESS; do
@@ -57,8 +40,8 @@ for comp_type in None LZX XPRESS; do
        if ! imagex apply dir.wim tmp; then
                error "'imagex apply' failed"
        fi
-       if ! test "`imagex_info dir.wim | grep Compression | awk '{print $2}'`" = "$comp_type"; then
-               error "'imagex_info' didn't report the compression type correctly"
+       if ! test `wim_ctype dir.wim` = "$comp_type"; then
+               error "'imagex info' didn't report the compression type correctly"
        fi
        if ! diff -q -r dir tmp; then
                error "Recursive diff of extracted directory with original failed"
@@ -86,38 +69,38 @@ done
 
 echo "Testing capture of WIM with default name and description"
 imagex capture dir dir.wim
-if ! test "`imagex_info dir.wim | grep Name | awk '{print $2}'`" = "dir"; then
+if ! test "`imagex info dir.wim | grep Name | awk '{print $2}'`" = "dir"; then
        error "WIM name not set correctly"
 fi
-if ! test "`imagex_info dir.wim | grep Description | awk '{print $2}'`" = ""; then
+if ! test "`imagex info dir.wim | grep Description | awk '{print $2}'`" = ""; then
        error "WIM description not set correctly"
 fi
 
 echo "Testing capture of WIM with default boot flag"
 imagex capture dir dir.wim
-if ! test "`imagex_info dir.wim | grep Boot | awk '{print $3}'`" = "0"; then
+if ! test "`imagex info dir.wim | grep Boot | awk '{print $3}'`" = "0"; then
        error "WIM boot flag not set correctly"
 fi
 
 echo "Testing changing image bootable flag"
-if ! imagex_info dir.wim 1 --boot; then
+if ! imagex info dir.wim 1 --boot; then
        error "Failed to change bootable image"
 fi
-if ! test "`imagex_info dir.wim | grep Boot | awk '{print $3}'`" = "1"; then
+if ! test "`imagex info dir.wim | grep Boot | awk '{print $3}'`" = "1"; then
        error "Bootable image not changed correctly"
 fi
 echo "Testing changing image bootable flag"
-if ! imagex_info dir.wim 0 --boot; then
+if ! imagex info dir.wim 0 --boot; then
        error "Failed to reset bootable image"
 fi
-if ! test "`imagex_info dir.wim | grep Boot | awk '{print $3}'`" = "0"; then
+if ! test "`imagex info dir.wim | grep Boot | awk '{print $3}'`" = "0"; then
        error "Bootable image not reset correctly"
 fi
 echo "Testing changing image bootable flag to invalid image (this should generate errors)"
-if imagex_info dir.wim 2 --boot; then
+if imagex info dir.wim 2 --boot; then
        error "Succeeded in changing bootable image to invalid number"
 fi
-if ! test "`imagex_info dir.wim | grep Boot | awk '{print $3}'`" = "0"; then
+if ! test "`imagex info dir.wim | grep Boot | awk '{print $3}'`" = "0"; then
        error "Boot flag was changed even though the change command was supposed to fail"
 fi
 rm -rf dir.wim tmp
@@ -126,30 +109,30 @@ echo "Testing capture of WIM with name and description"
 if ! imagex capture dir dir.wim "myname" "mydesc"; then
        error "Failed to capture WIM with specified name and description"
 fi
-if ! test "`imagex_info dir.wim | grep Name | awk '{print $2}'`" = "myname"; then
+if ! test "`imagex info dir.wim | grep Name | awk '{print $2}'`" = "myname"; then
        error "WIM name not set correctly"
 fi
-if ! test "`imagex_info dir.wim | grep Description | awk '{print $2}'`" = "mydesc"; then
+if ! test "`imagex info dir.wim | grep Description | awk '{print $2}'`" = "mydesc"; then
        error "WIM name not set correctly"
 fi
 echo "Testing printing WIM lookup table"
-if ! imagex_info --lookup-table dir.wim > /dev/null; then
+if ! imagex info --lookup-table dir.wim > /dev/null; then
        error "Failed to print WIM lookup table"
 fi
 echo "Testing printing WIM header"
-if ! imagex_info --header dir.wim > /dev/null; then
+if ! imagex info --header dir.wim > /dev/null; then
        error "Failed to print WIM header"
 fi
 echo "Testing printing WIM XML info"
-if ! imagex_info --xml dir.wim > /dev/null; then
+if ! imagex info --xml dir.wim > /dev/null; then
        error "Failed to print WIM XML data"
 fi
 echo "Testing extracting WIM XML info"
-if ! imagex_info --extract-xml=dir.xml dir.wim; then
+if ! imagex info --extract-xml=dir.xml dir.wim; then
        error "Failed to extract WIM XML data"
 fi
 echo "Testing printing WIM metadata"
-if ! imagex_info --metadata dir.wim > /dev/null; then
+if ! imagex info --metadata dir.wim > /dev/null; then
        error "Failed to print WIM metadata"
 fi
 rm -rf dir.wim tmp dir.xml
@@ -158,7 +141,7 @@ echo "Testing capture of bootable WIM"
 if ! imagex capture dir dir.wim --boot; then
        error "Failed to capture bootable WIM"
 fi
-if ! test "`imagex_info dir.wim | grep Boot | awk '{print $3}'`" = "1"; then
+if ! test "`imagex info dir.wim | grep Boot | awk '{print $3}'`" = "1"; then
        error "Boot flag on bootable WIM not set correctly"
 fi
 rm -rf dir.wim tmp
@@ -169,7 +152,7 @@ echo "Testing capture of WIM with integrity table"
 if ! imagex capture dir dir.wim --check; then
        error "Failed to capture WIM with integrity table"
 fi
-if ! test "`imagex_info dir.wim | grep Integrity | awk '{print $3}'`" = "yes"; then
+if ! test "`imagex info dir.wim | grep Integrity | awk '{print $3}'`" = "yes"; then
        error "Integrity table on WIM not made"
 fi
 if ! imagex apply --check dir.wim tmp; then
@@ -187,7 +170,7 @@ imagex capture dir dir.wim
 if ! imagex append dir2 dir.wim; then
        error "Appending WIM image failed"
 fi
-if ! test "`imagex_info dir.wim | grep 'Image Count' | awk '{print $3}'`" = 2; then
+if ! test "`imagex info dir.wim | grep 'Image Count' | awk '{print $3}'`" = 2; then
        error "WIM image count not correct"
 fi
 
@@ -203,56 +186,56 @@ echo "Testing appending WIM image with integrity check"
 if ! imagex append dir2 dir.wim "newname2" --check; then
        error "Appending WIM image failed"
 fi
-if ! test "`imagex_info dir.wim | grep Integrity | awk '{print $3}'`" = "yes"; then
+if ! test "`imagex info dir.wim | grep Integrity | awk '{print $3}'`" = "yes"; then
        error "Integrity table not set correctly on image append"
 fi
 echo "Testing appending WIM image with no integrity check"
 if ! imagex append dir2 dir.wim "newname3"; then
        error "Appending WIM image failed"
 fi
-if ! test "`imagex_info dir.wim | grep Integrity | awk '{print $3}'`" = "no"; then
+if ! test "`imagex info dir.wim | grep Integrity | awk '{print $3}'`" = "no"; then
        error "WIM integrity table not removed"
 fi
 # 5 images at this point
-if ! test "`imagex_info dir.wim | grep 'Image Count' | awk '{print $3}'`" = 5; then
+if ! test "`imagex info dir.wim | grep 'Image Count' | awk '{print $3}'`" = 5; then
        error "WIM does not contain the expected 5 images"
 fi
 echo "Testing deleting first WIM image"
 if ! imagex delete dir.wim 1; then
        error "Failed to delete WIM image"
 fi
-if ! test "`imagex_info dir.wim | grep 'Image Count' | awk '{print $3}'`" = 4; then
+if ! test "`imagex info dir.wim | grep 'Image Count' | awk '{print $3}'`" = 4; then
        error "WIM image not deleted correctly"
 fi
 echo "Testing deleting last WIM image"
 if ! imagex delete dir.wim 4; then
        error "Failed to delete WIM image"
 fi
-if ! test "`imagex_info dir.wim | grep 'Image Count' | awk '{print $3}'`" = 3; then
+if ! test "`imagex info dir.wim | grep 'Image Count' | awk '{print $3}'`" = 3; then
        error "WIM image not deleted correctly"
 fi
 echo "Testing deleting invalid WIM image (this should generate errors)"
 if imagex delete dir.wim 4; then
        error "Expected to fail to delete non-existent WIM image"
 fi
-if ! test "`imagex_info dir.wim | grep 'Image Count' | awk '{print $3}'`" = 3; then
+if ! test "`imagex info dir.wim | grep 'Image Count' | awk '{print $3}'`" = 3; then
        error "Image count changed even though we intentionally failed to delete an image"
 fi
 echo "Testing deleting all WIM images"
 if ! imagex delete dir.wim all; then
        error "Failed to delete all images from WIM"
 fi
-if ! test "`imagex_info dir.wim | grep 'Image Count' | awk '{print $3}'`" = 0; then
+if ! test "`imagex info dir.wim | grep 'Image Count' | awk '{print $3}'`" = 0; then
        error "Couldn't delete all WIM images correctly"
 fi
 echo "Testing appending directory to empty WIM and making it bootable"
 if ! imagex append dir dir.wim "myname" "mydesc" --check --boot; then
        error "Couldn't append named, described, bootable image to empty WIM with integrity check"
 fi
-if ! test "`imagex_info dir.wim | grep Integrity | awk '{print $3}'`" = "yes"; then
+if ! test "`imagex info dir.wim | grep Integrity | awk '{print $3}'`" = "yes"; then
        error "Integrity check not found"
 fi
-if ! test "`imagex_info dir.wim | grep Boot | awk '{print $3}'`" = "1"; then
+if ! test "`imagex info dir.wim | grep Boot | awk '{print $3}'`" = "1"; then
        error "Bootable image not set correctly"
 fi
 echo "Testing appending non-directory (should generate errors)"
@@ -389,7 +372,7 @@ for flag in "--compress=none" "--compress=maximum" "--compress=fast"; do
                error "Failed to split WIM"
        fi
        echo "Verifying the split WIMs (some errors expected)"
-       if test "`imagex_info tmp.swm | grep 'Part Number' | awk '{print $3}'`" != "1/4"; then
+       if test "`imagex info tmp.swm | grep 'Part Number' | awk '{print $3}'`" != "1/4"; then
                error "Part number of split WIM not correct"
        fi
        if ! imagex dir tmp.swm > /dev/null; then
@@ -403,7 +386,7 @@ for flag in "--compress=none" "--compress=maximum" "--compress=fast"; do
        fi
 
        # Unsupported, should fail
-       if imagex_info tmp.swm --boot 0; then
+       if imagex info tmp.swm --boot 0; then
                error "Should not have been able to change boot index of split WIM"
        fi
        echo "Joining the split WIMs and applying the result"
@@ -435,14 +418,14 @@ fi
 if ! imagex export dir.wim dir new.wim; then
        error "Failed to export single image to new WIM"
 fi
-if test "`imagex_info new.wim | grep 'Image Count' | awk '{print $3}'`" != 1; then
+if test "`imagex info new.wim | grep 'Image Count' | awk '{print $3}'`" != 1; then
        error "Exporting single image to new WIM wasn't done correctly"
 fi
 echo "Testing export of single image to existing WIM"
 if ! imagex export dir.wim dir2 new.wim; then
        error "Failed to export single image to existing WIM"
 fi
-if test "`imagex_info new.wim | grep 'Image Count' | awk '{print $3}'`" != 2; then
+if test "`imagex info new.wim | grep 'Image Count' | awk '{print $3}'`" != 2; then
        error "Exporting single image to existing WIM wasn't done correctly"
 fi
 echo "Testing export of single image to existing WIM using wrong compression type"
@@ -454,7 +437,7 @@ echo "Testing export of multiple images to new WIM"
 if ! imagex export dir.wim all new.wim; then
        error "Failed to export multiple images to new WIM"
 fi
-if test "`imagex_info new.wim | grep 'Image Count' | awk '{print $3}'`" != 2; then
+if test "`imagex info new.wim | grep 'Image Count' | awk '{print $3}'`" != 2; then
        error "Exporting multiple images to new WIM wasn't done correctly"
 fi
 if ! imagex capture dir2 new.wim newname; then
@@ -468,7 +451,7 @@ echo "Testing export of multiple images to existing WIM with --boot"
 if ! imagex capture dir2 new.wim newname; then
        error "Failed to capture test WIM"
 fi
-if ! imagex_info dir.wim --boot 1; then
+if ! imagex info dir.wim --boot 1; then
        error "Failed to set boot index on test WIM"
 fi
 if ! imagex export dir.wim all new.wim --boot; then
@@ -478,7 +461,7 @@ echo "Testing export of multiple images to existing WIM with --boot, but no boot
 if ! imagex capture dir2 new.wim newname; then
        error "Failed to capture test WIM"
 fi
-if ! imagex_info dir.wim --boot 0; then
+if ! imagex info dir.wim --boot 0; then
        error "Failed to clear boot index on test WIM"
 fi
 if imagex export dir.wim all new.wim --boot; then
@@ -528,4 +511,7 @@ done
 echo "**********************************************************"
 echo "                 Basic imagex tests passed                "
 echo "**********************************************************"
-cleanup
+
+# Leave test subdirectory and cleanup
+cd ..
+default_cleanup
index 1dfc943..e7b56e3 100755 (executable)
@@ -14,39 +14,10 @@ srcdir="${srcdir:-.}/.."
 srcdir="$(cd $srcdir; pwd)"
 . "$srcdir/tests/tests-common.sh"
 
-
-imagex() {
-       echo "imagex $@"
-       ../imagex "$@" > /dev/null
-}
-
-imagex_info() {
-       echo "imagex info $@"
-       ../imagex info "$@"
-}
-
-init() {
-       mkdir in.dir out.dir
-}
-
-cleanup() {
-       rm -rf in.dir out.dir test*.wim test*.swm
-}
-
-error() {
-       echo "****************************************************************"
-       echo "                         Test failure                           "
-       echo $*
-       echo "****************************************************************"
-       exit 1
-}
-
-wim_ctype() {
-       ../imagex info $1 | grep Compression | awk '{print $2}'
-}
+TEST_SUBDIR=tmpdir_test-imagex-capture_and_apply
 
 do_tree_cmp() {
-       if ! ./tree-cmp in.dir out.dir; then
+       if ! ../tree-cmp in.dir out.dir; then
                if [ -x /usr/bin/tree ]; then
                        echo "Dumping tree of applied image"
                        echo "(Note: compression type was $ctype)"
@@ -126,8 +97,10 @@ msg() {
        __msg "Testing image capture and application of directory containing $1"
 }
 
-cleanup
-init
+default_cleanup
+mkdir $TEST_SUBDIR
+cd $TEST_SUBDIR
+mkdir in.dir out.dir
 
 . $srcdir/tests/common_tests.sh
 
@@ -140,10 +113,10 @@ imagex apply test.wim out.dir
 if [ -e out.dir/hiberfil.sys -o -e "out.dir/System Volume Information" ]; then
        error "Files were not excluded from capture as expected"
 fi
-rm -rf out.dir/* in.dir/*
-
-cleanup
 
 echo "**********************************************************"
 echo "          imagex capture/apply tests passed               "
 echo "**********************************************************"
+
+cd ..
+default_cleanup
index e8da925..6e04673 100755 (executable)
@@ -8,33 +8,20 @@ srcdir="${srcdir:-.}/.."
 srcdir="$(cd $srcdir; pwd)"
 . "$srcdir/tests/tests-common.sh"
 
+TEST_SUBDIR=tmpdir_test-imagex-mount
+
 if [ ! -r /dev/fuse ]; then
        echo "WARNING: /dev/fuse is not readable."
        echo "Skipping WIM mounting checks"
        exit 0
 fi
 
-imagex() {
-       echo "imagex $@"
-       ../imagex $@  > /dev/null
-}
-
-imagex_info() {
-       echo "imagex info $@"
-       ../imagex info "$@"
-}
-
-imagex_mountrw() {
-       echo "imagex mountrw $@"
-       ../imagex mountrw "$@"
-}
-
 cleanup() {
-       fusermount -u tmp &> /dev/null || true
-       fusermount -u tmp.mnt &> /dev/null || true
-       rm -rf dir* tmp* *.wim *.swm empty.wim tmp.orig tmp.mnt \
-                       tmp.apply mount.log test.tar wimlib-staging*
+       fusermount -u $TEST_SUBDIR/tmp &> /dev/null || true
+       fusermount -u $TEST_SUBDIR/tmp.mnt &> /dev/null || true
+       rm -rf $TEST_SUBDIR
 }
+
 init() {
        mkdir dir
        cp $srcdir/src/*.c $srcdir/src/*.h dir
@@ -52,18 +39,9 @@ init() {
        imagex capture tmp.empty empty.wim
 }
 
-error() {
-       echo "****************************************************************"
-       echo "                         Test failure                           "
-       while [ $# -gt 0 ]; do
-               echo $1
-               shift
-       done
-       echo "****************************************************************"
-       exit 1
-}
-
 cleanup
+mkdir $TEST_SUBDIR
+cd $TEST_SUBDIR
 init
 
 # imagex mount
@@ -181,7 +159,7 @@ echo "Unmounting WIM with changes committed and --check"
 if ! imagex unmount tmp --commit --check; then
        error "Failed to unmount read-write mounted WIM"
 fi
-if test "`imagex_info dir.wim | grep Integrity | awk '{print $3}'`" != "yes"; then
+if test "`imagex info dir.wim | grep Integrity | awk '{print $3}'`" != "yes"; then
        error "Integrity information was not included"
 fi
 rm -rf tmp
@@ -200,7 +178,7 @@ fi
 
 # Now do some tests using tar.
 do_tree_cmp() {
-       if ! ./tree-cmp $1 $2; then
+       if ! ../tree-cmp $1 $2; then
                if [ -x /usr/bin/tree ]; then
                        echo "Dumping tree of applied image"
                        tree $2 --inodes -F -s --noreport
@@ -231,7 +209,7 @@ do_test() {
        tar cf ../test.tar .
        cd ..
 
-       if ! imagex_mountrw test.wim tmp.mnt; then
+       if ! imagex mountrw test.wim tmp.mnt; then
                error "Failed to mount WIM read-write"
        fi
 
@@ -273,8 +251,10 @@ do_test() {
 
 . $srcdir/tests/common_tests.sh
 
-cleanup
 
 echo "**********************************************************"
 echo "                 WIM mount tests passed                   "
 echo "**********************************************************"
+
+cd ..
+cleanup
index afe441f..9705d9e 100755 (executable)
@@ -14,12 +14,10 @@ srcdir="${srcdir:-.}/.."
 srcdir="$(cd $srcdir; pwd)"
 . "$srcdir/tests/tests-common.sh"
 
-imagex() {
-       ../imagex $@ > /dev/null
-}
+TEST_SUBDIR=tmpdir_test-imagex-ntfs
 
 __do_unmount() {
-       if !  fusermount -z -u $1; then
+       if ! fusermount -z -u $1; then
                error "Failed to unmount \"$1\""
        fi
 
@@ -51,7 +49,7 @@ do_mount() {
 }
 
 do_mkntfs() {
-       if ! mkntfs --force --fast $1 &> /dev/null; then
+       if ! mkntfs --force --fast $1 > /dev/null; then
                error "Could not create NTFS volume \"$1\"!  Make sure ntfsprogs are installed."
        fi
 }
@@ -67,22 +65,9 @@ init() {
 }
 
 cleanup() {
-       do_unmount in.mnt
-       do_unmount out.mnt
-       rm -rf in.ntfs out.ntfs in.mnt out.mnt in.xattr out.xattr ntfs.wim
-}
-#trap cleanup exit
-
-
-error() {
-       echo "****************************************************************"
-       echo "                         Test failure                           "
-       while [ $# -gt 0 ]; do
-               echo $1
-               shift
-       done
-       echo "****************************************************************"
-       exit 1
+       do_unmount $TEST_SUBDIR/in.mnt
+       do_unmount $TEST_SUBDIR/out.mnt
+       rm -rf $TEST_SUBDIR
 }
 
 do_test() {
@@ -101,7 +86,7 @@ do_test() {
        if [ -x /usr/bin/tree ]; then
                tree in.mnt --inodes -F -s --noreport
        fi
-       if ! ./tree-cmp in.mnt out.mnt NTFS; then
+       if ! ../tree-cmp in.mnt out.mnt NTFS; then
                if [ -x /usr/bin/tree ]; then
                        echo "Dumping tree of applied image"
                        tree out.mnt --inodes -F -s --noreport
@@ -119,6 +104,8 @@ msg() {
 }
 
 cleanup
+mkdir $TEST_SUBDIR
+cd $TEST_SUBDIR
 init
 
 msg "Empty NTFS volume"
@@ -288,8 +275,10 @@ do_test 'echo -n 8 > file;
         setfattr -n user.yet_another_ads3 -v "abc" dir/subdir/link;
         setfattr -n user.yet_another_ads4 -v "" dir/subdir/link;'
 
-cleanup
-
 echo "**********************************************************"
 echo "           NTFS capture/apply tests passed                "
 echo "**********************************************************"
+
+cd ..
+cleanup
+
index 4f33f6c..79a4a2f 100644 (file)
@@ -30,3 +30,32 @@ get_file_size()
                stat -c %s "$1"
        fi
 }
+
+imagex()
+{
+       echo "imagex $@"
+       if [[ $1 == info || $1 == mountrw ]]; then
+               ../../imagex "$@"
+       else
+               ../../imagex "$@" > /dev/null
+       fi
+}
+
+wim_ctype()
+{
+       imagex info $1 | grep Compression | awk '{print $2}'
+}
+
+default_cleanup()
+{
+       rm -rf $TEST_SUBDIR
+}
+
+error()
+{
+       echo "****************************************************************"
+       echo "                         Test failure                           "
+       echo $*
+       echo "****************************************************************"
+       exit 1
+}