diff options
Diffstat (limited to 'tests/misc-tests')
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" |