]> wimlib.net Git - wimlib/blob - tests/win32-test-imagex-capture_and_apply.bat
win32-test-imagex-capture_and_apply.bat: fixes
[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\r
10 REM executable using the paths set below.\r
11 \r
12 setlocal EnableDelayedExpansion\r
13 set WIN32_TREE_CMP=win32-tree-cmp\r
14 set WIMLIB_IMAGEX=wimlib-imagex\r
15 \r
16 if exist in.dir rd /S /Q in.dir\r
17 if exist out.dir rd /S /Q out.dir\r
18 md in.dir\r
19 cd in.dir\r
20 \r
21 REM\r
22 REM BEGIN TESTS\r
23 REM\r
24 \r
25 call :msg "empty directory"\r
26 call :do_test\r
27 if %errorlevel% neq 0 exit /b %errorlevel%\r
28 \r
29 call :msg "single file"\r
30 echo 1 > file\r
31 call :do_test\r
32 if %errorlevel% neq 0 exit /b %errorlevel%\r
33 \r
34 call :msg "different files"\r
35 echo 1 > file\r
36 echo 2 > anotherfile\r
37 call :do_test\r
38 if %errorlevel% neq 0 exit /b %errorlevel%\r
39 \r
40 call :msg "identical files"\r
41 echo 1 > file\r
42 echo 1 > identicalfile\r
43 call :do_test\r
44 if %errorlevel% neq 0 exit /b %errorlevel%\r
45 \r
46 call :msg "hard linked file"\r
47 echo 1 > file\r
48 mklink /h link file > nul\r
49 call :do_test\r
50 if %errorlevel% neq 0 exit /b %errorlevel%\r
51 \r
52 call :msg "hard linked file, with other identical files"\r
53 echo 1 > file\r
54 mklink /h link file > nul\r
55 echo 1 > identicalfile\r
56 call :do_test\r
57 if %errorlevel% neq 0 exit /b %errorlevel%\r
58 \r
59 call :msg "empty file"\r
60 type nul > emptyfile\r
61 call :do_test\r
62 if %errorlevel% neq 0 exit /b %errorlevel%\r
63 \r
64 call :msg "various hard linked, identical, different, and empty files"\r
65 echo 1 > file\r
66 echo 5 > file\r
67 mklink /h link1 file > nul\r
68 mklink /h link2 file > nul\r
69 type nul > emptyfile\r
70 type nul > emptyfile2\r
71 mklink /h emptyfilelink emptyfile > nul\r
72 echo 5 > identicalfile\r
73 echo 1 > 1file\r
74 mklink /h 1filelink 1file > nul\r
75 call :do_test\r
76 if %errorlevel% neq 0 exit /b %errorlevel%\r
77 \r
78 call :msg "multiple subdirectories, some empty, some not"\r
79 md subdir1\r
80 md subdir2\r
81 md subdir3\r
82 echo 1 > subdir1\1\r
83 echo 5 > subdir1\5\r
84 mklink /h link subdir1\1 > nul\r
85 md subdir2\subdir2subdir\r
86 type nul > subdir2\emptyfile\r
87 call :do_test\r
88 if %errorlevel% neq 0 exit /b %errorlevel%\r
89 \r
90 call :msg "file with custom security descriptor"\r
91 echo hello > file\r
92 icacls file /deny Administrator:F > nul\r
93 call :do_test\r
94 if %errorlevel% neq 0 exit /b %errorlevel%\r
95 \r
96 call :msg "directory with custom security descriptor (inheritence enabled)"\r
97 md subdir\r
98 icacls subdir /inheritance:e > nul\r
99 call :do_test\r
100 if %errorlevel% neq 0 exit /b %errorlevel%\r
101 \r
102 call :msg "directory with custom security descriptor (inheritence disabled)"\r
103 md subdir\r
104 icacls subdir /inheritance:d > nul\r
105 call :do_test\r
106 if %errorlevel% neq 0 exit /b %errorlevel%\r
107 \r
108 REM            win32-tree-cmp can't handle this case.\r
109 REM\r
110 REM call :msg "file with custom security descriptor (all inherited ACEs removed)"\r
111 REM echo hello > file\r
112 REM icacls file /inheritance:r > nul\r
113 REM call :do_test\r
114 REM if %errorlevel% neq 0 exit /b %errorlevel%\r
115 \r
116 call :msg "file with custom integrity level"\r
117 echo hello > file\r
118 icacls file /setintegritylevel H > nul\r
119 call :do_test\r
120 if %errorlevel% neq 0 exit /b %errorlevel%\r
121 \r
122 call :msg "relative symlink"\r
123 mklink relink dest > nul\r
124 call :do_test\r
125 if %errorlevel% neq 0 exit /b %errorlevel%\r
126 \r
127 call :msg "absolute symlink, with drive letter"\r
128 mklink abslink C:\absolute\target > nul\r
129 call :do_test\r
130 if %errorlevel% neq 0 exit /b %errorlevel%\r
131 \r
132 call :msg "absolute symlink, without drive letter"\r
133 mklink abslink \absolute\target > nul\r
134 call :do_test\r
135 if %errorlevel% neq 0 exit /b %errorlevel%\r
136 \r
137 call :msg "relative symlink, with file target"\r
138 echo 1 > 1\r
139 mklink relink 1 > nul\r
140 call :do_test\r
141 if %errorlevel% neq 0 exit /b %errorlevel%\r
142 \r
143 call :msg "relative symlink, with directory target"\r
144 md subdir\r
145 mklink reldlink subdir > nul\r
146 call :do_test\r
147 if %errorlevel% neq 0 exit /b %errorlevel%\r
148 \r
149 call :msg "junction"\r
150 md subdir\r
151 mklink /j junction subdir > nul\r
152 call :do_test\r
153 if %errorlevel% neq 0 exit /b %errorlevel%\r
154 \r
155 call :msg "symlinks, junctions, files, subdirectories, etc."\r
156 echo 1 > 1\r
157 mklink relink 1 > nul\r
158 mklink rellinklink relink > nul\r
159 mklink /j junction . > nul\r
160 md subdir\r
161 mklink /h subdir\hardlink 1 > nul\r
162 echo "hello world!!!!" > hello\r
163 mklink subdir\hello hello > nul\r
164 mklink abslink C:\Users > nul\r
165 md subdir2\r
166 type nul > emptyfile\r
167 type nul > subdir2\emptyfile\r
168 md subdir2\s\r
169 md subdir2\s\s\r
170 md subdir2\s\s\s\r
171 echo "hello world!!!!" > subdir2\otherfile\r
172 call :do_test\r
173 if %errorlevel% neq 0 exit /b %errorlevel%\r
174 \r
175 call :msg "compressed file"\r
176 echo "test" > test\r
177 compact /C test > nul\r
178 call :do_test\r
179 if %errorlevel% neq 0 exit /b %errorlevel%\r
180 \r
181 call :msg "compressed directory"\r
182 md subdir\r
183 compact /C subdir > nul\r
184 call :do_test\r
185 if %errorlevel% neq 0 exit /b %errorlevel%\r
186 \r
187 call :msg "compressed directory with files in it"\r
188 md subdir\r
189 compact /C subdir > nul\r
190 echo 1 > subdir\file1\r
191 echo 2 > subdir\file2\r
192 echo 1 > subdir\file1\r
193 md subdir\subsubdir\r
194 mklink /h subdir\hardlink subdir\file1 > nul\r
195 mklink /j subdir\j subdir\subsubdir > nul\r
196 call :do_test\r
197 if %errorlevel% neq 0 exit /b %errorlevel%\r
198 \r
199 call :msg "compressed directory with some uncompressed files in it"\r
200 md subdir\r
201 compact /C subdir > nul\r
202 echo 1 > subdir\1\r
203 echo 5 > subdir\5\r
204 compact /U subdir\1 > nul\r
205 call :do_test\r
206 if %errorlevel% neq 0 exit /b %errorlevel%\r
207 \r
208 call :msg "file with alternate data stream"\r
209 echo 1 > file\r
210 echo 5 > file:ads\r
211 call :do_test\r
212 if %errorlevel% neq 0 exit /b %errorlevel%\r
213 \r
214 call :msg "file with multiple alternate data streams"\r
215 echo 1 > file\r
216 echo a > file:a\r
217 echo aa > file:aa\r
218 echo aaa > file:aaa\r
219 echo aaaa > file:aaaa\r
220 call :do_test\r
221 if %errorlevel% neq 0 exit /b %errorlevel%\r
222 \r
223 call :msg "file with multiple alternate data streams, with hard link"\r
224 echo 1 > file\r
225 echo a > file:a\r
226 echo aa > file:aa\r
227 echo aaa > file:aaa\r
228 echo aaaa > file:aaaa\r
229 mklink /h link file > nul\r
230 call :do_test\r
231 if %errorlevel% neq 0 exit /b %errorlevel%\r
232 \r
233 call :msg "files with multiple alternate data streams, some identical, with hard link"\r
234 echo 1 > file\r
235 echo 5 > file2\r
236 echo 1 > file:1\r
237 echo 1 > file:1again\r
238 echo aaa > file:aaa\r
239 echo 5 > file:5\r
240 mklink /h link file > nul\r
241 echo aaa > file2:aaa\r
242 call :do_test\r
243 if %errorlevel% neq 0 exit /b %errorlevel%\r
244 \r
245 call :msg "file with empty alternate data stream"\r
246 echo 1 > file\r
247 type nul > file:ads\r
248 call :do_test\r
249 if %errorlevel% neq 0 exit /b %errorlevel%\r
250 \r
251 call :msg "directory with empty alternate data stream"\r
252 md subdir\r
253 type nul > subdir:ads\r
254 call :do_test\r
255 if %errorlevel% neq 0 exit /b %errorlevel%\r
256 \r
257 call :msg "root directory with alternate data stream"\r
258 echo 1 > ..\in.dir:ads\r
259 call :do_test\r
260 if %errorlevel% neq 0 exit /b %errorlevel%\r
261 \r
262 call :msg "subdirectory with alternate data streams"\r
263 md subdir\r
264 echo 1 > subdir:1\r
265 echo 2 > subdir:2\r
266 echo 2 > subdir:2again\r
267 call :do_test\r
268 if %errorlevel% neq 0 exit /b %errorlevel%\r
269 \r
270 call :msg "subdirectories and files with alternate data streams"\r
271 md subdir\r
272 echo hello > hello\r
273 echo hello > subdir:hello\r
274 echo hello > subdir:helloagain\r
275 echo hello > helloagain\r
276 mklink /h hellolink hello > nul\r
277 echo 1 > helloagain:1\r
278 echo 8 > helloagain:8\r
279 echo 1 > 1\r
280 type nul > helloagain:dummy\r
281 call :do_test\r
282 if %errorlevel% neq 0 exit /b %errorlevel%\r
283 \r
284 call :msg "symbolic link and hard link, to file with alternate data streams"\r
285 echo 1 > 1\r
286 echo test > .\1:test\r
287 mklink symlink 1 > nul\r
288 mklink /h hardlink 1 > nul\r
289 call :do_test\r
290 if %errorlevel% neq 0 exit /b %errorlevel%\r
291 \r
292 call :msg "compressed file with alternate data streams"\r
293 echo 1 > 1\r
294 echo 1 > .\1:1\r
295 echo 2 > .\1:2\r
296 compact /C 1 > nul\r
297 call :do_test\r
298 if %errorlevel% neq 0 exit /b %errorlevel%\r
299 \r
300 call :msg "hidden file"\r
301 echo 1 > hidden\r
302 attrib +h hidden\r
303 call :do_test\r
304 if %errorlevel% neq 0 exit /b %errorlevel%\r
305 \r
306 call :msg "hidden system file"\r
307 echo 1 > file\r
308 attrib +h +s file\r
309 call :do_test\r
310 if %errorlevel% neq 0 exit /b %errorlevel%\r
311 \r
312 call :msg "hidden, readonly, system file"\r
313 echo 1 > file\r
314 attrib +h +r +s file\r
315 call :do_test\r
316 if %errorlevel% neq 0 exit /b %errorlevel%\r
317 \r
318 call :msg "hidden directory"\r
319 md subdir\r
320 attrib +h subdir\r
321 call :do_test\r
322 if %errorlevel% neq 0 exit /b %errorlevel%\r
323 \r
324 call :msg "hidden system directory"\r
325 md subdir\r
326 attrib +h +s subdir\r
327 call :do_test\r
328 if %errorlevel% neq 0 exit /b %errorlevel%\r
329 \r
330 call :msg "hidden, readonly, system directory"\r
331 md subdir\r
332 attrib +h +r +s subdir\r
333 call :do_test\r
334 if %errorlevel% neq 0 exit /b %errorlevel%\r
335 \r
336 call :msg "encrypted file"\r
337 echo "hello" > encrypted\r
338 cipher /e encrypted > nul\r
339 call :do_test\r
340 if %errorlevel% neq 0 exit /b %errorlevel%\r
341 \r
342 call :msg "identical encrypted files"\r
343 echo "hello" > encrypted1\r
344 echo "hello" > encrypted2\r
345 cipher /e encrypted1 > nul\r
346 cipher /e encrypted2 > nul\r
347 call :do_test\r
348 if %errorlevel% neq 0 exit /b %errorlevel%\r
349 \r
350 call :msg "encrypted directory"\r
351 md subdir\r
352 cipher /e subdir > nul\r
353 call :do_test\r
354 if %errorlevel% neq 0 exit /b %errorlevel%\r
355 \r
356 call :msg "encrypted directory with encrypted file in it"\r
357 md subdir\r
358 echo 1 > subdir\1\r
359 cipher /e subdir > nul\r
360 cipher /e subdir\1 > nul\r
361 call :do_test\r
362 if %errorlevel% neq 0 exit /b %errorlevel%\r
363 \r
364 call :msg "encrypted directory with unencrypted file in it"\r
365 md subdir\r
366 echo 1 > subdir\1\r
367 cipher /e subdir > nul\r
368 cipher /d subdir\1 > nul\r
369 call :do_test\r
370 if %errorlevel% neq 0 exit /b %errorlevel%\r
371 \r
372 call :msg "encrypted root directory"\r
373 cd ..\r
374 cipher /e in.dir > nul\r
375 cd in.dir\r
376 echo "hello" > encrypted\r
377 call :do_test\r
378 if %errorlevel% neq 0 exit /b %errorlevel%\r
379 \r
380 call :msg "unencrypted file in encrypted directory in compressed directory"\r
381 md 1\r
382 md 1\2\r
383 compact /c 1 > nul\r
384 cipher /e 1\2 > nul\r
385 echo hello > 1\2\file\r
386 cipher /d 1\2\file > nul\r
387 call :do_test\r
388 if %errorlevel% neq 0 exit /b %errorlevel%\r
389 \r
390 call :msg "hardlinked, encrypted file with alternate data streams"\r
391 echo hello > file\r
392 echo hello > file:ads\r
393 cipher /e file > nul\r
394 mklink /h link file > nul\r
395 call :do_test\r
396 if %errorlevel% neq 0 exit /b %errorlevel%\r
397 \r
398 :rpfix_tests\r
399 \r
400 echo Testing rpfix junction\r
401 md subdir\r
402 echo 1 > subdir\file\r
403 mklink /j junction subdir > nul\r
404 cd ..\r
405 %WIMLIB_IMAGEX% capture in.dir test.wim > nul\r
406 rd /s /q in.dir\r
407 %WIMLIB_IMAGEX% apply test.wim out.dir > nul\r
408 echo 1 > tmp1\r
409 type out.dir\junction\file > tmp2\r
410 fc tmp1 tmp2 > nul\r
411 if %errorlevel% neq 0 exit /b %errorlevel%\r
412 rd /s /q out.dir\r
413 del tmp1 tmp2\r
414 md in.dir\r
415 cd in.dir\r
416 \r
417 echo Testing rpfix relative\r
418 echo 1 > file\r
419 mklink relink file > nul\r
420 cd ..\r
421 %WIMLIB_IMAGEX% capture in.dir test.wim > nul\r
422 %WIMLIB_IMAGEX% apply test.wim out.dir > nul\r
423 fc in.dir\file out.dir\relink > nul\r
424 if %errorlevel% neq 0 exit /b %errorlevel%\r
425 rd /s /q in.dir out.dir\r
426 md in.dir\r
427 cd in.dir\r
428 \r
429 REM\r
430 REM END OF TESTS\r
431 REM\r
432 \r
433 cd ..\r
434 del test.wim\r
435 rd /s /q in.dir\r
436 exit /b 0\r
437 \r
438 :do_test\r
439 cd ..\r
440 %WIMLIB_IMAGEX% capture in.dir test.wim --norpfix > NUL\r
441 if %errorlevel% neq 0 exit /b %errorlevel%\r
442 %WIMLIB_IMAGEX% apply test.wim out.dir > NUL\r
443 if %errorlevel% neq 0 exit /b %errorlevel%\r
444 %WIN32_TREE_CMP% in.dir out.dir\r
445 if %errorlevel% neq 0 (\r
446         echo @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\r
447         echo            TEST FAILED!!!!!!!\r
448         echo @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\r
449         exit /b %errorlevel%\r
450 )\r
451 \r
452 REM Fun fact:  There are bugs in Microsoft's imagex.exe that make it fail some\r
453 REM of our tests.\r
454 REM\r
455 REM rd /S /Q out.dir\r
456 REM md out.dir\r
457 REM imagex /capture in.dir test.wim "test" /norpfix > nul\r
458 REM if %errorlevel% neq 0 exit /b %errorlevel%\r
459 REM imagex /apply test.wim 1 out.dir > nul\r
460 REM if %errorlevel% neq 0 exit /b %errorlevel%\r
461 REM %WIN32_TREE_CMP% in.dir out.dir\r
462 REM if %errorlevel% neq 0 (\r
463         REM echo @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\r
464         REM echo            TEST FAILED!!!!!!! ^(imagex^)\r
465         REM echo @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\r
466         REM exit /b %errorlevel%\r
467 REM )\r
468 \r
469 rd /S /Q in.dir out.dir\r
470 md in.dir\r
471 cd in.dir\r
472 goto :eof\r
473 \r
474 :msg\r
475 echo Testing capture and apply of %~1\r
476 goto :eof\r