| #!/usr/bin/env bash |
| # |
| # Test zone management operations. |
| # |
| |
| seq="$(basename $0)" |
| echo "QA output created by $seq" |
| status=1 # failure is the default! |
| |
| _cleanup() |
| { |
| _cleanup_test_img |
| sudo -n rmmod null_blk |
| } |
| trap "_cleanup; exit \$status" 0 1 2 3 15 |
| |
| # get standard environment, filters and checks |
| . ../common.rc |
| . ../common.filter |
| . ../common.qemu |
| |
| # This test only runs on Linux hosts with raw image files. |
| _supported_fmt raw |
| _supported_proto file |
| _supported_os Linux |
| |
| sudo -n true || \ |
| _notrun 'Password-less sudo required' |
| |
| IMG="--image-opts -n driver=host_device,filename=/dev/nullb0" |
| QEMU_IO_OPTIONS=$QEMU_IO_OPTIONS_NO_FMT |
| |
| echo "Testing a null_blk device:" |
| echo "case 1: if the operations work" |
| sudo -n modprobe null_blk nr_devices=1 zoned=1 |
| sudo -n chmod 0666 /dev/nullb0 |
| |
| echo "(1) report the first zone:" |
| $QEMU_IO $IMG -c "zrp 0 1" |
| echo |
| echo "report the first 10 zones" |
| $QEMU_IO $IMG -c "zrp 0 10" |
| echo |
| echo "report the last zone:" |
| $QEMU_IO $IMG -c "zrp 0x3e70000000 2" # 0x3e70000000 / 512 = 0x1f380000 |
| echo |
| echo |
| echo "(2) opening the first zone" |
| $QEMU_IO $IMG -c "zo 0 268435456" # 268435456 / 512 = 524288 |
| echo "report after:" |
| $QEMU_IO $IMG -c "zrp 0 1" |
| echo |
| echo "opening the second zone" |
| $QEMU_IO $IMG -c "zo 268435456 268435456" # |
| echo "report after:" |
| $QEMU_IO $IMG -c "zrp 268435456 1" |
| echo |
| echo "opening the last zone" |
| $QEMU_IO $IMG -c "zo 0x3e70000000 268435456" |
| echo "report after:" |
| $QEMU_IO $IMG -c "zrp 0x3e70000000 2" |
| echo |
| echo |
| echo "(3) closing the first zone" |
| $QEMU_IO $IMG -c "zc 0 268435456" |
| echo "report after:" |
| $QEMU_IO $IMG -c "zrp 0 1" |
| echo |
| echo "closing the last zone" |
| $QEMU_IO $IMG -c "zc 0x3e70000000 268435456" |
| echo "report after:" |
| $QEMU_IO $IMG -c "zrp 0x3e70000000 2" |
| echo |
| echo |
| echo "(4) finishing the second zone" |
| $QEMU_IO $IMG -c "zf 268435456 268435456" |
| echo "After finishing a zone:" |
| $QEMU_IO $IMG -c "zrp 268435456 1" |
| echo |
| echo |
| echo "(5) resetting the second zone" |
| $QEMU_IO $IMG -c "zrs 268435456 268435456" |
| echo "After resetting a zone:" |
| $QEMU_IO $IMG -c "zrp 268435456 1" |
| echo |
| echo |
| echo "(6) append write" # the physical block size of the device is 4096 |
| $QEMU_IO $IMG -c "zrp 0 1" |
| $QEMU_IO $IMG -c "zap -p 0 0x1000 0x2000" |
| echo "After appending the first zone firstly:" |
| $QEMU_IO $IMG -c "zrp 0 1" |
| $QEMU_IO $IMG -c "zap -p 0 0x1000 0x2000" |
| echo "After appending the first zone secondly:" |
| $QEMU_IO $IMG -c "zrp 0 1" |
| $QEMU_IO $IMG -c "zap -p 268435456 0x1000 0x2000" |
| echo "After appending the second zone firstly:" |
| $QEMU_IO $IMG -c "zrp 268435456 1" |
| $QEMU_IO $IMG -c "zap -p 268435456 0x1000 0x2000" |
| echo "After appending the second zone secondly:" |
| $QEMU_IO $IMG -c "zrp 268435456 1" |
| |
| # success, all done |
| echo "*** done" |
| rm -f $seq.full |
| status=0 |