Commit 19462c4b authored by Kevin Wolf's avatar Kevin Wolf
Browse files

iotests/118: Add -blockdev based tests



The code path for -device drive=<node-name> or without a drive=...
option for empty drives, which is supposed to be used with -blockdev
differs enough from the -drive based path with a user-owned
BlockBackend, so we want to test both paths at least for the basic tests
implemented by TestInitiallyFilled and TestInitiallyEmpty.

This would have caught the bug recently fixed for inserting read-only
nodes into a scsi-cd created without a drive=... option.

Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
Reviewed-by: default avatarMax Reitz <mreitz@redhat.com>
parent dfc82894
Loading
Loading
Loading
Loading
+30 −13
Original line number Diff line number Diff line
@@ -42,10 +42,14 @@ class ChangeBaseClass(iotests.QMPTestCase):
    has_opened = False
    has_closed = False

    device_name = 'qdev0'
    use_drive = False

    def process_events(self):
        for event in self.vm.get_qmp_events(wait=False):
            if (event['event'] == 'DEVICE_TRAY_MOVED' and
                event['data']['device'] == 'drive0'):
                (event['data']['device'] == 'drive0' or
                 event['data']['id'] == self.device_name)):
                if event['data']['tray-open'] == False:
                    self.has_closed = True
                else:
@@ -69,9 +73,11 @@ class ChangeBaseClass(iotests.QMPTestCase):

class GeneralChangeTestsBaseClass(ChangeBaseClass):

    device_name = 'qdev0'

    def test_change(self):
        # 'change' requires a drive name, so skip the test for blockdev
        if not self.use_drive:
            return

        result = self.vm.qmp('change', device='drive0', target=new_img,
                                       arg=iotests.imgfmt)
        self.assert_qmp(result, 'return', {})
@@ -298,7 +304,13 @@ class TestInitiallyFilled(GeneralChangeTestsBaseClass):
        qemu_img('create', '-f', iotests.imgfmt, old_img, '1440k')
        qemu_img('create', '-f', iotests.imgfmt, new_img, '1440k')
        self.vm = iotests.VM()
        if self.use_drive:
            self.vm.add_drive(old_img, 'media=%s' % self.media, 'none')
        else:
            self.vm.add_blockdev([ 'node-name=drive0',
                                   'driver=%s' % iotests.imgfmt,
                                   'file.driver=file',
                                   'file.filename=%s' % old_img ])
        if self.interface == 'scsi':
            self.vm.add_device('virtio-scsi-pci')
        self.vm.add_device('%s,drive=drive0,id=%s' %
@@ -333,11 +345,14 @@ class TestInitiallyEmpty(GeneralChangeTestsBaseClass):

    def setUp(self):
        qemu_img('create', '-f', iotests.imgfmt, new_img, '1440k')
        self.vm = iotests.VM().add_drive(None, 'media=%s' % self.media, 'none')
        self.vm = iotests.VM()
        if self.use_drive:
            self.vm.add_drive(None, 'media=%s' % self.media, 'none')
        if self.interface == 'scsi':
            self.vm.add_device('virtio-scsi-pci')
        self.vm.add_device('%s,drive=drive0,id=%s' %
        self.vm.add_device('%s,%sid=%s' %
                           (interface_to_device_name(self.interface),
                            'drive=drive0,' if self.use_drive else '',
                            self.device_name))
        self.vm.launch()

@@ -363,12 +378,14 @@ def create_basic_test_classes():
                                               ('disk', 'floppy', False) ]:

        for case in [ TestInitiallyFilled, TestInitiallyEmpty ]:

            for use_drive in [ True, False ]:
                attr = { 'media': media,
                         'interface': interface,
                     'has_real_tray': has_real_tray }
                         'has_real_tray': has_real_tray,
                         'use_drive': use_drive }

            name = '%s_%s_%s' % (case.__name__, media, interface)
                name = '%s_%s_%s_%s' % (case.__name__, media, interface,
                                        'drive' if use_drive else 'blockdev')
                globals()[name] = type(name, (case, ), attr)

create_basic_test_classes()
+2 −2
Original line number Diff line number Diff line
.........................................................................................
.......................................................................................................................................................................
----------------------------------------------------------------------
Ran 89 tests
Ran 167 tests

OK