From af0894134fb210090120b3c62cbdde4a8d080939 Mon Sep 17 00:00:00 2001 From: Anish Bhatt Date: Thu, 29 Sep 2016 14:49:34 -0700 Subject: [PATCH] Don't assume FQDD naming Splitting on fixed number of colons breaks in this case : Disk.Bay.0:Enclosure.Internal.0-1:RAID.Integrated.1-1 Disk.Bay.1:Enclosure.Internal.0-1:RAID.Integrated.1-1 Disk.Bay.2:Enclosure.Internal.0-1:RAID.Integrated.1-1 Disk.Bay.3:Enclosure.Internal.0-1:RAID.Integrated.1-1 Disk.Direct.4:RAID.Integrated.1-1 Disk.Direct.5:RAID.Integrated.1-1 Split from right instead, doesn't fail Partial-Bug: #1586545 Change-Id: Ib4ca517388c48ade321451cb8af07abb731e5940 --- dracclient/resources/raid.py | 4 +- dracclient/tests/test_raid.py | 24 ++++++++++++ .../physical_disk_view-enum-ok.xml | 39 ++++++++++++++++++- 3 files changed, 64 insertions(+), 3 deletions(-) diff --git a/dracclient/resources/raid.py b/dracclient/resources/raid.py index 85c8742..179faa1 100644 --- a/dracclient/resources/raid.py +++ b/dracclient/resources/raid.py @@ -222,7 +222,7 @@ class RAIDManagement(object): name=self._get_virtual_disk_attr(drac_disk, 'Name'), description=self._get_virtual_disk_attr(drac_disk, 'DeviceDescription'), - controller=fqdd.split(':')[1], + controller=fqdd.split(':')[-1], raid_level=REVERSE_RAID_LEVELS[drac_raid_level], size_mb=int(size_b) / 2 ** 20, status=constants.PRIMARY_STATUS[drac_status], @@ -273,7 +273,7 @@ class RAIDManagement(object): id=fqdd, description=self._get_physical_disk_attr(drac_disk, 'DeviceDescription'), - controller=fqdd.split(':')[2], + controller=fqdd.split(':')[-1], manufacturer=self._get_physical_disk_attr(drac_disk, 'Manufacturer'), model=self._get_physical_disk_attr(drac_disk, 'Model'), diff --git a/dracclient/tests/test_raid.py b/dracclient/tests/test_raid.py index efc25f8..a3acc33 100644 --- a/dracclient/tests/test_raid.py +++ b/dracclient/tests/test_raid.py @@ -94,6 +94,30 @@ class ClientRAIDManagementTestCase(base.BaseTest): self.assertIn(expected_physical_disk, self.drac_client.list_physical_disks()) + def test_list_physical_disks_direct(self, mock_requests): + expected_physical_disk = raid.PhysicalDisk( + id='Disk.Direct.2:RAID.Integrated.1-1', + description=('Disk 2 on ' + 'Integrated RAID Controller 1'), + controller='RAID.Integrated.1-1', + manufacturer='ATA', + model='ST600MM0007', + media_type='ssd', + interface_type='sata', + size_mb=571776, + free_size_mb=571776, + serial_number='S0M3EY3Z', + firmware_version='LS0B', + status='ok', + raid_status='ready') + + mock_requests.post( + 'https://1.2.3.4:443/wsman', + text=test_utils.RAIDEnumerations[uris.DCIM_PhysicalDiskView]['ok']) + + self.assertIn(expected_physical_disk, + self.drac_client.list_physical_disks()) + # Verify that various client convert_physical_disks calls to dracclient # result in a WSMan.invoke with appropriate parameters def _random_term(self): diff --git a/dracclient/tests/wsman_mocks/physical_disk_view-enum-ok.xml b/dracclient/tests/wsman_mocks/physical_disk_view-enum-ok.xml index 7e0576d..bf3633b 100644 --- a/dracclient/tests/wsman_mocks/physical_disk_view-enum-ok.xml +++ b/dracclient/tests/wsman_mocks/physical_disk_view-enum-ok.xml @@ -86,9 +86,46 @@ 0 0 + + 512 + 5 + 0 + Disk 2 on Integrated RAID Controller 1 + 2 + Disk.Direct.2:RAID.Integrated.1-1 + 599550590976 + 0 + Disk.Direct.2:RAID.Integrated.1-1 + 20150226180025.000000+000 + 20150226180025.000000+000 + ATA + 2 + 33 + 2014 + 3 + 1 + ST600MM0007 + None + 0 + CN07YX587262248G01PZA02 + 0 + 1 + 1 + 255 + LS0B + 1 + 5000C5007764F409 + 0 + S0M3EY3Z + 599550590976 + 2 + None + 0 + 0 + - \ No newline at end of file +