def _test__do_node_deploy_driver_exception(self, exc, unexpected=False): self._start_service() with mock.patch.object(fake.FakeDeploy, 'deploy', autospec=True) as mock_deploy: # test when driver.deploy.deploy() raises an exception mock_deploy.side_effect = exc node = obj_utils.create_test_node( self.context, driver='fake-hardware', provision_state=states.DEPLOYING, target_provision_state=states.ACTIVE) task = task_manager.TaskManager(self.context, node.uuid) deployments.do_node_deploy(task, self.service.conductor.id) node.refresh() self.assertEqual(states.DEPLOYFAIL, node.provision_state) # NOTE(tenbrae): failing a deploy does not clear the target state # any longer. Instead, it is cleared when the instance # is deleted. self.assertEqual(states.ACTIVE, node.target_provision_state) self.assertIsNotNone(node.last_error) if unexpected: self.assertIn('Exception', node.last_error) else: self.assertNotIn('Exception', node.last_error) mock_deploy.assert_called_once_with(mock.ANY, task)
def _test__do_node_deploy_ok(self, mock_store, configdrive=None, expected_configdrive=None, fast_track=False): if fast_track: self.config(fast_track=True, group='deploy') expected_configdrive = expected_configdrive or configdrive self._start_service() with mock.patch.object(fake.FakeDeploy, 'deploy', autospec=True) as mock_deploy: mock_deploy.return_value = None self.node = obj_utils.create_test_node( self.context, driver='fake-hardware', name=None, provision_state=states.DEPLOYING, target_provision_state=states.ACTIVE, driver_internal_info={'agent_url': 'url', 'agent_secret_token': 'token'}) task = task_manager.TaskManager(self.context, self.node.uuid) deployments.do_node_deploy(task, self.service.conductor.id, configdrive=configdrive) self.node.refresh() self.assertEqual(states.ACTIVE, self.node.provision_state) self.assertEqual(states.NOSTATE, self.node.target_provision_state) self.assertIsNone(self.node.last_error) mock_deploy.assert_called_once_with(mock.ANY, mock.ANY) if configdrive: mock_store.assert_called_once_with(task.node, expected_configdrive) else: self.assertFalse(mock_store.called) self.assertEqual( fast_track, bool(task.node.driver_internal_info.get('agent_url'))) self.assertEqual( fast_track, bool(task.node.driver_internal_info.get('agent_secret_token')))
def test_do_node_deploy_steps(self, mock_set_steps, mock_deploy_step): # these are not real steps... fake_deploy_steps = ['step1', 'step2'] def add_steps(task, **kwargs): info = task.node.driver_internal_info info['deploy_steps'] = fake_deploy_steps task.node.driver_internal_info = info task.node.save() mock_set_steps.side_effect = add_steps self._start_service() node = obj_utils.create_test_node(self.context, driver='fake-hardware') task = task_manager.TaskManager(self.context, node.uuid) task.process_event('deploy') deployments.do_node_deploy(task, self.service.conductor.id) mock_set_steps.assert_called_once_with(task, skip_missing=True) self.assertEqual(fake_deploy_steps, task.node.driver_internal_info['deploy_steps'])
def test__do_node_deploy_ok_2(self): # NOTE(rloo): a different way of testing for the same thing as in # test__do_node_deploy_ok(). Instead of specifying the provision & # target_provision_states when creating the node, we call # task.process_event() to "set the stage" (err "states"). self._start_service() with mock.patch.object(fake.FakeDeploy, 'deploy', autospec=True) as mock_deploy: # test when driver.deploy.deploy() returns None mock_deploy.return_value = None node = obj_utils.create_test_node(self.context, driver='fake-hardware') task = task_manager.TaskManager(self.context, node.uuid) task.process_event('deploy') deployments.do_node_deploy(task, self.service.conductor.id) node.refresh() self.assertEqual(states.ACTIVE, node.provision_state) self.assertEqual(states.NOSTATE, node.target_provision_state) self.assertIsNone(node.last_error) mock_deploy.assert_called_once_with(mock.ANY, mock.ANY)