def _parse_white_list_from_config(self, whitelists): """Parse and validate the pci whitelist from the nova 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 = pci_devspec.PciDeviceSpec(ds) specs.append(spec) return specs
def test_partial_address(self): pci_info = '{"address":":0a:00.", "physical_network":"hr_net"}' pci = 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 _parse_white_list_from_config(self, whitelists): """Parse and validate the pci whitelist from the nova config.""" specs = [] for jsonspec in whitelists: spec = pci_devspec.PciDeviceSpec(jsonspec) specs.append(spec) return specs
def test_wrong_address(self): pci_info = { "vendor_id": "8086", "address": "*: *: *.6", "product_id": "5057", "physical_network": "hr_net" } pci = pci_devspec.PciDeviceSpec(pci_info) self.assertFalse(pci.match(dev))
def test_pci_obj(self): pci_info = ('{"vendor_id": "8086","address": "*:*:*.5", ' + '"product_id": "5057", "physical_network": "hr_net"}') pci = pci_devspec.PciDeviceSpec(pci_info) pci_dev = { 'compute_node_id': 1, 'address': '0000:00:00.5', 'product_id': '5057', 'vendor_id': '8086', 'status': 'available', 'extra_k1': 'v1', } pci_obj = pci_device.PciDevice.create(pci_dev) self.assertTrue(pci.match_pci_obj(pci_obj))
def test_address_is_pf(self, mock_is_physical_function): pci_info = '{"address":"0000:0a:00.0", "physical_network":"hr_net"}' pci = 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 = pci_devspec.PciDeviceSpec(pci_info) self.assertTrue(pci.match(dev))
def test_by_name(self, mock_get_function_by_ifname): pci_info = '{"devname": "eth0", "physical_network": "hr_net"}' pci = pci_devspec.PciDeviceSpec(pci_info) self.assertTrue(pci.match(dev))
def test_invalid_product_id(self): pci_info = ('{"vendor_id": "8086","address": "*: *: *.5", ' + '"product_id": "5056", "physical_network": "hr_net"}') pci = pci_devspec.PciDeviceSpec(pci_info) self.assertFalse(pci.match(dev))