diff options
author | Dimitri John Ledkov <xnox@ubuntu.com> | 2018-07-23 14:32:01 +0100 |
---|---|---|
committer | Dimitri John Ledkov <xnox@ubuntu.com> | 2018-07-23 14:32:01 +0100 |
commit | 3b9cf4c8cda0818e4d3f9892ece9f7d99de13b03 (patch) | |
tree | 59446f505b5bb3b31b1b3bb81af997dda68407c2 /tests | |
parent | f22f0302575d3a167ee550470c922de82e34342b (diff) |
New upstream release.debian/4.17-1archive/debian/4.17-1
Diffstat (limited to 'tests')
20 files changed, 214 insertions, 12 deletions
diff --git a/tests/cli-tests.sh b/tests/cli-tests.sh index 9e0fbae4..d302a93e 100755 --- a/tests/cli-tests.sh +++ b/tests/cli-tests.sh @@ -52,7 +52,7 @@ do name=$(basename "$i") cd "$i" if [ -x test.sh ]; then - echo "=== Entering $i" >> "$RESULTS" + echo "=== START TEST $i" >> "$RESULTS" echo " [TEST/cli] $name" ./test.sh if [ $? -ne 0 ]; then diff --git a/tests/common b/tests/common index 4b266c5b..7e4e09df 100644 --- a/tests/common +++ b/tests/common @@ -136,7 +136,7 @@ run_check() cmd=$(eval echo "\${$spec}") spec=$(_cmd_spec "${@:$spec}") set -- "${@:1:$(($ins-1))}" $spec "${@: $ins}" - echo "############### $@" >> "$RESULTS" 2>&1 + echo "====== RUN CHECK $@" >> "$RESULTS" 2>&1 if [[ $TEST_LOG =~ tty ]]; then echo "CMD: $@" > /dev/tty; fi if [ "$1" = 'root_helper' ]; then "$@" >> "$RESULTS" 2>&1 || _fail "failed: $@" @@ -158,7 +158,7 @@ run_check_stdout() cmd=$(eval echo "\${$spec}") spec=$(_cmd_spec "${@:$spec}") set -- "${@:1:$(($ins-1))}" $spec "${@: $ins}" - echo "############### $@" >> "$RESULTS" 2>&1 + echo "====== RUN CHECK $@" >> "$RESULTS" 2>&1 if [[ $TEST_LOG =~ tty ]]; then echo "CMD(stdout): $@" > /dev/tty; fi if [ "$1" = 'root_helper' ]; then "$@" 2>&1 | tee -a "$RESULTS" @@ -185,7 +185,7 @@ run_mayfail() cmd=$(eval echo "\${$spec}") spec=$(_cmd_spec "${@:$spec}") set -- "${@:1:$(($ins-1))}" $spec "${@: $ins}" - echo "############### $@" >> "$RESULTS" 2>&1 + echo "====== RUN MAYFAIL $@" >> "$RESULTS" 2>&1 if [[ $TEST_LOG =~ tty ]]; then echo "CMD(mayfail): $@" > /dev/tty; fi if [ "$1" = 'root_helper' ]; then "$@" >> "$RESULTS" 2>&1 @@ -226,7 +226,7 @@ run_mustfail() cmd=$(eval echo "\${$spec}") spec=$(_cmd_spec "${@:$spec}") set -- "${@:1:$(($ins-1))}" $spec "${@: $ins}" - echo "############### $@" >> "$RESULTS" 2>&1 + echo "====== RUN MUSTFAIL $@" >> "$RESULTS" 2>&1 if [[ $TEST_LOG =~ tty ]]; then echo "CMD(mustfail): $@" > /dev/tty; fi if [ "$1" = 'root_helper' ]; then "$@" >> "$RESULTS" 2>&1 @@ -272,7 +272,7 @@ run_mustfail_stdout() cmd=$(eval echo "\${$spec}") spec=$(_cmd_spec "${@:$spec}") set -- "${@:1:$(($ins-1))}" $spec "${@: $ins}" - echo "############### $@" >> "$RESULTS" 2>&1 + echo "====== RUN MUSTFAIL $@" >> "$RESULTS" 2>&1 if [[ $TEST_LOG =~ tty ]]; then echo "CMD(mustfail): $@" > /dev/tty; fi if [ "$1" = 'root_helper' ]; then "$@" 2>&1 > "$tmp_output" diff --git a/tests/convert-tests.sh b/tests/convert-tests.sh index 4bc915db..f6c94043 100755 --- a/tests/convert-tests.sh +++ b/tests/convert-tests.sh @@ -58,7 +58,7 @@ run_one_test() { testname=$(basename "$testdir") echo " [TEST/conv] $testname" cd "$testdir" - echo "=== Entering $testname" >> "$RESULTS" + echo "=== START TEST $testname" >> "$RESULTS" if [ -x test.sh ]; then # Only support custom test scripts ./test.sh diff --git a/tests/fsck-tests.sh b/tests/fsck-tests.sh index 14287bbe..8fbc2b4b 100755 --- a/tests/fsck-tests.sh +++ b/tests/fsck-tests.sh @@ -54,7 +54,7 @@ run_one_test() { testname="$1" echo " [TEST/fsck] $(basename $testname)" cd "$testname" - echo "=== Entering $testname" >> "$RESULTS" + echo "=== START TEST $testname" >> "$RESULTS" if [ -x test.sh ]; then # Type 2 ./test.sh diff --git a/tests/fsck-tests/014-no-extent-info/.lowmem_repairable b/tests/fsck-tests/014-no-extent-info/.lowmem_repairable new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/tests/fsck-tests/014-no-extent-info/.lowmem_repairable diff --git a/tests/fsck-tests/014-no-extent-info/no_extent.raw.xz b/tests/fsck-tests/014-no-extent-info/no_extent.raw.xz Binary files differnew file mode 100644 index 00000000..6e568a9c --- /dev/null +++ b/tests/fsck-tests/014-no-extent-info/no_extent.raw.xz diff --git a/tests/fsck-tests/014-no-extent-info/default_case.img b/tests/fsck-tests/014-no-extent-info/no_extent_bad_dev.img Binary files differindex 1ff27434..1ff27434 100644 --- a/tests/fsck-tests/014-no-extent-info/default_case.img +++ b/tests/fsck-tests/014-no-extent-info/no_extent_bad_dev.img diff --git a/tests/fsck-tests/031-metadatadump-check-data-csum/test.sh b/tests/fsck-tests/031-metadatadump-check-data-csum/test.sh index 30b0b7a3..e9b2d5c6 100755 --- a/tests/fsck-tests/031-metadatadump-check-data-csum/test.sh +++ b/tests/fsck-tests/031-metadatadump-check-data-csum/test.sh @@ -16,6 +16,8 @@ run_check_mount_test_dev run_check $SUDO_HELPER dd if=/dev/urandom of="$TEST_MNT/file" bs=4k count=16 run_check_umount_test_dev +touch restored_image +chmod a+w restored_image run_check $SUDO_HELPER "$TOP/btrfs-image" "$TEST_DEV" "restored_image" # use prepare_test_dev() to wipe all existing data on $TEST_DEV @@ -27,4 +29,4 @@ run_check $SUDO_HELPER "$TOP/btrfs-image" -r "restored_image" "$TEST_DEV" # Should not report any error run_check "$TOP/btrfs" check --check-data-csum "$TEST_DEV" -rm -rf -- "restored_image*" +rm -rf -- "restored_image" diff --git a/tests/fsck-tests/032-corrupted-qgroup/qgroup_corrupted.img b/tests/fsck-tests/032-corrupted-qgroup/qgroup_corrupted.img Binary files differnew file mode 100644 index 00000000..a19a3035 --- /dev/null +++ b/tests/fsck-tests/032-corrupted-qgroup/qgroup_corrupted.img diff --git a/tests/fsck-tests/032-corrupted-qgroup/test.sh b/tests/fsck-tests/032-corrupted-qgroup/test.sh new file mode 100755 index 00000000..4bfa3601 --- /dev/null +++ b/tests/fsck-tests/032-corrupted-qgroup/test.sh @@ -0,0 +1,19 @@ +#!/bin/bash +# Check if btrfs check can handle valid orphan items. +# Orphan item is a marker for deleted inodes that were open at the time of +# deletion. Orphan inode/root is not referenced and will have an orphan +# item, which should not be reported as error. + +source "$TEST_TOP/common" + +check_prereq btrfs + +check_image() { + run_mustfail "btrfs check failed to detect qgroup corruption" \ + "$TOP/btrfs" check "$1" + # Above command can fail due to other bugs, so add extra check to + # ensure we can fix qgroup without problems. + run_check "$TOP/btrfs" check --repair "$1" +} + +check_all_images diff --git a/tests/fsck-tests/033-lowmem-collission-dir-items/test.sh b/tests/fsck-tests/033-lowmem-collission-dir-items/test.sh new file mode 100755 index 00000000..60f34b25 --- /dev/null +++ b/tests/fsck-tests/033-lowmem-collission-dir-items/test.sh @@ -0,0 +1,24 @@ +#!/bin/bash +# Ensure that running btrfs check on a fs which has name collisions of files +# doesn't result in false positives. This test is specifically targeted at +# lowmem mode. + +source "$TEST_TOP/common" + +check_prereq btrfs +check_prereq mkfs.btrfs + +setup_root_helper +prepare_test_dev + +run_check $SUDO_HELPER "$TOP/mkfs.btrfs" -f "$TEST_DEV" +run_check_mount_test_dev + +# Create 2 files whose names collide +run_check $SUDO_HELPER touch "$TEST_MNT/5ab4e206~~~~~~~~XVT1U3ZF647YS2PD4AKAG826" +run_check $SUDO_HELPER touch "$TEST_MNT/5ab4e26a~~~~~~~~AP1C3VQBE79IJOTVOEZIR9YU" + +run_check_umount_test_dev + +# The fs is clean so lowmem shouldn't produce any warnings +run_check "$TOP/btrfs" check --readonly "$TEST_DEV" diff --git a/tests/fsck-tests/034-bad-inode-flags/default_case.img b/tests/fsck-tests/034-bad-inode-flags/default_case.img Binary files differnew file mode 100644 index 00000000..43a2a6f6 --- /dev/null +++ b/tests/fsck-tests/034-bad-inode-flags/default_case.img diff --git a/tests/fsck-tests/034-bad-inode-flags/test.sh b/tests/fsck-tests/034-bad-inode-flags/test.sh new file mode 100755 index 00000000..4bdc2bf0 --- /dev/null +++ b/tests/fsck-tests/034-bad-inode-flags/test.sh @@ -0,0 +1,15 @@ +#!/bin/bash +# In order to confirm that 'btrfs check' supports checking symlinks +# with immutable/append attributes that are not possible to set by standard +# syscall or ioctl so they're handled as corruption + +source "$TEST_TOP/common" + +check_prereq btrfs + +check_image() { + run_mustfail "check should report errors about inode flags" \ + $SUDO_HELPER "$TOP/btrfs" check "$1" +} + +check_all_images diff --git a/tests/fuzz-tests.sh b/tests/fuzz-tests.sh index 7bc620f0..ae738710 100755 --- a/tests/fuzz-tests.sh +++ b/tests/fuzz-tests.sh @@ -51,7 +51,7 @@ do name=$(basename "$i") cd $i if [ -x test.sh ]; then - echo "=== Entering $i" >> "$RESULTS" + echo "=== START TEST $i" >> "$RESULTS" echo " [TEST/fuzz] $name" ./test.sh if [ $? -ne 0 ]; then diff --git a/tests/misc-tests.sh b/tests/misc-tests.sh index dad397ec..3e7b9e9b 100755 --- a/tests/misc-tests.sh +++ b/tests/misc-tests.sh @@ -57,7 +57,7 @@ for i in $(find "$TEST_TOP/misc-tests" -maxdepth 1 -mindepth 1 -type d \ do echo " [TEST/misc] $(basename $i)" cd "$i" - echo "=== Entering $i" >> "$RESULTS" + echo "=== START TEST $i" >> "$RESULTS" if [ -x test.sh ]; then ./test.sh if [ $? -ne 0 ]; then diff --git a/tests/misc-tests/031-qgroup-parent-child-relation/test.sh b/tests/misc-tests/031-qgroup-parent-child-relation/test.sh new file mode 100755 index 00000000..2d66fd60 --- /dev/null +++ b/tests/misc-tests/031-qgroup-parent-child-relation/test.sh @@ -0,0 +1,27 @@ +#!/bin/bash +# Test that btrfs 'qgroup show' outputs the correct parent-child qgroup relation + +source "$TEST_TOP/common" + +check_prereq mkfs.btrfs +check_prereq btrfs + +setup_root_helper +prepare_test_dev + +run_check $SUDO_HELPER "$TOP/mkfs.btrfs" -f "$TEST_DEV" +run_check_mount_test_dev + +run_check $SUDO_HELPER "$TOP/btrfs" quota enable "$TEST_MNT" +run_check $SUDO_HELPER "$TOP/btrfs" qgroup create 1/0 "$TEST_MNT" +run_check $SUDO_HELPER "$TOP/btrfs" qgroup assign 0/5 1/0 "$TEST_MNT" +run_check $SUDO_HELPER "$TOP/btrfs" quota rescan -w "$TEST_MNT" + +run_check_stdout $SUDO_HELPER "$TOP/btrfs" qgroup show --sort=-qgroupid \ + -p "$TEST_MNT" | tail -n 1 | grep -q "1/0" \ + || _fail "parent qgroup check failed, please check the log" +run_check_stdout $SUDO_HELPER "$TOP/btrfs" qgroup show --sort=qgroupid \ + -c "$TEST_MNT" | tail -n 1 | grep -q "0/5" \ + || _fail "child qgroup check failed, please check the log" + +run_check_umount_test_dev "$TEST_MNT" diff --git a/tests/misc-tests/032-bad-item-ptr/bad_item_ptr.raw.xz b/tests/misc-tests/032-bad-item-ptr/bad_item_ptr.raw.xz Binary files differnew file mode 100644 index 00000000..7cf2e89f --- /dev/null +++ b/tests/misc-tests/032-bad-item-ptr/bad_item_ptr.raw.xz diff --git a/tests/misc-tests/032-bad-item-ptr/test.sh b/tests/misc-tests/032-bad-item-ptr/test.sh new file mode 100755 index 00000000..cfbfe1a5 --- /dev/null +++ b/tests/misc-tests/032-bad-item-ptr/test.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# +# Verify that btrfs inspect dump-tree won't segfault on heavily corrupted +# tree leaf +# Issue: #128 + +source "$TEST_TOP/common" + +check_prereq btrfs + +check_image() { + run_check "$TOP/btrfs" inspect-internal dump-tree "$1" + run_mustfail "btrfs check failed to detect such corruption" \ + "$TOP/btrfs" check "$1" +} + +check_all_images diff --git a/tests/mkfs-tests.sh b/tests/mkfs-tests.sh index 2ced4ac9..e76a805b 100755 --- a/tests/mkfs-tests.sh +++ b/tests/mkfs-tests.sh @@ -52,7 +52,7 @@ for i in $(find "$TEST_TOP/mkfs-tests" -maxdepth 1 -mindepth 1 -type d \ do echo " [TEST/mkfs] $(basename $i)" cd "$i" - echo "=== Entering $i" >> "$RESULTS" + echo "=== START TEST $i" >> "$RESULTS" if [ -x test.sh ]; then ./test.sh if [ $? -ne 0 ]; then diff --git a/tests/mkfs-tests/017-small-backing-size-thin-provision-device/test.sh b/tests/mkfs-tests/017-small-backing-size-thin-provision-device/test.sh new file mode 100755 index 00000000..32640ce5 --- /dev/null +++ b/tests/mkfs-tests/017-small-backing-size-thin-provision-device/test.sh @@ -0,0 +1,98 @@ +#!/bin/bash +# mkfs.btrfs must fail on a thin provision device with very small backing size +# and big virtual size. + +source "$TEST_TOP/common" + +check_prereq mkfs.btrfs +check_global_prereq udevadm +check_global_prereq dmsetup + +setup_root_helper +prepare_test_dev + +# Backing data dev +DMTHIN_DATA_NAME="btrfs-progs-thin-data" +DMTHIN_DATA_DEV="/dev/mapper/$DMTHIN_DATA_NAME" +# Backing metadata dev +DMTHIN_META_NAME="btrfs-progs-thin-meta" +DMTHIN_META_DEV="/dev/mapper/$DMTHIN_META_NAME" +# Backing pool dev (combination of above) +DMTHIN_POOL_NAME="btrfs-progs-thin-pool" +DMTHIN_POOL_DEV="/dev/mapper/$DMTHIN_POOL_NAME" +# Thin volume +DMTHIN_VOL_NAME="btrfs-progs-thin-vol" +DMTHIN_VOL_DEV="/dev/mapper/$DMTHIN_VOL_NAME" + +dmthin_cleanup() +{ + # wait for device to be fully settled + run_check $SUDO_HELPER udevadm settle + run_check $SUDO_HELPER dmsetup remove "$DMTHIN_VOL_NAME" + run_check $SUDO_HELPER dmsetup remove "$DMTHIN_POOL_NAME" + run_check $SUDO_HELPER dmsetup remove "$DMTHIN_META_NAME" + run_check $SUDO_HELPER dmsetup remove "$DMTHIN_DATA_NAME" +} + +sector_size=512 # in bytes +data_dev_size=$((1 * 1024 * 1024 / $sector_size)) # 1M +virtual_size=$((1 * 1024 * 1024 * 1024 * 1024 / $sector_size)) # 1T +cluster_size=1024 # 512k in sectors +low_water=$((104857600 / $cluster_size/ $sector_size)) # 100M / $cluster_size, in sectors + +# Need to make linear metadata and data devs. From kernel docs: +# As a guide, we suggest you calculate the number of bytes to use in the +# metadata device as 48 * $data_dev_size / $data_block_size but round it up +# to 2MB (4096 sectors) if the answer is smaller. +# So do that: +meta_dev_size=$((48 * $data_dev_size / $cluster_size)) +if [ "$meta_dev_size" -lt "4096" ]; then + meta_dev_size=4096 # 2MB +fi + +meta_dev_offset=0 +total_data_dev_size=$(($meta_dev_offset + $meta_dev_size + $data_dev_size)) + +run_check truncate -s0 img +chmod a+w img +run_check truncate -s"$(($total_data_dev_size * $sector_size))" img + +dm_backing_dev=`run_check_stdout $SUDO_HELPER losetup --find --show img` + +if ! [ -b "$dm_backing_dev" ]; then + _fail "cannot create backing device" +fi + +# Metadata device +DMTHIN_META_TABLE="0 $meta_dev_size linear $dm_backing_dev $meta_dev_offset" +run_check $SUDO_HELPER dmsetup create "$DMTHIN_META_NAME" --table "$DMTHIN_META_TABLE" + +# Data device +data_dev_offset=$((meta_dev_offset + $meta_dev_size)) +DMTHIN_DATA_TABLE="0 $data_dev_size linear $dm_backing_dev $data_dev_offset" +run_check $SUDO_HELPER dmsetup create "$DMTHIN_DATA_NAME" --table "$DMTHIN_DATA_TABLE" + +# Zap the pool metadata dev +run_check $SUDO_HELPER dd if=/dev/zero of="$DMTHIN_META_DEV" bs=4096 count=1 + +# Thin pool +# "start length thin-pool metadata_dev data_dev data_block_size low_water_mark" +DMTHIN_POOL_TABLE="0 $data_dev_size thin-pool $DMTHIN_META_DEV $DMTHIN_DATA_DEV $cluster_size $low_water" +run_check $SUDO_HELPER dmsetup create "$DMTHIN_POOL_NAME" --table "$DMTHIN_POOL_TABLE" + +# Thin volume +pool_id=$RANDOM +run_check $SUDO_HELPER dmsetup message "$DMTHIN_POOL_DEV" 0 "create_thin $pool_id" + +# start length thin pool_dev dev_id [external_origin_dev] +DMTHIN_VOL_TABLE="0 $virtual_size thin $DMTHIN_POOL_DEV $pool_id" +run_check $SUDO_HELPER dmsetup create "$DMTHIN_VOL_NAME" --table "$DMTHIN_VOL_TABLE" + +# mkfs.btrfs should fail due to the small backing device, the initial discard +# is disabled +run_mustfail "should fail for small backing size thin provision device" \ + $SUDO_HELPER "$TOP/mkfs.btrfs" -K -f "$DMTHIN_VOL_DEV" + +dmthin_cleanup +run_mayfail $SUDO_HELPER losetup -d "$dm_backing_dev" +rm -- img |