def __do_node_clean_validate_fail(self, mock_validate, clean_steps=None): # InvalidParameterValue should cause node to go to CLEANFAIL mock_validate.side_effect = exception.InvalidParameterValue('error') tgt_prov_state = states.MANAGEABLE if clean_steps else states.AVAILABLE node = obj_utils.create_test_node( self.context, driver='fake-hardware', provision_state=states.CLEANING, target_provision_state=tgt_prov_state) with task_manager.acquire(self.context, node.uuid, shared=False) as task: cleaning.do_node_clean(task, clean_steps=clean_steps) node.refresh() self.assertEqual(states.CLEANFAIL, node.provision_state) self.assertEqual(tgt_prov_state, node.target_provision_state) mock_validate.assert_called_once_with(mock.ANY, mock.ANY)
def __do_node_clean_prepare_clean_wait(self, mock_prep, mock_validate, clean_steps=None): mock_prep.return_value = states.CLEANWAIT tgt_prov_state = states.MANAGEABLE if clean_steps else states.AVAILABLE node = obj_utils.create_test_node( self.context, driver='fake-hardware', provision_state=states.CLEANING, target_provision_state=tgt_prov_state) with task_manager.acquire(self.context, node.uuid, shared=False) as task: cleaning.do_node_clean(task, clean_steps=clean_steps) node.refresh() self.assertEqual(states.CLEANWAIT, node.provision_state) self.assertEqual(tgt_prov_state, node.target_provision_state) mock_prep.assert_called_once_with(mock.ANY, mock.ANY) mock_validate.assert_called_once_with(mock.ANY, mock.ANY)
def test__do_node_clean_automated_enabled_individual_none( self, mock_validate, mock_network): self.config(automated_clean=True, group='conductor') node = obj_utils.create_test_node( self.context, driver='fake-hardware', provision_state=states.CLEANING, target_provision_state=states.AVAILABLE, last_error=None, automated_clean=None) with task_manager.acquire(self.context, node.uuid, shared=False) as task: cleaning.do_node_clean(task) node.refresh() # Assert that the node was cleaned self.assertTrue(mock_validate.called) self.assertIn('clean_steps', node.driver_internal_info)
def test__do_node_clean_automated_disabled(self, mock_validate): self.config(automated_clean=False, group='conductor') node = obj_utils.create_test_node( self.context, driver='fake-hardware', provision_state=states.CLEANING, target_provision_state=states.AVAILABLE, last_error=None) with task_manager.acquire(self.context, node.uuid, shared=False) as task: cleaning.do_node_clean(task) node.refresh() # Assert that the node was moved to available without cleaning self.assertFalse(mock_validate.called) self.assertEqual(states.AVAILABLE, node.provision_state) self.assertEqual(states.NOSTATE, node.target_provision_state) self.assertEqual({}, node.clean_step) self.assertNotIn('clean_steps', node.driver_internal_info) self.assertNotIn('clean_step_index', node.driver_internal_info)
def __do_node_clean(self, mock_power_valid, mock_network_valid, mock_next_step, mock_steps, clean_steps=None): if clean_steps: tgt_prov_state = states.MANAGEABLE driver_info = {} else: tgt_prov_state = states.AVAILABLE driver_info = {'clean_steps': self.clean_steps} node = obj_utils.create_test_node( self.context, driver='fake-hardware', provision_state=states.CLEANING, target_provision_state=tgt_prov_state, last_error=None, power_state=states.POWER_OFF, driver_internal_info=driver_info) with task_manager.acquire(self.context, node.uuid, shared=False) as task: cleaning.do_node_clean(task, clean_steps=clean_steps) node.refresh() mock_power_valid.assert_called_once_with(mock.ANY, task) mock_network_valid.assert_called_once_with(mock.ANY, task) mock_next_step.assert_called_once_with(task, 0) mock_steps.assert_called_once_with(task) if clean_steps: self.assertEqual(clean_steps, node.driver_internal_info['clean_steps']) # Check that state didn't change self.assertEqual(states.CLEANING, node.provision_state) self.assertEqual(tgt_prov_state, node.target_provision_state)
def test__do_node_clean_maintenance(self, mock_prep, mock_tear_down): CONF.set_override('allow_provisioning_in_maintenance', False, group='conductor') node = obj_utils.create_test_node( self.context, driver='fake-hardware', provision_state=states.CLEANING, target_provision_state=states.AVAILABLE, maintenance=True, maintenance_reason='Original reason') with task_manager.acquire(self.context, node.uuid, shared=False) as task: cleaning.do_node_clean(task) node.refresh() self.assertEqual(states.CLEANFAIL, node.provision_state) self.assertEqual(states.AVAILABLE, node.target_provision_state) self.assertIn('is not allowed', node.last_error) self.assertTrue(node.maintenance) self.assertEqual('Original reason', node.maintenance_reason) self.assertFalse(mock_prep.called) self.assertFalse(mock_tear_down.called)
def _test__do_node_clean_cache_bios(self, mock_bios, mock_validate, mock_prep, mock_next_step, mock_steps, mock_log, clean_steps=None, enable_unsupported=False, enable_exception=False): if enable_unsupported: mock_bios.side_effect = exception.UnsupportedDriverExtension('') elif enable_exception: mock_bios.side_effect = exception.IronicException('test') mock_prep.return_value = states.NOSTATE tgt_prov_state = states.MANAGEABLE if clean_steps else states.AVAILABLE node = obj_utils.create_test_node( self.context, driver='fake-hardware', provision_state=states.CLEANING, target_provision_state=tgt_prov_state) with task_manager.acquire(self.context, node.uuid, shared=False) as task: cleaning.do_node_clean(task, clean_steps=clean_steps) node.refresh() mock_bios.assert_called_once_with(mock.ANY, task) if clean_steps: self.assertEqual(states.CLEANING, node.provision_state) self.assertEqual(tgt_prov_state, node.target_provision_state) else: self.assertEqual(states.CLEANING, node.provision_state) self.assertEqual(states.AVAILABLE, node.target_provision_state) mock_validate.assert_called_once_with(mock.ANY, task) if enable_exception: mock_log.exception.assert_called_once_with( 'Caching of bios settings failed on node {}. ' 'Continuing with node cleaning.'.format(node.uuid))
def __do_node_clean_steps_fail(self, mock_steps, mock_validate, clean_steps=None, invalid_exc=True): if invalid_exc: mock_steps.side_effect = exception.InvalidParameterValue('invalid') else: mock_steps.side_effect = exception.NodeCleaningFailure('failure') tgt_prov_state = states.MANAGEABLE if clean_steps else states.AVAILABLE node = obj_utils.create_test_node( self.context, driver='fake-hardware', uuid=uuidutils.generate_uuid(), provision_state=states.CLEANING, target_provision_state=tgt_prov_state) with task_manager.acquire(self.context, node.uuid, shared=False) as task: cleaning.do_node_clean(task, clean_steps=clean_steps) mock_validate.assert_called_once_with(mock.ANY, task) node.refresh() self.assertEqual(states.CLEANFAIL, node.provision_state) self.assertEqual(tgt_prov_state, node.target_provision_state) mock_steps.assert_called_once_with(mock.ANY)