summaryrefslogtreecommitdiff
path: root/tests/misc-tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests/misc-tests')
-rwxr-xr-xtests/misc-tests/009-subvolume-sync-must-wait/test.sh8
-rwxr-xr-xtests/misc-tests/013-subvolume-sync-crash/test.sh8
-rwxr-xr-xtests/misc-tests/014-filesystem-label/test.sh8
-rwxr-xr-xtests/misc-tests/016-send-clone-src/test.sh4
-rwxr-xr-xtests/misc-tests/017-recv-stream-malformatted/test.sh4
-rwxr-xr-xtests/misc-tests/018-recv-end-of-stream/test.sh20
-rwxr-xr-xtests/misc-tests/019-receive-clones-on-munted-subvol/test.sh127
-rwxr-xr-xtests/misc-tests/020-fix-superblock-corruption/test.sh34
-rwxr-xr-xtests/misc-tests/021-image-multi-devices/test.sh50
9 files changed, 241 insertions, 22 deletions
diff --git a/tests/misc-tests/009-subvolume-sync-must-wait/test.sh b/tests/misc-tests/009-subvolume-sync-must-wait/test.sh
index 92c896f9..fa3f09ab 100755
--- a/tests/misc-tests/009-subvolume-sync-must-wait/test.sh
+++ b/tests/misc-tests/009-subvolume-sync-must-wait/test.sh
@@ -9,9 +9,9 @@ check_prereq btrfs
setup_root_helper
-run_check truncate -s 2G $IMAGE
-run_check $TOP/mkfs.btrfs -f $IMAGE
-run_check $SUDO_HELPER mount $IMAGE $TEST_MNT
+prepare_test_dev
+run_check $TOP/mkfs.btrfs -f "$TEST_DEV"
+run_check_mount_test_dev
run_check $SUDO_HELPER chmod a+rw $TEST_MNT
cd $TEST_MNT
@@ -49,4 +49,4 @@ run_check $SUDO_HELPER $TOP/btrfs subvolume list -d .
wait
cd ..
-run_check $SUDO_HELPER umount $TEST_MNT
+run_check_umount_test_dev
diff --git a/tests/misc-tests/013-subvolume-sync-crash/test.sh b/tests/misc-tests/013-subvolume-sync-crash/test.sh
index 4cb1b4e7..cd445961 100755
--- a/tests/misc-tests/013-subvolume-sync-crash/test.sh
+++ b/tests/misc-tests/013-subvolume-sync-crash/test.sh
@@ -10,9 +10,9 @@ check_prereq btrfs
setup_root_helper
-run_check truncate -s 2G $IMAGE
-run_check $TOP/mkfs.btrfs -f $IMAGE
-run_check $SUDO_HELPER mount $IMAGE $TEST_MNT
+prepare_test_dev
+run_check "$TOP/mkfs.btrfs" -f "$TEST_DEV"
+run_check_mount_test_dev
run_check $SUDO_HELPER chmod a+rw $TEST_MNT
cd $TEST_MNT
@@ -46,4 +46,4 @@ run_check $SUDO_HELPER $TOP/btrfs subvolume list -d .
wait
cd ..
-run_check $SUDO_HELPER umount $TEST_MNT
+run_check_umount_test_dev
diff --git a/tests/misc-tests/014-filesystem-label/test.sh b/tests/misc-tests/014-filesystem-label/test.sh
index a5e08ccc..753aa9ea 100755
--- a/tests/misc-tests/014-filesystem-label/test.sh
+++ b/tests/misc-tests/014-filesystem-label/test.sh
@@ -9,9 +9,9 @@ check_prereq btrfs
setup_root_helper
-run_check truncate -s 2G $IMAGE
-run_check $TOP/mkfs.btrfs -L BTRFS-TEST-LABEL -f $IMAGE
-run_check $SUDO_HELPER mount $IMAGE $TEST_MNT
+prepare_test_dev
+run_check "$TOP/mkfs.btrfs" -L BTRFS-TEST-LABEL -f "$TEST_DEV"
+run_check_mount_test_dev
run_check $SUDO_HELPER chmod a+rw $TEST_MNT
cd $TEST_MNT
@@ -66,4 +66,4 @@ run_check $SUDO_HELPER $TOP/btrfs filesystem label $TEST_MNT
cd ..
-run_check $SUDO_HELPER umount $TEST_MNT
+run_check_umount_test_dev
diff --git a/tests/misc-tests/016-send-clone-src/test.sh b/tests/misc-tests/016-send-clone-src/test.sh
index e256eef9..479da677 100755
--- a/tests/misc-tests/016-send-clone-src/test.sh
+++ b/tests/misc-tests/016-send-clone-src/test.sh
@@ -9,9 +9,9 @@ check_prereq mkfs.btrfs
check_prereq btrfs
setup_root_helper
-prepare_test_dev 1g
-run_check $TOP/mkfs.btrfs -f $IMAGE
+prepare_test_dev 1g
+run_check "$TOP/mkfs.btrfs" -f "$TEST_DEV"
run_check_mount_test_dev
here=`pwd`
diff --git a/tests/misc-tests/017-recv-stream-malformatted/test.sh b/tests/misc-tests/017-recv-stream-malformatted/test.sh
index 884b7d42..3756be27 100755
--- a/tests/misc-tests/017-recv-stream-malformatted/test.sh
+++ b/tests/misc-tests/017-recv-stream-malformatted/test.sh
@@ -8,9 +8,9 @@ check_prereq mkfs.btrfs
check_prereq btrfs
setup_root_helper
-prepare_test_dev 1g
-run_check $TOP/mkfs.btrfs -f $IMAGE
+prepare_test_dev 1g
+run_check "$TOP/mkfs.btrfs" -f "$TEST_DEV"
run_check_mount_test_dev
echo -n '' | run_mayfail $SUDO_HELPER "$TOP/btrfs" receive "$TEST_MNT" &&
diff --git a/tests/misc-tests/018-recv-end-of-stream/test.sh b/tests/misc-tests/018-recv-end-of-stream/test.sh
index d39683e9..3b8a0319 100755
--- a/tests/misc-tests/018-recv-end-of-stream/test.sh
+++ b/tests/misc-tests/018-recv-end-of-stream/test.sh
@@ -13,6 +13,8 @@ prepare_test_dev 1g
here=`pwd`
+# All helpers can exercise various options passed to 'btrfs receive'
+
test_full_empty_stream() {
local str
@@ -34,7 +36,7 @@ test_full_empty_stream() {
run_check $TOP/mkfs.btrfs -f $TEST_DEV
run_check_mount_test_dev
- run_check $SUDO_HELPER $TOP/btrfs receive -v -f "$str" "$TEST_MNT"
+ run_check $SUDO_HELPER $TOP/btrfs receive "$@" -v -f "$str" "$TEST_MNT"
run_check_umount_test_dev
run_check rm -f -- "$str"
@@ -65,7 +67,7 @@ test_full_simple_stream() {
run_check $TOP/mkfs.btrfs -f $TEST_DEV
run_check_mount_test_dev
- run_check $SUDO_HELPER $TOP/btrfs receive -v -f "$str" "$TEST_MNT"
+ run_check $SUDO_HELPER $TOP/btrfs receive "$@" -v -f "$str" "$TEST_MNT"
run_check_umount_test_dev
run_check rm -f -- "$str"
@@ -96,8 +98,8 @@ test_incr_empty_stream() {
run_check $TOP/mkfs.btrfs -f $TEST_DEV
run_check_mount_test_dev
- run_check $SUDO_HELPER $TOP/btrfs receive -v -f "$fstr" "$TEST_MNT"
- run_check $SUDO_HELPER $TOP/btrfs receive -v -f "$istr" "$TEST_MNT"
+ run_check $SUDO_HELPER $TOP/btrfs receive "$@" -v -f "$fstr" "$TEST_MNT"
+ run_check $SUDO_HELPER $TOP/btrfs receive "$@" -v -f "$istr" "$TEST_MNT"
run_check_umount_test_dev
run_check rm -f -- "$fstr" "$istr"
@@ -136,8 +138,8 @@ test_incr_simple_stream() {
run_check $TOP/mkfs.btrfs -f $TEST_DEV
run_check_mount_test_dev
- run_check $SUDO_HELPER $TOP/btrfs receive -v -f "$fstr" "$TEST_MNT"
- run_check $SUDO_HELPER $TOP/btrfs receive -v -f "$istr" "$TEST_MNT"
+ run_check $SUDO_HELPER $TOP/btrfs receive "$@" -v -f "$fstr" "$TEST_MNT"
+ run_check $SUDO_HELPER $TOP/btrfs receive "$@" -v -f "$istr" "$TEST_MNT"
run_check_umount_test_dev
run_check rm -f -- "$fstr" "$istr"
@@ -147,3 +149,9 @@ test_full_empty_stream
test_full_simple_stream
test_incr_empty_stream
test_incr_simple_stream
+
+extra_opt=-e
+test_full_empty_stream $extra_opt
+test_full_simple_stream $extra_opt
+test_incr_empty_stream $extra_opt
+test_incr_simple_stream $extra_opt
diff --git a/tests/misc-tests/019-receive-clones-on-munted-subvol/test.sh b/tests/misc-tests/019-receive-clones-on-munted-subvol/test.sh
new file mode 100755
index 00000000..182b0cf9
--- /dev/null
+++ b/tests/misc-tests/019-receive-clones-on-munted-subvol/test.sh
@@ -0,0 +1,127 @@
+#! /bin/bash
+#
+# Test that an incremental send operation works when in both snapshots there are
+# two directory inodes that have the same number but different generations and
+# have an entry with the same name that corresponds to different inodes in each
+# snapshot.
+
+source $TOP/tests/common
+
+check_prereq mkfs.btrfs
+check_prereq btrfs
+check_prereq fssum
+
+setup_root_helper
+prepare_test_dev
+
+FSSUM_PROG="$TOP/fssum"
+srcdir=./send-test-dir
+rm -rf "$srcdir"
+mkdir -p "$srcdir"
+run_check chmod a+rw "$srcdir"
+
+run_check "$TOP/mkfs.btrfs" -f "$TEST_DEV"
+run_check_mount_test_dev
+
+BLOCK_SIZE=$(stat -f -c %S "$TEST_MNT")
+
+run_check $SUDO_HELPER "$TOP/btrfs" subvolume create "$TEST_MNT/foo"
+run_check $SUDO_HELPER "$TOP/btrfs" subvolume create "$TEST_MNT/bar"
+run_check $SUDO_HELPER "$TOP/btrfs" subvolume create "$TEST_MNT/baz"
+run_check $SUDO_HELPER "$TOP/btrfs" subvolume create "$TEST_MNT/snap"
+
+tr '\000' 'A' < /dev/null |
+ run_check $SUDO_HELPER dd of=$TEST_MNT/foo/file_a bs=$BLOCK_SIZE count=32
+tr '\000' 'B' < /dev/null |
+ run_check $SUDO_HELPER dd of=$TEST_MNT/bar/file_b bs=$BLOCK_SIZE count=32
+
+run_check $SUDO_HELPER cp --reflink=always "$TEST_MNT/foo/file_a" "$TEST_MNT/baz/file_a"
+run_check $SUDO_HELPER cp --reflink=always "$TEST_MNT/bar/file_b" "$TEST_MNT/baz/file_b"
+
+# Filesystem looks like:
+#
+# .
+# |--- foo/
+# | |--- file_a
+# |--- bar/
+# | |--- file_b
+# |--- baz/
+# | |--- file_a (clone of "foo/file_a")
+# | |--- file_b (clone of "bar/file_b")
+# |--- snap/
+#
+
+# create snapshots and send streams
+
+run_check $SUDO_HELPER "$TOP/btrfs" subvolume snapshot -r "$TEST_MNT/foo" "$TEST_MNT/snap/foo.0"
+run_check $SUDO_HELPER "$TOP/btrfs" send -f "$srcdir/foo.0.snap" "$TEST_MNT/snap/foo.0"
+
+run_check $SUDO_HELPER "$TOP/btrfs" subvolume snapshot -r "$TEST_MNT/bar" "$TEST_MNT/snap/bar.0"
+run_check $SUDO_HELPER "$TOP/btrfs" send -f "$srcdir/bar.0.snap" "$TEST_MNT/snap/bar.0"
+
+run_check $SUDO_HELPER cp --reflink=always "$TEST_MNT/foo/file_a" "$TEST_MNT/foo/file_a.clone"
+run_check $SUDO_HELPER rm -f -- "$TEST_MNT/foo/file_a"
+
+run_check $SUDO_HELPER "$TOP/btrfs" subvolume snapshot -r "$TEST_MNT/foo" \
+ "$TEST_MNT/snap/foo.1"
+run_check $SUDO_HELPER "$TOP/btrfs" send -p "$TEST_MNT/snap/foo.0" -f "$srcdir/foo.1.snap" \
+ "$TEST_MNT/snap/foo.1"
+
+run_check $SUDO_HELPER "$TOP/btrfs" subvolume snapshot -r "$TEST_MNT/baz" \
+ "$TEST_MNT/snap/baz.0"
+run_check $SUDO_HELPER "$TOP/btrfs" send -p "$TEST_MNT/snap/foo.1" \
+ -c "$TEST_MNT/snap/bar.0" -f "$srcdir/baz.0.snap" \
+ "$TEST_MNT/snap/baz.0"
+
+# Filesystem looks like:
+#
+# .
+# |--- foo/
+# | |--- file_a.clone (clone of "foo/file_a")
+# |--- bar/
+# | |--- file_b
+# |--- baz/
+# | |--- file_a (clone of "foo/file_a")
+# | |--- file_b (clone of "bar/file_b")
+# |--- snap/
+# |--- bar.0/ (snapshot of "bar")
+# | |--- file_b
+# |--- foo.0/ (snapshot of "foo")
+# | |--- file_a
+# |--- foo.1/ (snapshot of "foo")
+# | |--- file_a.clone
+# |--- baz.0/ (snapshot of "baz")
+# | |--- file_a
+# | |--- file_b
+
+run_check $FSSUM_PROG -A -f -w "$srcdir/foo.0.fssum" "$TEST_MNT/snap/foo.0"
+run_check $FSSUM_PROG -A -f -w "$srcdir/foo.1.fssum" "$TEST_MNT/snap/foo.1"
+run_check $FSSUM_PROG -A -f -w "$srcdir/bar.0.fssum" "$TEST_MNT/snap/bar.0"
+run_check $FSSUM_PROG -A -f -w "$srcdir/baz.0.fssum" "$TEST_MNT/snap/baz.0"
+
+run_check_umount_test_dev
+run_check "$TOP/mkfs.btrfs" -f "$TEST_DEV"
+run_check_mount_test_dev
+run_check $SUDO_HELPER "$TOP/btrfs" subvolume create "$TEST_MNT/dest"
+run_check_umount_test_dev
+run_check_mount_test_dev -o subvol=/dest
+
+run_check $SUDO_HELPER "$TOP/btrfs" receive -f "$srcdir/foo.0.snap" "$TEST_MNT"
+run_check $SUDO_HELPER "$TOP/btrfs" receive -f "$srcdir/bar.0.snap" "$TEST_MNT"
+
+# if "dest/" is not correctly stripped from the beginning of the path to
+# "foo.0" in the target fs, we would get an error here because the clone source
+# "foo.0/file_a" for "foo.1/file_a.clone" can't be found.
+run_check $SUDO_HELPER "$TOP/btrfs" receive -f "$srcdir/foo.1.snap" "$TEST_MNT"
+
+# same here, but with send -c instead of -p
+run_check $SUDO_HELPER "$TOP/btrfs" receive -f "$srcdir/baz.0.snap" "$TEST_MNT"
+
+run_check $FSSUM_PROG -r "$srcdir/foo.0.fssum" "$TEST_MNT/foo.0"
+run_check $FSSUM_PROG -r "$srcdir/foo.1.fssum" "$TEST_MNT/foo.1"
+run_check $FSSUM_PROG -r "$srcdir/bar.0.fssum" "$TEST_MNT/bar.0"
+run_check $FSSUM_PROG -r "$srcdir/baz.0.fssum" "$TEST_MNT/baz.0"
+
+run_check_umount_test_dev
+
+rm -rf -- "$srcdir"
diff --git a/tests/misc-tests/020-fix-superblock-corruption/test.sh b/tests/misc-tests/020-fix-superblock-corruption/test.sh
new file mode 100755
index 00000000..77c1a5aa
--- /dev/null
+++ b/tests/misc-tests/020-fix-superblock-corruption/test.sh
@@ -0,0 +1,34 @@
+#!/bin/bash
+#
+# Corrupt primary superblock and restore it using backup superblock.
+
+source "$TOP/tests/common"
+
+check_prereq btrfs-select-super
+check_prereq btrfs
+
+setup_root_helper
+prepare_test_dev
+
+FIRST_SUPERBLOCK_OFFSET=65536
+
+test_superblock_restore()
+{
+ run_check $SUDO_HELPER "$TOP/mkfs.btrfs" -f "$TEST_DEV"
+
+ # Corrupt superblock checksum
+ run_check $SUDO_HELPER dd if=/dev/zero of="$TEST_DEV" \
+ seek="$FIRST_SUPERBLOCK_OFFSET" bs=1 count=4 conv=notrunc
+
+ # Run btrfs check to detect corruption
+ run_mayfail "$TOP/btrfs" check "$TEST_DEV" && \
+ _fail "btrfs check should detect corruption"
+
+ # Copy backup superblock to primary
+ run_check "$TOP/btrfs-select-super" -s 1 "$TEST_DEV"
+
+ # Perform btrfs check
+ run_check "$TOP/btrfs" check "$TEST_DEV"
+}
+
+test_superblock_restore
diff --git a/tests/misc-tests/021-image-multi-devices/test.sh b/tests/misc-tests/021-image-multi-devices/test.sh
new file mode 100755
index 00000000..abf67f90
--- /dev/null
+++ b/tests/misc-tests/021-image-multi-devices/test.sh
@@ -0,0 +1,50 @@
+#!/bin/bash
+# Test btrfs-image with multiple devices filesystem and verify that restoring
+# the created image works against a single device.
+
+source "$TOP/tests/common"
+
+check_prereq btrfs-image
+check_prereq mkfs.btrfs
+check_prereq btrfs
+
+setup_root_helper
+
+rm -f dev1 dev2
+run_check truncate -s 2G dev1
+run_check truncate -s 2G dev2
+chmod a+w dev1 dev2
+
+loop1=$(run_check_stdout $SUDO_HELPER losetup --find --show dev1)
+loop2=$(run_check_stdout $SUDO_HELPER losetup --find --show dev2)
+
+# Create the test file system.
+
+run_check $SUDO_HELPER "$TOP/mkfs.btrfs" -f $loop1 $loop2
+run_check $SUDO_HELPER mount $loop1 "$TEST_MNT"
+run_check $SUDO_HELPER dd bs=1M count=1 if=/dev/zero "of=$TEST_MNT/foobar"
+orig_md5=$(run_check_stdout md5sum "$TEST_MNT/foobar" | cut -d ' ' -f 1)
+run_check $SUDO_HELPER umount "$TEST_MNT"
+
+# Create the image to restore later.
+run_check $SUDO_HELPER "$TOP/btrfs-image" $loop1 "$IMAGE"
+
+# Wipe out the filesystem from the devices, restore the image on a single
+# device, check everything works and file foobar is there and with 1Mb of
+# zeroes.
+run_check $SUDO_HELPER wipefs -a $loop1
+run_check $SUDO_HELPER wipefs -a $loop2
+
+run_check $SUDO_HELPER $TOP/btrfs-image -r "$IMAGE" $loop1
+
+run_check $SUDO_HELPER mount $loop1 "$TEST_MNT"
+new_md5=$(run_check_stdout md5sum "$TEST_MNT/foobar" | cut -d ' ' -f 1)
+run_check $SUDO_HELPER umount "$TEST_MNT"
+
+# Cleanup loop devices.
+run_check $SUDO_HELPER losetup -d $loop1
+run_check $SUDO_HELPER losetup -d $loop2
+rm -f dev1 dev2
+
+# Compare the file digests.
+[ $orig_md5 == $new_md5 ] || _fail "File digests do not match"