|
| 1 | +import errno |
1 | 2 | import unittest.mock |
2 | 3 |
|
3 | 4 | from avocado.utils import pci |
@@ -42,6 +43,69 @@ def test_get_slot_from_sysfs_negative(self): |
42 | 43 | ): |
43 | 44 | self.assertRaises(ValueError, pci.get_slot_from_sysfs, "0002:01:00.1") |
44 | 45 |
|
| 46 | + @unittest.mock.patch("avocado.utils.pci.get_vendor_id") |
| 47 | + @unittest.mock.patch("avocado.utils.pci.genio.write_file") |
| 48 | + def test_add_vendor_id_success(self, mock_write, mock_get_vid): |
| 49 | + mock_get_vid.return_value = "1234:abcd" |
| 50 | + pci.add_vendor_id("0000:03:00.0", "driver") |
| 51 | + mock_get_vid.assert_called_once_with("0000:03:00.0") |
| 52 | + mock_write.assert_called_once_with( |
| 53 | + "/sys/bus/pci/drivers/driver/new_id", "1234 abcd\n" |
| 54 | + ) |
| 55 | + |
| 56 | + @unittest.mock.patch("avocado.utils.pci.get_vendor_id", return_value="1234:abcd") |
| 57 | + @unittest.mock.patch( |
| 58 | + "avocado.utils.pci.genio.write_file", |
| 59 | + side_effect=OSError(errno.EEXIST, "File exists"), |
| 60 | + ) |
| 61 | + def test_add_vendor_id_already_exists(self, mock_write, mock_get_vid): |
| 62 | + pci.add_vendor_id("0000:03:00.0", "driver") |
| 63 | + mock_get_vid.assert_called_once_with("0000:03:00.0") |
| 64 | + mock_write.assert_called_once_with( |
| 65 | + "/sys/bus/pci/drivers/driver/new_id", "1234 abcd\n" |
| 66 | + ) |
| 67 | + |
| 68 | + @unittest.mock.patch("avocado.utils.pci.bind") |
| 69 | + @unittest.mock.patch("avocado.utils.pci.unbind") |
| 70 | + @unittest.mock.patch("avocado.utils.pci.get_driver") |
| 71 | + @unittest.mock.patch("avocado.utils.pci.add_vendor_id") |
| 72 | + def test_attach_driver(self, mock_add_vid, mock_get_driver, mock_unbind, mock_bind): |
| 73 | + mock_get_driver.return_value = "old_driver" |
| 74 | + pci.attach_driver("0000:03:00.0", "new_driver") |
| 75 | + mock_add_vid.assert_called_once() |
| 76 | + mock_unbind.assert_called_once_with("old_driver", "0000:03:00.0") |
| 77 | + mock_bind.assert_called_once_with("new_driver", "0000:03:00.0") |
| 78 | + |
| 79 | + @unittest.mock.patch("avocado.utils.pci.process.run") |
| 80 | + def test_check_msix_capability_supported(self, mock_run): |
| 81 | + mock_run.return_value.exit_status = 0 |
| 82 | + mock_run.return_value.stdout_text = "Capabilities: [90] MSI-X: Enable+ Count=16" |
| 83 | + self.assertTrue(pci.check_msix_capability("0000:03:00.0")) |
| 84 | + |
| 85 | + @unittest.mock.patch("avocado.utils.pci.process.run") |
| 86 | + def test_check_msix_capability_unsupported(self, mock_run): |
| 87 | + mock_run.return_value.exit_status = 0 |
| 88 | + mock_run.return_value.stdout_text = "Capabilities: [90] MSI: Enable+ Count=16" |
| 89 | + self.assertFalse(pci.check_msix_capability("0000:03:00.0")) |
| 90 | + |
| 91 | + @unittest.mock.patch("avocado.utils.pci.process.run") |
| 92 | + def test_device_supports_irqs_enough(self, mock_run): |
| 93 | + mock_run.return_value.exit_status = 0 |
| 94 | + mock_run.return_value.stdout_text = "MSI-X: Enable+ Count=64" |
| 95 | + self.assertTrue(pci.device_supports_irqs("0000:03:00.0", 32)) |
| 96 | + |
| 97 | + @unittest.mock.patch("avocado.utils.pci.process.run") |
| 98 | + def test_device_supports_irqs_insufficient(self, mock_run): |
| 99 | + mock_run.return_value.exit_status = 0 |
| 100 | + mock_run.return_value.stdout_text = "MSI-X: Enable+ Count=4" |
| 101 | + self.assertFalse(pci.device_supports_irqs("0000:03:00.0", 16)) |
| 102 | + |
| 103 | + @unittest.mock.patch("avocado.utils.pci.process.run") |
| 104 | + def test_device_supports_irqs_no_msix(self, mock_run): |
| 105 | + mock_run.return_value.exit_status = 0 |
| 106 | + mock_run.return_value.stdout_text = "Capabilities: [90] MSI: Enable+ Count=16" |
| 107 | + self.assertFalse(pci.device_supports_irqs("0000:03:00.0", 8)) |
| 108 | + |
45 | 109 |
|
46 | 110 | if __name__ == "__main__": |
47 | 111 | unittest.main() |
0 commit comments