6 export BUP_DIR="$TOP/buptest.tmp"
13 # Very simple metadata tests -- "make install" to a temp directory,
14 # then check that bup meta can reproduce the metadata correctly
15 # (according to coreutils stat) via create, extract, start-extract,
16 # and finish-extract. The current tests are crude, and this does not
17 # test devices, varying users/groups, acls, attrs, etc.
22 export PATH="${TOP}:${PATH}" # pick up bup
23 # Skip atime (test elsewhere) to avoid the observer effect.
24 find . | sort | xargs bup xstat --exclude-fields ctime,atime
30 test "$(whoami)" == root -a -z "${FAKEROOTKEY}"
39 # Go to greater lengths to deal with any test detritus.
42 test -e "$@" || continue
43 chattr -fR = "$@" || true
50 test-src-create-extract()
52 # Test bup meta create/extract for ./src -> ./src-restore.
53 # Also writes to ./src-stat and ./src-restore-stat.
55 (cd src && WVPASS genstat) > src-stat
56 WVPASS bup meta --create --recurse --file src.meta src
58 force-delete src-restore
61 WVPASS bup meta --extract --file ../src.meta
63 (cd src && genstat >../../src-restore-stat) || WVFAIL
64 WVPASS diff -U5 ../src-stat ../src-restore-stat
65 # Test start/finish extract.
67 WVPASS bup meta --start-extract --file ../src.meta
69 WVPASS bup meta --finish-extract --file ../src.meta
70 (cd src && genstat >../../src-restore-stat) || WVFAIL
71 WVPASS diff -U5 ../src-stat ../src-restore-stat
77 umount "${TOP}/bupmeta.tmp/testfs" || true
80 force-delete "${BUP_DIR}"
81 force-delete "${TOP}/bupmeta.tmp"
85 mkdir -p "${TOP}/bupmeta.tmp"
86 make DESTDIR="${TOP}/bupmeta.tmp/src" install
87 mkdir "${TOP}/bupmeta.tmp/src/misc"
88 cp -a cmd/bup-* "${TOP}/bupmeta.tmp/src/misc/"
91 # Use the test tree to check bup meta.
92 WVSTART 'meta - general'
94 cd "${TOP}/bupmeta.tmp"
95 test-src-create-extract
98 # Root-only tests: ACLs, Linux attr, Linux xattr, etc.
105 umount "${TOP}/bupmeta.tmp/testfs" || true
108 trap cleanup_at_exit EXIT
110 WVSTART 'meta - general (as root)'
111 WVPASS cd "${TOP}/bupmeta.tmp"
112 umount testfs || true
113 dd if=/dev/zero of=testfs.img bs=1M count=32
114 mke2fs -F -j -m 0 testfs.img
116 mount -o loop,acl,user_xattr testfs.img testfs
117 # Hide, so that tests can't create risks.
118 chown root:root testfs
122 (cd testfs && test-src-create-extract)
124 WVSTART 'meta - atime (as root)'
125 force-delete testfs/src
130 PYTHONPATH="${TOP}/lib" \
131 python -c "from bup.xstat import lutime, FSTime; \
132 x = FSTime.from_secs(42);\
133 lutime('testfs/src/foo', (x, x));\
134 lutime('testfs/src/bar', (x, x));"
136 WVPASS bup meta -v --create --recurse --file src.meta src
137 bup meta -tvf src.meta
139 force-delete src-restore
142 WVPASS bup meta --extract --file ../src.meta
143 WVPASSEQ "$(bup xstat --include-fields=atime src/foo)" "atime: 42"
144 WVPASSEQ "$(bup xstat --include-fields=atime src/bar)" "atime: 42"
145 # Test start/finish extract.
147 WVPASS bup meta --start-extract --file ../src.meta
149 WVPASS bup meta --finish-extract --file ../src.meta
150 WVPASSEQ "$(bup xstat --include-fields=atime src/foo)" "atime: 42"
151 WVPASSEQ "$(bup xstat --include-fields=atime src/bar)" "atime: 42"
154 WVSTART 'meta - Linux attr (as root)'
155 force-delete testfs/src
160 chattr +acdeijstuADST testfs/src/foo
161 chattr +acdeijstuADST testfs/src/bar
162 (cd testfs && test-src-create-extract)
165 WVSTART 'meta - Linux xattr (as root)'
166 force-delete testfs/src
171 attr -s foo -V bar testfs/src/foo
172 attr -s foo -V bar testfs/src/bar
173 (cd testfs && test-src-create-extract)
176 WVSTART 'meta - POSIX.1e ACLs (as root)'
177 force-delete testfs/src
182 setfacl -m u:root:r testfs/src/foo
183 setfacl -m u:root:r testfs/src/bar
184 (cd testfs && test-src-create-extract)
189 force-delete "${BUP_DIR}"
190 force-delete "$TOP/bupmeta.tmp"