diff options
Diffstat (limited to 'tests/mkfs-tests')
13 files changed, 171 insertions, 10 deletions
diff --git a/tests/mkfs-tests/001-basic-profiles/test.sh b/tests/mkfs-tests/001-basic-profiles/test.sh index 854ee007..b84016f7 100755 --- a/tests/mkfs-tests/001-basic-profiles/test.sh +++ b/tests/mkfs-tests/001-basic-profiles/test.sh @@ -2,7 +2,7 @@ # test various blockgroup profile combinations, use loop devices as block # devices -source $TOP/tests/common +source "$TEST_TOP/common" check_prereq mkfs.btrfs check_prereq btrfs diff --git a/tests/mkfs-tests/002-no-force-mixed-on-small-volume/test.sh b/tests/mkfs-tests/002-no-force-mixed-on-small-volume/test.sh index 37846234..4bc9c262 100755 --- a/tests/mkfs-tests/002-no-force-mixed-on-small-volume/test.sh +++ b/tests/mkfs-tests/002-no-force-mixed-on-small-volume/test.sh @@ -2,7 +2,7 @@ # # Verify that we do not force mixed block groups on small volumes anymore -source $TOP/tests/common +source "$TEST_TOP/common" check_prereq mkfs.btrfs diff --git a/tests/mkfs-tests/003-mixed-with-wrong-nodesize/test.sh b/tests/mkfs-tests/003-mixed-with-wrong-nodesize/test.sh index 074fc22e..f5327338 100755 --- a/tests/mkfs-tests/003-mixed-with-wrong-nodesize/test.sh +++ b/tests/mkfs-tests/003-mixed-with-wrong-nodesize/test.sh @@ -2,7 +2,7 @@ # # Mixed mode needs equal sectorsize and nodesize -source $TOP/tests/common +source "$TEST_TOP/common" check_prereq mkfs.btrfs diff --git a/tests/mkfs-tests/004-rootdir-keeps-size/test.sh b/tests/mkfs-tests/004-rootdir-keeps-size/test.sh index 7038c8ea..4a84e6db 100755 --- a/tests/mkfs-tests/004-rootdir-keeps-size/test.sh +++ b/tests/mkfs-tests/004-rootdir-keeps-size/test.sh @@ -1,7 +1,7 @@ #!/bin/bash # make sure that mkfs.btrfs --rootsize does not change size of the image -source $TOP/tests/common +source "$TEST_TOP/common" check_prereq mkfs.btrfs @@ -16,7 +16,7 @@ test_mkfs_with_size() { run_check truncate -s$size $TEST_DEV imgsize=$(run_check_stdout stat --format=%s $TEST_DEV) run_check $SUDO_HELPER $TOP/mkfs.btrfs -f \ - --rootdir $TOP/Documentation \ + --rootdir $INTERNAL_BIN/Documentation \ $TEST_DEV tmp=$(run_check_stdout stat --format=%s $TEST_DEV) if ! [ "$imgsize" = "$tmp" ]; then diff --git a/tests/mkfs-tests/005-long-device-name-for-ssd/test.sh b/tests/mkfs-tests/005-long-device-name-for-ssd/test.sh index 5bdf50e0..55ce676e 100755 --- a/tests/mkfs-tests/005-long-device-name-for-ssd/test.sh +++ b/tests/mkfs-tests/005-long-device-name-for-ssd/test.sh @@ -1,7 +1,7 @@ #!/bin/bash # a long device name must pass the SSD test -source $TOP/tests/common +source "$TEST_TOP/common" check_prereq mkfs.btrfs diff --git a/tests/mkfs-tests/006-partitioned-loopdev/test.sh b/tests/mkfs-tests/006-partitioned-loopdev/test.sh index 0c77e5cd..06c254fd 100755 --- a/tests/mkfs-tests/006-partitioned-loopdev/test.sh +++ b/tests/mkfs-tests/006-partitioned-loopdev/test.sh @@ -1,7 +1,7 @@ #!/bin/bash # recognize partitioned loop devices -source $TOP/tests/common +source "$TEST_TOP/common" if ! losetup --help | grep -q 'partscan'; then _not_run "losetup --partscan not available" diff --git a/tests/mkfs-tests/007-mix-nodesize-sectorsize/test.sh b/tests/mkfs-tests/007-mix-nodesize-sectorsize/test.sh index 3980414f..f7e88c9a 100755 --- a/tests/mkfs-tests/007-mix-nodesize-sectorsize/test.sh +++ b/tests/mkfs-tests/007-mix-nodesize-sectorsize/test.sh @@ -1,7 +1,7 @@ #!/bin/bash # iterate over nodesize and sectorsize combinations -source $TOP/tests/common +source "$TEST_TOP/common" check_prereq mkfs.btrfs check_prereq btrfs diff --git a/tests/mkfs-tests/008-sectorsize-nodesize-combination/test.sh b/tests/mkfs-tests/008-sectorsize-nodesize-combination/test.sh index 955cd2b1..9cc2f9e0 100755 --- a/tests/mkfs-tests/008-sectorsize-nodesize-combination/test.sh +++ b/tests/mkfs-tests/008-sectorsize-nodesize-combination/test.sh @@ -4,7 +4,7 @@ # only do mkfs and fsck check, no mounting as # sub/multi-pagesize is not supported yet -source $TOP/tests/common +source "$TEST_TOP/common" check_prereq mkfs.btrfs check_prereq btrfs diff --git a/tests/mkfs-tests/009-special-files-for-rootdir/test.sh b/tests/mkfs-tests/009-special-files-for-rootdir/test.sh index d327a0d9..a94d5209 100755 --- a/tests/mkfs-tests/009-special-files-for-rootdir/test.sh +++ b/tests/mkfs-tests/009-special-files-for-rootdir/test.sh @@ -6,7 +6,7 @@ # # Note: sock type is skipped in this test -source "$TOP/tests/common" +source "$TEST_TOP/common" check_prereq mkfs.btrfs check_prereq btrfs diff --git a/tests/mkfs-tests/010-minimal-size/test.sh b/tests/mkfs-tests/010-minimal-size/test.sh new file mode 100755 index 00000000..62f8e16a --- /dev/null +++ b/tests/mkfs-tests/010-minimal-size/test.sh @@ -0,0 +1,63 @@ +#!/bin/bash +# test if the reported minimal size of mkfs.btrfs is valid + +source "$TOP/tests/common" + +check_prereq mkfs.btrfs +check_prereq btrfs + +setup_root_helper + +do_test() +{ + # 1M should be small enough to reliably fail, we use the output to get + # the minimal device size for the given option combination + prepare_test_dev 1M + output=$(run_mustfail_stdout "mkfs.btrfs for small image" \ + "$TOP/mkfs.btrfs" -f $@ "$TEST_DEV") + good_size=$(echo "$output" | grep -oP "(?<=is )\d+") + + prepare_test_dev "$good_size" + echo "Minimal device size is $good_size" >> "$RESULTS" + run_check $TOP/mkfs.btrfs -f $@ "$TEST_DEV" + run_check_mount_test_dev + run_check_umount_test_dev +} + +do_test -n 4k -m single -d single +do_test -n 4k -m single -d dup +do_test -n 4k -m dup -d single +do_test -n 4k -m dup -d dup + +do_test -n 8k -m single -d single +do_test -n 8k -m single -d dup +do_test -n 8k -m dup -d single +do_test -n 8k -m dup -d dup + +do_test -n 16k -m single -d single +do_test -n 16k -m single -d dup +do_test -n 16k -m dup -d single +do_test -n 16k -m dup -d dup + +# Temporary: disable the following tests as they fail inside travis but run +# fine otherwise. This is probably caused by kernel version, 4.4 fails and 4.14 +# is ok. +# +# root_helper mount -t btrfs -o loop /home/travis/build/kdave/btrfs-progs/tests/test.img /home/travis/build/kdave/btrfs-progs/tests/mnt +# mount: No space left on device +# failed: root_helper mount -t btrfs -o loop /home/travis/build/kdave/btrfs-progs/tests/test.img /home/travis/build/kdave/btrfs-progs/tests/mnt +# test failed for case 010-minimal-size +# +if [ "$TRAVIS" = true ]; then + exit 0 +fi + +do_test -n 32k -m single -d single +do_test -n 32k -m single -d dup +do_test -n 32k -m dup -d single +do_test -n 32k -m dup -d dup + +do_test -n 64k -m single -d single +do_test -n 64k -m single -d dup +do_test -n 64k -m dup -d single +do_test -n 64k -m dup -d dup diff --git a/tests/mkfs-tests/011-rootdir-create-file/test.sh b/tests/mkfs-tests/011-rootdir-create-file/test.sh new file mode 100755 index 00000000..c04f711d --- /dev/null +++ b/tests/mkfs-tests/011-rootdir-create-file/test.sh @@ -0,0 +1,15 @@ +#!/bin/bash +# Regression test for mkfs.btrfs --rootdir on non-existent file. +# Expected behavior: it should create a new file if destination doesn't exist +# Regression 460e93f25754 ("btrfs-progs: mkfs: check the status of file at mkfs") + +source "$TOP/tests/common" + +check_prereq mkfs.btrfs + +tmp=$(mktemp -d --tmpdir btrfs-progs-mkfs.rootdirXXXXXXX) +# we can't use TEST_DEV, a file is needed +img=$(mktemp btrfs-progs-mkfs.rootdirXXXXXXX) +run_check "$TOP/mkfs.btrfs" -f --rootdir "$TOP/Documentation/" "$img" + +rm -rf -- "$img" diff --git a/tests/mkfs-tests/012-rootdir-no-shrink/test.sh b/tests/mkfs-tests/012-rootdir-no-shrink/test.sh new file mode 100755 index 00000000..c1cb04f5 --- /dev/null +++ b/tests/mkfs-tests/012-rootdir-no-shrink/test.sh @@ -0,0 +1,39 @@ +#!/bin/bash +# Test if mkfs.btrfs --rootdir will skip shrinking correctly + +source "$TOP/tests/common" + +check_prereq mkfs.btrfs + +setup_root_helper + +fs_size=$((512 * 1024 * 1024)) +bs=$((1024 * 1024)) +tmp=$(mktemp -d --tmpdir btrfs-progs-mkfs.rootdirXXXXXXX) + +prepare_test_dev $fs_size + +# No shrink case + +run_check "$TOP/mkfs.btrfs" -f --rootdir "$tmp" "$TEST_DEV" +run_check_mount_test_dev + +# We should be able to write at least half of the fs size data since the fs is +# not shrunk +run_check $SUDO_HELPER dd if=/dev/zero bs=$bs count=$(($fs_size / $bs / 2)) \ + of="$TEST_MNT/file" + +run_check_umount_test_dev + +# Shrink case + +run_check "$TOP/mkfs.btrfs" -f --rootdir "$tmp" --shrink "$TEST_DEV" +run_check_mount_test_dev + +run_mustfail "mkfs.btrfs for shrink rootdir" \ + $SUDO_HELPER dd if=/dev/zero bs=$bs count=$(($fs_size / $bs / 2)) \ + of="$TEST_MNT/file" + +run_check_umount_test_dev + +rm -rf -- "$tmp" diff --git a/tests/mkfs-tests/013-reserved-1M-for-single/test.sh b/tests/mkfs-tests/013-reserved-1M-for-single/test.sh new file mode 100755 index 00000000..1490df2c --- /dev/null +++ b/tests/mkfs-tests/013-reserved-1M-for-single/test.sh @@ -0,0 +1,44 @@ +#!/bin/bash +# Test if "-m single" or "--mixed" can cause dev extent to use the reserved 1M +# range +# +# Other profiles will cause mkfs.btrfs to allocate new meta/sys chunks +# using btrfs_alloc_chunk() which won't use the 0~1M range, so other profiles +# are safe, but we test them nevertheless. + +source "$TOP/tests/common" + +check_prereq mkfs.btrfs +check_prereq btrfs + +prepare_test_dev + +do_one_test () +{ + run_check "$TOP/mkfs.btrfs" -f "$@" "$TEST_DEV" + + # Use dev-extent tree to find first device extent + first_dev_extent=$(run_check_stdout "$TOP/btrfs" inspect-internal \ + dump-tree -t device "$TEST_DEV" | \ + grep -oP '(?<=DEV_EXTENT )[[:digit:]]*' | head -n1) + + if [ -z $first_dev_extent ]; then + _fail "failed to get first device extent" + fi + + echo "first dev extent starts at $first_dev_extent" >> "$RESULTS" + echo "reserved range is [0, $(( 1024 * 1024)))" >> "$RESULTS" + # First device extent should not start below 1M + if [ $first_dev_extent -lt $(( 1024 * 1024 )) ]; then + _fail "first device extent occupies reserved 0~1M range" + fi +} + +do_one_test --mixed +do_one_test -m single + +do_one_test +do_one_test -m dup +do_one_test -d dup +do_one_test -m dup -d dup +do_one_test --mixed -m dup -d dup |