mirror of
https://github.com/kdave/btrfs-progs
synced 2025-02-16 09:46:55 +00:00
Adds tests to mkfs-tests/036-rootdir-subvol for the modifiers to mkfs.btrfs --subvol: ro, rw, default, and default-ro. Signed-off-by: Mark Harmstone <maharmstone@fb.com>
129 lines
3.1 KiB
Bash
Executable File
129 lines
3.1 KiB
Bash
Executable File
#!/bin/bash
|
|
# Basic test for mkfs.btrfs --subvol option
|
|
|
|
source "$TEST_TOP/common" || exit
|
|
|
|
check_prereq mkfs.btrfs
|
|
check_prereq btrfs
|
|
|
|
setup_root_helper
|
|
prepare_test_dev
|
|
|
|
tmp=$(_mktemp_dir mkfs-rootdir)
|
|
|
|
basic()
|
|
{
|
|
run_check touch "$tmp/foo"
|
|
run_check mkdir "$tmp/dir"
|
|
run_check mkdir "$tmp/dir/subvol"
|
|
run_check touch "$tmp/dir/subvol/bar"
|
|
|
|
if [ "$1" != "" ]; then
|
|
run_check_mkfs_test_dev --rootdir "$tmp" --subvol $1:dir/subvol
|
|
else
|
|
run_check_mkfs_test_dev --rootdir "$tmp" --subvol dir/subvol
|
|
fi
|
|
|
|
run_check $SUDO_HELPER "$TOP/btrfs" check "$TEST_DEV"
|
|
|
|
run_check_mount_test_dev -o subvolid=5
|
|
run_check_stdout $SUDO_HELPER "$TOP/btrfs" subvolume list "$TEST_MNT" | \
|
|
cut -d\ -f9 > "$tmp/output"
|
|
run_check_stdout "$TOP/btrfs" property get "$TEST_MNT/dir/subvol" ro | \
|
|
cut -d = -f2 > "$tmp/output2"
|
|
run_check_stdout "$TOP/btrfs" subvolume get-default "$TEST_MNT" | \
|
|
cut -d\ -f2 > "$tmp/output3"
|
|
run_check_umount_test_dev
|
|
|
|
result=$(cat "$tmp/output")
|
|
|
|
if [ "$result" != "dir/subvol" ]; then
|
|
_fail "dir/subvol not in subvolume list"
|
|
fi
|
|
|
|
result=$(cat "$tmp/output2")
|
|
|
|
if [ "$1" == "ro" -o "$1" == "default-ro" ]; then
|
|
if [ "$result" != "true" ]; then
|
|
_fail "dir/subvol was read-write, expected read-only"
|
|
fi
|
|
else
|
|
if [ "$result" != "false" ]; then
|
|
_fail "dir/subvol was read-only, expected read-write"
|
|
fi
|
|
fi
|
|
|
|
result=$(cat "$tmp/output3")
|
|
|
|
if [ "$1" == "default" -o "$1" == "default-ro" ]; then
|
|
if [ "$result" != "256" ]; then
|
|
_fail "default subvol was $result, expected 256"
|
|
fi
|
|
else
|
|
if [ "$result" != "5" ]; then
|
|
_fail "default subvol was $result, expected 5"
|
|
fi
|
|
fi
|
|
|
|
rm -rf -- "$tmp/foo" "$tmp/dir"
|
|
}
|
|
|
|
basic_hardlinks()
|
|
{
|
|
run_check touch "$tmp/hl1"
|
|
run_check ln "$tmp/hl1" "$tmp/hl2"
|
|
run_check mkdir "$tmp/dir"
|
|
run_check ln "$tmp/hl1" "$tmp/dir/hl3"
|
|
|
|
run_check_mkfs_test_dev --rootdir "$tmp"
|
|
run_check $SUDO_HELPER "$TOP/btrfs" check "$TEST_DEV"
|
|
|
|
run_check_mount_test_dev
|
|
nr_hardlink=$(run_check_stdout $SUDO_HELPER stat -c "%h" "$TEST_MNT/hl1")
|
|
|
|
if [ "$nr_hardlink" -ne 3 ]; then
|
|
_fail "hard link number incorrect, has ${nr_hardlink} expect 3"
|
|
fi
|
|
run_check_umount_test_dev
|
|
rm -rf -- "$tmp/hl1" "$tmp/hl2" "$tmp/dir"
|
|
}
|
|
|
|
split_by_subvolume_hardlinks()
|
|
{
|
|
run_check touch "$tmp/hl1"
|
|
run_check ln "$tmp/hl1" "$tmp/hl2"
|
|
run_check mkdir "$tmp/subv"
|
|
run_check ln "$tmp/hl1" "$tmp/subv/hl3"
|
|
|
|
if [ "$1" != "" ]; then
|
|
run_check_mkfs_test_dev --rootdir "$tmp" --subvol $1:subv
|
|
else
|
|
run_check_mkfs_test_dev --rootdir "$tmp" --subvol subv
|
|
fi
|
|
|
|
run_check $SUDO_HELPER "$TOP/btrfs" check "$TEST_DEV"
|
|
|
|
run_check_mount_test_dev -o subvolid=5
|
|
nr_hardlink=$(run_check_stdout $SUDO_HELPER stat -c "%h" "$TEST_MNT/hl1")
|
|
|
|
if [ "$nr_hardlink" -ne 2 ]; then
|
|
_fail "hard link number incorrect for hl1, has ${nr_hardlink} expect 2"
|
|
fi
|
|
|
|
nr_hardlink=$(run_check_stdout $SUDO_HELPER stat -c "%h" "$TEST_MNT/subv/hl3")
|
|
if [ "$nr_hardlink" -ne 1 ]; then
|
|
_fail "hard link number incorrect for subv/hl3, has ${nr_hardlink} expect 1"
|
|
fi
|
|
run_check_umount_test_dev
|
|
rm -rf -- "$tmp/hl1" "$tmp/hl2" "$tmp/subv"
|
|
}
|
|
|
|
for mod in "" ro rw default default-ro;
|
|
do
|
|
basic $mod
|
|
split_by_subvolume_hardlinks $mod
|
|
done
|
|
|
|
basic_hardlinks
|
|
rm -rf -- "$tmp"
|