def test_instance_failure_flow_start_failed(self, _mock_novaclient): _mock_novaclient.return_value = self.fake_client # create test data server = self.fake_client.servers.create(self.instance_id, host="fake-host", ha_enabled=True) # test StopInstanceTask self._test_stop_instance() def fake_start_server(context, uuid): # assume that while starting instance goes into error state setattr(server, 'OS-EXT-STS:vm_state', "error") return server # test StartInstanceTask task = instance_failure.StartInstanceTask(self.novaclient) with mock.patch.object(self.novaclient, 'start_server', fake_start_server): task.execute(self.ctxt, self.instance_id) # test ConfirmInstanceActiveTask task = instance_failure.ConfirmInstanceActiveTask(self.novaclient) self.assertRaises( exception.InstanceRecoveryFailureException, task.execute, self.ctxt, self.instance_id)
def test_instance_failure_flow(self, _mock_notify, _mock_novaclient): _mock_novaclient.return_value = self.fake_client # create test data self.fake_client.servers.create(self.instance_id, host="fake-host", ha_enabled=True) # test StopInstanceTask self._test_stop_instance() # test StartInstanceTask task = instance_failure.StartInstanceTask(self.ctxt, self.novaclient) task.execute(self.instance_id) # test ConfirmInstanceActiveTask self._test_confirm_instance_is_active() # verify progress details _mock_notify.assert_has_calls([ mock.call('Stopping instance: ' + self.instance_id), mock.call("Stopped instance: '" + self.instance_id + "'", 1.0), mock.call("Starting instance: '" + self.instance_id + "'"), mock.call("Instance started: '" + self.instance_id + "'", 1.0), mock.call("Confirming instance '" + self.instance_id + "' vm_state is ACTIVE"), mock.call( "Confirmed instance '" + self.instance_id + "' vm_state is ACTIVE", 1.0) ])
def test_instance_failure_flow_not_ha_enabled_but_conf_option_is_set( self, _mock_notify, _mock_novaclient): # Setting this config option to True indicates masakari has to recover # the instance irrespective of whether it is HA_Enabled or not. self.override_config("process_all_instances", True, "instance_failure") _mock_novaclient.return_value = self.fake_client # create test data self.fake_client.servers.create(self.instance_id, host="fake-host", vm_state="resized") # test StopInstanceTask self._test_stop_instance() # test StartInstanceTask task = instance_failure.StartInstanceTask(self.ctxt, self.novaclient) task.execute(self.instance_id) # test ConfirmInstanceActiveTask self._test_confirm_instance_is_active() # verify progress details _mock_notify.assert_has_calls([ mock.call('Stopping instance: ' + self.instance_id), mock.call("Stopped instance: '" + self.instance_id + "'", 1.0), mock.call("Starting instance: '" + self.instance_id + "'"), mock.call("Instance started: '" + self.instance_id + "'", 1.0), mock.call("Confirming instance '" + self.instance_id + "' vm_state is ACTIVE"), mock.call( "Confirmed instance '" + self.instance_id + "' vm_state is ACTIVE", 1.0) ])
def test_instance_failure_flow_resized_instance(self, _mock_novaclient): _mock_novaclient.return_value = self.fake_client # create test data self.fake_client.servers.create(self.instance_id, host="fake-host", ha_enabled=True, vm_state="resized") # test StopInstanceTask self._test_stop_instance() # test StartInstanceTask task = instance_failure.StartInstanceTask(self.novaclient) task.execute(self.ctxt, self.instance_id) # test ConfirmInstanceActiveTask self._test_confirm_instance_is_active()
def test_instance_failure_flow_not_ha_enabled_but_conf_option_is_set( self, _mock_novaclient): # Setting this config option to True indicates masakari has to recover # the instance irrespective of whether it is HA_Enabled or not. self.override_config("process_all_instances", True, "instance_failure") _mock_novaclient.return_value = self.fake_client # create test data self.fake_client.servers.create(self.instance_id, host="fake-host", vm_state="resized") # test StopInstanceTask self._test_stop_instance() # test StartInstanceTask task = instance_failure.StartInstanceTask(self.novaclient) task.execute(self.ctxt, self.instance_id) # test ConfirmInstanceActiveTask self._test_confirm_instance_is_active()
def test_instance_failure_flow_start_failed(self, _mock_notify, _mock_novaclient): _mock_novaclient.return_value = self.fake_client # create test data server = self.fake_client.servers.create(self.instance_id, host="fake-host", ha_enabled=True) # test StopInstanceTask self._test_stop_instance() def fake_start_server(context, uuid): # assume that while starting instance goes into error state setattr(server, 'OS-EXT-STS:vm_state', "error") return server # test StartInstanceTask task = instance_failure.StartInstanceTask(self.ctxt, self.novaclient) with mock.patch.object(self.novaclient, 'start_server', fake_start_server): task.execute(self.instance_id) # test ConfirmInstanceActiveTask task = instance_failure.ConfirmInstanceActiveTask( self.ctxt, self.novaclient) self.assertRaises(exception.InstanceRecoveryFailureException, task.execute, self.instance_id) # verify progress details _mock_notify.assert_has_calls([ mock.call('Stopping instance: ' + self.instance_id), mock.call("Stopped instance: '" + self.instance_id + "'", 1.0), mock.call("Starting instance: '" + self.instance_id + "'"), mock.call("Instance started: '" + self.instance_id + "'", 1.0), mock.call("Confirming instance '" + self.instance_id + "' vm_state is ACTIVE"), mock.call('Failed to start instance 1', 1.0) ])
def test_instance_failure_flow_custom_ha_key(self, _mock_notify, _mock_novaclient): _mock_novaclient.return_value = self.fake_client ha_enabled_key = 'Ensure-My-HA' self.override_config('ha_enabled_instance_metadata_key', ha_enabled_key, 'instance_failure') # create test data with custom ha_enabled_key self.fake_client.servers.create(self.instance_id, host="fake-host", ha_enabled=True, ha_enabled_key=ha_enabled_key) # test StopInstanceTask self._test_stop_instance() # test StartInstanceTask task = instance_failure.StartInstanceTask(self.ctxt, self.novaclient) task.execute(self.instance_id) # test ConfirmInstanceActiveTask self._test_confirm_instance_is_active() # verify progress details _mock_notify.assert_has_calls([ mock.call('Stopping instance: ' + self.instance_id), mock.call("Stopped instance: '" + self.instance_id + "'", 1.0), mock.call("Starting instance: '" + self.instance_id + "'"), mock.call("Instance started: '" + self.instance_id + "'", 1.0), mock.call("Confirming instance '" + self.instance_id + "' vm_state is ACTIVE"), mock.call( "Confirmed instance '" + self.instance_id + "' vm_state is ACTIVE", 1.0) ])