Commit 8ee2672c authored by Sebastian Brzezinka's avatar Sebastian Brzezinka Committed by Tomasz Zawadzki
Browse files

test/bdev: Add test for resized RAID with superblock

parent 19f5787c
Loading
Loading
Loading
Loading
+63 −0
Original line number Diff line number Diff line
@@ -864,11 +864,74 @@ function raid_io_error_test() {
	fi
}

function raid_resize_superblock_test() {
	local raid_level=$1

	$rootdir/test/app/bdev_svc/bdev_svc -r $rpc_server -i 0 -L bdev_raid &
	raid_pid=$!
	echo "Process raid pid: $raid_pid"
	waitforlisten $raid_pid $rpc_server

	$rpc_py bdev_malloc_create -b malloc0 512 $base_blocklen

	$rpc_py bdev_passthru_create -b malloc0 -p pt0
	$rpc_py bdev_lvol_create_lvstore pt0 lvs0

	$rpc_py bdev_lvol_create -l lvs0 lvol0 64
	$rpc_py bdev_lvol_create -l lvs0 lvol1 64

	case $raid_level in
		0) $rpc_py bdev_raid_create -n Raid -r $raid_level -z 64 -b "lvs0/lvol0 lvs0/lvol1" -s ;;
		1) $rpc_py bdev_raid_create -n Raid -r $raid_level -b "lvs0/lvol0 lvs0/lvol1" -s ;;
	esac

	# Check size of base bdevs first
	(($(($($rpc_py bdev_get_bdevs -b lvs0/lvol0 | jq '.[].num_blocks') * 512 / 1048576)) == 64))
	(($(($($rpc_py bdev_get_bdevs -b lvs0/lvol1 | jq '.[].num_blocks') * 512 / 1048576)) == 64))

	# Check size of Raid bdev before resize
	case $raid_level in
		0) (($($rpc_py bdev_get_bdevs -b Raid | jq '.[].num_blocks') == 245760)) ;;
		1) (($($rpc_py bdev_get_bdevs -b Raid | jq '.[].num_blocks') == 122880)) ;;
	esac

	# Resize bdevs
	$rpc_py bdev_lvol_resize lvs0/lvol0 100
	$rpc_py bdev_lvol_resize lvs0/lvol1 100

	# Bdevs should be resized
	(($(($($rpc_py bdev_get_bdevs -b lvs0/lvol0 | jq '.[].num_blocks') * 512 / 1048576)) == 100))
	(($(($($rpc_py bdev_get_bdevs -b lvs0/lvol1 | jq '.[].num_blocks') * 512 / 1048576)) == 100))

	# Same with Raid bdevs
	case $raid_level in
		0) (($($rpc_py bdev_get_bdevs -b Raid | jq '.[].num_blocks') == 393216)) ;;
		1) (($($rpc_py bdev_get_bdevs -b Raid | jq '.[].num_blocks') == 196608)) ;;
	esac

	$rpc_py bdev_passthru_delete pt0
	$rpc_py bdev_passthru_create -b malloc0 -p pt0

	# After the passthru bdev is re-created, the RAID bdev should start from
	# superblock and its size should be the same as after it was resized.
	case $raid_level in
		0) (($($rpc_py bdev_get_bdevs -b Raid | jq '.[].num_blocks') == 393216)) ;;
		1) (($($rpc_py bdev_get_bdevs -b Raid | jq '.[].num_blocks') == 196608)) ;;
	esac

	killprocess $raid_pid

	return 0
}

mkdir -p "$tmp_dir"
trap 'cleanup; exit 1' EXIT

base_blocklen=512

run_test "raid0_resize_superblock_test" raid_resize_superblock_test 0
run_test "raid1_resize_superblock_test" raid_resize_superblock_test 1

if [ $(uname -s) = Linux ] && modprobe -n nbd; then
	has_nbd=true
	modprobe nbd