win32-test-imagex-capture_and_apply improvements
authorEric Biggers <ebiggers3@gmail.com>
Sun, 15 Mar 2015 01:11:13 +0000 (20:11 -0500)
committerEric Biggers <ebiggers3@gmail.com>
Sun, 15 Mar 2015 01:41:15 +0000 (20:41 -0500)
- Make test failure message always get printed if anything goes wrong
- Fix bad file comparison
- Apply the WIM image twice to test the existing files case
- Add test for a readonly directory with a named data stream
- Add test for root directory with empty named data stream

tests/win32-test-imagex-capture_and_apply.bat

index cc19dd9803f2353bea10ad27f65c2e7ebd7019f9..98064adedea7a92658593a7e5601740f2749c8ee 100644 (file)
@@ -24,48 +24,48 @@ REM
 \r
 call :msg "empty directory"\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "single file"\r
 echo 1 > file\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "different files"\r
 echo 1 > file\r
 echo 2 > anotherfile\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "identical files"\r
 echo 1 > file\r
 echo 1 > identicalfile\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "hard linked file"\r
 echo 1 > file\r
 mklink /h link file > nul\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "hard linked file, with other identical files"\r
 echo 1 > file\r
 mklink /h link file > nul\r
 echo 1 > identicalfile\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "empty file"\r
 type nul > emptyfile\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "hard linked empty file"\r
 type nul > file\r
 mklink /h link file > nul\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "various hard linked, identical, different, and empty files"\r
 echo 1 > file\r
@@ -79,7 +79,7 @@ echo 5 > identicalfile
 echo 1 > 1file\r
 mklink /h 1filelink 1file > nul\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "multiple subdirectories, some empty, some not"\r
 md subdir1\r
@@ -91,25 +91,25 @@ mklink /h link subdir1\1 > nul
 md subdir2\subdir2subdir\r
 type nul > subdir2\emptyfile\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "file with custom security descriptor"\r
 echo hello > file\r
 icacls file /deny Administrator:F > nul\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "directory with custom security descriptor (inheritence enabled)"\r
 md subdir\r
 icacls subdir /inheritance:e > nul\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "directory with custom security descriptor (inheritence disabled)"\r
 md subdir\r
 icacls subdir /inheritance:d > nul\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 REM            win32-tree-cmp can't handle this case.\r
 REM\r
@@ -117,46 +117,46 @@ REM call :msg "file with custom security descriptor (all inherited ACEs removed)
 REM echo hello > file\r
 REM icacls file /inheritance:r > nul\r
 REM call :do_test\r
-REM if %errorlevel% neq 0 exit /b %errorlevel%\r
+REM if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "file with custom integrity level"\r
 echo hello > file\r
 icacls file /setintegritylevel H > nul\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "relative symlink"\r
 mklink relink dest > nul\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "absolute symlink, with drive letter"\r
 mklink abslink C:\absolute\target > nul\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "absolute symlink, without drive letter"\r
 mklink abslink \absolute\target > nul\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "relative symlink, with file target"\r
 echo 1 > 1\r
 mklink relink 1 > nul\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "relative symlink, with directory target"\r
 md subdir\r
 mklink reldlink subdir > nul\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "junction"\r
 md subdir\r
 mklink /j junction subdir > nul\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "symlinks, junctions, files, subdirectories, etc."\r
 echo 1 > 1\r
@@ -176,19 +176,19 @@ md subdir2\s\s
 md subdir2\s\s\s\r
 echo "hello world!!!!" > subdir2\otherfile\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "compressed file"\r
 echo "test" > test\r
 compact /C test > nul\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "compressed directory"\r
 md subdir\r
 compact /C subdir > nul\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "compressed directory with files in it"\r
 md subdir\r
@@ -200,7 +200,7 @@ md subdir\subsubdir
 mklink /h subdir\hardlink subdir\file1 > nul\r
 mklink /j subdir\j subdir\subsubdir > nul\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "compressed directory with some uncompressed files in it"\r
 md subdir\r
