diff options
Diffstat (limited to 'nova/tests/unit/pci/test_utils.py')
-rw-r--r-- | nova/tests/unit/pci/test_utils.py | 183 |
1 files changed, 180 insertions, 3 deletions
diff --git a/nova/tests/unit/pci/test_utils.py b/nova/tests/unit/pci/test_utils.py index e444f13729..1a1f9955b9 100644 --- a/nova/tests/unit/pci/test_utils.py +++ b/nova/tests/unit/pci/test_utils.py @@ -16,9 +16,9 @@ import glob import os +from unittest import mock import fixtures -import mock from nova import exception from nova.pci import utils @@ -44,7 +44,7 @@ class PciDeviceMatchTestCase(test.NoDBTestCase): [{'vendor_id': 'v1', 'device_id': 'd1'}, {'vendor_id': 'v3', 'device_id': 'd3'}])) - def test_spec_dismatch(self): + def test_spec_mismatch(self): self.assertFalse(utils.pci_device_prop_match( self.fake_pci_1, [{'vendor_id': 'v4', 'device_id': 'd4'}, @@ -239,7 +239,7 @@ class GetVfNumByPciAddressTestCase(test.NoDBTestCase): mock_iglob.return_value = self.paths mock_readlink.return_value = '../../0000:00:00.1' vf_num = utils.get_vf_num_by_pci_address(self.pci_address) - self.assertEqual(vf_num, '3') + self.assertEqual(vf_num, 3) @mock.patch.object(os, 'readlink') @mock.patch.object(glob, 'iglob') @@ -251,3 +251,180 @@ class GetVfNumByPciAddressTestCase(test.NoDBTestCase): utils.get_vf_num_by_pci_address, self.pci_address ) + + +class GetProductIDByPfPciAddressTestCase(test.NoDBTestCase): + def setUp(self): + super().setUp() + self.pci_address = "0000:0a:00.0" + + @mock.patch( + "builtins.open", + new=mock.MagicMock( + side_effect=( + lambda f: { + "/sys/bus/pci/devices/0000:0a:00.0/sriov_vf_device": + mock.mock_open( + read_data="101e\n" + )() + }.get(f) + ) + ), + ) + def test_sriov_vf_device_read(self): + product_id = utils.get_vf_product_id_by_pf_addr(self.pci_address) + self.assertEqual(product_id, "101e") + + @mock.patch( + "builtins.open", + new=mock.MagicMock( + side_effect=( + lambda f: { + "/sys/bus/pci/devices/0000:0a:00.0/sriov_vf_device": + mock.mock_open( + read_data="" + )() + }.get(f) + ) + ), + ) + def test_sriov_vf_device_read_value_error(self): + self.assertRaises( + ValueError, + utils.get_vf_product_id_by_pf_addr, + self.pci_address, + ) + + @mock.patch( + "builtins.open", + new=mock.MagicMock( + side_effect=( + lambda f: { + "/sys/bus/pci/devices/0000:0a:00.0/sriov_vf_device": + mock.mock_open( + mock=mock.MagicMock(side_effect=IOError()) + )() + }.get(f) + ) + ), + ) + def test_sriov_vf_device_read_io_error(self): + self.assertRaises( + ValueError, + utils.get_vf_product_id_by_pf_addr, + self.pci_address, + ) + + +class GetPciIdsByPciAddressTestCase(test.NoDBTestCase): + def setUp(self): + super().setUp() + self.pci_address = "0000:0a:00.0" + + @mock.patch( + "builtins.open", + new=mock.MagicMock( + side_effect=( + lambda f: { + "/sys/bus/pci/devices/0000:0a:00.0/vendor": + mock.mock_open( + read_data="0x15b3\n" + )(), + "/sys/bus/pci/devices/0000:0a:00.0/product": + mock.mock_open( + read_data="0x101e\n" + )(), + }.get(f) + ) + ), + ) + def test_get_pci_ids(self): + self.assertEqual( + utils.get_pci_ids_by_pci_addr(self.pci_address), ("15b3", "101e") + ) + + @mock.patch( + "builtins.open", + new=mock.MagicMock( + side_effect=( + lambda f: { + "/sys/bus/pci/devices/0000:0a:00.0/vendor": mock.mock_open( + read_data="" + )(), + }.get(f) + ) + ), + ) + def test_get_pci_ids_value_error_vendor(self): + self.assertRaises( + ValueError, + utils.get_pci_ids_by_pci_addr, + self.pci_address, + ) + + @mock.patch( + "builtins.open", + new=mock.MagicMock( + side_effect=( + lambda f: { + "/sys/bus/pci/devices/0000:0a:00.0/vendor": + mock.mock_open( + read_data="0x15b3\n" + )(), + "/sys/bus/pci/devices/0000:0a:00.0/product": + mock.mock_open( + read_data="" + )(), + }.get(f) + ) + ), + ) + def test_get_pci_ids_value_error_product(self): + self.assertRaises( + ValueError, + utils.get_pci_ids_by_pci_addr, + self.pci_address, + ) + + @mock.patch( + "builtins.open", + new=mock.MagicMock( + side_effect=( + lambda f: { + "/sys/bus/pci/devices/0000:0a:00.0/vendor": mock.mock_open( + mock=mock.MagicMock(side_effect=IOError()) + )() + }.get(f) + ) + ), + ) + def test_get_pci_ids_io_error_vendor(self): + self.assertRaises( + ValueError, + utils.get_pci_ids_by_pci_addr, + self.pci_address, + ) + + @mock.patch( + "builtins.open", + new=mock.MagicMock( + side_effect=( + lambda f: { + "/sys/bus/pci/devices/0000:0a:00.0/vendor": + mock.mock_open( + read_data="0x15b3\n" + )(), + "/sys/bus/pci/devices/0000:0a:00.0/product": + mock.mock_open( + mock=mock.MagicMock(side_effect=IOError()) + )(), + }.get(f) + ) + ), + ) + def test_get_pci_ids_io_error_product(self): + self.assertRaises( + ValueError, + utils.get_pci_ids_by_pci_addr, + self.pci_address, + ) |