summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorDimitri John Ledkov <xnox@ubuntu.com>2018-07-23 14:32:01 +0100
committerDimitri John Ledkov <xnox@ubuntu.com>2018-07-23 14:32:01 +0100
commit3b9cf4c8cda0818e4d3f9892ece9f7d99de13b03 (patch)
tree59446f505b5bb3b31b1b3bb81af997dda68407c2 /tests
parentf22f0302575d3a167ee550470c922de82e34342b (diff)
Diffstat (limited to 'tests')
-rwxr-xr-xtests/cli-tests.sh2
-rw-r--r--tests/common10
-rwxr-xr-xtests/convert-tests.sh2
-rwxr-xr-xtests/fsck-tests.sh2
-rw-r--r--tests/fsck-tests/014-no-extent-info/.lowmem_repairable0
-rw-r--r--tests/fsck-tests/014-no-extent-info/no_extent.raw.xzbin0 -> 28084 bytes
-rw-r--r--tests/fsck-tests/014-no-extent-info/no_extent_bad_dev.img (renamed from tests/fsck-tests/014-no-extent-info/default_case.img)bin4096 -> 4096 bytes
-rwxr-xr-xtests/fsck-tests/031-metadatadump-check-data-csum/test.sh4
-rw-r--r--tests/fsck-tests/032-corrupted-qgroup/qgroup_corrupted.imgbin0 -> 3072 bytes
-rwxr-xr-xtests/fsck-tests/032-corrupted-qgroup/test.sh19
-rwxr-xr-xtests/fsck-tests/033-lowmem-collission-dir-items/test.sh24
-rw-r--r--tests/fsck-tests/034-bad-inode-flags/default_case.imgbin0 -> 4096 bytes
-rwxr-xr-xtests/fsck-tests/034-bad-inode-flags/test.sh15
-rwxr-xr-xtests/fuzz-tests.sh2
-rwxr-xr-xtests/misc-tests.sh2
-rwxr-xr-xtests/misc-tests/031-qgroup-parent-child-relation/test.sh27
-rw-r--r--tests/misc-tests/032-bad-item-ptr/bad_item_ptr.raw.xzbin0 -> 21964 bytes
-rwxr-xr-xtests/misc-tests/032-bad-item-ptr/test.sh17
-rwxr-xr-xtests/mkfs-tests.sh2
-rwxr-xr-xtests/mkfs-tests/017-small-backing-size-thin-provision-device/test.sh98
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
new file mode 100644
index 00000000..6e568a9c
--- /dev/null
+++ b/tests/fsck-tests/014-no-extent-info/no_extent.raw.xz
Binary files differ
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
index 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
Binary files differ
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
new file mode 100644
index 00000000..a19a3035
--- /dev/null
+++ b/tests/fsck-tests/032-corrupted-qgroup/qgroup_corrupted.img
Binary files differ
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
new file mode 100644
index 00000000..43a2a6f6
--- /dev/null
+++ b/tests/fsck-tests/034-bad-inode-flags/default_case.img
Binary files differ
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
new file mode 100644
index 00000000..7cf2e89f
--- /dev/null
+++ b/tests/misc-tests/032-bad-item-ptr/bad_item_ptr.raw.xz
Binary files differ
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