Run the test twice, once without iothreads, and again with, for more coverage of both setups.
Suggested-by: Nir Soffer <[email protected]> Signed-off-by: Eric Blake <[email protected]> --- tests/qemu-iotests/223 | 66 +++++++++++++++++++++++++ tests/qemu-iotests/223.out | 98 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 164 insertions(+) diff --git a/tests/qemu-iotests/223 b/tests/qemu-iotests/223 index 2bcf922df8c4..2aa428d406f5 100755 --- a/tests/qemu-iotests/223 +++ b/tests/qemu-iotests/223 @@ -123,6 +123,72 @@ qemu_cmd '{"execute":"qmp_capabilities"}' "return" qemu_cmd '{"execute":"blockdev-add", "arguments":{"driver":"qcow2", "node-name":"n", "file":{"driver":"file", "filename":"'"$TEST_IMG"'"}}}' "return" +qemu_cmd '{"execute":"block-dirty-bitmap-disable", + "arguments":{"node":"n", "name":"b"}}' "return" +qemu_cmd '{"execute":"nbd-server-add", + "arguments":{"device":"n"}}' "error" # Attempt add without server +qemu_cmd '{"execute":"nbd-server-start", + "arguments":{"addr":{"type":"unix", + "data":{"path":"'"$TEST_DIR/nbd"'"}}}}' "return" +qemu_cmd '{"execute":"nbd-server-start", + "arguments":{"addr":{"type":"unix", + "data":{"path":"'"$TEST_DIR/nbd"1'"}}}}' "error" # Attempt second server +$QEMU_NBD_PROG -L -k "$TEST_DIR/nbd" +qemu_cmd '{"execute":"nbd-server-add", + "arguments":{"device":"n", "bitmap":"b"}}' "return" +qemu_cmd '{"execute":"nbd-server-add", + "arguments":{"device":"nosuch"}}' "error" # Attempt to export missing node +qemu_cmd '{"execute":"nbd-server-add", + "arguments":{"device":"n"}}' "error" # Attempt to export same name twice +qemu_cmd '{"execute":"nbd-server-add", + "arguments":{"device":"n", "name":"n2", + "bitmap":"b2"}}' "error" # enabled vs. read-only +qemu_cmd '{"execute":"nbd-server-add", + "arguments":{"device":"n", "name":"n2", + "bitmap":"b3"}}' "error" # Missing bitmap +qemu_cmd '{"execute":"nbd-server-add", + "arguments":{"device":"n", "name":"n2", "writable":true, + "bitmap":"b2"}}' "return" +$QEMU_NBD_PROG -L -k "$TEST_DIR/nbd" + +echo +echo "=== Contrast normal status to large granularity dirty-bitmap ===" +echo + +QEMU_IO_OPTIONS=$QEMU_IO_OPTIONS_NO_FMT +IMG="driver=nbd,export=n,server.type=unix,server.path=$TEST_DIR/nbd" +$QEMU_IO -r -c 'r -P 0x22 512 512' -c 'r -P 0 512k 512k' -c 'r -P 0x11 1m 1m' \ + -c 'r -P 0x33 2m 2m' --image-opts "$IMG" | _filter_qemu_io +$QEMU_IMG map --output=json --image-opts \ + "$IMG" | _filter_qemu_img_map +$QEMU_IMG map --output=json --image-opts \ + "$IMG,x-dirty-bitmap=qemu:dirty-bitmap:b" | _filter_qemu_img_map + +echo +echo "=== Contrast to small granularity dirty-bitmap ===" +echo + +IMG="driver=nbd,export=n2,server.type=unix,server.path=$TEST_DIR/nbd" +$QEMU_IMG map --output=json --image-opts \ + "$IMG,x-dirty-bitmap=qemu:dirty-bitmap:b2" | _filter_qemu_img_map + +echo +echo "=== End qemu NBD server ===" +echo + +qemu_cmd '{"execute":"nbd-server-remove", + "arguments":{"name":"n"}}' "return" +qemu_cmd '{"execute":"nbd-server-remove", + "arguments":{"name":"n2"}}' "return" +qemu_cmd '{"execute":"nbd-server-remove", + "arguments":{"name":"n2"}}' "error" # Attempt duplicate clean +qemu_cmd '{"execute":"nbd-server-stop"}' "return" +qemu_cmd '{"execute":"nbd-server-stop"}' "error" # Again + +echo +echo "=== Repeat, but using iothreads ===" +echo + qemu_cmd '{"execute":"x-blockdev-set-iothread", "arguments":{"node-name":"n", "iothread":"io0"}}' "return" qemu_cmd '{"execute":"block-dirty-bitmap-disable", diff --git a/tests/qemu-iotests/223.out b/tests/qemu-iotests/223.out index 8895ea838cbb..9dcab03ef9c8 100644 --- a/tests/qemu-iotests/223.out +++ b/tests/qemu-iotests/223.out @@ -30,6 +30,104 @@ wrote 2097152/2097152 bytes at offset 2097152 "arguments":{"driver":"qcow2", "node-name":"n", "file":{"driver":"file", "filename":"TEST_DIR/t.qcow2"}}} {"return": {}} + {"execute":"block-dirty-bitmap-disable", + "arguments":{"node":"n", "name":"b"}} +{"return": {}} + {"execute":"nbd-server-add", + "arguments":{"device":"n"}} +{"error": {"class": "GenericError", "desc": "NBD server not running"}} + {"execute":"nbd-server-start", + "arguments":{"addr":{"type":"unix", + "data":{"path":"TEST_DIR/nbd"}}}} +{"return": {}} + {"execute":"nbd-server-start", + "arguments":{"addr":{"type":"unix", + "data":{"path":"TEST_DIR/nbd1"}}}} +{"error": {"class": "GenericError", "desc": "NBD server already running"}} +exports available: 0 + {"execute":"nbd-server-add", + "arguments":{"device":"n", "bitmap":"b"}} +{"return": {}} + {"execute":"nbd-server-add", + "arguments":{"device":"nosuch"}} +{"error": {"class": "GenericError", "desc": "Cannot find device=nosuch nor node_name=nosuch"}} + {"execute":"nbd-server-add", + "arguments":{"device":"n"}} +{"error": {"class": "GenericError", "desc": "NBD server already has export named 'n'"}} + {"execute":"nbd-server-add", + "arguments":{"device":"n", "name":"n2", + "bitmap":"b2"}} +{"error": {"class": "GenericError", "desc": "Enabled bitmap 'b2' incompatible with readonly export"}} + {"execute":"nbd-server-add", + "arguments":{"device":"n", "name":"n2", + "bitmap":"b3"}} +{"error": {"class": "GenericError", "desc": "Bitmap 'b3' is not found"}} + {"execute":"nbd-server-add", + "arguments":{"device":"n", "name":"n2", "writable":true, + "bitmap":"b2"}} +{"return": {}} +exports available: 2 + export: 'n' + size: 4194304 + flags: 0x58f ( readonly flush fua df multi cache ) + min block: 1 + opt block: 4096 + max block: 33554432 + available meta contexts: 2 + base:allocation + qemu:dirty-bitmap:b + export: 'n2' + size: 4194304 + flags: 0xced ( flush fua trim zeroes df cache fast-zero ) + min block: 1 + opt block: 4096 + max block: 33554432 + available meta contexts: 2 + base:allocation + qemu:dirty-bitmap:b2 + +=== Contrast normal status to large granularity dirty-bitmap === + +read 512/512 bytes at offset 512 +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 524288/524288 bytes at offset 524288 +512 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 1048576/1048576 bytes at offset 1048576 +1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 2097152/2097152 bytes at offset 2097152 +2 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +[{ "start": 0, "length": 4096, "depth": 0, "zero": false, "data": true, "offset": OFFSET}, +{ "start": 4096, "length": 1044480, "depth": 0, "zero": true, "data": false, "offset": OFFSET}, +{ "start": 1048576, "length": 3145728, "depth": 0, "zero": false, "data": true, "offset": OFFSET}] +[{ "start": 0, "length": 65536, "depth": 0, "zero": false, "data": false}, +{ "start": 65536, "length": 2031616, "depth": 0, "zero": false, "data": true, "offset": OFFSET}, +{ "start": 2097152, "length": 2097152, "depth": 0, "zero": false, "data": false}] + +=== Contrast to small granularity dirty-bitmap === + +[{ "start": 0, "length": 512, "depth": 0, "zero": false, "data": true, "offset": OFFSET}, +{ "start": 512, "length": 512, "depth": 0, "zero": false, "data": false}, +{ "start": 1024, "length": 2096128, "depth": 0, "zero": false, "data": true, "offset": OFFSET}, +{ "start": 2097152, "length": 2097152, "depth": 0, "zero": false, "data": false}] + +=== End qemu NBD server === + + {"execute":"nbd-server-remove", + "arguments":{"name":"n"}} +{"return": {}} + {"execute":"nbd-server-remove", + "arguments":{"name":"n2"}} +{"return": {}} + {"execute":"nbd-server-remove", + "arguments":{"name":"n2"}} +{"error": {"class": "GenericError", "desc": "Export 'n2' is not found"}} + {"execute":"nbd-server-stop"} +{"return": {}} + {"execute":"nbd-server-stop"} +{"error": {"class": "GenericError", "desc": "NBD server not running"}} + +=== Repeat, but using iothreads === + {"execute":"x-blockdev-set-iothread", "arguments":{"node-name":"n", "iothread":"io0"}} {"return": {}} -- 2.21.0
