Adds a new iotest for testing that the format probing functions work as expected. This is done by booting up a vm with a disk image without specifying the image format. Then the format is checked using a call to query-block.
For any format specified, at least one check is done with an image of the given format, and one check is done against a raw image. This is to ensure that a probe correctly returns a high score when the format is matched, and does not return a high score when the format should not be matched, as would be the case with raw images. Signed-off-by: Colin Lord <cl...@redhat.com> --- tests/qemu-iotests/158 | 53 +++++++++++++++++++++++++++++++++++++++++++ tests/qemu-iotests/158.out | 5 ++++ tests/qemu-iotests/group | 1 + tests/qemu-iotests/iotests.py | 5 ++++ 4 files changed, 64 insertions(+) create mode 100644 tests/qemu-iotests/158 create mode 100644 tests/qemu-iotests/158.out diff --git a/tests/qemu-iotests/158 b/tests/qemu-iotests/158 new file mode 100644 index 0000000..70ad298 --- /dev/null +++ b/tests/qemu-iotests/158 @@ -0,0 +1,53 @@ +#!/usr/bin/env python + +import iotests + +imgs = {'raw': ['grub_mbr.raw'], 'bochs': ['empty.bochs'], + 'cloop': ['simple-pattern.cloop'], + 'parallels': ['parallels-v1', 'parallels-v2'], + 'qcow': ['empty.qcow'], 'qcow2': ['empty.qcow2'], + 'qed': ['empty.qed'], 'vdi': ['empty.vdi'], + 'vpc': ['virtualpc-dynamic.vhd'], 'vhdx': ['iotest-dynamic-1G.vhdx'], + 'vmdk': ['iotest-version3.vmdk'], 'luks': ['empty.luks'], + 'dmg': ['empty.dmg']} + +class TestProbingFormats(iotests.QMPTestCase): + def setUp(self): + self.vm = iotests.VM() + self.img_paths = [] + luks_opts = '' + if iotests.imgfmt == 'luks': + luks_opts = (',key-secret=sec0') + for img_name in imgs[iotests.imgfmt]: + self.img_paths.append(iotests.use_sample_image(img_name)) + self.vm.add_drive_raw('file=%s,id=drive%s,media=cdrom%s' % + (self.img_paths[-1], len(self.img_paths) - 1, + luks_opts)) + if iotests.imgfmt == 'luks': + self.vm.use_luks() + if iotests.imgfmt != 'raw': + self.img_paths.append(iotests.use_sample_image(imgs['raw'][0])) + self.vm.add_drive_raw('file=%s,id=drive%s,media=cdrom' % + (self.img_paths[-1], len(self.img_paths) - 1)) + self.vm.launch() + + def tearDown(self): + self.vm.shutdown() + for img in self.img_paths: + iotests.rm_test_image(img) + + def test_probe_detects_format(self): + result = self.vm.qmp('query-block') + for i in range(len(self.img_paths) - 1): + self.assert_qmp(result, 'return[%s]/inserted/image/format' % + i, iotests.imgfmt) + + def test_probe_detects_raw(self): + result = self.vm.qmp('query-block') + self.assert_qmp(result, 'return[%s]/inserted/image/format' % + (len(self.img_paths) - 1), 'raw') + +if __name__ == '__main__': + iotests.main(supported_fmts=['raw', 'bochs', 'cloop', 'parallels', 'qcow', + 'qcow2', 'qed', 'vdi', 'vpc', 'vhdx', 'vmdk', + 'luks', 'dmg']) diff --git a/tests/qemu-iotests/158.out b/tests/qemu-iotests/158.out new file mode 100644 index 0000000..fbc63e6 --- /dev/null +++ b/tests/qemu-iotests/158.out @@ -0,0 +1,5 @@ +.. +---------------------------------------------------------------------- +Ran 2 tests + +OK diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group index 1c6fcb6..4563e81 100644 --- a/tests/qemu-iotests/group +++ b/tests/qemu-iotests/group @@ -156,3 +156,4 @@ 154 rw auto backing quick 155 rw auto 156 rw auto quick +158 quick diff --git a/tests/qemu-iotests/iotests.py b/tests/qemu-iotests/iotests.py index 3ba0de2..101ae91 100644 --- a/tests/qemu-iotests/iotests.py +++ b/tests/qemu-iotests/iotests.py @@ -49,6 +49,7 @@ if os.environ.get('QEMU_OPTIONS'): imgfmt = os.environ.get('IMGFMT', 'raw') imgproto = os.environ.get('IMGPROTO', 'file') test_dir = os.environ.get('TEST_DIR') +imgkeysecret = os.environ.get('IMGKEYSECRET') output_dir = os.environ.get('OUTPUT_DIR', '.') cachemode = os.environ.get('CACHEMODE') qemu_default_machine = os.environ.get('QEMU_DEFAULT_MACHINE') @@ -208,6 +209,10 @@ class VM(object): self._num_drives += 1 return self + def use_luks(self): + self._args.append('-object') + self._args.append('secret,id=sec0,data=%s' % imgkeysecret) + def pause_drive(self, drive, event=None): '''Pause drive r/w operations''' if not event: -- 2.5.5