@@ -209,13 +209,13 @@ echo 1 > subdir\1
 echo 5 > subdir\5\r
 compact /U subdir\1 > nul\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "file with alternate data stream"\r
 echo 1 > file\r
 echo 5 > file:ads\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "file with multiple alternate data streams"\r
 echo 1 > file\r
@@ -224,7 +224,7 @@ echo aa > file:aa
 echo aaa > file:aaa\r
 echo aaaa > file:aaaa\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "file with multiple alternate data streams, with hard link"\r
 echo 1 > file\r
@@ -234,7 +234,7 @@ echo aaa > file:aaa
 echo aaaa > file:aaaa\r
 mklink /h link file > nul\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "files with multiple alternate data streams, some identical, with hard link"\r
 echo 1 > file\r
@@ -246,24 +246,29 @@ echo 5 > file:5
 mklink /h link file > nul\r
 echo aaa > file2:aaa\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "file with empty alternate data stream"\r
 echo 1 > file\r
 type nul > file:ads\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "directory with empty alternate data stream"\r
 md subdir\r
 type nul > subdir:ads\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "root directory with alternate data stream"\r
 echo 1 > ..\in.dir:ads\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
+\r
+call :msg "root directory with empty alternate data stream"\r
+type nul > ..\in.dir:ads\r
+call :do_test\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "subdirectory with alternate data streams"\r
 md subdir\r
@@ -271,7 +276,7 @@ echo 1 > subdir:1
 echo 2 > subdir:2\r
 echo 2 > subdir:2again\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "subdirectories and files with alternate data streams"\r
 md subdir\r
@@ -285,7 +290,7 @@ echo 8 > helloagain:8
 echo 1 > 1\r
 type nul > helloagain:dummy\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "symbolic link and hard link, to file with alternate data streams"\r
 echo 1 > 1\r
@@ -293,7 +298,7 @@ echo test > .\1:test
 mklink symlink 1 > nul\r
 mklink /h hardlink 1 > nul\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "compressed file with alternate data streams"\r
 echo 1 > 1\r
@@ -301,49 +306,56 @@ echo 1 > .\1:1
 echo 2 > .\1:2\r
 compact /C 1 > nul\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "hidden file"\r
 echo 1 > hidden\r
 attrib +h hidden\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "hidden system file"\r
 echo 1 > file\r
 attrib +h +s file\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "hidden, readonly, system file"\r
 echo 1 > file\r
 attrib +h +r +s file\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "hidden directory"\r
 md subdir\r
 attrib +h subdir\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "hidden system directory"\r
 md subdir\r
 attrib +h +s subdir\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "hidden, readonly, system directory"\r
 md subdir\r
 attrib +h +r +s subdir\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
+\r
+call :msg "readonly directory with named data stream"\r
+md subdir\r
+echo foo > subdir:ads\r
+attrib +r subdir\r
+call :do_test\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "encrypted file"\r
 echo "hello" > encrypted\r
 cipher /e encrypted > nul\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "identical encrypted files"\r
 echo "hello" > encrypted1\r
@@ -351,13 +363,13 @@ echo "hello" > encrypted2
 cipher /e encrypted1 > nul\r
 cipher /e encrypted2 > nul\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "encrypted directory"\r
 md subdir\r
 cipher /e subdir > nul\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "encrypted directory with encrypted file in it"\r
 md subdir\r
@@ -365,7 +377,7 @@ echo 1 > subdir\1
 cipher /e subdir > nul\r
 cipher /e subdir\1 > nul\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "encrypted directory with unencrypted file in it"\r
 md subdir\r
@@ -373,7 +385,7 @@ echo 1 > subdir\1
 cipher /e subdir > nul\r
 cipher /d subdir\1 > nul\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "encrypted root directory"\r
 cd ..\r
