summaryrefslogtreecommitdiff
path: root/ironic/tests/unit/drivers/modules/redfish/test_raid.py
diff options
context:
space:
mode:
authorAija Jauntēva <aija.jaunteva@dell.com>2022-01-04 04:42:51 -0500
committerAija Jauntēva <aija.jaunteva@dell.com>2022-01-05 04:45:56 -0500
commit196d8f7fc055667af501ea0569ba5c501a2c6e8d (patch)
tree09dea0290e872a5d9b77c78bb517cc19339ae5d2 /ironic/tests/unit/drivers/modules/redfish/test_raid.py
parent1a03e613299c04c2bb6ea929ee94e776d3da2137 (diff)
downloadironic-196d8f7fc055667af501ea0569ba5c501a2c6e8d.tar.gz
Fix redfish RAID failed tasks
Redfish Tasks do not report failures via HTTP status codes. Instead have to check TaskState and TaskStatus. Story: 2009767 Task: 44244 Change-Id: I8f9a89d18d22d18a2e695fde894bcd27f18f8954
Diffstat (limited to 'ironic/tests/unit/drivers/modules/redfish/test_raid.py')
-rw-r--r--ironic/tests/unit/drivers/modules/redfish/test_raid.py84
1 files changed, 84 insertions, 0 deletions
diff --git a/ironic/tests/unit/drivers/modules/redfish/test_raid.py b/ironic/tests/unit/drivers/modules/redfish/test_raid.py
index db2d825e3..07db6f6f8 100644
--- a/ironic/tests/unit/drivers/modules/redfish/test_raid.py
+++ b/ironic/tests/unit/drivers/modules/redfish/test_raid.py
@@ -1058,3 +1058,87 @@ class RedfishRAIDTestCase(db_base.DbTestCase):
self.assertEqual(storage, self.mock_storage)
nonraid_storage.drives.assert_not_called()
+
+ @mock.patch.object(redfish_utils, 'get_task_monitor', autospec=True)
+ @mock.patch.object(redfish_raid.LOG, 'info', autospec=True)
+ def test__raid_config_in_progress_success(
+ self, mock_info, mock_get_task_monitor, mock_get_system):
+ mock_task = mock.Mock()
+ mock_task.task_state = sushy.TASK_STATE_COMPLETED
+ mock_task.task_status = sushy.HEALTH_OK
+ mock_task.messages = []
+ mock_task_monitor = mock.Mock()
+ mock_task_monitor.is_processing = False
+ mock_task_monitor.get_task.return_value = mock_task
+ mock_get_task_monitor.return_value = mock_task_monitor
+
+ with task_manager.acquire(self.context, self.node.uuid,
+ shared=False) as task:
+
+ raid = redfish_raid.RedfishRAID()
+ result = raid._raid_config_in_progress(
+ task, {'task_monitor_uri': '/TaskService/123',
+ 'operation': 'create'})
+ self.assertEqual(False, result)
+ mock_info.assert_called_once()
+
+ @mock.patch.object(redfish_utils, 'get_task_monitor', autospec=True)
+ @mock.patch.object(redfish_raid.LOG, 'info', autospec=True)
+ def test__raid_config_in_progress_task_mon_error(
+ self, mock_info, mock_get_task_monitor, mock_get_system):
+ mock_get_task_monitor.side_effect = exception.RedfishError(
+ error='Task not found')
+
+ with task_manager.acquire(self.context, self.node.uuid,
+ shared=False) as task:
+
+ raid = redfish_raid.RedfishRAID()
+ result = raid._raid_config_in_progress(
+ task, {'task_monitor_uri': '/TaskService/123',
+ 'operation': 'create'})
+ self.assertEqual(False, result)
+ mock_info.assert_called_once()
+
+ @mock.patch.object(redfish_utils, 'get_task_monitor', autospec=True)
+ @mock.patch.object(redfish_raid.LOG, 'debug', autospec=True)
+ def test__raid_config_in_progress_still_processing(
+ self, mock_debug, mock_get_task_monitor, mock_get_system):
+ mock_task_monitor = mock.Mock()
+ mock_task_monitor.is_processing = True
+ mock_get_task_monitor.return_value = mock_task_monitor
+
+ with task_manager.acquire(self.context, self.node.uuid,
+ shared=False) as task:
+
+ raid = redfish_raid.RedfishRAID()
+ result = raid._raid_config_in_progress(
+ task, {'task_monitor_uri': '/TaskService/123',
+ 'operation': 'create'})
+ self.assertEqual(True, result)
+ mock_debug.assert_called_once()
+
+ @mock.patch.object(redfish_utils, 'get_task_monitor', autospec=True)
+ @mock.patch.object(redfish_raid.LOG, 'error', autospec=True)
+ def test__raid_config_in_progress_failed(
+ self, mock_error, mock_get_task_monitor, mock_get_system):
+ mock_message = mock.Mock()
+ mock_message.message = 'RAID configuration failed'
+ mock_message.severity = sushy.SEVERITY_CRITICAL
+ mock_task = mock.Mock()
+ mock_task.task_state = sushy.TASK_STATE_COMPLETED
+ mock_task.task_status = sushy.HEALTH_CRITICAL
+ mock_task.messages = [mock_message]
+ mock_task_monitor = mock.Mock()
+ mock_task_monitor.is_processing = False
+ mock_task_monitor.get_task.return_value = mock_task
+ mock_get_task_monitor.return_value = mock_task_monitor
+
+ with task_manager.acquire(self.context, self.node.uuid,
+ shared=False) as task:
+
+ raid = redfish_raid.RedfishRAID()
+ result = raid._raid_config_in_progress(
+ task, {'task_monitor_uri': '/TaskService/123',
+ 'operation': 'create'})
+ self.assertEqual(False, result)
+ mock_error.assert_called_once()