Loading tests/qemu-iotests/182 +71 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ status=1 # failure is the default! _cleanup() { _cleanup_test_img rm -f "$TEST_IMG.overlay" } trap "_cleanup; exit \$status" 0 1 2 3 15 Loading Loading @@ -71,6 +72,76 @@ echo 'quit' | $QEMU -nographic -monitor stdio \ _cleanup_qemu echo echo '=== Testing reopen ===' echo # This tests that reopening does not unshare any permissions it should # not unshare # (There was a bug where reopening shared exactly the opposite of the # permissions it was supposed to share) _launch_qemu _send_qemu_cmd $QEMU_HANDLE \ "{'execute': 'qmp_capabilities'}" \ 'return' # Open the image without any format layer (we are not going to access # it, so that is fine) # This should keep all permissions shared. success_or_failure=y _send_qemu_cmd $QEMU_HANDLE \ "{'execute': 'blockdev-add', 'arguments': { 'node-name': 'node0', 'driver': 'file', 'filename': '$TEST_IMG', 'locking': 'on' } }" \ 'return' \ 'error' # This snapshot will perform a reopen to drop R/W to RO. # It should still keep all permissions shared. success_or_failure=y _send_qemu_cmd $QEMU_HANDLE \ "{'execute': 'blockdev-snapshot-sync', 'arguments': { 'node-name': 'node0', 'snapshot-file': '$TEST_IMG.overlay', 'snapshot-node-name': 'node1' } }" \ 'return' \ 'error' # Now open the same file again # This does not require any permissions (and does not unshare any), so # this will not conflict with node0. success_or_failure=y _send_qemu_cmd $QEMU_HANDLE \ "{'execute': 'blockdev-add', 'arguments': { 'node-name': 'node1', 'driver': 'file', 'filename': '$TEST_IMG', 'locking': 'on' } }" \ 'return' \ 'error' # Now we attach the image to a virtio-blk device. This device does # require some permissions (at least WRITE and READ_CONSISTENT), so if # reopening node0 unshared any (which it should not have), this will # fail (but it should not). success_or_failure=y _send_qemu_cmd $QEMU_HANDLE \ "{'execute': 'device_add', 'arguments': { 'driver': 'virtio-blk', 'drive': 'node1' } }" \ 'return' \ 'error' _cleanup_qemu # success, all done echo "*** done" rm -f $seq.full Loading tests/qemu-iotests/182.out +9 −0 Original line number Diff line number Diff line Loading @@ -5,4 +5,13 @@ Starting QEMU Starting a second QEMU using the same image should fail QEMU_PROG: -drive file=TEST_DIR/t.qcow2,if=none,id=drive0,file.locking=on: Failed to get "write" lock Is another process using the image [TEST_DIR/t.qcow2]? === Testing reopen === {"return": {}} {"return": {}} Formatting 'TEST_DIR/t.qcow2.overlay', fmt=qcow2 size=197120 backing_file=TEST_DIR/t.qcow2 backing_fmt=file cluster_size=65536 lazy_refcounts=off refcount_bits=16 {"return": {}} {"return": {}} {"return": {}} *** done Loading
tests/qemu-iotests/182 +71 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ status=1 # failure is the default! _cleanup() { _cleanup_test_img rm -f "$TEST_IMG.overlay" } trap "_cleanup; exit \$status" 0 1 2 3 15 Loading Loading @@ -71,6 +72,76 @@ echo 'quit' | $QEMU -nographic -monitor stdio \ _cleanup_qemu echo echo '=== Testing reopen ===' echo # This tests that reopening does not unshare any permissions it should # not unshare # (There was a bug where reopening shared exactly the opposite of the # permissions it was supposed to share) _launch_qemu _send_qemu_cmd $QEMU_HANDLE \ "{'execute': 'qmp_capabilities'}" \ 'return' # Open the image without any format layer (we are not going to access # it, so that is fine) # This should keep all permissions shared. success_or_failure=y _send_qemu_cmd $QEMU_HANDLE \ "{'execute': 'blockdev-add', 'arguments': { 'node-name': 'node0', 'driver': 'file', 'filename': '$TEST_IMG', 'locking': 'on' } }" \ 'return' \ 'error' # This snapshot will perform a reopen to drop R/W to RO. # It should still keep all permissions shared. success_or_failure=y _send_qemu_cmd $QEMU_HANDLE \ "{'execute': 'blockdev-snapshot-sync', 'arguments': { 'node-name': 'node0', 'snapshot-file': '$TEST_IMG.overlay', 'snapshot-node-name': 'node1' } }" \ 'return' \ 'error' # Now open the same file again # This does not require any permissions (and does not unshare any), so # this will not conflict with node0. success_or_failure=y _send_qemu_cmd $QEMU_HANDLE \ "{'execute': 'blockdev-add', 'arguments': { 'node-name': 'node1', 'driver': 'file', 'filename': '$TEST_IMG', 'locking': 'on' } }" \ 'return' \ 'error' # Now we attach the image to a virtio-blk device. This device does # require some permissions (at least WRITE and READ_CONSISTENT), so if # reopening node0 unshared any (which it should not have), this will # fail (but it should not). success_or_failure=y _send_qemu_cmd $QEMU_HANDLE \ "{'execute': 'device_add', 'arguments': { 'driver': 'virtio-blk', 'drive': 'node1' } }" \ 'return' \ 'error' _cleanup_qemu # success, all done echo "*** done" rm -f $seq.full Loading
tests/qemu-iotests/182.out +9 −0 Original line number Diff line number Diff line Loading @@ -5,4 +5,13 @@ Starting QEMU Starting a second QEMU using the same image should fail QEMU_PROG: -drive file=TEST_DIR/t.qcow2,if=none,id=drive0,file.locking=on: Failed to get "write" lock Is another process using the image [TEST_DIR/t.qcow2]? === Testing reopen === {"return": {}} {"return": {}} Formatting 'TEST_DIR/t.qcow2.overlay', fmt=qcow2 size=197120 backing_file=TEST_DIR/t.qcow2 backing_fmt=file cluster_size=65536 lazy_refcounts=off refcount_bits=16 {"return": {}} {"return": {}} {"return": {}} *** done