def update_by_response(self, response): deploy_goal = response.deployGoal self.op_code = response.opCode if not self.report: self.report = PingReport() self.report.envId = deploy_goal.envId self.report.deployId = deploy_goal.deployId self.report.deployStage = deploy_goal.deployStage self.report.deployAlias = deploy_goal.deployAlias self.report.envName = deploy_goal.envName self.report.status = AgentStatus.UNKNOWN self.report.stageName = deploy_goal.stageName self.first_deploy = deploy_goal.firstDeploy if deploy_goal.build: build = deploy_goal.build self.build_info = BuildInfo(commit=build.scmCommit, build_url=build.artifactUrl, build_id=build.buildId, build_name=build.buildName, build_repo=build.scmRepo, build_branch=build.scmBranch) if deploy_goal.scriptVariables: self.script_variables = deploy_goal.scriptVariables # advanced per deploy step configs if deploy_goal.config: self.runtime_config = dict(deploy_goal.config)
def test_delete_report(self): status = DeployStatus() ping_report = {} ping_report['deployId'] = '123' ping_report['envId'] = '234' ping_report['envName'] = 'abc' ping_report['stageName'] = 'beta' ping_report['deployStage'] = DeployStage.SERVING_BUILD ping_report['status'] = AgentStatus.SUCCEEDED status.report = PingReport(jsonValue=ping_report) envs = {'abc': status} client = mock.Mock() estatus = mock.Mock() estatus.load_envs = mock.Mock(return_value=envs) deploy_goal = {} deploy_goal['deployId'] = '123' deploy_goal['envId'] = '234' deploy_goal['envName'] = 'abc' deploy_goal['stageName'] = 'beta' ping_response = {'deployGoal': deploy_goal, 'opCode': OpCode.DELETE} responses = [ PingResponse(jsonValue=ping_response), PingResponse(jsonValue=self.ping_noop_response) ] client.send_reports = mock.Mock(side_effect=responses) agent = DeployAgent(client=client, estatus=estatus, conf=self.config, executor=self.executor, helper=self.helper) agent.serve_build() calls = [mock.call(envs), mock.call({})] client.send_reports.assert_has_calls(calls) self.assertIsNone(agent._curr_report) self.assertEqual(agent._envs, {})
def _new_report(self): report = PingReport() report.envName = self.env_name report.stageName = self.stage report.erroCode = 0 report.envId = self.env_id report.deployStage = None report.status = AgentStatus.SUCCEEDED return report
def test_load_dump_file(self): fn = tempfile.mkstemp()[1] env_status = EnvStatus(fn) status1 = DeployStatus() ping_report = {} ping_report['deployId'] = 'deploy1' ping_report['envId'] = 'envId1' ping_report['envName'] = 'env1' ping_report['stageName'] = 'beta' ping_report['deployStage'] = DeployStage.POST_RESTART ping_report['status'] = AgentStatus.AGENT_FAILED ping_report['errorCode'] = 1 ping_report['errorMessage'] = 'Fail to open files' status1.report = PingReport(jsonValue=ping_report) status1.build_info = BuildInfo(commit='abc', build_url='http://google.com', build_id='234') status2 = DeployStatus() ping_report = {} ping_report['deployId'] = 'deploy2' ping_report['envId'] = 'envId2' ping_report['envName'] = 'env2' ping_report['stageName'] = 'prod' ping_report['deployStage'] = DeployStage.SERVING_BUILD ping_report['status'] = AgentStatus.SUCCEEDED status2.report = PingReport(jsonValue=ping_report) status2.build_info = BuildInfo(commit='bcd', build_url='http://pinterest.com', build_id='234') envs = {'env1': status1, 'env2': status2} env_status.dump_envs(envs) envs2 = env_status.load_envs() self.assertEqual(envs['env1'].report.status, envs2['env1'].report.status) self.assertEqual(envs['env1'].report.errorMessage, envs2['env1'].report.errorMessage) self.assertEqual(envs['env1'].build_info.build_commit, envs2['env1'].build_info.build_commit) self.assertEqual(envs['env2'].report.deployStage, envs2['env2'].report.deployStage) self.assertEqual(envs['env2'].build_info.build_url, envs2['env2'].build_info.build_url) os.remove(fn)
def load_from_json(self, json_value): report = json_value.get('report') build_info = json_value.get('build_info') if report: self.report = PingReport(jsonValue=report) if build_info: self.build_info = BuildInfo(commit=build_info.get('build_commit'), build_url=build_info.get('build_url'), build_id=build_info.get('build_id'), build_name=build_info.get('build_name'), build_repo=build_info.get('build_repo'), build_branch=build_info.get('build_branch')) self.runtime_config = json_value.get('runtime_config') op_code = json_value.get('op_code', OpCode.NOOP) if isinstance(op_code, int): self.op_code = OperationCode._VALUES_TO_NAMES[op_code] else: self.op_code = op_code
def test_report_health(self): status = DeployStatus() ping_report = {} ping_report['deployId'] = '123' ping_report['envId'] = '234' ping_report['envName'] = 'abc' ping_report['stageName'] = 'beta' ping_report['deployStage'] = DeployStage.SERVING_BUILD ping_report['status'] = AgentStatus.SUCCEEDED status.report = PingReport(jsonValue=ping_report) envs = {'234': status} client = mock.Mock() estatus = mock.Mock() estatus.load_envs = mock.Mock(return_value=envs) client.send_reports = \ mock.Mock(return_value=PingResponse(jsonValue=self.ping_noop_response)) agent = DeployAgent(client=client, estatus=estatus, conf=self.config, executor=self.executor, helper=self.helper) agent.serve_build() client.send_reports.assert_called_once_with(envs) self.assertEqual(agent._curr_report.report.envId, '234') self.assertEqual(agent._curr_report.report.deployStage, DeployStage.SERVING_BUILD) self.assertEqual(agent._curr_report.report.status, AgentStatus.SUCCEEDED)