mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
python: use vm.cmd() instead of vm.qmp() where appropriate
In many cases we just want an effect of qmp command and want to raise
on failure. Use vm.cmd() method which does exactly this.
The commit is generated by command
git grep -l '\.qmp(' | xargs ./scripts/python_qmp_updater.py
And then, fix self.assertRaises to expect ExecuteError exception in
tests/qemu-iotests/124
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
Reviewed-by: Eric Blake <eblake@redhat.com>
Message-id: 20231006154125.1068348-16-vsementsov@yandex-team.ru
Signed-off-by: John Snow <jsnow@redhat.com>
This commit is contained in:
committed by
John Snow
parent
25ad2cf650
commit
b6aed193e5
@@ -88,9 +88,8 @@ class Vnc(QemuSystemTest):
|
||||
self.vm.add_args('-nodefaults', '-S', '-vnc', ':0,password=on')
|
||||
self.vm.launch()
|
||||
self.assertTrue(self.vm.qmp('query-vnc')['return']['enabled'])
|
||||
set_password_response = self.vm.qmp('change-vnc-password',
|
||||
password='new_password')
|
||||
self.assertEqual(set_password_response['return'], {})
|
||||
self.vm.cmd('change-vnc-password',
|
||||
password='new_password')
|
||||
|
||||
def test_change_listen(self):
|
||||
a, b, c = find_free_ports(3)
|
||||
@@ -105,12 +104,11 @@ class Vnc(QemuSystemTest):
|
||||
self.assertFalse(check_connect(b))
|
||||
self.assertFalse(check_connect(c))
|
||||
|
||||
res = self.vm.qmp('display-update', type='vnc',
|
||||
addresses=[{'type': 'inet', 'host': VNC_ADDR,
|
||||
'port': str(b)},
|
||||
{'type': 'inet', 'host': VNC_ADDR,
|
||||
'port': str(c)}])
|
||||
self.assertEqual(res['return'], {})
|
||||
self.vm.cmd('display-update', type='vnc',
|
||||
addresses=[{'type': 'inet', 'host': VNC_ADDR,
|
||||
'port': str(b)},
|
||||
{'type': 'inet', 'host': VNC_ADDR,
|
||||
'port': str(c)}])
|
||||
self.assertEqual(self.vm.qmp('query-vnc')['return']['service'], str(b))
|
||||
self.assertFalse(check_connect(a))
|
||||
self.assertTrue(check_connect(b))
|
||||
|
||||
+62
-106
@@ -56,8 +56,7 @@ class TestSingleDrive(iotests.QMPTestCase):
|
||||
def test_stream(self):
|
||||
self.assert_no_active_block_jobs()
|
||||
|
||||
result = self.vm.qmp('block-stream', device='drive0')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-stream', device='drive0')
|
||||
|
||||
self.wait_until_completed()
|
||||
|
||||
@@ -77,8 +76,7 @@ class TestSingleDrive(iotests.QMPTestCase):
|
||||
qemu_io('-f', iotests.imgfmt, '-rU', '-c', 'map', mid_img).stdout,
|
||||
'image file map matches backing file before streaming')
|
||||
|
||||
result = self.vm.qmp('block-stream', device='mid', job_id='stream-mid')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-stream', device='mid', job_id='stream-mid')
|
||||
|
||||
self.wait_until_completed(drive='stream-mid')
|
||||
|
||||
@@ -94,8 +92,7 @@ class TestSingleDrive(iotests.QMPTestCase):
|
||||
self.assert_no_active_block_jobs()
|
||||
|
||||
self.vm.pause_drive('drive0')
|
||||
result = self.vm.qmp('block-stream', device='drive0')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-stream', device='drive0')
|
||||
|
||||
self.pause_job('drive0', wait=False)
|
||||
self.vm.resume_drive('drive0')
|
||||
@@ -108,8 +105,7 @@ class TestSingleDrive(iotests.QMPTestCase):
|
||||
result = self.vm.qmp('query-block-jobs')
|
||||
self.assert_qmp(result, 'return[0]/offset', offset)
|
||||
|
||||
result = self.vm.qmp('block-job-resume', device='drive0')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-job-resume', device='drive0')
|
||||
|
||||
self.wait_until_completed()
|
||||
|
||||
@@ -129,8 +125,7 @@ class TestSingleDrive(iotests.QMPTestCase):
|
||||
'-f', iotests.imgfmt, '-rU', '-c', 'map', test_img).stdout
|
||||
|
||||
# This is a no-op: no data should ever be copied from the base image
|
||||
result = self.vm.qmp('block-stream', device='drive0', base=mid_img)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-stream', device='drive0', base=mid_img)
|
||||
|
||||
self.wait_until_completed()
|
||||
|
||||
@@ -144,8 +139,7 @@ class TestSingleDrive(iotests.QMPTestCase):
|
||||
def test_stream_partial(self):
|
||||
self.assert_no_active_block_jobs()
|
||||
|
||||
result = self.vm.qmp('block-stream', device='drive0', base=backing_img)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-stream', device='drive0', base=backing_img)
|
||||
|
||||
self.wait_until_completed()
|
||||
|
||||
@@ -172,24 +166,22 @@ class TestSingleDrive(iotests.QMPTestCase):
|
||||
qemu_img('create', '-f', iotests.imgfmt, ro_top_path,
|
||||
str(self.image_len))
|
||||
|
||||
result = self.vm.qmp('blockdev-add',
|
||||
node_name='ro-top',
|
||||
driver=iotests.imgfmt,
|
||||
read_only=True,
|
||||
file={
|
||||
'driver': 'file',
|
||||
'filename': ro_top_path,
|
||||
'read-only': True
|
||||
},
|
||||
backing='mid')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-add',
|
||||
node_name='ro-top',
|
||||
driver=iotests.imgfmt,
|
||||
read_only=True,
|
||||
file={
|
||||
'driver': 'file',
|
||||
'filename': ro_top_path,
|
||||
'read-only': True
|
||||
},
|
||||
backing='mid')
|
||||
|
||||
result = self.vm.qmp('block-stream', job_id='stream',
|
||||
device='ro-top', base_node='base')
|
||||
self.assert_qmp(result, 'error/desc', 'Block node is read-only')
|
||||
|
||||
result = self.vm.qmp('blockdev-del', node_name='ro-top')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-del', node_name='ro-top')
|
||||
|
||||
|
||||
class TestParallelOps(iotests.QMPTestCase):
|
||||
@@ -254,10 +246,9 @@ class TestParallelOps(iotests.QMPTestCase):
|
||||
node_name = 'node%d' % i
|
||||
job_id = 'stream-%s' % node_name
|
||||
pending_jobs.append(job_id)
|
||||
result = self.vm.qmp('block-stream', device=node_name,
|
||||
job_id=job_id, bottom=f'node{i-1}',
|
||||
speed=1024)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-stream', device=node_name,
|
||||
job_id=job_id, bottom=f'node{i-1}',
|
||||
speed=1024)
|
||||
|
||||
# Do this in reverse: After unthrottling them, some jobs may finish
|
||||
# before we have unthrottled all of them. This will drain their
|
||||
@@ -269,8 +260,7 @@ class TestParallelOps(iotests.QMPTestCase):
|
||||
# Starting from the top (i.e. in reverse) does not have this problem:
|
||||
# When a job finishes, the ones below it are not advanced.
|
||||
for job in reversed(pending_jobs):
|
||||
result = self.vm.qmp('block-job-set-speed', device=job, speed=0)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-job-set-speed', device=job, speed=0)
|
||||
|
||||
# Wait for all jobs to be finished.
|
||||
while len(pending_jobs) > 0:
|
||||
@@ -297,10 +287,9 @@ class TestParallelOps(iotests.QMPTestCase):
|
||||
self.assert_no_active_block_jobs()
|
||||
|
||||
# Set a speed limit to make sure that this job blocks the rest
|
||||
result = self.vm.qmp('block-stream', device='node4',
|
||||
job_id='stream-node4', base=self.imgs[1],
|
||||
filter_node_name='stream-filter', speed=1024*1024)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-stream', device='node4',
|
||||
job_id='stream-node4', base=self.imgs[1],
|
||||
filter_node_name='stream-filter', speed=1024*1024)
|
||||
|
||||
result = self.vm.qmp('block-stream', device='node5', job_id='stream-node5', base=self.imgs[2])
|
||||
self.assert_qmp(result, 'error/desc',
|
||||
@@ -328,8 +317,7 @@ class TestParallelOps(iotests.QMPTestCase):
|
||||
self.assert_qmp(result, 'error/desc',
|
||||
"Node 'node2' is busy: block device is in use by block job: stream")
|
||||
|
||||
result = self.vm.qmp('block-job-set-speed', device='stream-node4', speed=0)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-job-set-speed', device='stream-node4', speed=0)
|
||||
|
||||
self.wait_until_completed(drive='stream-node4')
|
||||
self.assert_no_active_block_jobs()
|
||||
@@ -341,8 +329,7 @@ class TestParallelOps(iotests.QMPTestCase):
|
||||
self.assert_no_active_block_jobs()
|
||||
|
||||
# Set a speed limit to make sure that this job blocks the rest
|
||||
result = self.vm.qmp('block-commit', device='drive0', top=self.imgs[5], base=self.imgs[3], job_id='commit-node3', speed=1024*1024)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-commit', device='drive0', top=self.imgs[5], base=self.imgs[3], job_id='commit-node3', speed=1024*1024)
|
||||
|
||||
result = self.vm.qmp('block-stream', device='node3', job_id='stream-node3')
|
||||
self.assert_qmp(result, 'error/desc',
|
||||
@@ -365,8 +352,7 @@ class TestParallelOps(iotests.QMPTestCase):
|
||||
self.assert_qmp(result, 'error/desc',
|
||||
"Node 'drive0' is busy: block device is in use by block job: commit")
|
||||
|
||||
result = self.vm.qmp('block-job-set-speed', device='commit-node3', speed=0)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-job-set-speed', device='commit-node3', speed=0)
|
||||
|
||||
self.wait_until_completed(drive='commit-node3')
|
||||
|
||||
@@ -377,23 +363,20 @@ class TestParallelOps(iotests.QMPTestCase):
|
||||
self.assert_no_active_block_jobs()
|
||||
|
||||
# Set a speed limit to make sure that this job blocks the rest
|
||||
result = self.vm.qmp('block-commit', device='drive0', base=self.imgs[3], job_id='commit-drive0', speed=1024*1024)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-commit', device='drive0', base=self.imgs[3], job_id='commit-drive0', speed=1024*1024)
|
||||
|
||||
result = self.vm.qmp('block-stream', device='node5', base=self.imgs[3], job_id='stream-node6')
|
||||
self.assert_qmp(result, 'error/desc',
|
||||
"Node 'node5' is busy: block device is in use by block job: commit")
|
||||
|
||||
result = self.vm.qmp('block-job-set-speed', device='commit-drive0', speed=0)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-job-set-speed', device='commit-drive0', speed=0)
|
||||
|
||||
event = self.vm.event_wait(name='BLOCK_JOB_READY')
|
||||
self.assert_qmp(event, 'data/device', 'commit-drive0')
|
||||
self.assert_qmp(event, 'data/type', 'commit')
|
||||
self.assert_qmp_absent(event, 'data/error')
|
||||
|
||||
result = self.vm.qmp('block-job-complete', device='commit-drive0')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-job-complete', device='commit-drive0')
|
||||
|
||||
self.wait_until_completed(drive='commit-drive0')
|
||||
|
||||
@@ -404,18 +387,16 @@ class TestParallelOps(iotests.QMPTestCase):
|
||||
self.assert_no_active_block_jobs()
|
||||
|
||||
# Commit from node2 into node0
|
||||
result = self.vm.qmp('block-commit', device='drive0',
|
||||
top=self.imgs[2], base=self.imgs[0],
|
||||
filter_node_name='commit-filter', speed=1024*1024)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-commit', device='drive0',
|
||||
top=self.imgs[2], base=self.imgs[0],
|
||||
filter_node_name='commit-filter', speed=1024*1024)
|
||||
|
||||
# Stream from node2 into node4
|
||||
result = self.vm.qmp('block-stream', device='node4', base_node='node2', job_id='node4')
|
||||
self.assert_qmp(result, 'error/desc',
|
||||
"Cannot freeze 'backing' link to 'commit-filter'")
|
||||
|
||||
result = self.vm.qmp('block-job-set-speed', device='drive0', speed=0)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-job-set-speed', device='drive0', speed=0)
|
||||
|
||||
self.wait_until_completed()
|
||||
self.assert_no_active_block_jobs()
|
||||
@@ -428,18 +409,15 @@ class TestParallelOps(iotests.QMPTestCase):
|
||||
self.assert_no_active_block_jobs()
|
||||
|
||||
# Commit from node2 into node0
|
||||
result = self.vm.qmp('block-commit', device='drive0',
|
||||
top_node='node2', base_node='node0',
|
||||
filter_node_name='commit-filter', speed=1024*1024)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-commit', device='drive0',
|
||||
top_node='node2', base_node='node0',
|
||||
filter_node_name='commit-filter', speed=1024*1024)
|
||||
|
||||
# Stream from node2 into node4
|
||||
result = self.vm.qmp('block-stream', device='node4',
|
||||
base_node='commit-filter', job_id='node4')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-stream', device='node4',
|
||||
base_node='commit-filter', job_id='node4')
|
||||
|
||||
result = self.vm.qmp('block-job-set-speed', device='drive0', speed=0)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-job-set-speed', device='drive0', speed=0)
|
||||
|
||||
self.vm.run_job(job='drive0', auto_dismiss=True)
|
||||
self.vm.run_job(job='node4', auto_dismiss=True)
|
||||
@@ -458,12 +436,10 @@ class TestParallelOps(iotests.QMPTestCase):
|
||||
self.assert_no_active_block_jobs()
|
||||
|
||||
# Stream from node0 into node2
|
||||
result = self.vm.qmp('block-stream', device='node2', base_node='node0', job_id='node2')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-stream', device='node2', base_node='node0', job_id='node2')
|
||||
|
||||
# Commit from the active layer into node3
|
||||
result = self.vm.qmp('block-commit', device='drive0', base=self.imgs[3])
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-commit', device='drive0', base=self.imgs[3])
|
||||
|
||||
# Wait for all jobs to be finished.
|
||||
pending_jobs = ['node2', 'drive0']
|
||||
@@ -490,16 +466,13 @@ class TestParallelOps(iotests.QMPTestCase):
|
||||
self.assert_no_active_block_jobs()
|
||||
|
||||
# Stream from node0 into node4
|
||||
result = self.vm.qmp('block-stream', device='node4', base_node='node0', job_id='node4', speed=1024*1024)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-stream', device='node4', base_node='node0', job_id='node4', speed=1024*1024)
|
||||
|
||||
# Commit from the active layer into node5
|
||||
result = self.vm.qmp('block-commit', device='drive0', base=self.imgs[5], speed=1024*1024)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-commit', device='drive0', base=self.imgs[5], speed=1024*1024)
|
||||
|
||||
for job in ['drive0', 'node4']:
|
||||
result = self.vm.qmp('block-job-set-speed', device=job, speed=0)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-job-set-speed', device=job, speed=0)
|
||||
|
||||
# Wait for all jobs to be finished.
|
||||
pending_jobs = ['node4', 'drive0']
|
||||
@@ -549,8 +522,7 @@ class TestParallelOps(iotests.QMPTestCase):
|
||||
"'base' and 'base-node' cannot be specified at the same time")
|
||||
|
||||
# Success: the base node is a backing file of the top node
|
||||
result = self.vm.qmp('block-stream', device='node4', base_node='node2', job_id='stream')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-stream', device='node4', base_node='node2', job_id='stream')
|
||||
|
||||
self.wait_until_completed(drive='stream')
|
||||
|
||||
@@ -606,8 +578,7 @@ class TestQuorum(iotests.QMPTestCase):
|
||||
|
||||
self.assert_no_active_block_jobs()
|
||||
|
||||
result = self.vm.qmp('block-stream', device='node0', job_id='stream-node0')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-stream', device='node0', job_id='stream-node0')
|
||||
|
||||
self.wait_until_completed(drive='stream-node0')
|
||||
|
||||
@@ -636,8 +607,7 @@ class TestSmallerBackingFile(iotests.QMPTestCase):
|
||||
def test_stream(self):
|
||||
self.assert_no_active_block_jobs()
|
||||
|
||||
result = self.vm.qmp('block-stream', device='drive0')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-stream', device='drive0')
|
||||
|
||||
self.wait_until_completed()
|
||||
|
||||
@@ -694,8 +664,7 @@ class TestEIO(TestErrors):
|
||||
def test_report(self):
|
||||
self.assert_no_active_block_jobs()
|
||||
|
||||
result = self.vm.qmp('block-stream', device='drive0')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-stream', device='drive0')
|
||||
|
||||
completed = False
|
||||
error = False
|
||||
@@ -722,8 +691,7 @@ class TestEIO(TestErrors):
|
||||
def test_ignore(self):
|
||||
self.assert_no_active_block_jobs()
|
||||
|
||||
result = self.vm.qmp('block-stream', device='drive0', on_error='ignore')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-stream', device='drive0', on_error='ignore')
|
||||
|
||||
error = False
|
||||
completed = False
|
||||
@@ -756,8 +724,7 @@ class TestEIO(TestErrors):
|
||||
def test_stop(self):
|
||||
self.assert_no_active_block_jobs()
|
||||
|
||||
result = self.vm.qmp('block-stream', device='drive0', on_error='stop')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-stream', device='drive0', on_error='stop')
|
||||
|
||||
error = False
|
||||
completed = False
|
||||
@@ -779,8 +746,7 @@ class TestEIO(TestErrors):
|
||||
self.assert_qmp(result, 'return[0]/offset', self.STREAM_BUFFER_SIZE)
|
||||
self.assert_qmp(result, 'return[0]/io-status', 'failed')
|
||||
|
||||
result = self.vm.qmp('block-job-resume', device='drive0')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-job-resume', device='drive0')
|
||||
|
||||
result = self.vm.qmp('query-block-jobs')
|
||||
if result == {'return': []}:
|
||||
@@ -806,8 +772,7 @@ class TestEIO(TestErrors):
|
||||
def test_enospc(self):
|
||||
self.assert_no_active_block_jobs()
|
||||
|
||||
result = self.vm.qmp('block-stream', device='drive0', on_error='enospc')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-stream', device='drive0', on_error='enospc')
|
||||
|
||||
completed = False
|
||||
error = False
|
||||
@@ -852,8 +817,7 @@ class TestENOSPC(TestErrors):
|
||||
def test_enospc(self):
|
||||
self.assert_no_active_block_jobs()
|
||||
|
||||
result = self.vm.qmp('block-stream', device='drive0', on_error='enospc')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-stream', device='drive0', on_error='enospc')
|
||||
|
||||
error = False
|
||||
completed = False
|
||||
@@ -875,8 +839,7 @@ class TestENOSPC(TestErrors):
|
||||
self.assert_qmp(result, 'return[0]/offset', self.STREAM_BUFFER_SIZE)
|
||||
self.assert_qmp(result, 'return[0]/io-status', 'nospace')
|
||||
|
||||
result = self.vm.qmp('block-job-resume', device='drive0')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-job-resume', device='drive0')
|
||||
|
||||
result = self.vm.qmp('query-block-jobs')
|
||||
if result == {'return': []}:
|
||||
@@ -921,8 +884,7 @@ class TestStreamStop(iotests.QMPTestCase):
|
||||
self.assert_no_active_block_jobs()
|
||||
|
||||
self.vm.pause_drive('drive0')
|
||||
result = self.vm.qmp('block-stream', device='drive0')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-stream', device='drive0')
|
||||
|
||||
time.sleep(0.1)
|
||||
events = self.vm.get_qmp_events(wait=False)
|
||||
@@ -955,11 +917,9 @@ class TestSetSpeed(iotests.QMPTestCase):
|
||||
def perf_test_throughput(self):
|
||||
self.assert_no_active_block_jobs()
|
||||
|
||||
result = self.vm.qmp('block-stream', device='drive0')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-stream', device='drive0')
|
||||
|
||||
result = self.vm.qmp('block-job-set-speed', device='drive0', speed=8 * 1024 * 1024)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-job-set-speed', device='drive0', speed=8 * 1024 * 1024)
|
||||
|
||||
self.wait_until_completed()
|
||||
|
||||
@@ -969,16 +929,14 @@ class TestSetSpeed(iotests.QMPTestCase):
|
||||
self.assert_no_active_block_jobs()
|
||||
|
||||
self.vm.pause_drive('drive0')
|
||||
result = self.vm.qmp('block-stream', device='drive0')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-stream', device='drive0')
|
||||
|
||||
# Default speed is 0
|
||||
result = self.vm.qmp('query-block-jobs')
|
||||
self.assert_qmp(result, 'return[0]/device', 'drive0')
|
||||
self.assert_qmp(result, 'return[0]/speed', 0)
|
||||
|
||||
result = self.vm.qmp('block-job-set-speed', device='drive0', speed=8 * 1024 * 1024)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-job-set-speed', device='drive0', speed=8 * 1024 * 1024)
|
||||
|
||||
# Ensure the speed we set was accepted
|
||||
result = self.vm.qmp('query-block-jobs')
|
||||
@@ -989,8 +947,7 @@ class TestSetSpeed(iotests.QMPTestCase):
|
||||
self.vm.pause_drive('drive0')
|
||||
|
||||
# Check setting speed in block-stream works
|
||||
result = self.vm.qmp('block-stream', device='drive0', speed=4 * 1024 * 1024)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-stream', device='drive0', speed=4 * 1024 * 1024)
|
||||
|
||||
result = self.vm.qmp('query-block-jobs')
|
||||
self.assert_qmp(result, 'return[0]/device', 'drive0')
|
||||
@@ -1007,8 +964,7 @@ class TestSetSpeed(iotests.QMPTestCase):
|
||||
self.assert_no_active_block_jobs()
|
||||
|
||||
self.vm.pause_drive('drive0')
|
||||
result = self.vm.qmp('block-stream', device='drive0')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-stream', device='drive0')
|
||||
|
||||
result = self.vm.qmp('block-job-set-speed', device='drive0', speed=-1)
|
||||
self.assert_qmp(result, 'error/desc', "Parameter 'speed' expects a non-negative value")
|
||||
|
||||
+71
-101
@@ -61,17 +61,14 @@ class ImageCommitTestCase(iotests.QMPTestCase):
|
||||
def run_commit_test(self, top, base, need_ready=False, node_names=False):
|
||||
self.assert_no_active_block_jobs()
|
||||
if node_names:
|
||||
result = self.vm.qmp('block-commit', device='drive0', top_node=top, base_node=base)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-commit', device='drive0', top_node=top, base_node=base)
|
||||
else:
|
||||
result = self.vm.qmp('block-commit', device='drive0', top=top, base=base)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-commit', device='drive0', top=top, base=base)
|
||||
self.wait_for_complete(need_ready)
|
||||
|
||||
def run_default_commit_test(self):
|
||||
self.assert_no_active_block_jobs()
|
||||
result = self.vm.qmp('block-commit', device='drive0')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-commit', device='drive0')
|
||||
self.wait_for_complete()
|
||||
|
||||
class TestSingleDrive(ImageCommitTestCase):
|
||||
@@ -118,38 +115,30 @@ class TestSingleDrive(ImageCommitTestCase):
|
||||
|
||||
@iotests.skip_if_unsupported(['throttle'])
|
||||
def test_commit_with_filter_and_quit(self):
|
||||
result = self.vm.qmp('object-add', qom_type='throttle-group', id='tg')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('object-add', qom_type='throttle-group', id='tg')
|
||||
|
||||
# Add a filter outside of the backing chain
|
||||
result = self.vm.qmp('blockdev-add', driver='throttle', node_name='filter', throttle_group='tg', file='mid')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-add', driver='throttle', node_name='filter', throttle_group='tg', file='mid')
|
||||
|
||||
result = self.vm.qmp('block-commit', device='drive0')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-commit', device='drive0')
|
||||
|
||||
# Quit immediately, thus forcing a simultaneous cancel of the
|
||||
# block job and a bdrv_drain_all()
|
||||
result = self.vm.qmp('quit')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('quit')
|
||||
|
||||
# Same as above, but this time we add the filter after starting the job
|
||||
@iotests.skip_if_unsupported(['throttle'])
|
||||
def test_commit_plus_filter_and_quit(self):
|
||||
result = self.vm.qmp('object-add', qom_type='throttle-group', id='tg')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('object-add', qom_type='throttle-group', id='tg')
|
||||
|
||||
result = self.vm.qmp('block-commit', device='drive0')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-commit', device='drive0')
|
||||
|
||||
# Add a filter outside of the backing chain
|
||||
result = self.vm.qmp('blockdev-add', driver='throttle', node_name='filter', throttle_group='tg', file='mid')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-add', driver='throttle', node_name='filter', throttle_group='tg', file='mid')
|
||||
|
||||
# Quit immediately, thus forcing a simultaneous cancel of the
|
||||
# block job and a bdrv_drain_all()
|
||||
result = self.vm.qmp('quit')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('quit')
|
||||
|
||||
def test_device_not_found(self):
|
||||
result = self.vm.qmp('block-commit', device='nonexistent', top='%s' % mid_img)
|
||||
@@ -226,8 +215,7 @@ class TestSingleDrive(ImageCommitTestCase):
|
||||
def test_top_node_in_wrong_chain(self):
|
||||
self.assert_no_active_block_jobs()
|
||||
|
||||
result = self.vm.qmp('blockdev-add', driver='null-co', node_name='null')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-add', driver='null-co', node_name='null')
|
||||
|
||||
result = self.vm.qmp('block-commit', device='drive0', top_node='null', base_node='base')
|
||||
self.assert_qmp(result, 'error/class', 'GenericError')
|
||||
@@ -240,11 +228,9 @@ class TestSingleDrive(ImageCommitTestCase):
|
||||
return
|
||||
|
||||
self.assert_no_active_block_jobs()
|
||||
result = self.vm.qmp('block-commit', device='drive0', top=mid_img,
|
||||
base=backing_img, speed=(self.image_len // 4))
|
||||
self.assert_qmp(result, 'return', {})
|
||||
result = self.vm.qmp('device_del', id='scsi0')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-commit', device='drive0', top=mid_img,
|
||||
base=backing_img, speed=(self.image_len // 4))
|
||||
self.vm.cmd('device_del', id='scsi0')
|
||||
|
||||
cancelled = False
|
||||
deleted = False
|
||||
@@ -270,9 +256,8 @@ class TestSingleDrive(ImageCommitTestCase):
|
||||
return
|
||||
|
||||
self.assert_no_active_block_jobs()
|
||||
result = self.vm.qmp('block-commit', device='drive0', top=mid_img,
|
||||
base=backing_img, speed=(self.image_len // 4))
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-commit', device='drive0', top=mid_img,
|
||||
base=backing_img, speed=(self.image_len // 4))
|
||||
|
||||
result = self.vm.qmp('query-block')
|
||||
self.assert_qmp(result, 'return[0]/inserted/file', test_img)
|
||||
@@ -407,8 +392,7 @@ class TestSetSpeed(ImageCommitTestCase):
|
||||
self.assert_no_active_block_jobs()
|
||||
|
||||
self.vm.pause_drive('drive0')
|
||||
result = self.vm.qmp('block-commit', device='drive0', top=mid_img, speed=1024 * 1024)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-commit', device='drive0', top=mid_img, speed=1024 * 1024)
|
||||
|
||||
# Ensure the speed we set was accepted
|
||||
result = self.vm.qmp('query-block-jobs')
|
||||
@@ -481,8 +465,7 @@ class TestErrorHandling(iotests.QMPTestCase):
|
||||
os.remove(backing_img)
|
||||
|
||||
def blockdev_add(self, **kwargs):
|
||||
result = self.vm.qmp('blockdev-add', **kwargs)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-add', **kwargs)
|
||||
|
||||
def add_block_nodes(self, base_debug=None, mid_debug=None, top_debug=None):
|
||||
self.blockdev_add(node_name='base-file', driver='file',
|
||||
@@ -528,11 +511,9 @@ class TestErrorHandling(iotests.QMPTestCase):
|
||||
completed = True
|
||||
elif ev['event'] == 'BLOCK_JOB_ERROR':
|
||||
if error_pauses_job:
|
||||
result = self.vm.qmp('block-job-resume', device='job0')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-job-resume', device='job0')
|
||||
elif ev['event'] == 'BLOCK_JOB_READY':
|
||||
result = self.vm.qmp('block-job-complete', device='job0')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-job-complete', device='job0')
|
||||
else:
|
||||
self.fail("Unexpected event: %s" % ev)
|
||||
log.append(iotests.filter_qmp_event(ev))
|
||||
@@ -595,11 +576,10 @@ class TestErrorHandling(iotests.QMPTestCase):
|
||||
self.add_block_nodes(top_debug=top_debug, mid_debug=mid_debug,
|
||||
base_debug=base_debug)
|
||||
|
||||
result = self.vm.qmp('block-commit', job_id='job0', device='top-fmt',
|
||||
top_node='top-fmt' if active else 'mid-fmt',
|
||||
base_node='mid-fmt' if active else 'base-fmt',
|
||||
on_error=on_error)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-commit', job_id='job0', device='top-fmt',
|
||||
top_node='top-fmt' if active else 'mid-fmt',
|
||||
base_node='mid-fmt' if active else 'base-fmt',
|
||||
on_error=on_error)
|
||||
|
||||
def testActiveReadErrorReport(self):
|
||||
self.prepare_and_start_job('report', top_event='read_aio')
|
||||
@@ -771,10 +751,9 @@ class TestCommitWithFilters(iotests.QMPTestCase):
|
||||
self.vm = iotests.VM().add_device('virtio-scsi,id=vio-scsi')
|
||||
self.vm.launch()
|
||||
|
||||
result = self.vm.qmp('object-add', qom_type='throttle-group', id='tg')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('object-add', qom_type='throttle-group', id='tg')
|
||||
|
||||
result = self.vm.qmp('blockdev-add', {
|
||||
self.vm.cmd('blockdev-add', {
|
||||
'node-name': 'top-filter',
|
||||
'driver': 'throttle',
|
||||
'throttle-group': 'tg',
|
||||
@@ -816,7 +795,6 @@ class TestCommitWithFilters(iotests.QMPTestCase):
|
||||
}
|
||||
}
|
||||
})
|
||||
self.assert_qmp(result, 'return', {})
|
||||
|
||||
def tearDown(self):
|
||||
self.vm.shutdown()
|
||||
@@ -833,13 +811,12 @@ class TestCommitWithFilters(iotests.QMPTestCase):
|
||||
return self.vm.node_info(node)['image']['filename']
|
||||
|
||||
def test_filterless_commit(self):
|
||||
result = self.vm.qmp('block-commit',
|
||||
job_id='commit',
|
||||
device='top-filter',
|
||||
top_node='cow-2',
|
||||
base_node='cow-1',
|
||||
backing_file=self.img1)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-commit',
|
||||
job_id='commit',
|
||||
device='top-filter',
|
||||
top_node='cow-2',
|
||||
base_node='cow-1',
|
||||
backing_file=self.img1)
|
||||
self.wait_until_completed(drive='commit')
|
||||
|
||||
self.assertIsNotNone(self.vm.node_info('cow-3'))
|
||||
@@ -850,13 +827,12 @@ class TestCommitWithFilters(iotests.QMPTestCase):
|
||||
self.pattern_files[2] = self.img1
|
||||
|
||||
def test_commit_through_filter(self):
|
||||
result = self.vm.qmp('block-commit',
|
||||
job_id='commit',
|
||||
device='top-filter',
|
||||
top_node='cow-1',
|
||||
base_node='cow-0',
|
||||
backing_file=self.img0)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-commit',
|
||||
job_id='commit',
|
||||
device='top-filter',
|
||||
top_node='cow-1',
|
||||
base_node='cow-0',
|
||||
backing_file=self.img0)
|
||||
self.wait_until_completed(drive='commit')
|
||||
|
||||
self.assertIsNotNone(self.vm.node_info('cow-2'))
|
||||
@@ -871,9 +847,8 @@ class TestCommitWithFilters(iotests.QMPTestCase):
|
||||
# Add a device, so the commit job finds a parent it can change
|
||||
# to point to the base node (so we can test that top-filter is
|
||||
# dropped from the graph)
|
||||
result = self.vm.qmp('device_add', id='drv0', driver='scsi-hd',
|
||||
bus='vio-scsi.0', drive='top-filter')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('device_add', id='drv0', driver='scsi-hd',
|
||||
bus='vio-scsi.0', drive='top-filter')
|
||||
|
||||
# Try to release our reference to top-filter; that should not
|
||||
# work because drv0 uses it
|
||||
@@ -881,16 +856,14 @@ class TestCommitWithFilters(iotests.QMPTestCase):
|
||||
self.assert_qmp(result, 'error/class', 'GenericError')
|
||||
self.assert_qmp(result, 'error/desc', 'Node top-filter is in use')
|
||||
|
||||
result = self.vm.qmp('block-commit',
|
||||
job_id='commit',
|
||||
device='top-filter',
|
||||
base_node='cow-2')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-commit',
|
||||
job_id='commit',
|
||||
device='top-filter',
|
||||
base_node='cow-2')
|
||||
self.complete_and_wait(drive='commit')
|
||||
|
||||
# Try to release our reference to top-filter again
|
||||
result = self.vm.qmp('blockdev-del', node_name='top-filter')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-del', node_name='top-filter')
|
||||
|
||||
self.assertIsNone(self.vm.node_info('top-filter'))
|
||||
self.assertIsNone(self.vm.node_info('cow-3'))
|
||||
@@ -905,12 +878,11 @@ class TestCommitWithFilters(iotests.QMPTestCase):
|
||||
self.pattern_files[3] = self.img2
|
||||
|
||||
def test_filtered_active_commit_without_filter(self):
|
||||
result = self.vm.qmp('block-commit',
|
||||
job_id='commit',
|
||||
device='top-filter',
|
||||
top_node='cow-3',
|
||||
base_node='cow-2')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-commit',
|
||||
job_id='commit',
|
||||
device='top-filter',
|
||||
top_node='cow-3',
|
||||
base_node='cow-2')
|
||||
self.complete_and_wait(drive='commit')
|
||||
|
||||
self.assertIsNotNone(self.vm.node_info('top-filter'))
|
||||
@@ -935,23 +907,22 @@ class TestCommitWithOverriddenBacking(iotests.QMPTestCase):
|
||||
self.vm.launch()
|
||||
|
||||
# Use base_b instead of base_a as the backing of top
|
||||
result = self.vm.qmp('blockdev-add', {
|
||||
'node-name': 'top',
|
||||
'driver': iotests.imgfmt,
|
||||
'file': {
|
||||
'driver': 'file',
|
||||
'filename': self.img_top
|
||||
},
|
||||
'backing': {
|
||||
'node-name': 'base',
|
||||
'driver': iotests.imgfmt,
|
||||
'file': {
|
||||
'driver': 'file',
|
||||
'filename': self.img_base_b
|
||||
}
|
||||
}
|
||||
})
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-add', {
|
||||
'node-name': 'top',
|
||||
'driver': iotests.imgfmt,
|
||||
'file': {
|
||||
'driver': 'file',
|
||||
'filename': self.img_top
|
||||
},
|
||||
'backing': {
|
||||
'node-name': 'base',
|
||||
'driver': iotests.imgfmt,
|
||||
'file': {
|
||||
'driver': 'file',
|
||||
'filename': self.img_base_b
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
def tearDown(self):
|
||||
self.vm.shutdown()
|
||||
@@ -971,11 +942,10 @@ class TestCommitWithOverriddenBacking(iotests.QMPTestCase):
|
||||
def test_commit_to_b(self):
|
||||
# Try committing to base_b (which should work, since that is
|
||||
# actually top's backing image)
|
||||
result = self.vm.qmp('block-commit',
|
||||
job_id='commit',
|
||||
device='top',
|
||||
base=self.img_base_b)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-commit',
|
||||
job_id='commit',
|
||||
device='top',
|
||||
base=self.img_base_b)
|
||||
|
||||
self.vm.event_wait('BLOCK_JOB_READY')
|
||||
self.vm.qmp('block-job-complete', device='commit')
|
||||
|
||||
+200
-271
File diff suppressed because it is too large
Load Diff
+5
-10
@@ -77,8 +77,7 @@ class TestFdSets(iotests.QMPTestCase):
|
||||
self.vm.shutdown()
|
||||
|
||||
def test_remove_fdset(self):
|
||||
result = self.vm.qmp('remove-fd', fdset_id=2)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('remove-fd', fdset_id=2)
|
||||
result = self.vm.qmp('query-fdsets')
|
||||
self.assert_qmp(result, 'return[0]/fdset-id', 1)
|
||||
self.assert_qmp(result, 'return[1]/fdset-id', 0)
|
||||
@@ -90,8 +89,7 @@ class TestFdSets(iotests.QMPTestCase):
|
||||
def test_remove_fd(self):
|
||||
result = self.vm.qmp('query-fdsets')
|
||||
fd_image3 = result['return'][0]['fds'][0]['fd']
|
||||
result = self.vm.qmp('remove-fd', fdset_id=2, fd=fd_image3)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('remove-fd', fdset_id=2, fd=fd_image3)
|
||||
result = self.vm.qmp('query-fdsets')
|
||||
self.assert_qmp(result, 'return[0]/fdset-id', 2)
|
||||
self.assert_qmp(result, 'return[1]/fdset-id', 1)
|
||||
@@ -151,8 +149,7 @@ class TestSCMFd(iotests.QMPTestCase):
|
||||
|
||||
def test_getfd(self):
|
||||
self._send_fd_by_SCM()
|
||||
result = self.vm.qmp('getfd', fdname='image0:r')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('getfd', fdname='image0:r')
|
||||
|
||||
def test_getfd_invalid_fdname(self):
|
||||
self._send_fd_by_SCM()
|
||||
@@ -163,10 +160,8 @@ class TestSCMFd(iotests.QMPTestCase):
|
||||
|
||||
def test_closefd(self):
|
||||
self._send_fd_by_SCM()
|
||||
result = self.vm.qmp('getfd', fdname='image0:r')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
result = self.vm.qmp('closefd', fdname='image0:r')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('getfd', fdname='image0:r')
|
||||
self.vm.cmd('closefd', fdname='image0:r')
|
||||
|
||||
def test_closefd_fd_not_found(self):
|
||||
fdname = 'image0:r'
|
||||
|
||||
+22
-40
@@ -69,8 +69,7 @@ class TestSingleDrive(iotests.QMPTestCase):
|
||||
self.assert_no_active_block_jobs()
|
||||
|
||||
self.vm.pause_drive('drive0')
|
||||
result = self.vm.qmp(cmd, device='drive0', target=target, sync='full')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd(cmd, device='drive0', target=target, sync='full')
|
||||
|
||||
event = self.cancel_and_wait(resume=True)
|
||||
self.assert_qmp(event, 'data/type', 'backup')
|
||||
@@ -85,9 +84,8 @@ class TestSingleDrive(iotests.QMPTestCase):
|
||||
self.assert_no_active_block_jobs()
|
||||
|
||||
self.vm.pause_drive('drive0')
|
||||
result = self.vm.qmp(cmd, device='drive0',
|
||||
target=target, sync='full')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd(cmd, device='drive0',
|
||||
target=target, sync='full')
|
||||
|
||||
self.pause_job('drive0', wait=False)
|
||||
self.vm.resume_drive('drive0')
|
||||
@@ -100,8 +98,7 @@ class TestSingleDrive(iotests.QMPTestCase):
|
||||
result = self.vm.qmp('query-block-jobs')
|
||||
self.assert_qmp(result, 'return[0]/offset', offset)
|
||||
|
||||
result = self.vm.qmp('block-job-resume', device='drive0')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-job-resume', device='drive0')
|
||||
|
||||
self.wait_until_completed()
|
||||
|
||||
@@ -123,10 +120,9 @@ class TestSingleDrive(iotests.QMPTestCase):
|
||||
result = self.vm.qmp('block_resize', node_name=node, size=65536)
|
||||
self.assert_qmp(result, 'error/class', 'GenericError')
|
||||
|
||||
result = self.vm.qmp('blockdev-backup', job_id='job0', device='drive0',
|
||||
target='drive1', sync='full', auto_finalize=False,
|
||||
auto_dismiss=False)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-backup', job_id='job0', device='drive0',
|
||||
target='drive1', sync='full', auto_finalize=False,
|
||||
auto_dismiss=False)
|
||||
|
||||
self.vm.run_job('job0', auto_finalize=False, pre_finalize=pre_finalize)
|
||||
|
||||
@@ -137,8 +133,7 @@ class TestSingleDrive(iotests.QMPTestCase):
|
||||
self.do_test_resize_blockdev_backup('drive1', 'target')
|
||||
|
||||
def do_test_target_size(self, size):
|
||||
result = self.vm.qmp('block_resize', device='drive1', size=size)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block_resize', device='drive1', size=size)
|
||||
|
||||
result = self.vm.qmp('blockdev-backup', job_id='job0', device='drive0',
|
||||
target='drive1', sync='full')
|
||||
@@ -219,16 +214,14 @@ class TestSetSpeed(iotests.QMPTestCase):
|
||||
self.assert_no_active_block_jobs()
|
||||
|
||||
self.vm.pause_drive('drive0')
|
||||
result = self.vm.qmp(cmd, device='drive0', target=target, sync='full')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd(cmd, device='drive0', target=target, sync='full')
|
||||
|
||||
# Default speed is 0
|
||||
result = self.vm.qmp('query-block-jobs')
|
||||
self.assert_qmp(result, 'return[0]/device', 'drive0')
|
||||
self.assert_qmp(result, 'return[0]/speed', 0)
|
||||
|
||||
result = self.vm.qmp('block-job-set-speed', device='drive0', speed=8 * 1024 * 1024)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-job-set-speed', device='drive0', speed=8 * 1024 * 1024)
|
||||
|
||||
# Ensure the speed we set was accepted
|
||||
result = self.vm.qmp('query-block-jobs')
|
||||
@@ -240,9 +233,8 @@ class TestSetSpeed(iotests.QMPTestCase):
|
||||
|
||||
# Check setting speed option works
|
||||
self.vm.pause_drive('drive0')
|
||||
result = self.vm.qmp(cmd, device='drive0',
|
||||
target=target, sync='full', speed=4*1024*1024)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd(cmd, device='drive0',
|
||||
target=target, sync='full', speed=4*1024*1024)
|
||||
|
||||
result = self.vm.qmp('query-block-jobs')
|
||||
self.assert_qmp(result, 'return[0]/device', 'drive0')
|
||||
@@ -267,9 +259,8 @@ class TestSetSpeed(iotests.QMPTestCase):
|
||||
self.assert_no_active_block_jobs()
|
||||
|
||||
self.vm.pause_drive('drive0')
|
||||
result = self.vm.qmp(cmd, device='drive0',
|
||||
target=target, sync='full')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd(cmd, device='drive0',
|
||||
target=target, sync='full')
|
||||
|
||||
result = self.vm.qmp('block-job-set-speed', device='drive0', speed=-1)
|
||||
self.assert_qmp(result, 'error/class', 'GenericError')
|
||||
@@ -306,7 +297,7 @@ class TestSingleTransaction(iotests.QMPTestCase):
|
||||
def do_test_cancel(self, cmd, target):
|
||||
self.assert_no_active_block_jobs()
|
||||
|
||||
result = self.vm.qmp('transaction', actions=[{
|
||||
self.vm.cmd('transaction', actions=[{
|
||||
'type': cmd,
|
||||
'data': { 'device': 'drive0',
|
||||
'target': target,
|
||||
@@ -315,8 +306,6 @@ class TestSingleTransaction(iotests.QMPTestCase):
|
||||
}
|
||||
])
|
||||
|
||||
self.assert_qmp(result, 'return', {})
|
||||
|
||||
event = self.cancel_and_wait()
|
||||
self.assert_qmp(event, 'data/type', 'backup')
|
||||
|
||||
@@ -329,7 +318,7 @@ class TestSingleTransaction(iotests.QMPTestCase):
|
||||
def do_test_pause(self, cmd, target, image):
|
||||
self.assert_no_active_block_jobs()
|
||||
|
||||
result = self.vm.qmp('transaction', actions=[{
|
||||
self.vm.cmd('transaction', actions=[{
|
||||
'type': cmd,
|
||||
'data': { 'device': 'drive0',
|
||||
'target': target,
|
||||
@@ -337,12 +326,10 @@ class TestSingleTransaction(iotests.QMPTestCase):
|
||||
'speed': 64 * 1024 },
|
||||
}
|
||||
])
|
||||
self.assert_qmp(result, 'return', {})
|
||||
|
||||
self.pause_job('drive0', wait=False)
|
||||
|
||||
result = self.vm.qmp('block-job-set-speed', device='drive0', speed=0)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-job-set-speed', device='drive0', speed=0)
|
||||
|
||||
self.pause_wait('drive0')
|
||||
|
||||
@@ -353,8 +340,7 @@ class TestSingleTransaction(iotests.QMPTestCase):
|
||||
result = self.vm.qmp('query-block-jobs')
|
||||
self.assert_qmp(result, 'return[0]/offset', offset)
|
||||
|
||||
result = self.vm.qmp('block-job-resume', device='drive0')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-job-resume', device='drive0')
|
||||
|
||||
self.wait_until_completed()
|
||||
|
||||
@@ -519,8 +505,7 @@ class TestCompressedToQcow2(iotests.QMPTestCase):
|
||||
|
||||
self.assert_no_active_block_jobs()
|
||||
|
||||
result = self.vm.qmp(cmd, device='drive0', sync='full', compress=True, **args)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd(cmd, device='drive0', sync='full', compress=True, **args)
|
||||
|
||||
self.wait_until_completed()
|
||||
|
||||
@@ -545,8 +530,7 @@ class TestCompressedToQcow2(iotests.QMPTestCase):
|
||||
self.assert_no_active_block_jobs()
|
||||
|
||||
self.vm.pause_drive('drive0')
|
||||
result = self.vm.qmp(cmd, device='drive0', sync='full', compress=True, **args)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd(cmd, device='drive0', sync='full', compress=True, **args)
|
||||
|
||||
event = self.cancel_and_wait(resume=True)
|
||||
self.assert_qmp(event, 'data/type', 'backup')
|
||||
@@ -568,8 +552,7 @@ class TestCompressedToQcow2(iotests.QMPTestCase):
|
||||
self.assert_no_active_block_jobs()
|
||||
|
||||
self.vm.pause_drive('drive0')
|
||||
result = self.vm.qmp(cmd, device='drive0', sync='full', compress=True, **args)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd(cmd, device='drive0', sync='full', compress=True, **args)
|
||||
|
||||
self.pause_job('drive0', wait=False)
|
||||
self.vm.resume_drive('drive0')
|
||||
@@ -582,8 +565,7 @@ class TestCompressedToQcow2(iotests.QMPTestCase):
|
||||
result = self.vm.qmp('query-block-jobs')
|
||||
self.assert_qmp(result, 'return[0]/offset', offset)
|
||||
|
||||
result = self.vm.qmp('block-job-resume', device='drive0')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-job-resume', device='drive0')
|
||||
|
||||
self.wait_until_completed()
|
||||
|
||||
|
||||
+32
-45
@@ -75,9 +75,8 @@ class TestSyncModesNoneAndTop(iotests.QMPTestCase):
|
||||
|
||||
def test_complete_top(self):
|
||||
self.assert_no_active_block_jobs()
|
||||
result = self.vm.qmp('drive-backup', device='drive0', sync='top',
|
||||
format=iotests.imgfmt, target=target_img)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('drive-backup', device='drive0', sync='top',
|
||||
format=iotests.imgfmt, target=target_img)
|
||||
|
||||
self.wait_until_completed(check_offset=False)
|
||||
|
||||
@@ -89,9 +88,8 @@ class TestSyncModesNoneAndTop(iotests.QMPTestCase):
|
||||
def test_cancel_sync_none(self):
|
||||
self.assert_no_active_block_jobs()
|
||||
|
||||
result = self.vm.qmp('drive-backup', device='drive0',
|
||||
sync='none', target=target_img)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('drive-backup', device='drive0',
|
||||
sync='none', target=target_img)
|
||||
time.sleep(1)
|
||||
self.vm.hmp_qemu_io('drive0', 'write -P0x5e 0 512')
|
||||
self.vm.hmp_qemu_io('drive0', 'aio_flush')
|
||||
@@ -115,18 +113,15 @@ class TestBeforeWriteNotifier(iotests.QMPTestCase):
|
||||
|
||||
def test_before_write_notifier(self):
|
||||
self.vm.pause_drive("drive0")
|
||||
result = self.vm.qmp('drive-backup', device='drive0',
|
||||
sync='full', target=target_img,
|
||||
format="file", speed=1)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
result = self.vm.qmp('block-job-pause', device="drive0")
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('drive-backup', device='drive0',
|
||||
sync='full', target=target_img,
|
||||
format="file", speed=1)
|
||||
self.vm.cmd('block-job-pause', device="drive0")
|
||||
# Speed is low enough that this must be an uncopied range, which will
|
||||
# trigger the before write notifier
|
||||
self.vm.hmp_qemu_io('drive0', 'aio_write -P 1 512512 512')
|
||||
self.vm.resume_drive("drive0")
|
||||
result = self.vm.qmp('block-job-resume', device="drive0")
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-job-resume', device="drive0")
|
||||
event = self.cancel_and_wait()
|
||||
self.assert_qmp(event, 'data/type', 'backup')
|
||||
|
||||
@@ -191,8 +186,7 @@ class BackupTest(iotests.QMPTestCase):
|
||||
self.qmp_backup_and_wait(device='drive0', format=iotests.imgfmt,
|
||||
sync='full', target=self.ref_img,
|
||||
auto_dismiss=False)
|
||||
res = self.vm.qmp('block-job-dismiss', id='drive0')
|
||||
self.assert_qmp(res, 'return', {})
|
||||
self.vm.cmd('block-job-dismiss', id='drive0')
|
||||
|
||||
# Now to the test backup: We simulate the following guest
|
||||
# writes:
|
||||
@@ -211,11 +205,9 @@ class BackupTest(iotests.QMPTestCase):
|
||||
('66', '1M', '1M')])
|
||||
|
||||
# Let the job complete
|
||||
res = self.vm.qmp('block-job-set-speed', device='drive0', speed=0)
|
||||
self.assert_qmp(res, 'return', {})
|
||||
self.vm.cmd('block-job-set-speed', device='drive0', speed=0)
|
||||
self.qmp_backup_wait('drive0')
|
||||
res = self.vm.qmp('block-job-dismiss', id='drive0')
|
||||
self.assert_qmp(res, 'return', {})
|
||||
self.vm.cmd('block-job-dismiss', id='drive0')
|
||||
|
||||
self.assertTrue(iotests.compare_images(self.ref_img, self.dest_img),
|
||||
'target image does not match reference image')
|
||||
@@ -237,8 +229,7 @@ class BackupTest(iotests.QMPTestCase):
|
||||
auto_dismiss=False)
|
||||
res = self.vm.qmp('query-block-jobs')
|
||||
self.assert_qmp(res, 'return[0]/status', 'concluded')
|
||||
res = self.vm.qmp('block-job-dismiss', id='drive0')
|
||||
self.assert_qmp(res, 'return', {})
|
||||
self.vm.cmd('block-job-dismiss', id='drive0')
|
||||
res = self.vm.qmp('query-block-jobs')
|
||||
self.assert_qmp(res, 'return', [])
|
||||
|
||||
@@ -263,8 +254,7 @@ class BackupTest(iotests.QMPTestCase):
|
||||
auto_dismiss=False)
|
||||
self.assertEqual(res, False)
|
||||
# OK, dismiss the zombie.
|
||||
res = self.vm.qmp('block-job-dismiss', id='drive0')
|
||||
self.assert_qmp(res, 'return', {})
|
||||
self.vm.cmd('block-job-dismiss', id='drive0')
|
||||
res = self.vm.qmp('query-block-jobs')
|
||||
self.assert_qmp(res, 'return', [])
|
||||
# Ensure it's really gone.
|
||||
@@ -281,23 +271,22 @@ class BackupTest(iotests.QMPTestCase):
|
||||
('0x55', '8M', '352k'),
|
||||
('0x78', '15872k', '1M')))
|
||||
# Add destination node via blkdebug
|
||||
res = self.vm.qmp('blockdev-add',
|
||||
node_name='target0',
|
||||
driver=iotests.imgfmt,
|
||||
file={
|
||||
'driver': 'blkdebug',
|
||||
'image': {
|
||||
'driver': 'file',
|
||||
'filename': self.dest_img
|
||||
},
|
||||
'inject-error': [{
|
||||
'event': 'write_aio',
|
||||
'errno': 5,
|
||||
'immediately': False,
|
||||
'once': True
|
||||
}],
|
||||
})
|
||||
self.assert_qmp(res, 'return', {})
|
||||
self.vm.cmd('blockdev-add',
|
||||
node_name='target0',
|
||||
driver=iotests.imgfmt,
|
||||
file={
|
||||
'driver': 'blkdebug',
|
||||
'image': {
|
||||
'driver': 'file',
|
||||
'filename': self.dest_img
|
||||
},
|
||||
'inject-error': [{
|
||||
'event': 'write_aio',
|
||||
'errno': 5,
|
||||
'immediately': False,
|
||||
'once': True
|
||||
}],
|
||||
})
|
||||
|
||||
res = self.qmp_backup(cmd='blockdev-backup',
|
||||
device='drive0', target='target0',
|
||||
@@ -323,8 +312,7 @@ class BackupTest(iotests.QMPTestCase):
|
||||
res = self.vm.qmp('query-block-jobs')
|
||||
self.assert_qmp(res, 'return[0]/status', 'paused')
|
||||
# OK, unstick job and move forward.
|
||||
res = self.vm.qmp('block-job-resume', device='drive0')
|
||||
self.assert_qmp(res, 'return', {})
|
||||
self.vm.cmd('block-job-resume', device='drive0')
|
||||
# And now we need to wait for it to conclude;
|
||||
res = self.qmp_backup_wait(device='drive0')
|
||||
self.assertTrue(res)
|
||||
@@ -332,8 +320,7 @@ class BackupTest(iotests.QMPTestCase):
|
||||
# Job should now be languishing:
|
||||
res = self.vm.qmp('query-block-jobs')
|
||||
self.assert_qmp(res, 'return[0]/status', 'concluded')
|
||||
res = self.vm.qmp('block-job-dismiss', id='drive0')
|
||||
self.assert_qmp(res, 'return', {})
|
||||
self.vm.cmd('block-job-dismiss', id='drive0')
|
||||
res = self.vm.qmp('query-block-jobs')
|
||||
self.assert_qmp(res, 'return', [])
|
||||
|
||||
|
||||
+15
-27
@@ -55,8 +55,7 @@ class ThrottleTestCase(iotests.QMPTestCase):
|
||||
# Set the I/O throttling parameters to all drives
|
||||
for i in range(0, ndrives):
|
||||
params['device'] = 'drive%d' % i
|
||||
result = self.vm.qmp("block_set_io_throttle", conv_keys=False, **params)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd("block_set_io_throttle", conv_keys=False, **params)
|
||||
|
||||
def do_test_throttle(self, ndrives, seconds, params, first_drive = 0):
|
||||
def check_limit(limit, num):
|
||||
@@ -253,8 +252,7 @@ class ThrottleTestCase(iotests.QMPTestCase):
|
||||
# drive1 remains in the group with a throttled request.
|
||||
params['bps_rd'] = 0
|
||||
params['device'] = 'drive0'
|
||||
result = self.vm.qmp("block_set_io_throttle", conv_keys=False, **params)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd("block_set_io_throttle", conv_keys=False, **params)
|
||||
|
||||
# Removing the I/O limits from drive0 drains its two pending requests.
|
||||
# The read request in drive1 is still throttled.
|
||||
@@ -286,8 +284,7 @@ class ThrottleTestGroupNames(iotests.QMPTestCase):
|
||||
|
||||
def set_io_throttle(self, device, params):
|
||||
params["device"] = device
|
||||
result = self.vm.qmp("block_set_io_throttle", conv_keys=False, **params)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd("block_set_io_throttle", conv_keys=False, **params)
|
||||
|
||||
def verify_name(self, device, name):
|
||||
result = self.vm.qmp("query-block")
|
||||
@@ -379,23 +376,19 @@ class ThrottleTestRemovableMedia(iotests.QMPTestCase):
|
||||
|
||||
def test_removable_media(self):
|
||||
# Add a couple of dummy nodes named cd0 and cd1
|
||||
result = self.vm.qmp("blockdev-add", driver="null-co",
|
||||
read_zeroes=True, node_name="cd0")
|
||||
self.assert_qmp(result, 'return', {})
|
||||
result = self.vm.qmp("blockdev-add", driver="null-co",
|
||||
read_zeroes=True, node_name="cd1")
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd("blockdev-add", driver="null-co",
|
||||
read_zeroes=True, node_name="cd0")
|
||||
self.vm.cmd("blockdev-add", driver="null-co",
|
||||
read_zeroes=True, node_name="cd1")
|
||||
|
||||
# Attach a CD drive with cd0 inserted
|
||||
result = self.vm.qmp("device_add", driver="scsi-cd",
|
||||
id="dev0", drive="cd0")
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd("device_add", driver="scsi-cd",
|
||||
id="dev0", drive="cd0")
|
||||
|
||||
# Set I/O limits
|
||||
args = { "id": "dev0", "iops": 100, "iops_rd": 0, "iops_wr": 0,
|
||||
"bps": 50, "bps_rd": 0, "bps_wr": 0 }
|
||||
result = self.vm.qmp("block_set_io_throttle", conv_keys=False, **args)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd("block_set_io_throttle", conv_keys=False, **args)
|
||||
|
||||
# Check that the I/O limits have been set
|
||||
result = self.vm.qmp("query-block")
|
||||
@@ -403,12 +396,9 @@ class ThrottleTestRemovableMedia(iotests.QMPTestCase):
|
||||
self.assert_qmp(result, 'return[0]/inserted/bps', 50)
|
||||
|
||||
# Now eject cd0 and insert cd1
|
||||
result = self.vm.qmp("blockdev-open-tray", id='dev0')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
result = self.vm.qmp("blockdev-remove-medium", id='dev0')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
result = self.vm.qmp("blockdev-insert-medium", id='dev0', node_name='cd1')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd("blockdev-open-tray", id='dev0')
|
||||
self.vm.cmd("blockdev-remove-medium", id='dev0')
|
||||
self.vm.cmd("blockdev-insert-medium", id='dev0', node_name='cd1')
|
||||
|
||||
# Check that the I/O limits are still the same
|
||||
result = self.vm.qmp("query-block")
|
||||
@@ -416,16 +406,14 @@ class ThrottleTestRemovableMedia(iotests.QMPTestCase):
|
||||
self.assert_qmp(result, 'return[0]/inserted/bps', 50)
|
||||
|
||||
# Eject cd1
|
||||
result = self.vm.qmp("blockdev-remove-medium", id='dev0')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd("blockdev-remove-medium", id='dev0')
|
||||
|
||||
# Check that we can't set limits if the device has no medium
|
||||
result = self.vm.qmp("block_set_io_throttle", conv_keys=False, **args)
|
||||
self.assert_qmp(result, 'error/class', 'GenericError')
|
||||
|
||||
# Remove the CD drive
|
||||
result = self.vm.qmp("device_del", id='dev0')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd("device_del", id='dev0')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
+93
-130
@@ -74,11 +74,9 @@ class ChangeBaseClass(iotests.QMPTestCase):
|
||||
class GeneralChangeTestsBaseClass(ChangeBaseClass):
|
||||
|
||||
def test_blockdev_change_medium(self):
|
||||
result = self.vm.qmp('blockdev-change-medium',
|
||||
id=self.device_name, filename=new_img,
|
||||
format=iotests.imgfmt)
|
||||
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-change-medium',
|
||||
id=self.device_name, filename=new_img,
|
||||
format=iotests.imgfmt)
|
||||
|
||||
self.wait_for_open()
|
||||
self.wait_for_close()
|
||||
@@ -89,8 +87,7 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
|
||||
self.assert_qmp(result, 'return[0]/inserted/image/filename', new_img)
|
||||
|
||||
def test_eject(self):
|
||||
result = self.vm.qmp('eject', id=self.device_name, force=True)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('eject', id=self.device_name, force=True)
|
||||
|
||||
self.wait_for_open()
|
||||
|
||||
@@ -100,8 +97,7 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
|
||||
self.assert_qmp_absent(result, 'return[0]/inserted')
|
||||
|
||||
def test_tray_eject_change(self):
|
||||
result = self.vm.qmp('eject', id=self.device_name, force=True)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('eject', id=self.device_name, force=True)
|
||||
|
||||
self.wait_for_open()
|
||||
|
||||
@@ -110,9 +106,8 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
|
||||
self.assert_qmp(result, 'return[0]/tray_open', True)
|
||||
self.assert_qmp_absent(result, 'return[0]/inserted')
|
||||
|
||||
result = self.vm.qmp('blockdev-change-medium', id=self.device_name,
|
||||
filename=new_img, format=iotests.imgfmt)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-change-medium', id=self.device_name,
|
||||
filename=new_img, format=iotests.imgfmt)
|
||||
|
||||
self.wait_for_close()
|
||||
|
||||
@@ -122,9 +117,8 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
|
||||
self.assert_qmp(result, 'return[0]/inserted/image/filename', new_img)
|
||||
|
||||
def test_tray_open_close(self):
|
||||
result = self.vm.qmp('blockdev-open-tray',
|
||||
id=self.device_name, force=True)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-open-tray',
|
||||
id=self.device_name, force=True)
|
||||
|
||||
self.wait_for_open()
|
||||
|
||||
@@ -136,8 +130,7 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
|
||||
else:
|
||||
self.assert_qmp(result, 'return[0]/inserted/image/filename', old_img)
|
||||
|
||||
result = self.vm.qmp('blockdev-close-tray', id=self.device_name)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-close-tray', id=self.device_name)
|
||||
|
||||
if self.has_real_tray or not self.was_empty:
|
||||
self.wait_for_close()
|
||||
@@ -151,8 +144,7 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
|
||||
self.assert_qmp(result, 'return[0]/inserted/image/filename', old_img)
|
||||
|
||||
def test_tray_eject_close(self):
|
||||
result = self.vm.qmp('eject', id=self.device_name, force=True)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('eject', id=self.device_name, force=True)
|
||||
|
||||
self.wait_for_open()
|
||||
|
||||
@@ -161,8 +153,7 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
|
||||
self.assert_qmp(result, 'return[0]/tray_open', True)
|
||||
self.assert_qmp_absent(result, 'return[0]/inserted')
|
||||
|
||||
result = self.vm.qmp('blockdev-close-tray', id=self.device_name)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-close-tray', id=self.device_name)
|
||||
|
||||
self.wait_for_close()
|
||||
|
||||
@@ -172,9 +163,8 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
|
||||
self.assert_qmp_absent(result, 'return[0]/inserted')
|
||||
|
||||
def test_tray_open_change(self):
|
||||
result = self.vm.qmp('blockdev-open-tray', id=self.device_name,
|
||||
force=True)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-open-tray', id=self.device_name,
|
||||
force=True)
|
||||
|
||||
self.wait_for_open()
|
||||
|
||||
@@ -186,10 +176,9 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
|
||||
else:
|
||||
self.assert_qmp(result, 'return[0]/inserted/image/filename', old_img)
|
||||
|
||||
result = self.vm.qmp('blockdev-change-medium', id=self.device_name,
|
||||
filename=new_img,
|
||||
format=iotests.imgfmt)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-change-medium', id=self.device_name,
|
||||
filename=new_img,
|
||||
format=iotests.imgfmt)
|
||||
|
||||
self.wait_for_close()
|
||||
|
||||
@@ -199,17 +188,15 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
|
||||
self.assert_qmp(result, 'return[0]/inserted/image/filename', new_img)
|
||||
|
||||
def test_cycle(self, read_only_node=False):
|
||||
result = self.vm.qmp('blockdev-add',
|
||||
node_name='new',
|
||||
driver=iotests.imgfmt,
|
||||
read_only=read_only_node,
|
||||
file={'filename': new_img,
|
||||
'driver': 'file'})
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-add',
|
||||
node_name='new',
|
||||
driver=iotests.imgfmt,
|
||||
read_only=read_only_node,
|
||||
file={'filename': new_img,
|
||||
'driver': 'file'})
|
||||
|
||||
result = self.vm.qmp('blockdev-open-tray',
|
||||
id=self.device_name, force=True)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-open-tray',
|
||||
id=self.device_name, force=True)
|
||||
|
||||
self.wait_for_open()
|
||||
|
||||
@@ -221,26 +208,23 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
|
||||
else:
|
||||
self.assert_qmp(result, 'return[0]/inserted/image/filename', old_img)
|
||||
|
||||
result = self.vm.qmp('blockdev-remove-medium',
|
||||
id=self.device_name)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-remove-medium',
|
||||
id=self.device_name)
|
||||
|
||||
result = self.vm.qmp('query-block')
|
||||
if self.has_real_tray:
|
||||
self.assert_qmp(result, 'return[0]/tray_open', True)
|
||||
self.assert_qmp_absent(result, 'return[0]/inserted')
|
||||
|
||||
result = self.vm.qmp('blockdev-insert-medium',
|
||||
id=self.device_name, node_name='new')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-insert-medium',
|
||||
id=self.device_name, node_name='new')
|
||||
|
||||
result = self.vm.qmp('query-block')
|
||||
if self.has_real_tray:
|
||||
self.assert_qmp(result, 'return[0]/tray_open', True)
|
||||
self.assert_qmp(result, 'return[0]/inserted/image/filename', new_img)
|
||||
|
||||
result = self.vm.qmp('blockdev-close-tray', id=self.device_name)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-close-tray', id=self.device_name)
|
||||
|
||||
self.wait_for_close()
|
||||
|
||||
@@ -253,9 +237,8 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
|
||||
self.test_cycle(True)
|
||||
|
||||
def test_close_on_closed(self):
|
||||
result = self.vm.qmp('blockdev-close-tray', id=self.device_name)
|
||||
# Should be a no-op
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-close-tray', id=self.device_name)
|
||||
self.assertEqual(self.vm.get_qmp_events(wait=False), [])
|
||||
|
||||
def test_remove_on_closed(self):
|
||||
@@ -269,12 +252,11 @@ class GeneralChangeTestsBaseClass(ChangeBaseClass):
|
||||
if not self.has_real_tray:
|
||||
return
|
||||
|
||||
result = self.vm.qmp('blockdev-add',
|
||||
node_name='new',
|
||||
driver=iotests.imgfmt,
|
||||
file={'filename': new_img,
|
||||
'driver': 'file'})
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-add',
|
||||
node_name='new',
|
||||
driver=iotests.imgfmt,
|
||||
file={'filename': new_img,
|
||||
'driver': 'file'})
|
||||
|
||||
result = self.vm.qmp('blockdev-insert-medium', id=self.device_name,
|
||||
node_name='new')
|
||||
@@ -307,15 +289,13 @@ class TestInitiallyFilled(GeneralChangeTestsBaseClass):
|
||||
os.remove(new_img)
|
||||
|
||||
def test_insert_on_filled(self):
|
||||
result = self.vm.qmp('blockdev-add',
|
||||
node_name='new',
|
||||
driver=iotests.imgfmt,
|
||||
file={'filename': new_img,
|
||||
'driver': 'file'})
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-add',
|
||||
node_name='new',
|
||||
driver=iotests.imgfmt,
|
||||
file={'filename': new_img,
|
||||
'driver': 'file'})
|
||||
|
||||
result = self.vm.qmp('blockdev-open-tray', id=self.device_name)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-open-tray', id=self.device_name)
|
||||
|
||||
self.wait_for_open()
|
||||
|
||||
@@ -344,14 +324,12 @@ class TestInitiallyEmpty(GeneralChangeTestsBaseClass):
|
||||
os.remove(new_img)
|
||||
|
||||
def test_remove_on_empty(self):
|
||||
result = self.vm.qmp('blockdev-open-tray', id=self.device_name)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-open-tray', id=self.device_name)
|
||||
|
||||
self.wait_for_open()
|
||||
|
||||
result = self.vm.qmp('blockdev-remove-medium', id=self.device_name)
|
||||
# Should be a no-op
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-remove-medium', id=self.device_name)
|
||||
|
||||
# Do this in a function to avoid leaking variables like case into the global
|
||||
# name space (otherwise tests would be run for the abstract base classes)
|
||||
@@ -399,11 +377,10 @@ class TestChangeReadOnly(ChangeBaseClass):
|
||||
self.assert_qmp(result, 'return[0]/inserted/ro', True)
|
||||
self.assert_qmp(result, 'return[0]/inserted/image/filename', old_img)
|
||||
|
||||
result = self.vm.qmp('blockdev-change-medium', id=self.device_name,
|
||||
filename=new_img,
|
||||
format=iotests.imgfmt,
|
||||
read_only_mode='retain')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-change-medium', id=self.device_name,
|
||||
filename=new_img,
|
||||
format=iotests.imgfmt,
|
||||
read_only_mode='retain')
|
||||
|
||||
result = self.vm.qmp('query-block')
|
||||
self.assert_qmp(result, 'return[0]/inserted/ro', True)
|
||||
@@ -419,11 +396,10 @@ class TestChangeReadOnly(ChangeBaseClass):
|
||||
self.assert_qmp(result, 'return[0]/inserted/ro', True)
|
||||
self.assert_qmp(result, 'return[0]/inserted/image/filename', old_img)
|
||||
|
||||
result = self.vm.qmp('blockdev-change-medium', id=self.device_name,
|
||||
filename=new_img,
|
||||
format=iotests.imgfmt,
|
||||
read_only_mode='retain')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-change-medium', id=self.device_name,
|
||||
filename=new_img,
|
||||
format=iotests.imgfmt,
|
||||
read_only_mode='retain')
|
||||
|
||||
result = self.vm.qmp('query-block')
|
||||
self.assert_qmp(result, 'return[0]/inserted/ro', True)
|
||||
@@ -462,12 +438,11 @@ class TestChangeReadOnly(ChangeBaseClass):
|
||||
self.assert_qmp(result, 'return[0]/inserted/ro', True)
|
||||
self.assert_qmp(result, 'return[0]/inserted/image/filename', old_img)
|
||||
|
||||
result = self.vm.qmp('blockdev-change-medium',
|
||||
id=self.device_name,
|
||||
filename=new_img,
|
||||
format=iotests.imgfmt,
|
||||
read_only_mode='read-write')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-change-medium',
|
||||
id=self.device_name,
|
||||
filename=new_img,
|
||||
format=iotests.imgfmt,
|
||||
read_only_mode='read-write')
|
||||
|
||||
result = self.vm.qmp('query-block')
|
||||
self.assert_qmp(result, 'return[0]/inserted/ro', False)
|
||||
@@ -483,12 +458,11 @@ class TestChangeReadOnly(ChangeBaseClass):
|
||||
self.assert_qmp(result, 'return[0]/inserted/ro', False)
|
||||
self.assert_qmp(result, 'return[0]/inserted/image/filename', old_img)
|
||||
|
||||
result = self.vm.qmp('blockdev-change-medium',
|
||||
id=self.device_name,
|
||||
filename=new_img,
|
||||
format=iotests.imgfmt,
|
||||
read_only_mode='read-only')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-change-medium',
|
||||
id=self.device_name,
|
||||
filename=new_img,
|
||||
format=iotests.imgfmt,
|
||||
read_only_mode='read-only')
|
||||
|
||||
result = self.vm.qmp('query-block')
|
||||
self.assert_qmp(result, 'return[0]/inserted/ro', True)
|
||||
@@ -503,12 +477,11 @@ class TestChangeReadOnly(ChangeBaseClass):
|
||||
self.assert_qmp(result, 'return[0]/inserted/ro', False)
|
||||
self.assert_qmp(result, 'return[0]/inserted/image/filename', old_img)
|
||||
|
||||
result = self.vm.qmp('blockdev-change-medium',
|
||||
id=self.device_name,
|
||||
filename=new_img,
|
||||
format=iotests.imgfmt,
|
||||
read_only_mode='read-only')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-change-medium',
|
||||
id=self.device_name,
|
||||
filename=new_img,
|
||||
format=iotests.imgfmt,
|
||||
read_only_mode='read-only')
|
||||
|
||||
result = self.vm.qmp('query-block')
|
||||
self.assert_qmp(result, 'return[0]/inserted/ro', True)
|
||||
@@ -546,11 +519,10 @@ class TestChangeReadOnly(ChangeBaseClass):
|
||||
self.assert_qmp(result, 'return[0]/inserted/ro', True)
|
||||
self.assert_qmp(result, 'return[0]/inserted/image/filename', old_img)
|
||||
|
||||
result = self.vm.qmp('blockdev-change-medium', id=self.device_name,
|
||||
filename=new_img,
|
||||
format=iotests.imgfmt,
|
||||
read_only_mode='retain')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-change-medium', id=self.device_name,
|
||||
filename=new_img,
|
||||
format=iotests.imgfmt,
|
||||
read_only_mode='retain')
|
||||
|
||||
result = self.vm.qmp('query-block')
|
||||
self.assert_qmp(result, 'return[0]/inserted/ro', True)
|
||||
@@ -587,27 +559,24 @@ class TestChangeReadOnly(ChangeBaseClass):
|
||||
self.assert_qmp(result, 'return[0]/inserted/ro', False)
|
||||
self.assert_qmp(result, 'return[0]/inserted/image/filename', old_img)
|
||||
|
||||
result = self.vm.qmp('blockdev-add',
|
||||
node_name='new',
|
||||
driver=iotests.imgfmt,
|
||||
read_only=True,
|
||||
file={'filename': new_img,
|
||||
'driver': 'file'})
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-add',
|
||||
node_name='new',
|
||||
driver=iotests.imgfmt,
|
||||
read_only=True,
|
||||
file={'filename': new_img,
|
||||
'driver': 'file'})
|
||||
|
||||
result = self.vm.qmp('query-block')
|
||||
self.assert_qmp(result, 'return[0]/inserted/ro', False)
|
||||
self.assert_qmp(result, 'return[0]/inserted/image/filename', old_img)
|
||||
|
||||
result = self.vm.qmp('blockdev-remove-medium', id=self.device_name)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-remove-medium', id=self.device_name)
|
||||
|
||||
result = self.vm.qmp('query-block')
|
||||
self.assert_qmp_absent(result, 'return[0]/inserted')
|
||||
|
||||
result = self.vm.qmp('blockdev-insert-medium', id=self.device_name,
|
||||
node_name='new')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-insert-medium', id=self.device_name,
|
||||
node_name='new')
|
||||
|
||||
result = self.vm.qmp('query-block')
|
||||
self.assert_qmp(result, 'return[0]/inserted/ro', True)
|
||||
@@ -638,22 +607,19 @@ class TestBlockJobsAfterCycle(ChangeBaseClass):
|
||||
|
||||
# For device-less BBs, calling blockdev-open-tray or blockdev-close-tray
|
||||
# is not necessary
|
||||
result = self.vm.qmp('blockdev-remove-medium', id=self.device_name)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-remove-medium', id=self.device_name)
|
||||
|
||||
result = self.vm.qmp('query-block')
|
||||
self.assert_qmp_absent(result, 'return[0]/inserted')
|
||||
|
||||
result = self.vm.qmp('blockdev-add',
|
||||
node_name='node0',
|
||||
driver=iotests.imgfmt,
|
||||
file={'filename': old_img,
|
||||
'driver': 'file'})
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-add',
|
||||
node_name='node0',
|
||||
driver=iotests.imgfmt,
|
||||
file={'filename': old_img,
|
||||
'driver': 'file'})
|
||||
|
||||
result = self.vm.qmp('blockdev-insert-medium', id=self.device_name,
|
||||
node_name='node0')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-insert-medium', id=self.device_name,
|
||||
node_name='node0')
|
||||
|
||||
result = self.vm.qmp('query-block')
|
||||
self.assert_qmp(result, 'return[0]/inserted/image/filename', old_img)
|
||||
@@ -670,10 +636,9 @@ class TestBlockJobsAfterCycle(ChangeBaseClass):
|
||||
@iotests.skip_for_formats(('vpc', 'parallels', 'qcow', 'vdi', 'vmdk', 'raw',
|
||||
'vhdx'))
|
||||
def test_snapshot_and_commit(self):
|
||||
result = self.vm.qmp('blockdev-snapshot-sync', device='drive0',
|
||||
snapshot_file=new_img,
|
||||
format=iotests.imgfmt)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-snapshot-sync', device='drive0',
|
||||
snapshot_file=new_img,
|
||||
format=iotests.imgfmt)
|
||||
|
||||
result = self.vm.qmp('query-block')
|
||||
self.assert_qmp(result, 'return[0]/inserted/image/filename', new_img)
|
||||
@@ -681,16 +646,14 @@ class TestBlockJobsAfterCycle(ChangeBaseClass):
|
||||
'return[0]/inserted/image/backing-image/filename',
|
||||
old_img)
|
||||
|
||||
result = self.vm.qmp('block-commit', device='drive0')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-commit', device='drive0')
|
||||
|
||||
self.vm.event_wait(name='BLOCK_JOB_READY')
|
||||
|
||||
result = self.vm.qmp('query-block-jobs')
|
||||
self.assert_qmp(result, 'return[0]/device', 'drive0')
|
||||
|
||||
result = self.vm.qmp('block-job-complete', device='drive0')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-job-complete', device='drive0')
|
||||
|
||||
self.vm.event_wait(name='BLOCK_JOB_COMPLETED')
|
||||
|
||||
|
||||
+46
-56
@@ -24,6 +24,7 @@
|
||||
import os
|
||||
import iotests
|
||||
from iotests import try_remove
|
||||
from qemu.qmp.qmp_client import ExecuteError
|
||||
|
||||
|
||||
def io_write_patterns(img, patterns):
|
||||
@@ -141,8 +142,7 @@ class TestIncrementalBackupBase(iotests.QMPTestCase):
|
||||
|
||||
|
||||
def do_qmp_backup(self, error='Input/output error', **kwargs):
|
||||
res = self.vm.qmp('drive-backup', **kwargs)
|
||||
self.assert_qmp(res, 'return', {})
|
||||
self.vm.cmd('drive-backup', **kwargs)
|
||||
return self.wait_qmp_backup(kwargs['device'], error)
|
||||
|
||||
|
||||
@@ -201,9 +201,8 @@ class TestIncrementalBackupBase(iotests.QMPTestCase):
|
||||
def add_bitmap(self, name, drive, **kwargs):
|
||||
bitmap = Bitmap(name, drive)
|
||||
self.bitmaps.append(bitmap)
|
||||
result = self.vm.qmp('block-dirty-bitmap-add', node=drive['id'],
|
||||
name=bitmap.name, **kwargs)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-dirty-bitmap-add', node=drive['id'],
|
||||
name=bitmap.name, **kwargs)
|
||||
return bitmap
|
||||
|
||||
|
||||
@@ -388,13 +387,12 @@ class TestIncrementalBackup(TestIncrementalBackupBase):
|
||||
('0x64', '32736k', '64k')))
|
||||
bitmap1 = self.add_bitmap('bitmap1', drive0)
|
||||
|
||||
result = self.vm.qmp('transaction', actions=[
|
||||
self.vm.cmd('transaction', actions=[
|
||||
transaction_bitmap_clear(bitmap0.drive['id'], bitmap0.name),
|
||||
transaction_bitmap_clear(bitmap1.drive['id'], bitmap1.name),
|
||||
transaction_drive_backup(drive0['id'], drive0['backup'],
|
||||
sync='full', format=drive0['fmt'])
|
||||
])
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.wait_until_completed(drive0['id'])
|
||||
self.files.append(drive0['backup'])
|
||||
|
||||
@@ -417,7 +415,7 @@ class TestIncrementalBackup(TestIncrementalBackupBase):
|
||||
('0xcd', '32M', '124k')))
|
||||
|
||||
# Create a blkdebug interface to this img as 'drive1'
|
||||
result = self.vm.qmp('blockdev-add',
|
||||
self.vm.cmd('blockdev-add',
|
||||
node_name=drive1['id'],
|
||||
driver=drive1['fmt'],
|
||||
file={
|
||||
@@ -440,7 +438,6 @@ class TestIncrementalBackup(TestIncrementalBackupBase):
|
||||
}],
|
||||
}
|
||||
)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
|
||||
# Create bitmaps and full backups for both drives
|
||||
drive0 = self.drives[0]
|
||||
@@ -475,9 +472,8 @@ class TestIncrementalBackup(TestIncrementalBackupBase):
|
||||
format=drive1['fmt'], mode='existing',
|
||||
bitmap=dr1bm0.name)
|
||||
]
|
||||
result = self.vm.qmp('transaction', actions=transaction,
|
||||
properties={'completion-mode': 'grouped'} )
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('transaction', actions=transaction,
|
||||
properties={'completion-mode': 'grouped'} )
|
||||
|
||||
# Observe that drive0's backup is cancelled and drive1 completes with
|
||||
# an error.
|
||||
@@ -504,9 +500,8 @@ class TestIncrementalBackup(TestIncrementalBackupBase):
|
||||
target1 = self.prepare_backup(dr1bm0)
|
||||
|
||||
# Re-run the exact same transaction.
|
||||
result = self.vm.qmp('transaction', actions=transaction,
|
||||
properties={'completion-mode':'grouped'})
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('transaction', actions=transaction,
|
||||
properties={'completion-mode':'grouped'})
|
||||
|
||||
# Both should complete successfully this time.
|
||||
self.assertTrue(self.wait_qmp_backup(drive0['id']))
|
||||
@@ -567,7 +562,7 @@ class TestIncrementalBackup(TestIncrementalBackupBase):
|
||||
The granularity must always be a power of 2.
|
||||
'''
|
||||
self.assert_no_active_block_jobs()
|
||||
self.assertRaises(AssertionError, self.add_bitmap,
|
||||
self.assertRaises(ExecuteError, self.add_bitmap,
|
||||
'bitmap0', self.drives[0],
|
||||
granularity=64000)
|
||||
|
||||
@@ -585,9 +580,8 @@ class TestIncrementalBackup(TestIncrementalBackupBase):
|
||||
|
||||
self.add_bitmap('bitmap0', self.drives[0])
|
||||
|
||||
res = self.vm.qmp('block_resize', device=self.drives[0]['id'],
|
||||
size=(65 * 1048576))
|
||||
self.assert_qmp(res, 'return', {})
|
||||
self.vm.cmd('block_resize', device=self.drives[0]['id'],
|
||||
size=(65 * 1048576))
|
||||
|
||||
# Dirty the image past the old end
|
||||
self.vm.hmp_qemu_io(self.drives[0]['id'], 'write 64M 64k')
|
||||
@@ -617,7 +611,7 @@ class TestIncrementalBackupBlkdebug(TestIncrementalBackupBase):
|
||||
'''
|
||||
|
||||
drive0 = self.drives[0]
|
||||
result = self.vm.qmp('blockdev-add',
|
||||
self.vm.cmd('blockdev-add',
|
||||
node_name=drive0['id'],
|
||||
driver=drive0['fmt'],
|
||||
file={
|
||||
@@ -640,7 +634,6 @@ class TestIncrementalBackupBlkdebug(TestIncrementalBackupBase):
|
||||
}],
|
||||
}
|
||||
)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
|
||||
self.create_anchor_backup(drive0)
|
||||
self.add_bitmap('bitmap0', drive0)
|
||||
@@ -668,29 +661,28 @@ class TestIncrementalBackupBlkdebug(TestIncrementalBackupBase):
|
||||
drive0 = self.drives[0]
|
||||
# NB: The blkdebug script here looks for a "flush, read" pattern.
|
||||
# The flush occurs in hmp_io_writes, and the read during the block job.
|
||||
result = self.vm.qmp('blockdev-add',
|
||||
node_name=drive0['id'],
|
||||
driver=drive0['fmt'],
|
||||
file={
|
||||
'driver': 'blkdebug',
|
||||
'image': {
|
||||
'driver': 'file',
|
||||
'filename': drive0['file']
|
||||
},
|
||||
'set-state': [{
|
||||
'event': 'flush_to_disk',
|
||||
'state': 1,
|
||||
'new_state': 2
|
||||
}],
|
||||
'inject-error': [{
|
||||
'event': 'read_aio',
|
||||
'errno': 5,
|
||||
'state': 2,
|
||||
'immediately': False,
|
||||
'once': True
|
||||
}],
|
||||
})
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-add',
|
||||
node_name=drive0['id'],
|
||||
driver=drive0['fmt'],
|
||||
file={
|
||||
'driver': 'blkdebug',
|
||||
'image': {
|
||||
'driver': 'file',
|
||||
'filename': drive0['file']
|
||||
},
|
||||
'set-state': [{
|
||||
'event': 'flush_to_disk',
|
||||
'state': 1,
|
||||
'new_state': 2
|
||||
}],
|
||||
'inject-error': [{
|
||||
'event': 'read_aio',
|
||||
'errno': 5,
|
||||
'state': 2,
|
||||
'immediately': False,
|
||||
'once': True
|
||||
}],
|
||||
})
|
||||
self.create_anchor_backup(drive0)
|
||||
bitmap = self.add_bitmap('bitmap0', drive0)
|
||||
|
||||
@@ -711,16 +703,15 @@ class TestIncrementalBackupBlkdebug(TestIncrementalBackupBase):
|
||||
# Start backup
|
||||
parent, _ = bitmap.last_target()
|
||||
target = self.prepare_backup(bitmap, parent)
|
||||
res = self.vm.qmp('drive-backup',
|
||||
job_id=bitmap.drive['id'],
|
||||
device=bitmap.drive['id'],
|
||||
sync='incremental',
|
||||
bitmap=bitmap.name,
|
||||
format=bitmap.drive['fmt'],
|
||||
target=target,
|
||||
mode='existing',
|
||||
on_source_error='stop')
|
||||
self.assert_qmp(res, 'return', {})
|
||||
self.vm.cmd('drive-backup',
|
||||
job_id=bitmap.drive['id'],
|
||||
device=bitmap.drive['id'],
|
||||
sync='incremental',
|
||||
bitmap=bitmap.name,
|
||||
format=bitmap.drive['fmt'],
|
||||
target=target,
|
||||
mode='existing',
|
||||
on_source_error='stop')
|
||||
|
||||
# Wait for the error
|
||||
event = self.vm.event_wait(name="BLOCK_JOB_ERROR",
|
||||
@@ -739,8 +730,7 @@ class TestIncrementalBackupBlkdebug(TestIncrementalBackupBase):
|
||||
}))
|
||||
|
||||
# Resume and check incremental backup for consistency
|
||||
res = self.vm.qmp('block-job-resume', device=bitmap.drive['id'])
|
||||
self.assert_qmp(res, 'return', {})
|
||||
self.vm.cmd('block-job-resume', device=bitmap.drive['id'])
|
||||
self.wait_qmp_backup(bitmap.drive['id'])
|
||||
|
||||
# Bitmap Status Check
|
||||
|
||||
@@ -55,11 +55,9 @@ class TestStopWithBlockJob(iotests.QMPTestCase):
|
||||
def do_test_stop(self, cmd, **args):
|
||||
"""Test 'stop' while block job is running on a throttled drive.
|
||||
The 'stop' command shouldn't drain the job"""
|
||||
result = self.vm.qmp(cmd, **args)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd(cmd, **args)
|
||||
|
||||
result = self.vm.qmp("stop")
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd("stop")
|
||||
result = self.vm.qmp("query-block-jobs")
|
||||
|
||||
self.assert_qmp(result, 'return[0]/status', 'running')
|
||||
@@ -87,7 +85,7 @@ class TestStopWithBlockJob(iotests.QMPTestCase):
|
||||
iotests.qemu_img('create', '-f', iotests.imgfmt, self.overlay_img,
|
||||
'1G')
|
||||
|
||||
result = self.vm.qmp('blockdev-add', {
|
||||
self.vm.cmd('blockdev-add', {
|
||||
'node-name': 'overlay',
|
||||
'driver': iotests.imgfmt,
|
||||
'file': {
|
||||
@@ -95,11 +93,9 @@ class TestStopWithBlockJob(iotests.QMPTestCase):
|
||||
'filename': self.overlay_img
|
||||
}
|
||||
})
|
||||
self.assert_qmp(result, 'return', {})
|
||||
|
||||
result = self.vm.qmp('blockdev-snapshot',
|
||||
node='source', overlay='overlay')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-snapshot',
|
||||
node='source', overlay='overlay')
|
||||
|
||||
self.do_test_stop('block-commit', device='drive0', top_node='source')
|
||||
|
||||
|
||||
@@ -47,9 +47,8 @@ class TestSingleDrive(iotests.QMPTestCase):
|
||||
pass
|
||||
|
||||
def test_mirror_discard(self):
|
||||
result = self.vm.qmp('drive-mirror', device='drive0', sync='full',
|
||||
target=target_img)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('drive-mirror', device='drive0', sync='full',
|
||||
target=target_img)
|
||||
self.vm.hmp_qemu_io('drive0', 'discard 0 64k')
|
||||
self.complete_and_wait('drive0')
|
||||
self.vm.shutdown()
|
||||
|
||||
+16
-29
@@ -58,8 +58,7 @@ class TestBlockdevDel(iotests.QMPTestCase):
|
||||
'file': {'driver': 'file',
|
||||
'node-name': file_node,
|
||||
'filename': base_img}}
|
||||
result = self.vm.qmp('blockdev-add', conv_keys = False, **opts)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-add', conv_keys = False, **opts)
|
||||
self.checkBlockDriverState(node)
|
||||
self.checkBlockDriverState(file_node)
|
||||
|
||||
@@ -73,8 +72,7 @@ class TestBlockdevDel(iotests.QMPTestCase):
|
||||
'backing': None,
|
||||
'file': {'driver': 'file',
|
||||
'filename': new_img}}
|
||||
result = self.vm.qmp('blockdev-add', conv_keys = False, **opts)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-add', conv_keys = False, **opts)
|
||||
self.checkBlockDriverState(node)
|
||||
|
||||
# Delete a BlockDriverState
|
||||
@@ -89,17 +87,14 @@ class TestBlockdevDel(iotests.QMPTestCase):
|
||||
|
||||
# Add a device model
|
||||
def addDeviceModel(self, device, backend, driver = 'virtio-blk'):
|
||||
result = self.vm.qmp('device_add', id = device,
|
||||
driver = driver, drive = backend)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('device_add', id = device,
|
||||
driver = driver, drive = backend)
|
||||
|
||||
# Delete a device model
|
||||
def delDeviceModel(self, device, is_virtio_blk = True):
|
||||
result = self.vm.qmp('device_del', id = device)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('device_del', id = device)
|
||||
|
||||
result = self.vm.qmp('system_reset')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('system_reset')
|
||||
|
||||
if is_virtio_blk:
|
||||
device_path = '/machine/peripheral/%s/virtio-backend' % device
|
||||
@@ -126,9 +121,8 @@ class TestBlockdevDel(iotests.QMPTestCase):
|
||||
# Insert a BlockDriverState
|
||||
def insertDrive(self, device, node):
|
||||
self.checkBlockDriverState(node)
|
||||
result = self.vm.qmp('blockdev-insert-medium',
|
||||
id = device, node_name = node)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-insert-medium',
|
||||
id = device, node_name = node)
|
||||
self.checkBlockDriverState(node)
|
||||
|
||||
# Create a snapshot using 'blockdev-snapshot-sync'
|
||||
@@ -139,8 +133,7 @@ class TestBlockdevDel(iotests.QMPTestCase):
|
||||
'snapshot-file': new_img,
|
||||
'snapshot-node-name': overlay,
|
||||
'format': iotests.imgfmt}
|
||||
result = self.vm.qmp('blockdev-snapshot-sync', conv_keys=False, **opts)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-snapshot-sync', conv_keys=False, **opts)
|
||||
self.checkBlockDriverState(node)
|
||||
self.checkBlockDriverState(overlay)
|
||||
|
||||
@@ -148,9 +141,8 @@ class TestBlockdevDel(iotests.QMPTestCase):
|
||||
def createSnapshot(self, node, overlay):
|
||||
self.checkBlockDriverState(node)
|
||||
self.checkBlockDriverState(overlay)
|
||||
result = self.vm.qmp('blockdev-snapshot',
|
||||
node = node, overlay = overlay)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-snapshot',
|
||||
node = node, overlay = overlay)
|
||||
self.checkBlockDriverState(node)
|
||||
self.checkBlockDriverState(overlay)
|
||||
|
||||
@@ -163,14 +155,12 @@ class TestBlockdevDel(iotests.QMPTestCase):
|
||||
'node-name': new_node,
|
||||
'sync': 'top',
|
||||
'format': iotests.imgfmt}
|
||||
result = self.vm.qmp('drive-mirror', conv_keys=False, **opts)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('drive-mirror', conv_keys=False, **opts)
|
||||
self.checkBlockDriverState(new_node)
|
||||
|
||||
# Complete an existing block job
|
||||
def completeBlockJob(self, id, node_before, node_after):
|
||||
result = self.vm.qmp('block-job-complete', device=id)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-job-complete', device=id)
|
||||
self.wait_until_completed(id)
|
||||
|
||||
# Add a BlkDebug node
|
||||
@@ -186,8 +176,7 @@ class TestBlockdevDel(iotests.QMPTestCase):
|
||||
opts = {'driver': 'blkdebug',
|
||||
'node-name': debug,
|
||||
'image': image}
|
||||
result = self.vm.qmp('blockdev-add', conv_keys = False, **opts)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-add', conv_keys = False, **opts)
|
||||
self.checkBlockDriverState(node)
|
||||
self.checkBlockDriverState(debug)
|
||||
|
||||
@@ -211,8 +200,7 @@ class TestBlockdevDel(iotests.QMPTestCase):
|
||||
'node-name': blkverify,
|
||||
'test': node_0,
|
||||
'raw': node_1}
|
||||
result = self.vm.qmp('blockdev-add', conv_keys = False, **opts)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-add', conv_keys = False, **opts)
|
||||
self.checkBlockDriverState(test)
|
||||
self.checkBlockDriverState(raw)
|
||||
self.checkBlockDriverState(blkverify)
|
||||
@@ -235,8 +223,7 @@ class TestBlockdevDel(iotests.QMPTestCase):
|
||||
'node-name': quorum,
|
||||
'vote-threshold': 1,
|
||||
'children': [ child_0, child_1 ]}
|
||||
result = self.vm.qmp('blockdev-add', conv_keys = False, **opts)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-add', conv_keys = False, **opts)
|
||||
self.checkBlockDriverState(child0)
|
||||
self.checkBlockDriverState(child1)
|
||||
self.checkBlockDriverState(quorum)
|
||||
|
||||
+11
-20
@@ -58,8 +58,7 @@ class NBDBlockdevAddBase(iotests.QMPTestCase):
|
||||
def client_test(self, filename, address, export=None,
|
||||
node_name='nbd-blockdev', delete=True):
|
||||
bao = self.blockdev_add_options(address, export, node_name)
|
||||
result = self.vm.qmp('blockdev-add', bao)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-add', bao)
|
||||
|
||||
found = False
|
||||
result = self.vm.qmp('query-named-block-nodes')
|
||||
@@ -75,8 +74,7 @@ class NBDBlockdevAddBase(iotests.QMPTestCase):
|
||||
self.assertTrue(found)
|
||||
|
||||
if delete:
|
||||
result = self.vm.qmp('blockdev-del', node_name=node_name)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-del', node_name=node_name)
|
||||
|
||||
|
||||
class QemuNBD(NBDBlockdevAddBase):
|
||||
@@ -158,17 +156,14 @@ class BuiltinNBD(NBDBlockdevAddBase):
|
||||
self.assert_qmp(result, 'return', {})
|
||||
|
||||
if export_name is None:
|
||||
result = self.server.qmp('nbd-server-add', device='nbd-export')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.server.cmd('nbd-server-add', device='nbd-export')
|
||||
else:
|
||||
result = self.server.qmp('nbd-server-add', device='nbd-export',
|
||||
name=export_name)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.server.cmd('nbd-server-add', device='nbd-export',
|
||||
name=export_name)
|
||||
|
||||
if export_name2 is not None:
|
||||
result = self.server.qmp('nbd-server-add', device='nbd-export',
|
||||
name=export_name2)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.server.cmd('nbd-server-add', device='nbd-export',
|
||||
name=export_name2)
|
||||
|
||||
return True
|
||||
|
||||
@@ -176,8 +171,7 @@ class BuiltinNBD(NBDBlockdevAddBase):
|
||||
self.assertTrue(self._try_server_up(address, export_name, export_name2))
|
||||
|
||||
def _server_down(self):
|
||||
result = self.server.qmp('nbd-server-stop')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.server.cmd('nbd-server-stop')
|
||||
|
||||
def do_test_inet(self, export_name=None):
|
||||
while True:
|
||||
@@ -219,10 +213,8 @@ class BuiltinNBD(NBDBlockdevAddBase):
|
||||
flatten_sock_addr(address), 'exp1', 'node1', False)
|
||||
self.client_test('nbd://localhost:%i/%s' % (nbd_port, 'exp2'),
|
||||
flatten_sock_addr(address), 'exp2', 'node2', False)
|
||||
result = self.vm.qmp('blockdev-del', node_name='node1')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
result = self.vm.qmp('blockdev-del', node_name='node2')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-del', node_name='node1')
|
||||
self.vm.cmd('blockdev-del', node_name='node2')
|
||||
self._server_down()
|
||||
|
||||
def test_inet6(self):
|
||||
@@ -273,8 +265,7 @@ class BuiltinNBD(NBDBlockdevAddBase):
|
||||
result = self.vm.send_fd_scm(fd=sockfd.fileno())
|
||||
self.assertEqual(result, 0, 'Failed to send socket FD')
|
||||
|
||||
result = self.vm.qmp('getfd', fdname='nbd-fifo')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('getfd', fdname='nbd-fifo')
|
||||
|
||||
address = { 'type': 'fd',
|
||||
'data': { 'str': 'nbd-fifo' } }
|
||||
|
||||
+46
-58
@@ -79,14 +79,13 @@ class TestActiveMirror(iotests.QMPTestCase):
|
||||
self.vm.hmp_qemu_io('source', 'aio_write -z %i 1M' % offset)
|
||||
|
||||
# Start the block job
|
||||
result = self.vm.qmp('blockdev-mirror',
|
||||
job_id='mirror',
|
||||
filter_node_name='mirror-node',
|
||||
device='source-node',
|
||||
target='target-node',
|
||||
sync='full',
|
||||
copy_mode='write-blocking')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-mirror',
|
||||
job_id='mirror',
|
||||
filter_node_name='mirror-node',
|
||||
device='source-node',
|
||||
target='target-node',
|
||||
sync='full',
|
||||
copy_mode='write-blocking')
|
||||
|
||||
# Start some more requests
|
||||
for offset in range(3 * self.image_len // 8, 5 * self.image_len // 8, 1024 * 1024):
|
||||
@@ -125,23 +124,21 @@ class TestActiveMirror(iotests.QMPTestCase):
|
||||
result = self.vm.hmp_qemu_io('source', 'write -P 1 0 2M')
|
||||
|
||||
# Start the block job (very slowly)
|
||||
result = self.vm.qmp('blockdev-mirror',
|
||||
job_id='mirror',
|
||||
filter_node_name='mirror-node',
|
||||
device='source-node',
|
||||
target='target-node',
|
||||
sync='full',
|
||||
copy_mode='write-blocking',
|
||||
buf_size=(1048576 // 4),
|
||||
speed=1)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-mirror',
|
||||
job_id='mirror',
|
||||
filter_node_name='mirror-node',
|
||||
device='source-node',
|
||||
target='target-node',
|
||||
sync='full',
|
||||
copy_mode='write-blocking',
|
||||
buf_size=(1048576 // 4),
|
||||
speed=1)
|
||||
|
||||
# Start an unaligned request to a dirty area
|
||||
result = self.vm.hmp_qemu_io('source', 'write -P 2 %i 1' % (1048576 + 42))
|
||||
|
||||
# Let the job finish
|
||||
result = self.vm.qmp('block-job-set-speed', device='mirror', speed=0)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-job-set-speed', device='mirror', speed=0)
|
||||
self.complete_and_wait(drive='mirror')
|
||||
|
||||
self.potential_writes_in_flight = False
|
||||
@@ -151,15 +148,14 @@ class TestActiveMirror(iotests.QMPTestCase):
|
||||
result = self.vm.hmp_qemu_io('source', 'write -P 1 0 2M')
|
||||
|
||||
# Start the block job (very slowly)
|
||||
result = self.vm.qmp('blockdev-mirror',
|
||||
job_id='mirror',
|
||||
filter_node_name='mirror-node',
|
||||
device='source-node',
|
||||
target='target-node',
|
||||
sync='full',
|
||||
copy_mode='write-blocking',
|
||||
speed=1)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-mirror',
|
||||
job_id='mirror',
|
||||
filter_node_name='mirror-node',
|
||||
device='source-node',
|
||||
target='target-node',
|
||||
sync='full',
|
||||
copy_mode='write-blocking',
|
||||
speed=1)
|
||||
|
||||
self.vm.hmp_qemu_io('source', 'break write_aio A')
|
||||
self.vm.hmp_qemu_io('source', 'aio_write 0 1M') # 1
|
||||
@@ -190,8 +186,7 @@ class TestActiveMirror(iotests.QMPTestCase):
|
||||
# After resuming 4, one of 2 and 3 goes first and set in_flight_bitmap,
|
||||
# so the other will wait for it.
|
||||
|
||||
result = self.vm.qmp('block-job-set-speed', device='mirror', speed=0)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-job-set-speed', device='mirror', speed=0)
|
||||
self.complete_and_wait(drive='mirror')
|
||||
|
||||
self.potential_writes_in_flight = False
|
||||
@@ -212,7 +207,7 @@ class TestThrottledWithNbdExportBase(iotests.QMPTestCase):
|
||||
self.vm = iotests.VM()
|
||||
self.vm.launch()
|
||||
|
||||
result = self.vm.qmp('object-add', **{
|
||||
self.vm.cmd('object-add', **{
|
||||
'qom-type': 'throttle-group',
|
||||
'id': 'thrgr',
|
||||
'limits': {
|
||||
@@ -220,9 +215,8 @@ class TestThrottledWithNbdExportBase(iotests.QMPTestCase):
|
||||
'iops-total-max': self.iops
|
||||
}
|
||||
})
|
||||
self.assert_qmp(result, 'return', {})
|
||||
|
||||
result = self.vm.qmp('blockdev-add', **{
|
||||
self.vm.cmd('blockdev-add', **{
|
||||
'node-name': 'source-node',
|
||||
'driver': 'throttle',
|
||||
'throttle-group': 'thrgr',
|
||||
@@ -234,9 +228,8 @@ class TestThrottledWithNbdExportBase(iotests.QMPTestCase):
|
||||
}
|
||||
}
|
||||
})
|
||||
self.assert_qmp(result, 'return', {})
|
||||
|
||||
result = self.vm.qmp('blockdev-add', **{
|
||||
self.vm.cmd('blockdev-add', **{
|
||||
'node-name': 'target-node',
|
||||
'driver': iotests.imgfmt,
|
||||
'file': {
|
||||
@@ -244,23 +237,20 @@ class TestThrottledWithNbdExportBase(iotests.QMPTestCase):
|
||||
'filename': target_img
|
||||
}
|
||||
})
|
||||
self.assert_qmp(result, 'return', {})
|
||||
|
||||
self.nbd_sock = iotests.file_path('nbd.sock',
|
||||
base_dir=iotests.sock_dir)
|
||||
self.nbd_url = f'nbd+unix:///source-node?socket={self.nbd_sock}'
|
||||
|
||||
result = self.vm.qmp('nbd-server-start', addr={
|
||||
self.vm.cmd('nbd-server-start', addr={
|
||||
'type': 'unix',
|
||||
'data': {
|
||||
'path': self.nbd_sock
|
||||
}
|
||||
})
|
||||
self.assert_qmp(result, 'return', {})
|
||||
|
||||
result = self.vm.qmp('block-export-add', id='exp0', type='nbd',
|
||||
node_name='source-node', writable=True)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-export-add', id='exp0', type='nbd',
|
||||
node_name='source-node', writable=True)
|
||||
|
||||
def tearDown(self):
|
||||
# Wait for background requests to settle
|
||||
@@ -313,15 +303,14 @@ class TestLowThrottledWithNbdExport(TestThrottledWithNbdExportBase):
|
||||
|
||||
# Launch the mirror job
|
||||
mirror_buf_size = 65536
|
||||
result = self.vm.qmp('blockdev-mirror',
|
||||
job_id='mirror',
|
||||
filter_node_name='mirror-node',
|
||||
device='source-node',
|
||||
target='target-node',
|
||||
sync='full',
|
||||
copy_mode='write-blocking',
|
||||
buf_size=mirror_buf_size)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-mirror',
|
||||
job_id='mirror',
|
||||
filter_node_name='mirror-node',
|
||||
device='source-node',
|
||||
target='target-node',
|
||||
sync='full',
|
||||
copy_mode='write-blocking',
|
||||
buf_size=mirror_buf_size)
|
||||
|
||||
# We create the external requests via qemu-io processes on the NBD
|
||||
# server. Have their offset start in the middle of the image so they
|
||||
@@ -409,13 +398,12 @@ class TestHighThrottledWithNbdExport(TestThrottledWithNbdExportBase):
|
||||
# start blockdev-mirror
|
||||
self.vm.qtest(f'clock_step {1 * 1000 * 1000 * 1000}')
|
||||
|
||||
result = self.vm.qmp('blockdev-mirror',
|
||||
job_id='mirror',
|
||||
device='source-node',
|
||||
target='target-node',
|
||||
sync='full',
|
||||
copy_mode='write-blocking')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-mirror',
|
||||
job_id='mirror',
|
||||
device='source-node',
|
||||
target='target-node',
|
||||
sync='full',
|
||||
copy_mode='write-blocking')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
@@ -41,18 +41,16 @@ class TestUnaligned(iotests.QMPTestCase):
|
||||
pass
|
||||
|
||||
def test_unaligned(self):
|
||||
result = self.vm.qmp('drive-mirror', device='drive0', sync='full',
|
||||
granularity=65536, target=target_img)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('drive-mirror', device='drive0', sync='full',
|
||||
granularity=65536, target=target_img)
|
||||
self.complete_and_wait()
|
||||
self.vm.shutdown()
|
||||
self.assertEqual(iotests.image_size(test_img), iotests.image_size(target_img),
|
||||
"Target size doesn't match source when granularity when unaligend")
|
||||
|
||||
def test_unaligned_with_update(self):
|
||||
result = self.vm.qmp('drive-mirror', device='drive0', sync='full',
|
||||
granularity=65536, target=target_img)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('drive-mirror', device='drive0', sync='full',
|
||||
granularity=65536, target=target_img)
|
||||
self.wait_ready()
|
||||
self.vm.hmp_qemu_io('drive0', 'write 0 512')
|
||||
self.complete_and_wait(wait_ready=False)
|
||||
|
||||
+23
-32
@@ -110,8 +110,7 @@ class BaseClass(iotests.QMPTestCase):
|
||||
elif self.target_blockdev_backing:
|
||||
options['backing'] = self.target_blockdev_backing
|
||||
|
||||
result = self.vm.qmp('blockdev-add', options)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-add', options)
|
||||
|
||||
def tearDown(self):
|
||||
self.vm.shutdown()
|
||||
@@ -178,20 +177,18 @@ class MirrorBaseClass(BaseClass):
|
||||
|
||||
def runMirror(self, sync):
|
||||
if self.cmd == 'blockdev-mirror':
|
||||
result = self.vm.qmp(self.cmd, job_id='mirror-job', device='source',
|
||||
sync=sync, target='target',
|
||||
auto_finalize=False)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd(self.cmd, job_id='mirror-job', device='source',
|
||||
sync=sync, target='target',
|
||||
auto_finalize=False)
|
||||
else:
|
||||
if self.existing:
|
||||
mode = 'existing'
|
||||
else:
|
||||
mode = 'absolute-paths'
|
||||
result = self.vm.qmp(self.cmd, job_id='mirror-job', device='source',
|
||||
sync=sync, target=target_img,
|
||||
format=iotests.imgfmt, mode=mode,
|
||||
node_name='target', auto_finalize=False)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd(self.cmd, job_id='mirror-job', device='source',
|
||||
sync=sync, target=target_img,
|
||||
format=iotests.imgfmt, mode=mode,
|
||||
node_name='target', auto_finalize=False)
|
||||
|
||||
self.vm.run_job('mirror-job', auto_finalize=False,
|
||||
pre_finalize=self.openBacking, auto_dismiss=True)
|
||||
@@ -258,16 +255,14 @@ class TestBlockdevMirrorReopen(MirrorBaseClass):
|
||||
|
||||
def openBacking(self):
|
||||
if not self.target_open_with_backing:
|
||||
result = self.vm.qmp('blockdev-add', node_name="backing",
|
||||
driver="null-co")
|
||||
self.assert_qmp(result, 'return', {})
|
||||
result = self.vm.qmp('blockdev-reopen', options=[{
|
||||
'node-name': "target",
|
||||
'driver': iotests.imgfmt,
|
||||
'file': "target-file",
|
||||
'backing': "backing"
|
||||
}])
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-add', node_name="backing",
|
||||
driver="null-co")
|
||||
self.vm.cmd('blockdev-reopen', options=[{
|
||||
'node-name': "target",
|
||||
'driver': iotests.imgfmt,
|
||||
'file': "target-file",
|
||||
'backing': "backing"
|
||||
}])
|
||||
|
||||
class TestBlockdevMirrorReopenIothread(TestBlockdevMirrorReopen):
|
||||
use_iothread = True
|
||||
@@ -281,12 +276,10 @@ class TestBlockdevMirrorSnapshot(MirrorBaseClass):
|
||||
|
||||
def openBacking(self):
|
||||
if not self.target_open_with_backing:
|
||||
result = self.vm.qmp('blockdev-add', node_name="backing",
|
||||
driver="null-co")
|
||||
self.assert_qmp(result, 'return', {})
|
||||
result = self.vm.qmp('blockdev-snapshot', node="backing",
|
||||
overlay="target")
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('blockdev-add', node_name="backing",
|
||||
driver="null-co")
|
||||
self.vm.cmd('blockdev-snapshot', node="backing",
|
||||
overlay="target")
|
||||
|
||||
class TestBlockdevMirrorSnapshotIothread(TestBlockdevMirrorSnapshot):
|
||||
use_iothread = True
|
||||
@@ -295,14 +288,12 @@ class TestCommit(BaseClass):
|
||||
existing = False
|
||||
|
||||
def testCommit(self):
|
||||
result = self.vm.qmp('block-commit', job_id='commit-job',
|
||||
device='source', base=back1_img)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-commit', job_id='commit-job',
|
||||
device='source', base=back1_img)
|
||||
|
||||
self.vm.event_wait('BLOCK_JOB_READY')
|
||||
|
||||
result = self.vm.qmp('block-job-complete', device='commit-job')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-job-complete', device='commit-job')
|
||||
|
||||
self.vm.event_wait('BLOCK_JOB_COMPLETED')
|
||||
|
||||
|
||||
@@ -116,9 +116,8 @@ class TestPersistentDirtyBitmap(iotests.QMPTestCase):
|
||||
sha256_2 = self.getSha256()
|
||||
assert sha256_1 != sha256_2 # Otherwise, it's not very interesting.
|
||||
|
||||
result = self.vm.qmp('block-dirty-bitmap-clear', node='drive0',
|
||||
name='bitmap0')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('block-dirty-bitmap-clear', node='drive0',
|
||||
name='bitmap0')
|
||||
|
||||
# Start with regions1
|
||||
|
||||
@@ -137,7 +136,7 @@ class TestPersistentDirtyBitmap(iotests.QMPTestCase):
|
||||
assert sha256_1 == self.getSha256()
|
||||
|
||||
# Reopen to RW
|
||||
result = self.vm.qmp('blockdev-reopen', options=[{
|
||||
self.vm.cmd('blockdev-reopen', options=[{
|
||||
'node-name': 'node0',
|
||||
'driver': iotests.imgfmt,
|
||||
'file': {
|
||||
@@ -146,7 +145,6 @@ class TestPersistentDirtyBitmap(iotests.QMPTestCase):
|
||||
},
|
||||
'read-only': False
|
||||
}])
|
||||
self.assert_qmp(result, 'return', {})
|
||||
|
||||
# Check that bitmap is reopened to RW and we can write to it.
|
||||
self.writeRegions(regions2)
|
||||
|
||||
@@ -45,8 +45,7 @@ class TestInvalidateAutoclear(iotests.QMPTestCase):
|
||||
self.vm_b.add_incoming("exec: cat '" + migfile + "'")
|
||||
|
||||
def test_migration(self):
|
||||
result = self.vm_a.qmp('migrate', uri='exec:cat>' + migfile)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm_a.cmd('migrate', uri='exec:cat>' + migfile)
|
||||
self.assertNotEqual(self.vm_a.event_wait("STOP"), None)
|
||||
|
||||
with open(disk, 'r+b') as f:
|
||||
|
||||
@@ -44,10 +44,8 @@ class TestNbdServerRemove(iotests.QMPTestCase):
|
||||
}
|
||||
}
|
||||
|
||||
result = self.vm.qmp('nbd-server-start', addr=address)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
result = self.vm.qmp('nbd-server-add', device='drive0', name='exp')
|
||||
self.assert_qmp(result, 'return', {})
|
||||
self.vm.cmd('nbd-server-start', addr=address)
|
||||
self.vm.cmd('nbd-server-add', device='drive0', name='exp')
|
||||
|
||||
def tearDown(self):
|
||||
self.vm.shutdown()
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user