iotests: Test file-posix locking and reopen

Signed-off-by: Max Reitz <mreitz@redhat.com>
Reviewed-by: Alberto Garcia <berto@igalia.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
Max Reitz 2018-11-16 17:45:26 +01:00 committed by Kevin Wolf
parent 577a133988
commit 6d0a4a0fb5
2 changed files with 80 additions and 0 deletions

View File

@ -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
@ -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

View File

@ -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