iotests: Full mirror to existing non-zero image

The result of a sync=full mirror should always be the equal to the
input.  Therefore, existing images should be treated as potentially
non-zero and thus should be explicitly initialized to be zero
beforehand.

Signed-off-by: Max Reitz <mreitz@redhat.com>
Message-id: 20190724171239.8764-12-mreitz@redhat.com
Signed-off-by: Max Reitz <mreitz@redhat.com>
This commit is contained in:
Max Reitz 2019-07-24 19:12:39 +02:00
parent c2acc95bef
commit 9463ee1f5f
2 changed files with 60 additions and 6 deletions

View File

@ -741,8 +741,15 @@ class TestUnbackedSource(iotests.QMPTestCase):
def setUp(self): def setUp(self):
qemu_img('create', '-f', iotests.imgfmt, test_img, qemu_img('create', '-f', iotests.imgfmt, test_img,
str(TestUnbackedSource.image_len)) str(TestUnbackedSource.image_len))
self.vm = iotests.VM().add_drive(test_img) self.vm = iotests.VM()
self.vm.launch() self.vm.launch()
result = self.vm.qmp('blockdev-add', node_name='drive0',
driver=iotests.imgfmt,
file={
'driver': 'file',
'filename': test_img,
})
self.assert_qmp(result, 'return', {})
def tearDown(self): def tearDown(self):
self.vm.shutdown() self.vm.shutdown()
@ -751,7 +758,7 @@ class TestUnbackedSource(iotests.QMPTestCase):
def test_absolute_paths_full(self): def test_absolute_paths_full(self):
self.assert_no_active_block_jobs() self.assert_no_active_block_jobs()
result = self.vm.qmp('drive-mirror', device='drive0', result = self.vm.qmp('drive-mirror', job_id='drive0', device='drive0',
sync='full', target=target_img, sync='full', target=target_img,
mode='absolute-paths') mode='absolute-paths')
self.assert_qmp(result, 'return', {}) self.assert_qmp(result, 'return', {})
@ -760,7 +767,7 @@ class TestUnbackedSource(iotests.QMPTestCase):
def test_absolute_paths_top(self): def test_absolute_paths_top(self):
self.assert_no_active_block_jobs() self.assert_no_active_block_jobs()
result = self.vm.qmp('drive-mirror', device='drive0', result = self.vm.qmp('drive-mirror', job_id='drive0', device='drive0',
sync='top', target=target_img, sync='top', target=target_img,
mode='absolute-paths') mode='absolute-paths')
self.assert_qmp(result, 'return', {}) self.assert_qmp(result, 'return', {})
@ -769,13 +776,60 @@ class TestUnbackedSource(iotests.QMPTestCase):
def test_absolute_paths_none(self): def test_absolute_paths_none(self):
self.assert_no_active_block_jobs() self.assert_no_active_block_jobs()
result = self.vm.qmp('drive-mirror', device='drive0', result = self.vm.qmp('drive-mirror', job_id='drive0', device='drive0',
sync='none', target=target_img, sync='none', target=target_img,
mode='absolute-paths') mode='absolute-paths')
self.assert_qmp(result, 'return', {}) self.assert_qmp(result, 'return', {})
self.complete_and_wait() self.complete_and_wait()
self.assert_no_active_block_jobs() self.assert_no_active_block_jobs()
def test_existing_full(self):
qemu_img('create', '-f', iotests.imgfmt, target_img,
str(self.image_len))
qemu_io('-c', 'write -P 42 0 64k', target_img)
self.assert_no_active_block_jobs()
result = self.vm.qmp('drive-mirror', job_id='drive0', device='drive0',
sync='full', target=target_img, mode='existing')
self.assert_qmp(result, 'return', {})
self.complete_and_wait()
self.assert_no_active_block_jobs()
result = self.vm.qmp('blockdev-del', node_name='drive0')
self.assert_qmp(result, 'return', {})
self.assertTrue(iotests.compare_images(test_img, target_img),
'target image does not match source after mirroring')
def test_blockdev_full(self):
qemu_img('create', '-f', iotests.imgfmt, target_img,
str(self.image_len))
qemu_io('-c', 'write -P 42 0 64k', target_img)
result = self.vm.qmp('blockdev-add', node_name='target',
driver=iotests.imgfmt,
file={
'driver': 'file',
'filename': target_img,
})
self.assert_qmp(result, 'return', {})
self.assert_no_active_block_jobs()
result = self.vm.qmp('blockdev-mirror', job_id='drive0', device='drive0',
sync='full', target='target')
self.assert_qmp(result, 'return', {})
self.complete_and_wait()
self.assert_no_active_block_jobs()
result = self.vm.qmp('blockdev-del', node_name='drive0')
self.assert_qmp(result, 'return', {})
result = self.vm.qmp('blockdev-del', node_name='target')
self.assert_qmp(result, 'return', {})
self.assertTrue(iotests.compare_images(test_img, target_img),
'target image does not match source after mirroring')
class TestGranularity(iotests.QMPTestCase): class TestGranularity(iotests.QMPTestCase):
image_len = 10 * 1024 * 1024 # MB image_len = 10 * 1024 * 1024 # MB

View File

@ -1,5 +1,5 @@
........................................................................................ ..........................................................................................
---------------------------------------------------------------------- ----------------------------------------------------------------------
Ran 88 tests Ran 90 tests
OK OK