def _parse_white_list_from_config(self, whitelists): """Parse and validate the pci whitelist from the zun config.""" specs = [] for jsonspec in whitelists: try: dev_spec = jsonutils.loads(jsonspec) except ValueError: raise exception.PciConfigInvalidWhitelist( reason=_("Invalid entry: '%s'") % jsonspec) if isinstance(dev_spec, dict): dev_spec = [dev_spec] elif not isinstance(dev_spec, list): raise exception.PciConfigInvalidWhitelist( reason=_("Invalid entry: '%s'; " "Expecting list or dict") % jsonspec) for ds in dev_spec: if not isinstance(ds, dict): raise exception.PciConfigInvalidWhitelist( reason=_("Invalid entry: '%s'; " "Expecting dict") % ds) spec = devspec.PciDeviceSpec(ds) specs.append(spec) return specs
def test_invalid_product_id(self): pci_info = { "vendor_id": "8086", "address": "*: *: *.5", "product_id": "5056", "physical_network": "hr_net" } pci = devspec.PciDeviceSpec(pci_info) self.assertFalse(pci.match(dev))
def test_partial_address_func(self): pci_info = {"address": ".5", "physical_network": "hr_net"} pci = devspec.PciDeviceSpec(pci_info) dev = { "vendor_id": "1137", "product_id": "0071", "address": "0000:0a:00.5", "phys_function": "0000:0a:00.0" } self.assertTrue(pci.match(dev))
def test_spec_partial_address_regex(self): pci_info = { "address": { "domain": ".*", "bus": ".*", "slot": "00", }, "physical_network": "hr_net" } pci = devspec.PciDeviceSpec(pci_info) self.assertTrue(pci.match(dev))
def test_address_is_pf_regex(self, mock_is_physical_function): pci_info = { "address": { "domain": "0000", "bus": "0a", "slot": "00", "function": "0" }, "physical_network": "hr_net" } pci = devspec.PciDeviceSpec(pci_info) self.assertTrue(pci.match(dev))
def test_spec_regex_no_match(self): pci_info = { "address": { "domain": ".*", "bus": ".*", "slot": "00", "function": "[6-7]" }, "physical_network": "hr_net" } pci = devspec.PciDeviceSpec(pci_info) self.assertFalse(pci.match(dev))
def test_invalid_name(self, mock_get_function_by_ifname): pci_info = {"devname": "lo", "physical_network": "hr_net"} pci = devspec.PciDeviceSpec(pci_info) self.assertFalse(pci.match(dev))
def test_address_pf_no_parent_addr(self, mock_is_physical_function): _dev = dev.copy() _dev.pop('parent_addr') pci_info = {"address": "0000:0a:00.5", "physical_network": "hr_net"} pci = devspec.PciDeviceSpec(pci_info) self.assertTrue(pci.match(_dev))
def test_address_is_pf(self, mock_is_physical_function): pci_info = {"address": "0000:0a:00.0", "physical_network": "hr_net"} pci = devspec.PciDeviceSpec(pci_info) self.assertTrue(pci.match(dev))
def test_address_is_undefined(self): pci_info = {"vendor_id": "8086", "product_id": "5057"} pci = devspec.PciDeviceSpec(pci_info) self.assertTrue(pci.match(dev))