On Tue, Nov 27, 2018 at 10:56:21AM -0200, Caio Carrara wrote: > Hello, Eduardo. > > Just some minor comments regarding the Python code. > [...] > > +def devtype_implements(vm, devtype, implements): > > + return devtype in [d['name'] for d in vm.command('qom-list-types', implements=implements)] > > + > > +def get_interfaces(vm, devtype, interfaces=['pci-express-device', 'conventional-pci-device']): > > Usually is not a good idea to use a mutable (in this case a list) > default value as an argument: > > def my_func(param=[1,2,3]): > param.append(666) > print(param) > > my_func() > [1, 2, 3, 666] > my_func() > [1, 2, 3, 666, 666] > my_func() > [1, 2, 3, 666, 666, 666] > > Yes, you're not changing the value right now, but it's something we can > not guarantee for the future when, for example, someone not Python > experienced have to change this code. Oops, thanks for catching this! > > Another way safer to write this function could be: > > def get_interfaces(vm, devtype, interfaces=None): > if not interfaces: > interfaces = ['pci-express-device', 'conventional-pci-device'] > return [i for i in interfaces if devtype_implements(vm, devtype, i)] Maybe I should just use a tuple, then? def get_interfaces(vm, devtype, interfaces=('pci-express-device', 'conventional-pci-device')): return [i for i in interfaces if devtype_implements(vm, devtype, i)] but probably I can simply eliminate the parameter because nobody is using it: def get_pci_interfaces(vm, devtype): interfaces = ('pci-express-device', 'conventional-pci-device') return [i for i in interfaces if devtype_implements(vm, devtype, i)] > > > + return [i for i in interfaces if devtype_implements(vm, devtype, i)] > > + > > +class VirtioVersionCheck(Test): > > + """ > > + Check if virtio-version-specific device types result in the > > + same device tree created by `disable-modern` and > > + `disable-legacy`. > > + > > + :avocado: enable > > + :avocado: tags=x86_64 > > + """ > > + > > + # just in case there are failures, show larger diff: > > + maxDiff = 4096 > > + > > + def run_device(self, devtype, opts=None, machine='pc'): > > + """ > > + Run QEMU with `-device DEVTYPE`, return device info from `query-pci` > > + """ > > + with QEMUMachine(self.qemu_bin) as vm: > > + vm.set_machine(machine) > > + if opts: > > + devtype += ',' + opts > > + vm.add_args('-device', '%s,id=devfortest' % (devtype)) > > + vm.add_args('-S') > > + vm.launch() > > + > > + pcibuses = vm.command('query-pci') > > + alldevs = [dev for bus in pcibuses for dev in bus['devices']] > > + import pprint > > + pprint.pprint(alldevs) > > I think it's an undesired print here, right? Oops! Yes, debugging leftover. > > > + devfortest = [dev for dev in alldevs > > + if dev['qdev_id'] == 'devfortest'] > > + return devfortest[0], get_interfaces(vm, devtype) > > + > > + > > + def assert_devids(self, dev, devid, non_transitional=False): > > + self.assertEqual(dev['id']['vendor'], PCI_VENDOR_ID_REDHAT_QUMRANET) > > + self.assertEqual(dev['id']['device'], devid) > > + if non_transitional: > > + self.assertTrue(0x1040 <= dev['id']['device'] <= 0x107f) > > + self.assertGreaterEqual(dev['id']['subsystem'], 0x40) > > + > > + def check_all_variants(self, qemu_devtype, virtio_devid): > > + """Check if a virtio device type and its variants behave as expected""" > > + # Force modern mode: > > + dev_modern,_ = self.run_device(qemu_devtype, > > s/dev_modern,_/dev_modern, _/ (blank space after comma. There are other > cases bellow) I will change it, thanks! > > > + 'disable-modern=off,disable-legacy=on') > > + self.assert_devids(dev_modern, pci_modern_device_id(virtio_devid), > > + non_transitional=True) [...] -- Eduardo -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list