| OLD | NEW |
| 1 # Copyright 2015 The Chromium Authors. All rights reserved. | 1 # Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 from testing_utils import testing | 5 from testing_utils import testing |
| 6 | 6 |
| 7 from common import buildbucket_client | 7 from common import buildbucket_client |
| 8 from model import wf_analysis_status | 8 from model import wf_analysis_status |
| 9 from model.wf_try_job import WfTryJob | 9 from model.wf_try_job import WfTryJob |
| 10 from waterfall.monitor_try_job_pipeline import MonitorTryJobPipeline | 10 from waterfall.monitor_try_job_pipeline import MonitorTryJobPipeline |
| 11 from waterfall.try_job_enums import TryJobType |
| 11 | 12 |
| 12 class MonitorTryJobPipelineTest(testing.AppengineTestCase): | 13 class MonitorTryJobPipelineTest(testing.AppengineTestCase): |
| 13 def _Mock_GetTryJobs(self, build_id): | 14 def _Mock_GetTryJobs(self, build_id): |
| 14 def Mocked_GetTryJobs(*_): | 15 def Mocked_GetTryJobs(*_): |
| 15 data = { | 16 data = { |
| 16 '1': { | 17 '1': { |
| 17 'build': { | 18 'build': { |
| 18 'id': '1', | 19 'id': '1', |
| 19 'url': 'url', | 20 'url': 'url', |
| 20 'status': 'COMPLETED', | 21 'status': 'COMPLETED', |
| 21 'result_details_json': ( | 22 'result_details_json': ( |
| 22 '{"properties": {"result": [["rev1", "passed"],' | 23 '{"properties": {"result": [["rev1", "passed"],' |
| 23 ' ["rev2", "failed"]]}}') | 24 ' ["rev2", "failed"]]}}') |
| 24 } | 25 } |
| 25 }, | 26 }, |
| 26 '2': { | 27 '2': { |
| 27 'error': { | 28 'error': { |
| 28 'reason': 'BUILD_NOT_FOUND', | 29 'reason': 'BUILD_NOT_FOUND', |
| 29 'message': 'message', | 30 'message': 'message', |
| 30 } | 31 } |
| 32 }, |
| 33 '3': { |
| 34 'build': { |
| 35 'id': '3', |
| 36 'url': 'url', |
| 37 'status': 'COMPLETED', |
| 38 'result_details_json': ( |
| 39 '{"properties": {"result": {"rev1": {"a_test": {"status":' |
| 40 ' "passed", "valid": true}}, "rev2": {"a_test": ' |
| 41 '{"status": "failed", "valid": true, "failures": ["test1"' |
| 42 ', "test2"]}}}}}') |
| 43 } |
| 31 } | 44 } |
| 32 } | 45 } |
| 33 compile_results = [] | 46 try_job_results = [] |
| 34 build_error = data.get(build_id) | 47 build_error = data.get(build_id) |
| 35 if build_error.get('error'): # pragma: no cover | 48 if build_error.get('error'): # pragma: no cover |
| 36 compile_results.append(( | 49 try_job_results.append(( |
| 37 buildbucket_client.BuildbucketError(build_error['error']), None)) | 50 buildbucket_client.BuildbucketError(build_error['error']), None)) |
| 38 else: | 51 else: |
| 39 compile_results.append(( | 52 try_job_results.append(( |
| 40 None, buildbucket_client.BuildbucketBuild(build_error['build']))) | 53 None, buildbucket_client.BuildbucketBuild(build_error['build']))) |
| 41 return compile_results | 54 return try_job_results |
| 42 self.mock(buildbucket_client, 'GetTryJobs', Mocked_GetTryJobs) | 55 self.mock(buildbucket_client, 'GetTryJobs', Mocked_GetTryJobs) |
| 43 | 56 |
| 44 def testGetTryJobsForCompileSuccess(self): | 57 def testGetTryJobsForCompileSuccess(self): |
| 45 master_name = 'm' | 58 master_name = 'm' |
| 46 builder_name = 'b' | 59 builder_name = 'b' |
| 47 build_number = 1 | 60 build_number = 1 |
| 48 try_job_id = '1' | 61 try_job_id = '1' |
| 49 | 62 |
| 50 try_job = WfTryJob.Create(master_name, builder_name, build_number) | 63 try_job = WfTryJob.Create(master_name, builder_name, build_number) |
| 51 try_job.compile_results = [ | 64 try_job.compile_results = [ |
| 52 { | 65 { |
| 53 'result': None, | 66 'result': None, |
| 54 'url': 'url', | 67 'url': 'url', |
| 55 'try_job_id': '1', | 68 'try_job_id': '1', |
| 56 } | 69 } |
| 57 ] | 70 ] |
| 58 try_job.status = wf_analysis_status.ANALYZING | 71 try_job.status = wf_analysis_status.ANALYZING |
| 59 try_job.put() | 72 try_job.put() |
| 60 self._Mock_GetTryJobs(try_job_id) | 73 self._Mock_GetTryJobs(try_job_id) |
| 61 | 74 |
| 62 pipeline = MonitorTryJobPipeline() | 75 pipeline = MonitorTryJobPipeline() |
| 63 compile_result = pipeline.run( | 76 compile_result = pipeline.run( |
| 64 master_name, builder_name, build_number, try_job_id) | 77 master_name, builder_name, build_number, TryJobType.type_compile, |
| 78 try_job_id) |
| 65 | 79 |
| 66 expected_compile_result = { | 80 expected_compile_result = { |
| 67 'result': [ | 81 'result': [ |
| 68 ['rev1', 'passed'], | 82 ['rev1', 'passed'], |
| 69 ['rev2', 'failed'] | 83 ['rev2', 'failed'] |
| 70 ], | 84 ], |
| 71 'url': 'url', | 85 'url': 'url', |
| 72 'try_job_id': '1', | 86 'try_job_id': '1', |
| 73 } | 87 } |
| 74 self.assertEqual(expected_compile_result, compile_result) | 88 self.assertEqual(expected_compile_result, compile_result) |
| 75 | 89 |
| 76 try_job = WfTryJob.Get(master_name, builder_name, build_number) | 90 try_job = WfTryJob.Get(master_name, builder_name, build_number) |
| 77 self.assertEqual(expected_compile_result, try_job.compile_results[-1]) | 91 self.assertEqual(expected_compile_result, try_job.compile_results[-1]) |
| 78 self.assertEqual(wf_analysis_status.ANALYZING, try_job.status) | 92 self.assertEqual(wf_analysis_status.ANALYZING, try_job.status) |
| 93 |
| 94 |
| 95 def testGetTryJobsForTestSuccess(self): |
| 96 master_name = 'm' |
| 97 builder_name = 'b' |
| 98 build_number = 1 |
| 99 try_job_id = '3' |
| 100 |
| 101 try_job = WfTryJob.Create(master_name, builder_name, build_number) |
| 102 try_job.test_results = [ |
| 103 { |
| 104 'result': None, |
| 105 'url': 'url', |
| 106 'try_job_id': '3', |
| 107 } |
| 108 ] |
| 109 try_job.status = wf_analysis_status.ANALYZING |
| 110 try_job.put() |
| 111 self._Mock_GetTryJobs(try_job_id) |
| 112 |
| 113 pipeline = MonitorTryJobPipeline() |
| 114 test_result = pipeline.run( |
| 115 master_name, builder_name, build_number, TryJobType.type_test, |
| 116 try_job_id) |
| 117 |
| 118 expected_test_result = { |
| 119 'result': { |
| 120 'rev1': { |
| 121 'a_test': { |
| 122 'status': 'passed', |
| 123 'valid': True |
| 124 } |
| 125 }, |
| 126 'rev2': { |
| 127 'a_test': { |
| 128 'status': 'failed', |
| 129 'valid': True, |
| 130 'failures': ['test1', 'test2'] |
| 131 } |
| 132 } |
| 133 }, |
| 134 'url': 'url', |
| 135 'try_job_id': '3', |
| 136 } |
| 137 self.assertEqual(expected_test_result, test_result) |
| 138 |
| 139 try_job = WfTryJob.Get(master_name, builder_name, build_number) |
| 140 self.assertEqual(expected_test_result, try_job.test_results[-1]) |
| 141 self.assertEqual(wf_analysis_status.ANALYZING, try_job.status) |
| OLD | NEW |