Add win32-test-imagex-capture_and_apply.bat
[wimlib] / tests / win32-test-imagex-capture_and_apply.bat
1 @echo off\r
2 \r
3 REM\r
4 REM win32-test-imagex-capture_and_apply.bat\r
5 REM\r
6 REM Run some tests on the Windows version of wimlib-imagex.\r
7 REM\r
8 REM This must be run on Windows Vista or later in a clean directory, with\r
9 REM Administrator privileges.  wimlib-imagex and win32-tree-cmp must be callable\r
10 REM (on PATH or in same directory).\r
11 \r
12 setlocal EnableDelayedExpansion\r
13 \r
14 if exist in.dir rd /S /Q in.dir\r
15 if exist out.dir rd /S /Q out.dir\r
16 md in.dir\r
17 cd in.dir\r
18 \r
19 REM\r
20 REM BEGIN TESTS\r
21 REM\r
22 \r
23 call :msg "empty directory"\r
24 call :do_test\r
25 if %errorlevel% neq 0 exit /b %errorlevel%\r
26 \r
27 call :msg "single file"\r
28 echo 1 > file\r
29 call :do_test\r
30 if %errorlevel% neq 0 exit /b %errorlevel%\r
31 \r
32 call :msg "different files"\r
33 echo 1 > file\r
34 echo 2 > anotherfile\r
35 call :do_test\r
36 if %errorlevel% neq 0 exit /b %errorlevel%\r
37 \r
38 call :msg "identical files"\r
39 echo 1 > file\r
40 echo 1 > identicalfile\r
41 call :do_test\r
42 if %errorlevel% neq 0 exit /b %errorlevel%\r
43 \r
44 call :msg "hard linked file"\r
45 echo 1 > file\r
46 mklink /h link file > nul\r
47 call :do_test\r
48 if %errorlevel% neq 0 exit /b %errorlevel%\r
49 \r
50 call :msg "hard linked file, with other identical files"\r
51 echo 1 > file\r
52 mklink /h link file > nul\r
53 echo 1 > identicalfile\r
54 call :do_test\r
55 if %errorlevel% neq 0 exit /b %errorlevel%\r
56 \r
57 call :msg "empty file"\r
58 type nul > emptyfile\r
59 call :do_test\r
60 if %errorlevel% neq 0 exit /b %errorlevel%\r
61 \r
62 call :msg "various hard linked, identical, different, and empty files"\r
63 echo 1 > file\r
64 echo 5 > file\r
65 mklink /h link1 file > nul\r
66 mklink /h link2 file > nul\r
67 type nul > emptyfile\r
68 type nul > emptyfile2\r
69 mklink /h emptyfilelink emptyfile > nul\r
70 echo 5 > identicalfile\r
71 echo 1 > 1file\r
72 mklink /h 1filelink 1file > nul\r
73 call :do_test\r
74 if %errorlevel% neq 0 exit /b %errorlevel%\r
75 \r
76 call :msg "multiple subdirectories, some empty, some not"\r
77 md subdir1\r
78 md subdir2\r
79 md subdir3\r
80 echo 1 > subdir1\1\r
81 echo 5 > subdir1\5\r
82 mklink /h link subdir1\1 > nul\r
83 md subdir2\subdir2subdir\r
84 type nul > subdir2\emptyfile\r
85 call :do_test\r
86 if %errorlevel% neq 0 exit /b %errorlevel%\r
87 \r
88 call :msg "relative symlink"\r
89 mklink relink dest > nul\r
90 call :do_test\r
91 if %errorlevel% neq 0 exit /b %errorlevel%\r
92 \r
93 call :msg "absolute symlink, with drive letter"\r
94 mklink abslink C:\absolute\target > nul\r
95 call :do_test\r
96 if %errorlevel% neq 0 exit /b %errorlevel%\r
97 \r
98 call :msg "absolute symlink, without drive letter"\r
99 mklink abslink \absolute\target > nul\r
100 call :do_test\r
101 if %errorlevel% neq 0 exit /b %errorlevel%\r
102 \r
103 call :msg "relative symlink, with file target"\r
104 echo 1 > 1\r
105 mklink relink 1 > nul\r
106 call :do_test\r
107 if %errorlevel% neq 0 exit /b %errorlevel%\r
108 \r
109 call :msg "relative symlink, with directory target"\r
110 md subdir\r
111 mklink reldlink subdir > nul\r
112 call :do_test\r
113 if %errorlevel% neq 0 exit /b %errorlevel%\r
114 \r
115 call :msg "junction"\r
116 md subdir\r
117 mklink /j junction subdir > nul\r
118 call :do_test\r
119 if %errorlevel% neq 0 exit /b %errorlevel%\r
120 \r
121 call :msg "symlinks, junctions, files, subdirectories, etc."\r
122 echo 1 > 1\r
123 mklink relink 1 > nul\r
124 mklink rellinklink relink > nul\r
125 mklink /j junction . > nul\r
126 md subdir\r
127 mklink /h subdir\hardlink 1 > nul\r
128 echo "hello world!!!!" > hello\r
129 mklink subdir\hello hello > nul\r
130 mklink abslink C:\Users > nul\r
131 md subdir2\r
132 type nul > emptyfile\r
133 type nul > subdir2\emptyfile\r
134 md subdir2\s\r
135 md subdir2\s\s\r
136 md subdir2\s\s\s\r
137 echo "hello world!!!!" > subdir2\otherfile\r
138 call :do_test\r
139 if %errorlevel% neq 0 exit /b %errorlevel%\r
140 \r
141 call :msg "compressed file"\r
142 echo "test" > test\r
143 compact /C test > nul\r
144 call :do_test\r
145 if %errorlevel% neq 0 exit /b %errorlevel%\r
146 \r
147 call :msg "compressed directory"\r
148 md subdir\r
149 compact /C subdir > nul\r
150 call :do_test\r
151 if %errorlevel% neq 0 exit /b %errorlevel%\r
152 \r
153 call :msg "compressed directory with files in it"\r
154 md subdir\r
155 compact /C subdir > nul\r
156 echo 1 > subdir\file1\r
157 echo 2 > subdir\file2\r
158 echo 1 > subdir\file1\r
159 md subdir\subsubdir\r
160 mklink /h subdir\hardlink subdir\file1 > nul\r
161 mklink /j subdir\j subdir\subsubdir > nul\r
162 call :do_test\r
163 if %errorlevel% neq 0 exit /b %errorlevel%\r
164 \r
165 call :msg "compressed directory with some uncompressed files in it"\r
166 md subdir\r
167 compact /C subdir > nul\r
168 echo 1 > subdir\1\r
169 echo 5 > subdir\5\r
170 compact /U subdir\1 > nul\r
171 call :do_test\r
172 if %errorlevel% neq 0 exit /b %errorlevel%\r
173 \r
174 call :msg "file with alternate data stream"\r
175 echo 1 > file\r
176 echo 5 > file:ads\r
177 call :do_test\r
178 if %errorlevel% neq 0 exit /b %errorlevel%\r
179 \r
180 call :msg "file with multiple alternate data streams"\r
181 echo 1 > file\r
182 echo a > file:a\r
183 echo aa > file:aa\r
184 echo aaa > file:aaa\r
185 echo aaaa > file:aaaa\r
186 call :do_test\r
187 if %errorlevel% neq 0 exit /b %errorlevel%\r
188 \r
189 call :msg "file with multiple alternate data streams, with hard link"\r
190 echo 1 > file\r
191 echo a > file:a\r
192 echo aa > file:aa\r
193 echo aaa > file:aaa\r
194 echo aaaa > file:aaaa\r
195 mklink /h link file > nul\r
196 call :do_test\r
197 if %errorlevel% neq 0 exit /b %errorlevel%\r
198 \r
199 call :msg "files with multiple alternate data streams, some identical, with hard link"\r
200 echo 1 > file\r
201 echo 5 > file2\r
202 echo 1 > file:1\r
203 echo 1 > file:1again\r
204 echo aaa > file:aaa\r
205 echo 5 > file:5\r
206 mklink /h link file > nul\r
207 echo aaa > file2:aaa\r
208 call :do_test\r
209 if %errorlevel% neq 0 exit /b %errorlevel%\r
210 \r
211 call :msg "root directory with alternate data stream"\r
212 echo 1 > ..\in.dir:ads\r
213 call :do_test\r
214 if %errorlevel% neq 0 exit /b %errorlevel%\r
215 \r
216 call :msg "subdirectory with alternate data streams"\r
217 md subdir\r
218 echo 1 > subdir:1\r
219 echo 2 > subdir:2\r
220 echo 2 > subdir:2again\r
221 call :do_test\r
222 if %errorlevel% neq 0 exit /b %errorlevel%\r
223 \r
224 call :msg "subdirectories and files with alternate data streams"\r
225 md subdir\r
226 echo hello > hello\r
227 echo hello > subdir:hello\r
228 echo hello > subdir:helloagain\r
229 echo hello > helloagain\r
230 mklink /h hellolink hello > nul\r
231 echo 1 > helloagain:1\r
232 echo 8 > helloagain:8\r
233 echo 1 > 1\r
234 type nul > helloagain:dummy\r
235 call :do_test\r
236 if %errorlevel% neq 0 exit /b %errorlevel%\r
237 \r
238 call :msg "symbolic link and hard link, to file with alternate data streams"\r
239 echo 1 > 1\r
240 echo test > .\1:test\r
241 mklink symlink 1 > nul\r
242 mklink /h hardlink 1 > nul\r
243 call :do_test\r
244 if %errorlevel% neq 0 exit /b %errorlevel%\r
245 \r
246 call :msg "compressed file with alternate data streams"\r
247 echo 1 > 1\r
248 echo 1 > .\1:1\r
249 echo 2 > .\1:2\r
250 compact /C 1 > nul\r
251 call :do_test\r
252 if %errorlevel% neq 0 exit /b %errorlevel%\r
253 \r
254 call :msg "hidden file"\r
255 echo 1 > hidden\r
256 attrib +h hidden\r
257 call :do_test\r
258 if %errorlevel% neq 0 exit /b %errorlevel%\r
259 \r
260 REM\r
261 REM END OF TESTS\r
262 REM\r
263 \r
264 exit /b 0\r
265 \r
266 :do_test\r
267 cd ..\r
268 wimlib-imagex capture in.dir test.wim --norpfix > NUL\r
269 if %errorlevel% neq 0 exit /b %errorlevel%\r
270 wimlib-imagex apply test.wim out.dir > NUL\r
271 if %errorlevel% neq 0 exit /b %errorlevel%\r
272 win32-tree-cmp in.dir out.dir\r
273 if %errorlevel% neq 0 (\r
274         echo @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\r
275         echo            TEST FAILED!!!!!!!\r
276         echo @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\r
277         exit /b %errorlevel%\r
278 )\r
279 \r
280 REM Fun fact:  There are bugs in Microsoft's imagex.exe that make it fail some\r
281 REM of our tests.\r
282 REM\r
283 REM rd /S /Q out.dir\r
284 REM md out.dir\r
285 REM imagex /capture in.dir test.wim "test" /norpfix > nul\r
286 REM if %errorlevel% neq 0 exit /b %errorlevel%\r
287 REM imagex /apply test.wim 1 out.dir > nul\r
288 REM if %errorlevel% neq 0 exit /b %errorlevel%\r
289 REM win32-tree-cmp in.dir out.dir\r
290 REM if %errorlevel% neq 0 (\r
291         REM echo @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\r
292         REM echo            TEST FAILED!!!!!!! ^(imagex^)\r
293         REM echo @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\r
294         REM exit /b %errorlevel%\r
295 REM )\r
296 \r
297 rd /S /Q in.dir out.dir\r
298 md in.dir\r
299 cd in.dir\r
300 goto :eof\r
301 \r
302 :msg\r
303 echo Testing capture and apply of %~1\r
304 goto :eof\r