mirror of https://github.com/xemu-project/xemu.git
iotests: copy-before-write: add cases for cbw-timeout option
Add two simple test-cases: timeout failure with break-snapshot-on-cbw-error behavior and similar with break-guest-write-on-cbw-error behavior. Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@openvz.org> Reviewed-by: Hanna Reitz <hreitz@redhat.com> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
This commit is contained in:
parent
6db7fd1ca9
commit
9d05a87b77
|
@ -129,6 +129,87 @@ read 1048576/1048576 bytes at offset 0
|
|||
1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
""")
|
||||
|
||||
def do_cbw_timeout(self, on_cbw_error):
|
||||
result = self.vm.qmp('object-add', {
|
||||
'qom-type': 'throttle-group',
|
||||
'id': 'group0',
|
||||
'limits': {'bps-write': 300 * 1024}
|
||||
})
|
||||
self.assert_qmp(result, 'return', {})
|
||||
|
||||
result = self.vm.qmp('blockdev-add', {
|
||||
'node-name': 'cbw',
|
||||
'driver': 'copy-before-write',
|
||||
'on-cbw-error': on_cbw_error,
|
||||
'cbw-timeout': 1,
|
||||
'file': {
|
||||
'driver': iotests.imgfmt,
|
||||
'file': {
|
||||
'driver': 'file',
|
||||
'filename': source_img,
|
||||
}
|
||||
},
|
||||
'target': {
|
||||
'driver': 'throttle',
|
||||
'throttle-group': 'group0',
|
||||
'file': {
|
||||
'driver': 'qcow2',
|
||||
'file': {
|
||||
'driver': 'file',
|
||||
'filename': temp_img
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
self.assert_qmp(result, 'return', {})
|
||||
|
||||
result = self.vm.qmp('blockdev-add', {
|
||||
'node-name': 'access',
|
||||
'driver': 'snapshot-access',
|
||||
'file': 'cbw'
|
||||
})
|
||||
self.assert_qmp(result, 'return', {})
|
||||
|
||||
result = self.vm.qmp('human-monitor-command',
|
||||
command_line='qemu-io cbw "write 0 512K"')
|
||||
self.assert_qmp(result, 'return', '')
|
||||
|
||||
# We need second write to trigger throttling
|
||||
result = self.vm.qmp('human-monitor-command',
|
||||
command_line='qemu-io cbw "write 512K 512K"')
|
||||
self.assert_qmp(result, 'return', '')
|
||||
|
||||
result = self.vm.qmp('human-monitor-command',
|
||||
command_line='qemu-io access "read 0 1M"')
|
||||
self.assert_qmp(result, 'return', '')
|
||||
|
||||
self.vm.shutdown()
|
||||
log = self.vm.get_log()
|
||||
log = re.sub(r'^\[I \d+\.\d+\] OPENED\n', '', log)
|
||||
log = re.sub(r'\[I \+\d+\.\d+\] CLOSED\n?$', '', log)
|
||||
log = iotests.filter_qemu_io(log)
|
||||
return log
|
||||
|
||||
def test_timeout_break_guest(self):
|
||||
log = self.do_cbw_timeout('break-guest-write')
|
||||
self.assertEqual(log, """\
|
||||
wrote 524288/524288 bytes at offset 0
|
||||
512 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
write failed: Connection timed out
|
||||
read 1048576/1048576 bytes at offset 0
|
||||
1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
""")
|
||||
|
||||
def test_timeout_break_snapshot(self):
|
||||
log = self.do_cbw_timeout('break-snapshot')
|
||||
self.assertEqual(log, """\
|
||||
wrote 524288/524288 bytes at offset 0
|
||||
512 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
wrote 524288/524288 bytes at offset 524288
|
||||
512 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
read failed: Permission denied
|
||||
""")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
iotests.main(supported_fmts=['qcow2'],
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
..
|
||||
....
|
||||
----------------------------------------------------------------------
|
||||
Ran 2 tests
|
||||
Ran 4 tests
|
||||
|
||||
OK
|
||||
|
|
Loading…
Reference in New Issue