File: test.sh

package info (click to toggle)
btrfs-progs 6.17.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 20,612 kB
  • sloc: ansic: 127,282; sh: 7,915; python: 1,384; makefile: 900; asm: 296
file content (100 lines) | stat: -rwxr-xr-x 2,863 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#!/bin/bash
# Test various block group profile combinations, use nullb devices as block
# devices. This test is based on mkfs-tests/001-basic-profiles with focus on
# zoned devices.

source "$TEST_TOP/common" || exit

check_prereq mkfs.btrfs
check_prereq btrfs
check_global_prereq blkzone

setup_root_helper
# Create one 128M device with 4M zones, 32 of them
setup_nullbdevs 4 128 4
prepare_nullbdevs
dev1=${nullb_devs[1]}

test_get_info()
{
	local tmp_out

	tmp_out=$(_mktemp mkfs-get-info)
	run_check $SUDO_HELPER "$TOP/btrfs" inspect-internal dump-super "$dev1"
	run_check $SUDO_HELPER "$TOP/btrfs" check "$dev1"

	# Work around for kernel bug that will treat SINGLE and single
	# device RAID0 as the same.
	# Thus kernel may create new SINGLE chunks, causing extra warning
	# when testing single device RAID0.
	wait_for_nullbdevs
	run_check $SUDO_HELPER mount -o ro "$dev1" "$TEST_MNT"
	run_check_stdout "$TOP/btrfs" filesystem df "$TEST_MNT" > "$tmp_out"
	if grep -q "Multiple block group profiles detected" "$tmp_out"; then
		rm -- "$tmp_out"
		_fail "temporary chunks are not properly cleaned up"
	fi
	rm -- "$tmp_out"
	run_check $SUDO_HELPER "$TOP/btrfs" filesystem usage "$TEST_MNT"
	run_check $SUDO_HELPER "$TOP/btrfs" device usage "$TEST_MNT"
	run_check $SUDO_HELPER umount "$TEST_MNT"
}

test_do_mkfs()
{
	run_check $SUDO_HELPER "$TOP/mkfs.btrfs" -f "$@"
	if run_check_stdout $SUDO_HELPER "$TOP/btrfs" check "$dev1" | grep -iq warning; then
		_fail "warnings found in check output"
	fi
}

test_mkfs_single()
{
	test_do_mkfs "$@" "$dev1"
	test_get_info
}

test_mkfs_multi()
{
	test_do_mkfs "$@" "${nullb_devs[@]}"
	test_get_info
}

test_mkfs_single
test_mkfs_single  -d  single  -m  single
test_mkfs_single  -d  single  -m  dup

test_mkfs_multi
test_mkfs_multi   -d  single  -m  single

if _test_config "EXPERIMENTAL" && [ -f "/sys/fs/btrfs/features/raid_stripe_tree" ]; then
	test_mkfs_single  -d  dup     -m  single
	test_mkfs_single  -d  dup     -m  dup

	test_mkfs_multi   -d  raid0   -m  raid0
	test_mkfs_multi   -d  raid1   -m  raid1
	test_mkfs_multi   -d  raid10  -m  raid10
	# RAID5/6 are not yet supported.
	# test_mkfs_multi   -d  raid5   -m  raid5
	# test_mkfs_multi   -d  raid6   -m  raid6
	test_mkfs_multi   -d  dup     -m  dup

	if [ -f "/sys/fs/btrfs/features/raid1c34" ]; then
		test_mkfs_multi   -d  raid1c3 -m  raid1c3
		test_mkfs_multi   -d  raid1c4 -m  raid1c4
	else
		_log "skip mount test, missing support for raid1c34"
		test_do_mkfs -d raid1c3 -m raid1c3 "${nullb_devs[@]}"
		test_do_mkfs -d raid1c4 -m raid1c4 "${nullb_devs[@]}"
	fi

	# Non-standard profile/device combinations

	# Single device raid0, two device raid10 (simple mount works on older kernels too)
	test_do_mkfs -d raid0 -m raid0 "$dev1"
	test_get_info
	test_do_mkfs -d raid10 -m raid10 "${nullb_devs[1]}" "${nullb_devs[2]}"
	test_get_info
fi

cleanup_nullbdevs