diff options
| author | Raphael Glon <raphael.glon@corp.ovh.com> | 2019-08-09 14:59:53 +0200 |
|---|---|---|
| committer | Raphael Glon <raphael.glon@corp.ovh.com> | 2019-08-13 10:37:18 +0200 |
| commit | c54674942388dc85f1fc0c4bce1cd4e09929b618 (patch) | |
| tree | 64f1dbc8e0509c36428a7cf9fb901be44aa679be /ironic_python_agent/tests | |
| parent | 47ed5a2f9f8a9d295cc8aa88446a3065f7ad547f (diff) | |
| download | ironic-python-agent-c54674942388dc85f1fc0c4bce1cd4e09929b618.tar.gz | |
Fixes get_holder disks with nvme drives
Change-Id: I195ffdeeb3c13bdec5fc1735b82efa53c8d9d3de
Diffstat (limited to 'ironic_python_agent/tests')
| -rw-r--r-- | ironic_python_agent/tests/unit/test_hardware.py | 62 | ||||
| -rw-r--r-- | ironic_python_agent/tests/unit/test_utils.py | 36 |
2 files changed, 86 insertions, 12 deletions
diff --git a/ironic_python_agent/tests/unit/test_hardware.py b/ironic_python_agent/tests/unit/test_hardware.py index a8496934..9f4eb47b 100644 --- a/ironic_python_agent/tests/unit/test_hardware.py +++ b/ironic_python_agent/tests/unit/test_hardware.py @@ -639,6 +639,34 @@ Consistency Policy : resync 1 253 80 1 active sync /dev/vdf1 """) +MDADM_DETAIL_OUTPUT_NVME = ("""/dev/md0: + Version : 1.2 + Creation Time : Wed Aug 7 13:47:27 2019 + Raid Level : raid1 + Array Size : 439221248 (418.87 GiB 449.76 GB) + Used Dev Size : 439221248 (418.87 GiB 449.76 GB) + Raid Devices : 2 + Total Devices : 2 + Persistence : Superblock is persistent + + Intent Bitmap : Internal + + Update Time : Wed Aug 7 14:37:21 2019 + State : clean + Active Devices : 2 +Working Devices : 2 + Failed Devices : 0 + Spare Devices : 0 + + Name : rescue:0 (local to host rescue) + UUID : abe222bc:98735860:ab324674:e4076313 + Events : 426 + + Number Major Minor RaidDevice State + 0 259 2 0 active sync /dev/nvme0n1p1 + 1 259 3 1 active sync /dev/nvme1n1p1 +""") + MDADM_DETAIL_OUTPUT_BROKEN_RAID0 = ("""/dev/md126: Version : 1.2 @@ -2872,33 +2900,43 @@ class TestGenericHardwareManager(base.IronicAgentTest): @mock.patch.object(utils, 'execute', autospec=True) def test__get_component_devices(self, mocked_execute): mocked_execute.side_effect = [(MDADM_DETAIL_OUTPUT, '')] - raid_device = hardware.BlockDevice('/dev/md0', 'RAID-1', - 1073741824, True) - component_devices = hardware._get_component_devices(raid_device.name) + component_devices = hardware._get_component_devices('/dev/md0') self.assertEqual(['/dev/vde1', '/dev/vdf1'], component_devices) @mock.patch.object(utils, 'execute', autospec=True) def test__get_component_devices_broken_raid0(self, mocked_execute): mocked_execute.side_effect = [(MDADM_DETAIL_OUTPUT_BROKEN_RAID0, '')] - raid_device = hardware.BlockDevice('/dev/md126', 'RAID-0', - 1073741824, True) - component_devices = hardware._get_component_devices(raid_device.name) + component_devices = hardware._get_component_devices('/dev/md126') self.assertEqual(['/dev/sda2'], component_devices) @mock.patch.object(utils, 'execute', autospec=True) def test_get_holder_disks(self, mocked_execute): mocked_execute.side_effect = [(MDADM_DETAIL_OUTPUT, '')] - raid_device = hardware.BlockDevice('/dev/md0', 'RAID-1', - 1073741824, True) - holder_disks = hardware.get_holder_disks(raid_device.name) + holder_disks = hardware.get_holder_disks('/dev/md0') self.assertEqual(['/dev/vde', '/dev/vdf'], holder_disks) @mock.patch.object(utils, 'execute', autospec=True) + def test_get_holder_disks_with_nvme(self, mocked_execute): + mocked_execute.side_effect = [(MDADM_DETAIL_OUTPUT_NVME, '')] + holder_disks = hardware.get_holder_disks('/dev/md0') + self.assertEqual(['/dev/nvme0n1', '/dev/nvme1n1'], holder_disks) + + @mock.patch.object(utils, 'execute', autospec=True) + def test_get_holder_disks_unexpected_devices(self, mocked_execute): + side_effect = MDADM_DETAIL_OUTPUT_NVME.replace('nvme1n1p1', + 'notmatching1a') + mocked_execute.side_effect = [(side_effect, '')] + self.assertRaisesRegex( + errors.SoftwareRAIDError, + r'^Software RAID caused unknown error: Could not get holder disks ' + r'of /dev/md0: unexpected pattern for partition ' + r'/dev/notmatching1a$', + hardware.get_holder_disks, '/dev/md0') + + @mock.patch.object(utils, 'execute', autospec=True) def test_get_holder_disks_broken_raid0(self, mocked_execute): mocked_execute.side_effect = [(MDADM_DETAIL_OUTPUT_BROKEN_RAID0, '')] - raid_device = hardware.BlockDevice('/dev/md126', 'RAID-0', - 1073741824, True) - holder_disks = hardware.get_holder_disks(raid_device.name) + holder_disks = hardware.get_holder_disks('/dev/md126') self.assertEqual(['/dev/sda'], holder_disks) @mock.patch.object(hardware, 'get_holder_disks', autospec=True) diff --git a/ironic_python_agent/tests/unit/test_utils.py b/ironic_python_agent/tests/unit/test_utils.py index 24b5994f..4ee0ebd3 100644 --- a/ironic_python_agent/tests/unit/test_utils.py +++ b/ironic_python_agent/tests/unit/test_utils.py @@ -556,3 +556,39 @@ class TestUtils(testtools.TestCase): keyfile='spam', certfile='ham') self.assertEqual((True, ('ham', 'spam')), utils.get_ssl_client_options(conf)) + + def test_device_extractor(self): + self.assertEqual( + 'md0', + utils.extract_device('md0p1') + ) + self.assertEqual( + '/dev/md0', + utils.extract_device('/dev/md0p1') + ) + self.assertEqual( + 'sda', + utils.extract_device('sda12') + ) + self.assertEqual( + '/dev/sda', + utils.extract_device('/dev/sda12') + ) + self.assertEqual( + 'nvme0n1', + utils.extract_device('nvme0n1p12') + ) + self.assertEqual( + '/dev/nvme0n1', + utils.extract_device('/dev/nvme0n1p12') + ) + self.assertEqual( + '/dev/hello', + utils.extract_device('/dev/hello42') + ) + self.assertIsNone( + utils.extract_device('/dev/sda') + ) + self.assertIsNone( + utils.extract_device('whatevernotmatchin12a') + ) |
