iotests: Test reopening multiple devices at the same time
This test swaps the images used by two active block devices. This is now possible thanks to the new ability to run x-blockdev-reopen on multiple devices at the same time. Signed-off-by: Alberto Garcia <berto@igalia.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Message-Id: <20210708114709.206487-6-kwolf@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
3908b7a899
commit
246ebc2d6a
@ -649,6 +649,53 @@ class TestBlockdevReopen(iotests.QMPTestCase):
|
||||
'-c', 'read -P 0x40 0x40008 1',
|
||||
'-c', 'read -P 0x80 0x40010 1', hd_path[0])
|
||||
|
||||
# Swap the disk images of two active block devices
|
||||
def test_swap_files(self):
|
||||
# Add hd0 and hd2 (none of them with backing files)
|
||||
opts0 = hd_opts(0)
|
||||
result = self.vm.qmp('blockdev-add', conv_keys = False, **opts0)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
|
||||
opts2 = hd_opts(2)
|
||||
result = self.vm.qmp('blockdev-add', conv_keys = False, **opts2)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
|
||||
# Write different data to both block devices
|
||||
self.run_qemu_io("hd0", "write -P 0xa0 0 1k")
|
||||
self.run_qemu_io("hd2", "write -P 0xa2 0 1k")
|
||||
|
||||
# Check that the data reads correctly
|
||||
self.run_qemu_io("hd0", "read -P 0xa0 0 1k")
|
||||
self.run_qemu_io("hd2", "read -P 0xa2 0 1k")
|
||||
|
||||
# It's not possible to make a block device use an image that
|
||||
# is already being used by the other device.
|
||||
self.reopen(opts0, {'file': 'hd2-file'},
|
||||
"Permission conflict on node 'hd2-file': permissions "
|
||||
"'write, resize' are both required by node 'hd2' (uses "
|
||||
"node 'hd2-file' as 'file' child) and unshared by node "
|
||||
"'hd0' (uses node 'hd2-file' as 'file' child).")
|
||||
self.reopen(opts2, {'file': 'hd0-file'},
|
||||
"Permission conflict on node 'hd0-file': permissions "
|
||||
"'write, resize' are both required by node 'hd0' (uses "
|
||||
"node 'hd0-file' as 'file' child) and unshared by node "
|
||||
"'hd2' (uses node 'hd0-file' as 'file' child).")
|
||||
|
||||
# But we can swap the images if we reopen both devices at the
|
||||
# same time
|
||||
opts0['file'] = 'hd2-file'
|
||||
opts2['file'] = 'hd0-file'
|
||||
self.reopenMultiple([opts0, opts2])
|
||||
self.run_qemu_io("hd0", "read -P 0xa2 0 1k")
|
||||
self.run_qemu_io("hd2", "read -P 0xa0 0 1k")
|
||||
|
||||
# And we can of course come back to the original state
|
||||
opts0['file'] = 'hd0-file'
|
||||
opts2['file'] = 'hd2-file'
|
||||
self.reopenMultiple([opts0, opts2])
|
||||
self.run_qemu_io("hd0", "read -P 0xa0 0 1k")
|
||||
self.run_qemu_io("hd2", "read -P 0xa2 0 1k")
|
||||
|
||||
# Misc reopen tests with different block drivers
|
||||
@iotests.skip_if_unsupported(['quorum', 'throttle'])
|
||||
def test_misc_drivers(self):
|
||||
|
@ -17,8 +17,8 @@ read 1/1 bytes at offset 262152
|
||||
read 1/1 bytes at offset 262160
|
||||
1 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
|
||||
..............
|
||||
...............
|
||||
----------------------------------------------------------------------
|
||||
Ran 24 tests
|
||||
Ran 25 tests
|
||||
|
||||
OK
|
||||
|
Loading…
Reference in New Issue
Block a user