3 # Test capturing and applying a WIM image in the normal (non-NTFS) capture mode
5 # Add in some tests with WIM splitting, joining, and exporting as well.
7 # Test all three compression modes (None, XPRESS, and LZX).
9 # Also, test if the capture configuration file works correctly.
13 srcdir="${srcdir:-.}/.."
14 srcdir="$(cd $srcdir; pwd)"
15 . "$srcdir/tests/tests-common.sh"
17 TEST_SUBDIR=tmpdir_test-imagex-capture_and_apply
20 if ! ../tree-cmp in.dir out.dir; then
21 if [ -x /usr/bin/tree ]; then
22 echo "Dumping tree of applied image"
23 echo "(Note: compression type was $ctype)"
24 tree out.dir --inodes -F -s --noreport
25 error 'Information was lost or corrupted while capturing
26 and then applying a directory tree'
33 for ctype in None XPRESS LZX; do
35 # Can we capture the WIM, apply it, and get the same result?
39 if [ -x /usr/bin/tree -a "$ctype" = "None" ]; then
40 tree in.dir --inodes -F -s --noreport
42 if ! wimcapture in.dir test.wim --compress=$ctype --norpfix; then
43 error "Failed to capture directory tree into a WIM"
45 if ! wimapply test.wim 1 out.dir; then
46 error "Failed to apply WIM to directory"
48 if [ `wim_ctype test.wim` != $ctype ]; then
49 error "'wiminfo' didn't report the compression type on the captured WIM correctly"
54 # Can we split the WIM, apply the split WIM, join the split WIM,
55 # and apply the joined WIM, and get the same results every time?
57 # LC_ALL=C avoids locale-dependent floating point number
59 if ! LC_ALL=C wimsplit test.wim test.swm 0.01; then
60 error "Failed to split WIM"
62 if ! wimapply test.swm 1 out.dir --ref "test*.swm" ; then
63 error "Failed to apply split WIM"
66 rm -rf out.dir/* test.wim
67 if ! wimjoin test.wim test*.swm; then
68 error "Failed to join split WIM"
70 if ! wimapply test.wim out.dir; then
71 error "Failed to apply joined WIM"
76 # Can we export the image to another WIM, apply it, and get the
78 (( image_name++ )) || true
79 if ! wimexport test.wim 1 test2.wim "$image_name"; then
80 error "Failed to export WIM image"
83 if ! wimapply test2.wim "$image_name" out.dir; then
84 error "Failed to apply exported WIM image"
89 # Try pipable WIM (don't bother testing all compression types
90 # though, it shouldn't make a difference).
91 if [ "$ctype" = "None" ]; then
92 # Capture pipable WIM (not writing to pipe)
93 if ! wimcapture in.dir test.wim \
94 --compress=$ctype --norpfix --pipable; then
95 error "Failed to capture directory tree into a pipable WIM"
98 # Apply pipable WIM (reading from pipe)
99 if ! cat test.wim | wimapply - 1 out.dir; then
100 error "Failed to apply pipable WIM to directory (from pipe)"
105 # Apply pipable WIM (not reading from pipe)
106 if ! wimapply test.wim 1 out.dir; then
107 error "Failed to apply pipable WIM to directory (not from pipe)"
112 # Capture pipable WIM (writing to pipe) and read pipable
113 # WIM (reading from pipe)
114 if ! wimlib_imagex capture --pipable --compress=$ctype \
115 --norpfix --pipable \
116 in.dir - | wimapply - 1 out.dir; then
117 error "Failed to capture directory tree into a pipable WIM"
123 rm -rf out.dir/* in.dir/* test.wim test*.swm
129 echo "--------------------------------------------------------------------"
131 echo "--------------------------------------------------------------------"
135 __msg "Testing image capture and application of directory containing $1"
143 . $srcdir/tests/common_tests.sh
145 # Make sure exclusion list works
146 __msg "Testing default capture configuration file"
147 touch in.dir/hiberfil.sys
148 mkdir -p "in.dir/System Volume Information/subdir"
149 wimcapture in.dir test.wim
150 wimapply test.wim out.dir
151 if [ -e out.dir/hiberfil.sys -o -e "out.dir/System Volume Information" ]; then
152 error "Files were not excluded from capture as expected"
155 # Make sure reparse point fixups are working as expected
156 __msg "Testing --rpfix"
159 ln -s $PWD/in.dir in.dir/absrootlink
160 ln -s $PWD/in.dir//// in.dir/absrootlinkslashes
161 ln -s /___NONEXISTENT___ in.dir/absnonexistent
162 ln -s /usr/bin/env in.dir/absoutoftree
163 ln -s file in.dir/relalink
164 ln -s $PWD/in.dir/file in.dir/abslink
165 ln -s $PWD/in.dir/file/// in.dir/abslinkslashes
166 wimcapture --rpfix in.dir test.wim
167 wimapply --norpfix test.wim out.dir
168 if [[ `readlink out.dir/absrootlink` != "/" ]] ||
169 [[ `readlink out.dir/absrootlinkslashes` != "////" ]]; then
170 error "wimcapture --rpfix failed to fix absolute link to capture root"
173 if [[ ! -L out.dir/absnonexistent ]] ||
174 [[ ! -L out.dir/absoutoftree ]]; then
175 error "wimcapture --rpfix failed to also capture out of tree absolute links"
177 if [[ `readlink out.dir/relalink` != "file" ]]; then
178 error "wimcapture --rpfix failed to capture relative symlink"
180 if [[ `readlink out.dir/abslink` != "/file" ]] ||
181 [[ `readlink out.dir/abslinkslashes` != "/file///" ]]; then
182 error "wimcapture --rpfix did fix absolute link properly"
186 wimapply test.wim out.dir
187 if [[ $(get_inode_number $(readlink out.dir/absrootlink)) != \
188 $(get_inode_number out.dir) ]];
190 error "wimapply failed to apply fixed absolute symlinks"
193 # Make sure source list mode is working as expected
194 __msg "Testing source list capture mode"
195 rm -rf in.dir out.dir
198 ln in.dir/1 in.dir/1link
201 cp $srcdir/src/add_image.c otherdir
207 wimcapture srclist --source-list test.wim
208 wimapply test.wim out.dir
209 if [[ ! -f out.dir/5 || ! -f out.dir/1 || ! -f out.dir/1link || \
210 ! -d out.dir/otherdir ]]; then
211 error "source list capture failed to work as expected"
214 # Still testing source list capture: add quoted name, and try overlay
220 "overlay dir 1" 'otherdir'
221 "overlay dir 2" 'otherdir'
223 mkdir "overlay dir 1"
224 mkdir "overlay dir 2"
225 echo A > "overlay dir 1"/A
226 echo B > "overlay dir 2"/B
227 wimcapture srclist --source-list test.wim
228 wimapply test.wim out.dir
229 if [[ ! -f out.dir/5 || ! -f out.dir/1 || ! -f out.dir/1link || \
230 ! -f out.dir/otherdir/A || ! -f out.dir/otherdir/B ]]; then
231 error "source list capture (with quoted names and basic overlay) failed to work as expected"
235 rm -rf in.dir out.dir "overlay dir 1" "overlay dir 2"
236 mkdir -p in.dir.1/subdir/subdir2 in.dir.2/subdir/subdir2
241 echo 1 > in.dir.1/subdir/1
242 echo 2 > in.dir.2/subdir/2
243 echo 3 > in.dir.1/subdir/subdir2/3
244 echo 4 > in.dir.2/subdir/subdir2/4
245 wimcapture srclist --source-list test.wim
246 wimapply test.wim out.dir
247 if [[ ! -f out.dir/subdir/1 || ! -f out.dir/subdir/2 || \
248 ! -f out.dir/subdir/subdir2/3 || ! -f out.dir/subdir/subdir2/4 ]]; then
249 error "source list capture (with deep overlay) failed to work as expected"
253 __msg "Testing bad overlay (errors expected)"
261 if wimcapture srclist --source-list test.wim; then
262 error "unexpected success in bad overlay with --source-list!"
265 echo "**********************************************************"
266 echo " wimcapture/apply tests passed "
267 echo "**********************************************************"