diff options
| author | Zuul <zuul@review.opendev.org> | 2023-05-08 20:11:15 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2023-05-08 20:11:15 +0000 |
| commit | a01ba938c21437d23e0c0c1064fcea5cedb90b14 (patch) | |
| tree | 942758f42ed1a85a714e2ecbfd9e776cc7c44078 /ironicclient/tests/unit/v1 | |
| parent | c2f15737a03f9aac2cb132d90cf476cb6bad981c (diff) | |
| parent | 0fd4c65803ff04a3c5cb9e04076c5d6a9806d918 (diff) | |
| download | python-ironicclient-master.tar.gz | |
Diffstat (limited to 'ironicclient/tests/unit/v1')
| -rw-r--r-- | ironicclient/tests/unit/v1/test_node.py | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/ironicclient/tests/unit/v1/test_node.py b/ironicclient/tests/unit/v1/test_node.py index 7cdde36..f395b51 100644 --- a/ironicclient/tests/unit/v1/test_node.py +++ b/ironicclient/tests/unit/v1/test_node.py @@ -2031,6 +2031,78 @@ class NodeManagerTest(testtools.TestCase): mock_sleep.assert_called_with(node._DEFAULT_POLL_INTERVAL) self.assertEqual(3, mock_sleep.call_count) + @mock.patch.object(time, 'sleep', autospec=True) + @mock.patch.object(node.NodeManager, 'get', autospec=True) + def test_wait_for_provision_state_several(self, mock_get, mock_sleep): + mock_get.side_effect = [ + self._fake_node_for_wait('deploying', target='active'), + # Sometimes non-fatal errors can be recorded in last_error + self._fake_node_for_wait('deploying', target='active', + error='Node locked'), + self._fake_node_for_wait('deploying', target='active'), + self._fake_node_for_wait('deploying', target='active'), + self._fake_node_for_wait('active'), + self._fake_node_for_wait('active'), + ] + + self.mgr.wait_for_provision_state(['node1', 'node2'], 'active') + + mock_get.assert_has_calls([ + mock.call(self.mgr, 'node1', os_ironic_api_version=None, + global_request_id=None), + mock.call(self.mgr, 'node2', os_ironic_api_version=None, + global_request_id=None), + ], any_order=True) + self.assertEqual(6, mock_get.call_count) + mock_sleep.assert_called_with(node._DEFAULT_POLL_INTERVAL) + self.assertEqual(2, mock_sleep.call_count) + + @mock.patch.object(time, 'sleep', autospec=True) + @mock.patch.object(node.NodeManager, 'get', autospec=True) + def test_wait_for_provision_state_one_failed(self, mock_get, mock_sleep): + mock_get.side_effect = [ + self._fake_node_for_wait('deploying', target='active'), + self._fake_node_for_wait('deploying', target='active'), + self._fake_node_for_wait('active'), + self._fake_node_for_wait('deploy failed', error='boom'), + ] + + self.assertRaisesRegex(exc.StateTransitionFailed, + 'boom', + self.mgr.wait_for_provision_state, + ['node1', 'node2'], 'active') + + mock_get.assert_has_calls([ + mock.call(self.mgr, 'node1', os_ironic_api_version=None, + global_request_id=None), + mock.call(self.mgr, 'node2', os_ironic_api_version=None, + global_request_id=None), + ], any_order=True) + self.assertEqual(4, mock_get.call_count) + mock_sleep.assert_called_with(node._DEFAULT_POLL_INTERVAL) + self.assertEqual(1, mock_sleep.call_count) + + @mock.patch.object(time, 'sleep', autospec=True) + @mock.patch.object(node.NodeManager, 'get', autospec=True) + def test_wait_for_provision_state_one_timeout(self, mock_get, mock_sleep): + fake_waiting_node = self._fake_node_for_wait( + 'deploying', target='active') + fake_success_node = self._fake_node_for_wait('active') + + def side_effect(node_manager, node_ident, *args, **kwargs): + if node_ident == 'node1': + return fake_success_node + else: + return fake_waiting_node + + mock_get.side_effect = side_effect + + self.assertRaisesRegex(exc.StateTransitionTimeout, + r'Node\(s\) node2', + self.mgr.wait_for_provision_state, + ['node1', 'node2'], 'active', + timeout=0.001) + def test_node_get_traits(self): traits = self.mgr.get_traits(NODE1['uuid']) expect = [ |
