def test_start_update_and_wait_success(self): mock_config = self.create_mock_config() self._fake_context.get_job_config = Mock(return_value=mock_config) self._mock_options.wait = True resp = self.create_simple_success_response() resp.result = Result(startJobUpdateResult=StartJobUpdateResult( key=JobUpdateKey(job=JobKey( role="role", environment="env", name="name"), id="id"))) self._mock_api.start_job_update.return_value = resp self._mock_api.query_job_updates.side_effect = [ get_status_query_response(status=JobUpdateStatus.ROLLED_FORWARD) ] assert self._command.execute(self._fake_context) == EXIT_OK assert self._mock_api.start_job_update.mock_calls == [ call(ANY, None, None) ] assert self._mock_api.query_job_updates.mock_calls == [ call(update_key=resp.result.startJobUpdateResult.key) ] assert self._fake_context.get_out() == [ StartUpdate.UPDATE_MSG_TEMPLATE % ('http://something_or_other/scheduler/role/env/name/update/id'), 'Current state ROLLED_FORWARD' ] assert self._fake_context.get_err() == []
def test_start_update_command_line_succeeds(self): resp = self.create_simple_success_response() resp.result = Result(startJobUpdateResult=StartJobUpdateResult( key=JobUpdateKey(job=JobKey( role="role", environment="env", name="name"), id="id"))) self._mock_api.start_job_update.return_value = resp mock_config = self.create_mock_config() self._fake_context.get_job_config = Mock(return_value=mock_config) self._mock_options.instance_spec = TaskInstanceKey(self._job_key, None) self._mock_options.message = 'hello' with patch( 'apache.aurora.client.cli.update.DiffFormatter') as formatter: formatter.return_value = self._formatter assert self._command.execute(self._fake_context) == EXIT_OK assert self._formatter.show_job_update_diff.mock_calls == [ call(self._mock_options.instance_spec.instance) ] assert self._mock_api.start_job_update.mock_calls == [ call(ANY, 'hello', None, ANY) ] assert self._fake_context.get_out() == [ StartUpdate.UPDATE_MSG_TEMPLATE % ('http://something_or_other/scheduler/role/env/name/update/id'), ] assert self._fake_context.get_err() == []
def test_start_update_command_line_succeeds(self): mock_context = FakeAuroraCommandContext() resp = self.create_simple_success_response() resp.result = Result(startJobUpdateResult=StartJobUpdateResult(updateId="id")) with contextlib.nested( patch('apache.aurora.client.cli.update.Update.create_context', return_value=mock_context), patch('apache.aurora.client.factory.CLUSTERS', new=self.TEST_CLUSTERS)): mock_api = mock_context.get_api(self.TEST_CLUSTER) mock_api.start_job_update.return_value = resp with temporary_file() as fp: fp.write(self.get_valid_config()) fp.flush() cmd = AuroraCommandLine() result = cmd.execute(['beta-update', 'start', self.TEST_JOBSPEC, fp.name]) assert result == EXIT_OK update_url_msg = StartUpdate.UPDATE_MSG_TEMPLATE % ( mock_context.get_update_page(mock_api, AuroraJobKey.from_path(self.TEST_JOBSPEC), "id")) assert mock_api.start_job_update.call_count == 1 args, kwargs = mock_api.start_job_update.call_args assert isinstance(args[0], AuroraConfig) assert args[1] is None assert mock_context.get_out() == [update_url_msg] assert mock_context.get_err() == []
def test_start_update_and_wait_error(self): mock_config = self.create_mock_config() self._fake_context.get_job_config = Mock(return_value=mock_config) self._mock_options.wait = True resp = self.create_simple_success_response() resp.result = Result(startJobUpdateResult=StartJobUpdateResult( key=JobUpdateKey(job=JobKey(role="role", environment="env", name="name"), id="id"))) self._mock_api.start_job_update.return_value = resp self._mock_api.query_job_updates.side_effect = [ get_status_query_response(status=JobUpdateStatus.ERROR) ] with patch('apache.aurora.client.cli.update.DiffFormatter'): assert self._command.execute(self._fake_context) == EXIT_UNKNOWN_ERROR
def test_start_update_and_wait_rollback(self): mock_config = self.create_mock_config() self._fake_context.get_job_config = Mock(return_value=mock_config) self._mock_options.wait = True resp = self.create_simple_success_response() resp.result = Result(startJobUpdateResult=StartJobUpdateResult( key=JobUpdateKey(job=JobKey( role="role", environment="env", name="name"), id="id"))) self._mock_api.start_job_update.return_value = resp self._mock_api.query_job_updates.side_effect = [ get_status_query_response(status=JobUpdateStatus.ROLLED_BACK) ] assert self._command.execute( self._fake_context) == EXIT_COMMAND_FAILURE
def test_start_update_and_open_page(self): mock_config = self.create_mock_config() self._fake_context.get_job_config = Mock(return_value=mock_config) self._mock_options.open_browser = True resp = self.create_simple_success_response() resp.result = Result(startJobUpdateResult=StartJobUpdateResult( key=JobUpdateKey(job=JobKey(role="role", environment="env", name="name"), id="id"))) self._mock_api.start_job_update.return_value = resp with patch('apache.aurora.client.cli.update.DiffFormatter') as formatter: formatter.return_value = self._formatter assert self._command.execute(self._fake_context) == EXIT_OK assert self.mock_webbrowser.mock_calls == [ call('http://something_or_other/scheduler/role/env/name/update/id') ]
def test_start_update_command_line_succeeds(self): resp = self.create_simple_success_response() resp.result = Result(startJobUpdateResult=StartJobUpdateResult( key=JobUpdateKey(job=JobKey( role="role", environment="env", name="name"), id="id"))) self._mock_api.start_job_update.return_value = resp mock_config = self.create_mock_config() self._fake_context.get_job_config = Mock(return_value=mock_config) self._mock_options.instance_spec = TaskInstanceKey(self._job_key, None) self._mock_options.message = 'hello' assert self._command.execute(self._fake_context) == EXIT_OK update_url_msg = StartUpdate.UPDATE_MSG_TEMPLATE % ( 'http://something_or_other/scheduler/role/env/name/id') assert self._mock_api.start_job_update.mock_calls == [ call(ANY, 'hello', None) ] assert self._fake_context.get_out() == [update_url_msg] assert self._fake_context.get_err() == []
def create_start_job_update_result(cls, code, msg, key, metadata): resp = cls.create_blank_response(code, msg) resp.result = Result(startJobUpdateResult=StartJobUpdateResult( key=key, updateSummary=JobUpdateSummary(metadata=metadata))) return resp