5 export BUP_DIR="$TOP/buptest.tmp"
12 # Very simple metadata tests -- create a test tree then check that bup
13 # meta can reproduce the metadata correctly (according to bup xstat)
14 # via create, extract, start-extract, and finish-extract. The current
15 # tests are crude, and this does not fully test devices, varying
16 # users/groups, acls, attrs, etc.
21 export PATH="$TOP:$PATH" # pick up bup
22 # Skip atime (test elsewhere) to avoid the observer effect.
23 find . | sort | xargs bup xstat --exclude-fields ctime,atime,size
29 test "$(whoami)" == root -a -z "$FAKEROOTKEY"
34 if ! actually-root; then
37 # Go to greater lengths to deal with any test detritus.
39 test -e "$@" || continue
40 chattr -fR = "$@" || true
47 test-src-create-extract()
49 # Test bup meta create/extract for ./src -> ./src-restore.
50 # Also writes to ./src-stat and ./src-restore-stat.
52 (cd src && WVPASS genstat) > src-stat
53 WVPASS bup meta --create --recurse --file src.meta src
55 force-delete src-restore
58 WVPASS bup meta --extract --file ../src.meta
60 (cd src && genstat >../../src-restore-stat) || WVFAIL
61 WVPASS diff -U5 ../src-stat ../src-restore-stat
62 # Test start/finish extract.
64 WVPASS bup meta --start-extract --file ../src.meta
66 WVPASS bup meta --finish-extract --file ../src.meta
67 (cd src && genstat >../../src-restore-stat) || WVFAIL
68 WVPASS diff -U5 ../src-stat ../src-restore-stat
72 if actually-root; then
73 umount "$TOP/bupmeta.tmp/testfs" || true
76 force-delete "$BUP_DIR"
77 force-delete "$TOP/bupmeta.tmp"
82 rm -rf "$TOP/bupmeta.tmp/src"
83 mkdir -p "$TOP/bupmeta.tmp/src"
84 cp -pPR Documentation cmd lib t "$TOP/bupmeta.tmp"/src
86 # Regression test for metadata sort order. Previously, these two
87 # entries would sort in the wrong order because the metadata
88 # entries were being sorted by mangled name, but the index isn't.
89 dd if=/dev/zero of="$TOP/bupmeta.tmp"/src/foo bs=1k count=33
90 touch -d 2011-11-11 "$TOP/bupmeta.tmp"/src/foo
91 touch -d 2011-12-12 "$TOP/bupmeta.tmp"/src/foo-bar
93 t/mksock "$TOP/bupmeta.tmp/src/test-socket" || true
96 # Use the test tree to check bup meta.
97 WVSTART 'meta - general'
100 test-src-create-extract
102 # Test a top-level file (not dir).
104 WVPASS bup meta -cf src-file.meta src-file
107 WVPASS bup meta -xf ../src-file.meta
110 # Root-only tests: ACLs, Linux attr, Linux xattr, etc.
111 if actually-root; then
113 # These tests are only likely to work under Linux for now
115 [[ $(uname) =~ Linux ]] || exit 0
120 umount "$TOP/bupmeta.tmp/testfs" || true
123 trap cleanup_at_exit EXIT
125 WVSTART 'meta - general (as root)'
126 WVPASS cd "$TOP/bupmeta.tmp"
127 umount testfs || true
128 dd if=/dev/zero of=testfs.img bs=1M count=32
129 mke2fs -F -j -m 0 testfs.img
131 mount -o loop,acl,user_xattr testfs.img testfs
132 # Hide, so that tests can't create risks.
133 chown root:root testfs
136 #cp -a src testfs/src
137 cp -pPR src testfs/src
138 (cd testfs && test-src-create-extract)
140 WVSTART 'meta - atime (as root)'
141 force-delete testfs/src
146 PYTHONPATH="$TOP/lib" \
147 python -c "from bup import xstat; \
148 x = xstat.timespec_to_nsecs((42, 0));\
149 xstat.utime('testfs/src/foo', (x, x));\
150 xstat.utime('testfs/src/bar', (x, x));"
152 WVPASS bup meta -v --create --recurse --file src.meta src
153 bup meta -tvf src.meta
155 force-delete src-restore
158 WVPASS bup meta --extract --file ../src.meta
159 WVPASSEQ "$(bup xstat --include-fields=atime src/foo)" "atime: 42"
160 WVPASSEQ "$(bup xstat --include-fields=atime src/bar)" "atime: 42"
161 # Test start/finish extract.
163 WVPASS bup meta --start-extract --file ../src.meta
165 WVPASS bup meta --finish-extract --file ../src.meta
166 WVPASSEQ "$(bup xstat --include-fields=atime src/foo)" "atime: 42"
167 WVPASSEQ "$(bup xstat --include-fields=atime src/bar)" "atime: 42"
170 WVSTART 'meta - Linux attr (as root)'
171 force-delete testfs/src
176 chattr +acdeijstuADST testfs/src/foo
177 chattr +acdeijstuADST testfs/src/bar
178 (cd testfs && test-src-create-extract)
181 WVSTART 'meta - Linux xattr (as root)'
182 force-delete testfs/src
187 attr -s foo -V bar testfs/src/foo
188 attr -s foo -V bar testfs/src/bar
189 (cd testfs && test-src-create-extract)
192 WVSTART 'meta - POSIX.1e ACLs (as root)'
193 force-delete testfs/src
198 setfacl -m u:root:r testfs/src/foo
199 setfacl -m u:root:r testfs/src/bar
200 (cd testfs && test-src-create-extract)