1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
|
#!/usr/bin/env bash
. wvtest.sh
. wvtest-bup.sh
. dev/lib.sh
set -o pipefail
top="$(WVPASS pwd)" || exit $?
tmpdir="$(WVPASS wvmktempdir)" || exit $?
export BUP_DIR="$tmpdir/bup"
bup() { "$top/bup" "$@"; }
validate-local-and-remote-restore()
{
local src="$1" dest="$2" cmp_src="$3" cmp_dest="$4"
force-delete "$dest"
WVPASS bup restore -C "$dest" "$src"
WVPASS "$top/dev/compare-trees" "$cmp_src" "$cmp_dest"
force-delete "$dest"
WVPASS bup restore -r ":$BUP_DIR" -C "$dest" "$src"
WVPASS "$top/dev/compare-trees" "$cmp_src" "$cmp_dest"
}
WVPASS cd "$tmpdir"
WVSTART "init"
WVPASS bup init
# Be independent of git defaults or a configured defaultBranch
git --git-dir "$BUP_DIR" symbolic-ref HEAD refs/heads/main
D=bupdata.tmp
WVPASS force-delete $D
WVPASS mkdir $D
WVPASS touch $D/a
WVPASS bup random 128k >$D/b
WVPASS mkdir $D/d $D/d/e
WVPASS bup random 512 >$D/f
WVPASS touch $D/d/z
WVPASS touch $D/d/z
WVPASS bup index $D
WVPASS bup save -t $D
WVSTART "restore"
WVPASS force-delete buprestore.tmp
WVFAIL bup restore boink
WVPASS touch "$tmpdir/$D/$D"
WVPASS bup index -u "$tmpdir/$D"
WVPASS bup save -n main /
WVPASS bup restore -C buprestore.tmp "/main/latest/$tmpdir/$D"
WVPASSEQ "$(ls buprestore.tmp)" "bupdata.tmp"
WVPASS force-delete buprestore.tmp
WVPASS bup restore -C buprestore.tmp "/main/latest/$tmpdir/$D/"
WVPASS touch $D/non-existent-file buprestore.tmp/non-existent-file # else diff fails
WVPASS diff -ur $D/ buprestore.tmp/
WVPASS force-delete buprestore.tmp
WVPASS echo -n "" | WVPASS bup split -n split_empty_string.tmp
WVPASS bup restore -C buprestore.tmp split_empty_string.tmp/latest/
WVPASSEQ "$(cat buprestore.tmp/data)" ""
(
tmp=testrestore.tmp
WVPASS force-delete $tmp
WVPASS mkdir $tmp
export BUP_DIR="$(pwd)/$tmp/bup"
WVPASS WVPASS bup init
WVPASS mkdir -p $tmp/src/x/y/z
WVPASS bup random 8k > $tmp/src/x/y/random-1
WVPASS bup random 8k > $tmp/src/x/y/z/random-2
WVPASS bup index -u $tmp/src
WVPASS bup save --strip -n foo $tmp/src
WVSTART "restore /foo/latest"
validate-local-and-remote-restore \
/foo/latest "$tmp/restore" \
"$tmp/src/" "$tmp/restore/latest/"
WVSTART "restore /foo/latest/."
WVPASS force-delete "$tmp/restore"
validate-local-and-remote-restore \
/foo/latest/. "$tmp"/restore \
"$tmp"/src/ "$tmp"/restore
WVSTART "restore /foo/latest/x"
WVPASS force-delete "$tmp/restore"
validate-local-and-remote-restore \
/foo/latest/x "$tmp"/restore \
"$tmp"/src/x/ "$tmp"/restore/x/
WVSTART "restore /foo/latest/x/"
WVPASS force-delete "$tmp/restore"
WVPASS bup restore -C "$tmp"/restore /foo/latest/x/
for x in "$tmp"/src/x/*; do
WVPASS "$top/dev/compare-trees" "$x/" "$tmp/restore/$(basename $x)"
done
WVPASS force-delete "$tmp/restore"
WVPASS bup restore -r ":$BUP_DIR" -C "$tmp"/restore /foo/latest/x/
for x in "$tmp"/src/x/*; do
WVPASS "$top/dev/compare-trees" "$x/" "$tmp/restore/$(basename $x)"
done
WVSTART "restore /foo/latest/x/."
WVPASS force-delete "$tmp/restore"
validate-local-and-remote-restore \
/foo/latest/x/. "$tmp"/restore \
"$tmp"/src/x/ "$tmp"/restore/
) || exit $?
WVSTART "save (no index)"
(
tmp=save-no-index.tmp
WVPASS force-delete $tmp
WVPASS mkdir $tmp
export BUP_DIR="$(WVPASS pwd)/$tmp/bup" || exit $?
WVPASS bup init
WVFAIL bup save -n nothing /
WVPASS rm -r "$tmp"
) || exit $?
WVSTART "save disjoint top-level directories"
(
# Resolve any symlinks involving the top top-level dirs.
real_pwd="$(WVPASS resolve-parent .)" || exit $?
real_tmp="$(WVPASS resolve-parent /tmp/.)" || exit $?
pwd_top="$(echo $real_pwd | WVPASS awk -F "/" '{print $2}')" || exit $?
tmp_top="$(echo $real_tmp | WVPASS awk -F "/" '{print $2}')" || exit $?
if [ "$pwd_top" = "$tmp_top" ]; then
echo "(running from within /$tmp_top; skipping test)" 1>&2
exit 0 # FIXME: allow intermixed WVSKIPs
fi
D=bupdata.tmp
WVPASS force-delete $D
WVPASS mkdir -p $D/x
WVPASS date > $D/x/1
tmpdir2="$(WVPASS mktemp -d $real_tmp/bup-test-XXXXXXX)" || exit $?
cleanup() { WVPASS rm -r "$tmpdir2"; }
WVPASS trap cleanup EXIT
WVPASS date > "$tmpdir2/2"
export BUP_DIR="$tmpdir/bup"
WVPASS test -d "$BUP_DIR" && WVPASS rm -r "$BUP_DIR"
WVPASS bup init
WVPASS bup index -vu $(pwd)/$D/x "$tmpdir2"
WVPASS bup save -t -n src $(pwd)/$D/x "$tmpdir2"
# For now, assume that "ls -a" and "sort" use the same order.
actual="$(WVPASS bup ls -AF src/latest)" || exit $?
expected="$(echo -e "$pwd_top/\n$tmp_top/" | WVPASS sort)" || exit $?
WVPASSEQ "$actual" "$expected"
) || exit $?
WVPASS cd "$top"
WVPASS rm -rf "$tmpdir"
|