@@ -381,7 +393,7 @@ cipher /e in.dir > nul
 cd in.dir\r
 echo "hello" > encrypted\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "unencrypted file in encrypted directory in compressed directory"\r
 md 1\r
@@ -391,7 +403,7 @@ cipher /e 1\2 > nul
 echo hello > 1\2\file\r
 cipher /d 1\2\file > nul\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "encrypted directory with alternate data streams"\r
 md subdir\r
@@ -399,7 +411,7 @@ cipher /e subdir > nul
 echo ads1 > subdir:ads1\r
 echo ads2 > subdir:ads2\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 call :msg "hardlinked, encrypted file with alternate data streams"\r
 echo hello > file\r
@@ -407,7 +419,7 @@ echo hello > file:ads
 cipher /e file > nul\r
 mklink /h link file > nul\r
 call :do_test\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 :rpfix_tests\r
 \r
@@ -422,7 +434,7 @@ rd /s /q in.dir
 echo 1 > tmp1\r
 type out.dir\junction\file > tmp2\r
 fc tmp1 tmp2 > nul\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 rd /s /q out.dir\r
 del tmp1 tmp2\r
 md in.dir\r
@@ -434,8 +446,10 @@ mklink relink file > nul
 cd ..\r
 %WIMLIB_IMAGEX% capture in.dir test.wim > nul\r
 %WIMLIB_IMAGEX% apply test.wim out.dir > nul\r
-fc in.dir\file out.dir\relink > nul\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+type out.dir\relink > out.dir\tmp\r
+if %errorlevel% neq 0 goto :fail\r
+fc in.dir\file out.dir\tmp > nul\r
+if %errorlevel% neq 0 goto :fail\r
 rd /s /q in.dir out.dir\r
 md in.dir\r
 cd in.dir\r
@@ -452,16 +466,17 @@ exit /b 0
 :do_test\r
 cd ..\r
 %WIMLIB_IMAGEX% capture in.dir test.wim --norpfix > NUL\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 %WIMLIB_IMAGEX% apply test.wim out.dir > NUL\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 %WIN32_TREE_CMP% in.dir out.dir\r
-if %errorlevel% neq 0 (\r
-       echo @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\r
-       echo            TEST FAILED!!!!!!!\r
-       echo @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\r
-       exit /b %errorlevel%\r
-)\r
+if %errorlevel% neq 0 goto :fail\r
+\r
+REM  apply a second time so we test the case where the files already exist\r
+%WIMLIB_IMAGEX% apply test.wim out.dir > NUL\r
+if %errorlevel% neq 0 goto :fail\r
+%WIN32_TREE_CMP% in.dir out.dir\r
+if %errorlevel% neq 0 goto :fail\r
 \r
 REM Fun fact: Microsoft's WIMGAPI has bugs that make it fail some of our tests.\r
 REM Even the Windows 8.1 version has incorrect behavior with empty files with\r
@@ -469,9 +484,9 @@ REM multiple links, or files with named data streams and multiple links.
 rd /S /Q out.dir\r
 md out.dir\r
 REM dism /capture-image /capturedir:in.dir /imagefile:test.wim /name:"test" /norpfix > nul\r
-REM if %errorlevel% neq 0 exit /b %errorlevel%\r
+REM if %errorlevel% neq 0 goto :fail\r
 dism /apply-image /imagefile:test.wim /index:1 /applydir:out.dir > nul\r
-if %errorlevel% neq 0 exit /b %errorlevel%\r
+if %errorlevel% neq 0 goto :fail\r
 %WIN32_TREE_CMP% in.dir out.dir\r
 \r
 rd /S /Q in.dir out.dir\r
@@ -482,3 +497,9 @@ goto :eof
 :msg\r
 echo Testing capture and apply of %~1\r
 goto :eof\r
+\r
+:fail\r
+echo @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\r
+echo            TEST FAILED!!!!!!!\r
+echo @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\r
+exit /b %errorlevel%\r