TOP="$(WVPASS pwd)" || exit $?
tmpdir="$(WVPASS wvmktempdir)" || exit $?
-
export BUP_DIR="$tmpdir/bup"
-WVPASS force-delete "$TOP/bupmeta.tmp"
-timestamp_resolutions="$(t/ns-timestamp-resolutions "$TOP/bupmeta.tmp")" \
+# Assume that mvmktempdir will always use the same dir.
+timestamp_resolutions="$(t/ns-timestamp-resolutions "$tmpdir/canary")" \
|| exit $?
-WVPASS rm "$TOP/bupmeta.tmp"
atime_resolution="$(echo $timestamp_resolutions | WVPASS cut -d' ' -f 1)" \
|| exit $?
mtime_resolution="$(echo $timestamp_resolutions | WVPASS cut -d' ' -f 2)" \
|| exit $?
+WVPASS rm "$tmpdir/canary"
bup()
{
test-src-save-restore()
{
# Test bup save/restore metadata for ./src -> ./src-restore. Also
- # writes to ./src.bup. Note that for now this just tests the
+ # writes to BUP_DIR. Note that for now this just tests the
# restore below src/, in order to avoid having to worry about
# operations that require root (like chown /home).
(
- WVPASS rm -rf src.bup
- WVPASS mkdir src.bup
- export BUP_DIR=$(pwd)/src.bup || exit $?
+ WVPASS rm -rf "$BUP_DIR"
WVPASS bup init
WVPASS bup index src
WVPASS bup save -t -n src src
setup-test-tree()
{
- WVPASS force-delete "$BUP_DIR"
- WVPASS force-delete "$TOP/bupmeta.tmp"
- WVPASS mkdir -p "$TOP/bupmeta.tmp/src"
- WVPASS cp -pPR Documentation cmd config lib "$TOP/bupmeta.tmp"/src
+ WVPASS "$TOP/t/sync-tree" "$TOP/t/sampledata/" "$tmpdir/src/"
# Add some hard links for the general tests.
(
- WVPASS cd "$TOP/bupmeta.tmp"/src
+ WVPASS cd "$tmpdir"/src
WVPASS touch hardlink-target
WVPASS ln hardlink-target hardlink-1
WVPASS ln hardlink-target hardlink-2
# Add some trivial files for the index, modify, save tests.
(
- WVPASS cd "$TOP/bupmeta.tmp"/src
+ WVPASS cd "$tmpdir"/src
WVPASS mkdir volatile
WVPASS touch volatile/{1,2,3}
) || exit $?
# Regression test for metadata sort order. Previously, these two
# entries would sort in the wrong order because the metadata
# entries were being sorted by mangled name, but the index isn't.
- WVPASS dd if=/dev/zero of="$TOP/bupmeta.tmp"/src/foo bs=1k count=33
- WVPASS touch -t 201111111111 "$TOP/bupmeta.tmp"/src/foo
- WVPASS touch -t 201112121111 "$TOP/bupmeta.tmp"/src/foo-bar
+ WVPASS dd if=/dev/zero of="$tmpdir"/src/foo bs=1k count=33
+ WVPASS touch -t 201111111111 "$tmpdir"/src/foo
+ WVPASS touch -t 201112121111 "$tmpdir"/src/foo-bar
- t/mksock "$TOP/bupmeta.tmp/src/test-socket" || true
+ t/mksock "$tmpdir"/src/test-socket || true
}
# Use the test tree to check bup meta.
WVSTART 'meta --create/--extract'
(
+ tmpdir="$(WVPASS wvmktempdir)" || exit $?
+ export BUP_DIR="$tmpdir/bup"
WVPASS setup-test-tree
- WVPASS cd "$TOP/bupmeta.tmp"
+ WVPASS cd "$tmpdir"
WVPASS test-src-create-extract
# Test a top-level file (not dir).
WVPASS mkdir dest
WVPASS cd dest
WVPASS bup meta -xf ../src-file.meta
+ WVPASS rm -r "$tmpdir"
) || exit $?
# Use the test tree to check bup save/restore metadata.
WVSTART 'metadata save/restore (general)'
(
+ tmpdir="$(WVPASS wvmktempdir)" || exit $?
+ export BUP_DIR="$tmpdir/bup"
WVPASS setup-test-tree
- WVPASS cd "$TOP/bupmeta.tmp"
+ WVPASS cd "$tmpdir"
WVPASS test-src-save-restore
# Test a deeper subdir/ to make sure top-level non-dir metadata is
# restored correctly. We need at least one dir and one non-dir at
# the "top-level".
- WVPASS test -f src/lib/__init__.py
- WVPASS test -d src/lib/bup
- WVPASS rm -rf src.bup
- WVPASS mkdir src.bup
- export BUP_DIR=$(pwd)/src.bup || exit $?
+ WVPASS test -d src/var/cmd
+ WVPASS test -f src/var/cmd/save-cmd.py
+ WVPASS rm -rf "$BUP_DIR"
WVPASS bup init
WVPASS touch -t 201111111111 src-restore # Make sure the top won't match.
WVPASS bup index src
WVPASS bup save -t -n src src
WVPASS force-delete src-restore
- WVPASS bup restore -C src-restore "/src/latest$(pwd)/src/lib/"
+ WVPASS bup restore -C src-restore "/src/latest$(pwd)/src/var/."
WVPASS touch -t 201211111111 src-restore # Make sure the top won't match.
# Check that the only difference is the top dir.
- WVFAIL $TOP/t/compare-trees -c src/lib/ src-restore/ > tmp-compare-trees
- WVPASSEQ $(cat tmp-compare-trees | wc -l) 2
- WVPASS tail -n +2 tmp-compare-trees | WVPASS grep -qE '^\.d[^ ]+ \./$'
+ WVFAIL $TOP/t/compare-trees -c src/var/ src-restore/ > tmp-compare-trees
+ WVPASSEQ $(cat tmp-compare-trees | wc -l) 1
+ # The number of rsync status characters varies, so accept any
+ # number of trailing dots. For example OS X native rsync produces
+ # 9, but Homebrew's produces 12, while on other platforms, 11 is
+ # common.
+ expected_diff_rx='^\.d\.\.t\.\.\.(\.)+ \./$'
+ if ! grep -qE "$expected_diff_rx" tmp-compare-trees; then
+ echo -n 'tmp-compare-trees: ' 1>&2
+ cat tmp-compare-trees 1>&2
+ fi
+ WVPASS grep -qE "$expected_diff_rx" tmp-compare-trees
+ WVPASS rm -r "$tmpdir"
) || exit $?
# Test that we pull the index (not filesystem) metadata for any
# directory.
WVSTART 'metadata save/restore (using index metadata)'
(
+ tmpdir="$(WVPASS wvmktempdir)" || exit $?
+ export BUP_DIR="$tmpdir/bup"
WVPASS setup-test-tree
- WVPASS cd "$TOP/bupmeta.tmp"
+ WVPASS cd "$tmpdir"
# ...for now -- might be a problem with hardlink restores that was
# causing noise wrt this test.
# these metadata..." may fail.
WVPASS sleep 1
- WVPASS rm -rf src.bup
- WVPASS mkdir src.bup
- export BUP_DIR=$(pwd)/src.bup || exit $?
+ WVPASS rm -rf "$BUP_DIR"
WVPASS bup init
WVPASS bup index src
WVPASS bup save -t -n src src
WVPASS "$TOP/t/compare-trees" -c src/ src-restore-1/src/
WVPASS echo "blarg" > src/volatile/1
- WVPASS cp -a src/volatile/1 src-restore-1/src/volatile/
+ WVPASS cp -pP src/volatile/1 src-restore-1/src/volatile/
WVPASS bup index src
# Bup should *not* pick up these metadata changes.
WVPASS test -d src-restore-2/src
WVPASS "$TOP/t/compare-trees" -c src-restore-1/src/ src-restore-2/src/
- WVPASS rm -rf src.bup
+ WVPASS rm -r "$tmpdir"
+
) || exit $?
+
setup-hardlink-test()
{
- WVPASS rm -rf "$TOP/bupmeta.tmp"/src "$TOP/bupmeta.tmp"/src.bup
- WVPASS mkdir "$TOP/bupmeta.tmp"/src "$TOP/bupmeta.tmp"/src.bup
+ WVPASS rm -rf "$tmpdir/src" "$BUP_DIR"
WVPASS bup init
+ WVPASS mkdir "$tmpdir/src"
}
hardlink-test-run-restore()
# Test hardlinks more carefully.
WVSTART 'metadata save/restore (hardlinks)'
(
- export BUP_DIR="$TOP/bupmeta.tmp/src.bup"
- WVPASS force-delete "$TOP/bupmeta.tmp"
- WVPASS mkdir -p "$TOP/bupmeta.tmp"
+ tmpdir="$(WVPASS wvmktempdir)" || exit $?
+ export BUP_DIR="$tmpdir/bup"
- WVPASS cd "$TOP/bupmeta.tmp"
-
- # Test trivial case - single hardlink.
WVPASS setup-hardlink-test
+ WVPASS cd "$tmpdir"
+
+ # Test trivial case - single hardlink.
(
- WVPASS cd "$TOP/bupmeta.tmp"/src
+ WVPASS cd src
WVPASS touch hardlink-target
WVPASS ln hardlink-target hardlink-1
) || exit $?
# needs to be saved again. i.e. the save-cmd.py "if hashvalid:"
# case.
(
- WVPASS cd "$TOP/bupmeta.tmp"/src
+ WVPASS cd src
WVPASS echo whatever > something-new
) || exit $?
WVPASS bup index src
# Test hardlink changes between index runs.
#
WVPASS setup-hardlink-test
- WVPASS cd "$TOP/bupmeta.tmp"/src
+ WVPASS cd src
WVPASS touch hardlink-target-a
WVPASS touch hardlink-target-b
WVPASS ln hardlink-target-a hardlink-b-1
# b c d] changes to [a b] [c d]. At least right now bup should
# notice and recreate the latter.
WVPASS setup-hardlink-test
- WVPASS cd "$TOP/bupmeta.tmp"/src
+ WVPASS cd "$tmpdir"/src
WVPASS touch a
WVPASS ln a b
WVPASS ln a c
# Test that we don't link outside restore tree.
WVPASS setup-hardlink-test
- WVPASS cd "$TOP/bupmeta.tmp"
+ WVPASS cd "$tmpdir"
WVPASS mkdir src/a src/b
WVPASS touch src/a/1
WVPASS ln src/a/1 src/b/1
# Test that we do link within separate sub-trees.
WVPASS setup-hardlink-test
- WVPASS cd "$TOP/bupmeta.tmp"
+ WVPASS cd "$tmpdir"
WVPASS mkdir src/a src/b
WVPASS touch src/a/1
WVPASS ln src/a/1 src/b/1
(WVPASS cd src-restore; WVPASS hardlink-sets .) > hardlink-sets.restored \
|| exit $?
WVPASS diff -u hardlink-sets.expected hardlink-sets.restored
+
+ WVPASS rm -r "$tmpdir"
+
) || exit $?
WVSTART 'meta --edit'
(
- WVPASS force-delete "$TOP/bupmeta.tmp"
- WVPASS mkdir "$TOP/bupmeta.tmp"
- WVPASS cd "$TOP/bupmeta.tmp"
+ tmpdir="$(WVPASS wvmktempdir)" || exit $?
+ WVPASS cd "$tmpdir"
WVPASS mkdir src
+
WVPASS bup meta -cf src.meta src
WVPASS bup meta --edit --set-uid 0 src.meta | WVPASS bup meta -tvvf - \
| WVPASS bup meta -tvvf - | WVPASS grep -qE '^group:'
WVPASS bup meta --edit --unset-group --set-group bar src.meta \
| WVPASS bup meta -tvvf - | grep -qE '^group: bar'
+
+ WVPASS rm -r "$tmpdir"
+
) || exit $?
WVSTART 'meta --no-recurse'
(
- set +e
- WVPASS force-delete "$TOP/bupmeta.tmp"
- WVPASS mkdir "$TOP/bupmeta.tmp"
- WVPASS cd "$TOP/bupmeta.tmp"
+ tmpdir="$(WVPASS wvmktempdir)" || exit $?
+ WVPASS cd "$tmpdir"
WVPASS mkdir src
WVPASS mkdir src/foo
WVPASS touch src/foo/{1,2,3}
WVPASS bup meta -cf src.meta src
- WVPASSEQ "$(LC_ALL=C; bup meta -tf src.meta | sort)" "src/
+ WVPASSEQ "$(bup meta -tf src.meta | LC_ALL=C sort)" "src/
src/foo/
src/foo/1
src/foo/2
src/foo/3"
WVPASS bup meta --no-recurse -cf src.meta src
- WVPASSEQ "$(LC_ALL=C; bup meta -tf src.meta | sort)" "src/"
+ WVPASSEQ "$(bup meta -tf src.meta | LC_ALL=C sort)" "src/"
+ WVPASS rm -r "$tmpdir"
) || exit $?
# Test ownership restoration (when not root or fakeroot).
exit 0
fi
- first_group="$(WVPASS python -c 'import os,grp; \
+ tmpdir="$(WVPASS wvmktempdir)" || exit $?
+
+ first_group="$(WVPASS bup-python -c 'import os,grp; \
print grp.getgrgid(os.getgroups()[0])[0]')" || exit $?
- last_group="$(python -c 'import os,grp; \
+ last_group="$(bup-python -c 'import os,grp; \
print grp.getgrgid(os.getgroups()[-1])[0]')" || exit $?
last_group_erx="$(escape-erx "$last_group")"
WVSTART 'metadata (restoration of ownership)'
- WVPASS force-delete "$TOP/bupmeta.tmp"
- WVPASS mkdir "$TOP/bupmeta.tmp"
- WVPASS cd "$TOP/bupmeta.tmp"
+ WVPASS cd "$tmpdir"
WVPASS touch src
# Some systems always assign the parent dir group to new paths
# (sgid). Make sure the group is one we're in.
| WVPASS bup meta -x
new_gidx=$(bup xstat src | grep -e '^gid:') || exit $?
WVPASSEQ "$current_gidx" "$new_gidx"
+
+ WVPASS rm -r "$tmpdir"
+
) || exit $?
# Test ownership restoration (when root or fakeroot).
exit 0
fi
+ tmpdir="$(WVPASS wvmktempdir)" || exit $?
+
uid=$(WVPASS id -un) || exit $?
gid=$(WVPASS id -gn) || exit $?
WVSTART 'metadata (restoration of ownership as root)'
- WVPASS force-delete "$TOP/bupmeta.tmp"
- WVPASS mkdir "$TOP/bupmeta.tmp"
- WVPASS cd "$TOP/bupmeta.tmp"
+ WVPASS cd "$tmpdir"
WVPASS touch src
WVPASS chown "$uid:$gid" src # In case the parent dir is sgid, etc.
WVPASS bup meta -cf src.meta src
WVPASS bup xstat src | WVPASS grep -qvE "^group: $other_group2_erx"
WVPASS bup xstat src | WVPASS grep -qE "^gid: 0"
fi
+
+ WVPASS rm -r "$tmpdir"
+
) || exit $?
testfs="$(WVPASS wvmkmountpt)" || exit $?
testfs_limited="$(WVPASS wvmkmountpt)" || exit $?
+ tmpdir="$(WVPASS wvmktempdir)" || exit $?
+ export BUP_DIR="$tmpdir/bup"
WVSTART 'meta - general (as root)'
WVPASS setup-test-tree
- WVPASS cd "$TOP/bupmeta.tmp"
+ WVPASS cd "$tmpdir"
umount "$testfs"
WVPASS dd if=/dev/zero of=testfs.img bs=1M count=32
WVPASS mkdir "$testfs"/src/foo
WVPASS touch "$testfs"/src/bar
PYTHONPATH="$TOP/lib" \
- WVPASS python -c "from bup import xstat; \
+ WVPASS bup-python -c "from bup import xstat; \
x = xstat.timespec_to_nsecs((42, 0));\
xstat.utime('$testfs/src/foo', (x, x));\
xstat.utime('$testfs/src/bar', (x, x));"
(
WVPASS touch "$testfs"/src/foo
WVPASS mkdir "$testfs"/src/bar
- WVPASS chattr +acdeijstuADST "$testfs"/src/foo
+ WVPASS chattr +acdeijstuADS "$testfs"/src/foo
WVPASS chattr +acdeijstuADST "$testfs"/src/bar
(WVPASS cd "$testfs"; WVPASS test-src-create-extract) || exit $?
# Test restoration to a limited filesystem (vfat).
WVPASS cd "$testfs_limited"/src-restore
WVFAIL bup meta --extract --file "$testfs"/src.meta 2>&1 \
| WVPASS grep -e '^Linux chattr:' \
- | WVPASS python -c \
+ | WVPASS bup-python -c \
'import sys; exit(not len(sys.stdin.readlines()) == 3)'
) || exit $?
) || exit $?
WVFAIL bup meta --extract --file "$testfs"/src.meta
WVFAIL bup meta --extract --file "$testfs"/src.meta 2>&1 \
| WVPASS grep -e "^xattr\.set '" \
- | WVPASS python -c \
+ | WVPASS bup-python -c \
'import sys; exit(not len(sys.stdin.readlines()) == 2)'
) || exit $?
WVPASS cd "$testfs_limited"/src-restore
WVFAIL bup meta --extract --file "$testfs"/src.meta 2>&1 \
| WVPASS grep -e '^POSIX1e ACL applyto:' \
- | WVPASS python -c \
+ | WVPASS bup-python -c \
'import sys; exit(not len(sys.stdin.readlines()) == 2)'
) || exit $?
WVPASS umount "$testfs_limited"
WVPASS rm -r "$testfs" "$testfs_limited"
+ WVPASS rm -r "$tmpdir"
+
) || exit $?
fi