From 4585ce2f76853b9773fb190ca0cfff0aa04a7cf8 Mon Sep 17 00:00:00 2001 From: Yushiro FURUKAWA Date: Wed, 13 Mar 2019 10:02:51 +0900 Subject: [PATCH] Fix getting RAID configuration for iRMC S5 In case of iRMC S5, there is no key named 'LogicalDrives' with no RAID configuration. This patch changes to use ".get()" for this key. Change-Id: Ia2de9d2025d317ff0fa87d9b82a9783e73874f05 --- scciclient/irmc/elcm.py | 2 +- scciclient/tests/irmc/test_elcm.py | 70 ++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+), 1 deletion(-) diff --git a/scciclient/irmc/elcm.py b/scciclient/irmc/elcm.py index 22479c3..a66aa35 100644 --- a/scciclient/irmc/elcm.py +++ b/scciclient/irmc/elcm.py @@ -1014,7 +1014,7 @@ def create_raid_configuration(irmc_info, target_raid_config): # create new RAID config. raid_adapter = get_raid_adapter(irmc_info) logical_drives = raid_adapter['Server']['HWConfigurationIrmc'][ - 'Adapters']['RAIDAdapter'][0]['LogicalDrives'] + 'Adapters']['RAIDAdapter'][0].get('LogicalDrives') session_timeout = irmc_info.get('irmc_raid_session_timeout', RAID_CONFIG_SESSION_TIMEOUT) if logical_drives is not None: diff --git a/scciclient/tests/irmc/test_elcm.py b/scciclient/tests/irmc/test_elcm.py index 8f7b57e..5a0159a 100644 --- a/scciclient/tests/irmc/test_elcm.py +++ b/scciclient/tests/irmc/test_elcm.py @@ -1152,6 +1152,76 @@ class ELCMTestCase(testtools.TestCase): restore_bios_config_mock.assert_called_once_with( irmc_info=self.irmc_info, bios_config=bios_config_data) + @mock.patch.object(elcm, 'get_raid_adapter') + @mock.patch.object(elcm, 'elcm_profile_set') + @mock.patch.object(elcm, '_process_session_data') + def test_create_raid_config_without_logical_drives( + self, session_mock, elcm_profile_set_mock, raid_info_mock): + elcm_profile_set_mock.return_value = { + "Session": { + "Id": 1, + "A_Param": "abc123" + } + } + session_id = 1 + session_timeout = 1800 + operation = 'CONFIG_RAID' + + target_raid_config = { + 'logical_disks': [ + { + 'size_gb': 100, + 'raid_level': '1', + } + ] + } + expected_input = { + 'Server': { + 'HWConfigurationIrmc': { + '@Processing': 'execute', + 'Adapters': { + 'RAIDAdapter': [ + { + 'Arrays': { + 'Array': [] + }, + 'LogicalDrives': { + 'LogicalDrive': [ + { + '@Number': 0, + '@Action': 'Create', + 'RaidLevel': '1', + 'InitMode': 'slow', + 'Size': { + '@Unit': 'GB', + '#text': 100 + }, + } + ] + } + } + ] + }, + '@Version': '1.00' + }, + '@Version': '1.01' + } + } + # In case of "LogicalDrives" doesn't exist + del self.raid_info['Server']['HWConfigurationIrmc'][ + 'Adapters']['RAIDAdapter'][0]['LogicalDrives'] + raid_info_mock.return_value = self.raid_info + + elcm.create_raid_configuration( + self.irmc_info, target_raid_config=target_raid_config) + + session_mock.assert_called_once_with(self.irmc_info, operation, + session_id, session_timeout) + # Check raid_input data + raid_info_mock.assert_called_once_with(self.irmc_info) + elcm_profile_set_mock.assert_called_once_with( + self.irmc_info, expected_input) + @mock.patch.object(elcm, 'get_raid_adapter') @mock.patch.object(elcm, 'elcm_profile_set') @mock.patch.object(elcm, '_process_session_data')