def test_try_job_results_url_format_fallback(self): git_cl = GitCL(MockHost()) git_cl.fetch_raw_try_job_results = lambda **_: [ { 'builder_name': 'builder-a', 'status': 'COMPLETED', 'result': 'FAILURE', 'tags': [ 'build_address:luci.chromium.try/chromium_presubmit/100', ], 'url': 'http://ci.chromium.org/p/master/builders/builder-b/builds/10', }, { 'builder_name': 'builder-b', 'status': 'COMPLETED', 'result': 'FAILURE', 'url': 'http://ci.chromium.org/p/master/builders/builder-b/builds/20', }, { 'builder_name': 'builder-c', 'status': 'COMPLETED', 'result': 'FAILURE', 'url': 'https://ci.chromium.org/swarming/task/36a767f405d9ee10', }, ] self.assertEqual( git_cl.try_job_results(), { Build('builder-a', 100): TryJobStatus('COMPLETED', 'FAILURE'), Build('builder-b', 20): TryJobStatus('COMPLETED', 'FAILURE'), Build('builder-c', '36a767f405d9ee10'): TryJobStatus('COMPLETED', 'FAILURE'), })
def test_try_job_results_with_task_id_in_url(self): git_cl = GitCL(MockHost()) git_cl.fetch_raw_try_job_results = lambda **_: [ { 'builder_name': 'builder-a', 'status': 'COMPLETED', 'result': 'FAILURE', 'failure_reason': 'BUILD_FAILURE', 'url': ('https://ci.chromium.org/swarming/task/' '36a767f405d9ee10'), }, { 'builder_name': 'builder-b', 'status': 'COMPLETED', 'result': 'SUCCESS', 'url': ('https://ci.chromium.org/swarming/task/' '38740befcd9c0010?server=chromium-swarm.appspot.com'), }, ] self.assertEqual( git_cl.try_job_results(), { Build('builder-a', '36a767f405d9ee10'): TryJobStatus('COMPLETED', 'FAILURE'), Build('builder-b', '38740befcd9c0010'): TryJobStatus('COMPLETED', 'SUCCESS'), })
def test_try_job_results_with_other_builder(self): git_cl = GitCL(MockHost()) git_cl._host.web = MockWeb(responses=[{ 'status_code': 200, 'body': SEARCHBUILDS_RESPONSE_PREFIX + b"""{ "builds": [ { "status": "FAILURE", "builder": { "builder": "builder-a" }, "number": 100, "tags": [ {"key": "user_agent", "value": "cq"} ] } ] }""" }]) # We ignore builders that we explicitly don't care about; # so if we only care about other-builder, not builder-a, # then no exception is raised. self.assertEqual( git_cl.try_job_results(builder_names=['other-builder']), {})
def test_try_job_results_with_unexpected_url_format(self): git_cl = GitCL(MockHost()) git_cl.fetch_raw_try_job_results = lambda **_: [ { 'builder_name': 'builder-a', 'status': 'COMPLETED', 'result': 'FAILURE', 'failure_reason': 'BUILD_FAILURE', 'url': 'https://example.com/', }, ] # We try to parse a build number or task ID from the URL. with self.assertRaisesRegexp(AssertionError, 'https://example.com/ did not match expected format'): git_cl.try_job_results() # We ignore builders that we explicitly don't care about; # so if we only care about other-builder, not builder-a, # then no exception is raised. self.assertEqual(git_cl.try_job_results(['other-builder']), {})
def test_try_job_results_with_swarming_url_with_query(self): git_cl = GitCL(MockHost()) git_cl.fetch_raw_try_job_results = lambda **_: [ { 'builder_name': 'builder-b', 'status': 'COMPLETED', 'result': 'SUCCESS', 'url': ('https://ci.chromium.org/swarming/task/' '38740befcd9c0010?server=chromium-swarm.appspot.com'), }, ] self.assertEqual( git_cl.try_job_results(), { Build('builder-b', '38740befcd9c0010'): TryJobStatus('COMPLETED', 'SUCCESS'), })
def test_try_job_results(self): git_cl = GitCL(MockHost()) git_cl._host.web = MockWeb(responses=[{ 'status_code': 200, 'body': SEARCHBUILDS_RESPONSE_PREFIX + b"""{ "builds": [ { "status": "SUCCESS", "builder": { "builder": "builder-a" }, "number": 111, "tags": [ {"key": "user_agent", "value": "cq"} ] }, { "status": "SCHEDULED", "builder": { "builder": "builder-b" }, "number": 222 }, { "status": "INFRA_FAILURE", "builder": { "builder": "builder-c" }, "number": 333 } ] }""" }]) self.assertEqual( git_cl.try_job_results(issue_number=None), { Build('builder-a', 111): TryJobStatus('COMPLETED', 'SUCCESS'), Build('builder-b', 222): TryJobStatus('SCHEDULED', None), # INFRA_FAILURE is mapped to FAILURE for this build. Build('builder-c', 333): TryJobStatus('COMPLETED', 'FAILURE'), })
def test_try_job_results_skip_experimental_cq(self): git_cl = GitCL(MockHost()) git_cl._host.web = MockWeb(responses=[{ 'status_code': 200, 'body': SEARCHBUILDS_RESPONSE_PREFIX + b"""{ "builds": [ { "status": "SUCCESS", "builder": { "builder": "builder-a" }, "number": 111, "tags": [ {"key": "user_agent", "value": "cq"} ] }, { "status": "SUCCESS", "builder": { "builder": "builder-b" }, "number": 222, "tags": [ {"key": "user_agent", "value": "cq"}, {"key": "cq_experimental", "value": "true"} ] } ] }""" }]) self.assertEqual( # Only one build appears - builder-b is ignored because it is # experimental. git_cl.try_job_results(issue_number=None, cq_only=True), { Build('builder-a', 111): TryJobStatus('COMPLETED', 'SUCCESS'), })