]> arthur.barton.de Git - bup.git/blob - t/test-index-check-device.sh
Merge pull request #13 from Farioko/patch-1
[bup.git] / t / test-index-check-device.sh
1 #!/usr/bin/env bash
2 . ./wvtest-bup.sh || exit $?
3 . ./t/lib.sh || exit $?
4
5 set -o pipefail
6
7 if [ $(t/root-status) != root ]; then
8     echo 'Not root: skipping --check-device tests.'
9     exit 0 # FIXME: add WVSKIP.
10 fi
11
12 if test -n "$(type -p modprobe)" && ! modprobe loop; then
13     echo 'Unable to load loopback module; skipping --check-device test.' 1>&2
14     exit 0
15 fi
16
17 if test -z "$(type -p losetup)"; then
18     echo 'Unable to find losetup: skipping --check-device tests.' 1>&2
19     exit 0 # FIXME: add WVSKIP.
20 fi
21
22 if test -z "$(type -p mke2fs)"; then
23     echo 'Unable to find mke2fs: skipping --check-device tests.' 1>&2
24     exit 0 # FIXME: add WVSKIP.
25 fi
26
27 WVSTART '--check-device'
28
29 top="$(pwd)"
30 tmpdir="$(WVPASS wvmktempdir)" || exit $?
31
32 export BUP_DIR="$tmpdir/bup"
33
34 bup() { "$top/bup" "$@"; }
35
36 srcmnt="$(WVPASS wvmkmountpt)" || exit $?
37 tmpmnt1="$(WVPASS wvmkmountpt)" || exit $?
38 tmpmnt2="$(WVPASS wvmkmountpt)" || exit $?
39
40 WVPASS cd "$tmpdir"
41
42 WVPASS dd if=/dev/zero of=testfs.img bs=1M count=32
43 WVPASS mke2fs -F -j -m 0 testfs.img
44 WVPASS mount -o loop testfs.img "$tmpmnt1"
45 # Hide, so that tests can't create risks.
46 WVPASS chown root:root "$tmpmnt1"
47 WVPASS chmod 0700 "$tmpmnt1"
48
49 # Create trivial content.
50 WVPASS date > "$tmpmnt1/foo"
51 WVPASS umount "$tmpmnt1"
52
53 # Mount twice, so we'll have the same content with different devices.
54 WVPASS mount -oro,loop testfs.img "$tmpmnt1"
55 WVPASS mount -oro,loop testfs.img "$tmpmnt2"
56
57 # Test default behavior: --check-device.
58 WVPASS mount -oro --bind "$tmpmnt1" "$srcmnt"
59 WVPASS bup init
60 WVPASS bup index --fake-valid "$srcmnt"
61 WVPASS umount "$srcmnt"
62 WVPASS mount -oro --bind "$tmpmnt2" "$srcmnt"
63 WVPASS bup index "$srcmnt"
64 WVPASSEQ "$(bup index --status "$srcmnt")" \
65 "M $srcmnt/lost+found/
66 M $srcmnt/foo
67 M $srcmnt/"
68 WVPASS umount "$srcmnt"
69
70 WVSTART '--no-check-device'
71 WVPASS mount -oro --bind "$tmpmnt1" "$srcmnt"
72 WVPASS bup index --clear
73 WVPASS bup index --fake-valid "$srcmnt"
74 WVPASS umount "$srcmnt"
75 WVPASS mount -oro --bind "$tmpmnt2" "$srcmnt"
76 WVPASS bup index --no-check-device "$srcmnt"
77 WVPASS bup index --status "$srcmnt"
78 WVPASSEQ "$(bup index --status "$srcmnt")" \
79 "  $srcmnt/lost+found/
80   $srcmnt/foo
81   $srcmnt/"
82
83 WVPASS umount "$srcmnt"
84 WVPASS umount "$tmpmnt1"
85 WVPASS umount "$tmpmnt2"
86 WVPASS rm -r "$tmpmnt1" "$tmpmnt2" "$tmpdir"