This test doesn't use iotests.VM presumably because it sets up qtest, conflicting with -machine none.
Signed-off-by: Marc-André Lureau <[email protected]> --- tests/qemu-iotests/tests/copy-before-write | 130 +++++++++++++---------------- 1 file changed, 59 insertions(+), 71 deletions(-) diff --git a/tests/qemu-iotests/tests/copy-before-write b/tests/qemu-iotests/tests/copy-before-write index 5531ad8a4c0d..59ab96738d6d 100755 --- a/tests/qemu-iotests/tests/copy-before-write +++ b/tests/qemu-iotests/tests/copy-before-write @@ -32,6 +32,9 @@ size = '1M' class TestCbwError(iotests.QMPTestCase): + def qemu_io_result(self, res): + return iotests.filter_qemu_io(res['return']['human-readable-text']) + def tearDown(self): self.vm.shutdown() os.remove(temp_img) @@ -85,19 +88,14 @@ class TestCbwError(iotests.QMPTestCase): 'file': 'cbw' }) - result = self.vm.qmp('human-monitor-command', - command_line='qemu-io cbw "write 0 1M"') - write_res = result['return'] - - result = self.vm.qmp('human-monitor-command', - command_line='qemu-io access "read 0 1M"') - read_res = result['return'] + write_res = self.vm.qmp('x-qemu-io', device='cbw', + command='write 0 1M') + read_res = self.vm.qmp('x-qemu-io', device='access', + command='read 0 1M') self.vm.shutdown() - log = self.vm.get_log() - log = iotests.filter_qtest(log) - log = iotests.filter_qemu_io(log) - return log, write_res, read_res + self.assertEqual(self.vm.get_log(), '') + return write_res, read_res def do_cbw_error_via_blockdev_backup(self, on_cbw_error=None): self.vm.cmd('blockdev-add', { @@ -148,43 +146,37 @@ class TestCbwError(iotests.QMPTestCase): 'file': 'cbw' }) - result = self.vm.qmp('human-monitor-command', - command_line='qemu-io cbw "write 0 1M"') - write_res = result['return'] - - result = self.vm.qmp('human-monitor-command', - command_line='qemu-io access "read 0 1M"') - read_res = result['return'] + write_res = self.vm.qmp('x-qemu-io', device='cbw', + command='write 0 1M') + read_res = self.vm.qmp('x-qemu-io', device='access', + command='read 0 1M') self.vm.shutdown() - log = self.vm.get_log() - log = iotests.filter_qemu_io(log) - return log, write_res, read_res + self.assertEqual(self.vm.get_log(), '') + return write_res, read_res def test_break_snapshot_on_cbw_error(self): """break-snapshot behavior: Guest write succeed, but further snapshot-read fails, as snapshot is broken. """ - log, write_res, read_res = self.do_cbw_error('break-snapshot') - self.assertEqual(write_res, '') - self.assertIn('read failed: Permission denied', read_res) - - self.assertEqual(log, """\ + write_res, read_res = self.do_cbw_error('break-snapshot') + self.assertEqual(self.qemu_io_result(write_res), """\ wrote 1048576/1048576 bytes at offset 0 1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) """) + self.assertIn('read failed: Permission denied', + read_res['error']['desc']) def test_break_guest_write_on_cbw_error(self): """break-guest-write behavior: Guest write fails, but snapshot-access continues working and further snapshot-read succeeds. """ - log, write_res, read_res = self.do_cbw_error('break-guest-write') - self.assertIn('write failed: Input/output error', write_res) - self.assertEqual(read_res, '') - - self.assertEqual(log, """\ + write_res, read_res = self.do_cbw_error('break-guest-write') + self.assertIn('write failed: Input/output error', + write_res['error']['desc']) + self.assertEqual(self.qemu_io_result(read_res), """\ read 1048576/1048576 bytes at offset 0 1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) """) @@ -193,24 +185,24 @@ read 1048576/1048576 bytes at offset 0 """Ensure CBW filter accepts break-snapshot policy specified in blockdev-backup QMP command. """ - log, write_res, read_res = \ + write_res, read_res = \ self.do_cbw_error_via_blockdev_backup('break-snapshot') - self.assertEqual(write_res, '') - self.assertIn('read failed: Permission denied', read_res) - self.assertEqual(log, """\ + self.assertEqual(self.qemu_io_result(write_res), """\ wrote 1048576/1048576 bytes at offset 0 1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) """) + self.assertIn('read failed: Permission denied', + read_res['error']['desc']) def test_break_guest_write_policy_forwarding(self): """Ensure CBW filter accepts break-guest-write policy specified in blockdev-backup QMP command. """ - log, write_res, read_res = \ + write_res, read_res = \ self.do_cbw_error_via_blockdev_backup('break-guest-write') - self.assertIn('write failed: Input/output error', write_res) - self.assertEqual(read_res, '') - self.assertEqual(log, """\ + self.assertIn('write failed: Input/output error', + write_res['error']['desc']) + self.assertEqual(self.qemu_io_result(read_res), """\ read 1048576/1048576 bytes at offset 0 1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) """) @@ -219,11 +211,11 @@ read 1048576/1048576 bytes at offset 0 """Ensure break-guest-write policy is used by default when on-cbw-error is not explicitly specified. """ - log, write_res, read_res = \ + write_res, read_res = \ self.do_cbw_error_via_blockdev_backup() - self.assertIn('write failed: Input/output error', write_res) - self.assertEqual(read_res, '') - self.assertEqual(log, """\ + self.assertIn('write failed: Input/output error', + write_res['error']['desc']) + self.assertEqual(self.qemu_io_result(read_res), """\ read 1048576/1048576 bytes at offset 0 1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) """) @@ -266,60 +258,56 @@ read 1048576/1048576 bytes at offset 0 'file': 'cbw' }) - result = self.vm.qmp('human-monitor-command', - command_line='qemu-io cbw "write 0 512K"') - write1_res = result['return'] + write1_res = self.vm.qmp('x-qemu-io', device='cbw', + command='write 0 512K') # We need second write to trigger throttling - result = self.vm.qmp('human-monitor-command', - command_line='qemu-io cbw "write 512K 512K"') - write2_res = result['return'] - - result = self.vm.qmp('human-monitor-command', - command_line='qemu-io access "read 0 1M"') - read_res = result['return'] + write2_res = self.vm.qmp('x-qemu-io', device='cbw', + command='write 512K 512K') + read_res = self.vm.qmp('x-qemu-io', device='access', + command='read 0 1M') 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, write1_res, write2_res, read_res + self.assertEqual(log, '') + return write1_res, write2_res, read_res def test_timeout_break_guest(self): - log, write1_res, write2_res, read_res = \ + write1_res, write2_res, read_res = \ self.do_cbw_timeout('break-guest-write') - self.assertEqual(write1_res, '') + self.assertEqual(self.qemu_io_result(write1_res), """\ +wrote 524288/524288 bytes at offset 0 +512 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +""") # macOS and FreeBSD tend to represent ETIMEDOUT as # "Operation timed out", when Linux prefer # "Connection timed out" - write2_res = write2_res.replace('Operation timed out', - 'Connection timed out') - self.assertIn('write failed: Connection timed out', write2_res) - self.assertEqual(read_res, '') - 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) + write2_err = write2_res['error']['desc'].replace( + 'Operation timed out', 'Connection timed out') + self.assertIn('write failed: Connection timed out', write2_err) + self.assertEqual(self.qemu_io_result(read_res), """\ 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, write1_res, write2_res, read_res = \ + write1_res, write2_res, read_res = \ self.do_cbw_timeout('break-snapshot') - self.assertEqual(write1_res, '') - self.assertEqual(write2_res, '') - self.assertIn('read failed: Permission denied', read_res) - self.assertEqual(log, """\ + self.assertEqual(self.qemu_io_result(write1_res), """\ wrote 524288/524288 bytes at offset 0 512 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +""") + self.assertEqual(self.qemu_io_result(write2_res), """\ wrote 524288/524288 bytes at offset 524288 512 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) """) + self.assertIn('read failed: Permission denied', + read_res['error']['desc']) if __name__ == '__main__': iotests.main(supported_fmts=['qcow2'], supported_protocols=['file'], - required_fmts=['copy-before-write'], - require_hmp=True) + required_fmts=['copy-before-write']) -- 2.56.0.rc0.29.g47ce80527c56
