summaryrefslogtreecommitdiff
path: root/nova/tests/unit/pci/test_utils.py
diff options
context:
space:
mode:
Diffstat (limited to 'nova/tests/unit/pci/test_utils.py')
-rw-r--r--nova/tests/unit/pci/test_utils.py183
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,
+ )