| 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 datetime import datetime | 5 from datetime import datetime |
| 6 import json | 6 import json |
| 7 from testing_utils import testing | 7 from testing_utils import testing |
| 8 | 8 |
| 9 from common import buildbucket_client | 9 from common import buildbucket_client |
| 10 from model import wf_analysis_status | 10 from model import wf_analysis_status |
| 11 from model.wf_try_job import WfTryJob | 11 from model.wf_try_job import WfTryJob |
| 12 from model.wf_try_job_data import WfTryJobData | 12 from model.wf_try_job_data import WfTryJobData |
| 13 from waterfall.monitor_try_job_pipeline import MonitorTryJobPipeline | 13 from waterfall.monitor_try_job_pipeline import MonitorTryJobPipeline |
| 14 from waterfall.try_job_type import TryJobType |
| 14 | 15 |
| 15 | 16 |
| 16 class MonitorTryJobPipelineTest(testing.AppengineTestCase): | 17 class MonitorTryJobPipelineTest(testing.AppengineTestCase): |
| 17 | 18 |
| 18 def _Mock_GetTryJobs(self, build_id): | 19 def _Mock_GetTryJobs(self, build_id): |
| 19 def Mocked_GetTryJobs(*_): | 20 def Mocked_GetTryJobs(*_): |
| 20 data = { | 21 data = { |
| 21 '1': { | 22 '1': { |
| 22 'build': { | 23 'build': { |
| 23 'id': '1', | 24 'id': '1', |
| (...skipping 12 matching lines...) Expand all Loading... |
| 36 } | 37 } |
| 37 } | 38 } |
| 38 }) | 39 }) |
| 39 } | 40 } |
| 40 }, | 41 }, |
| 41 '2': { | 42 '2': { |
| 42 'error': { | 43 'error': { |
| 43 'reason': 'BUILD_NOT_FOUND', | 44 'reason': 'BUILD_NOT_FOUND', |
| 44 'message': 'message', | 45 'message': 'message', |
| 45 } | 46 } |
| 47 }, |
| 48 '3': { |
| 49 'build': { |
| 50 'id': '3', |
| 51 'url': 'url', |
| 52 'status': 'COMPLETED', |
| 53 'result_details_json': ( |
| 54 '{"properties": {"result": {"rev1": {"a_test": {"status":' |
| 55 ' "passed", "valid": true}}, "rev2": {"a_test": ' |
| 56 '{"status": "failed", "valid": true, "failures": ["test1"' |
| 57 ', "test2"]}}}}}') |
| 58 } |
| 46 } | 59 } |
| 47 } | 60 } |
| 48 compile_results = [] | 61 try_job_results = [] |
| 49 build_error = data.get(build_id) | 62 build_error = data.get(build_id) |
| 50 if build_error.get('error'): # pragma: no cover | 63 if build_error.get('error'): # pragma: no cover |
| 51 compile_results.append(( | 64 try_job_results.append(( |
| 52 buildbucket_client.BuildbucketError(build_error['error']), None)) | 65 buildbucket_client.BuildbucketError(build_error['error']), None)) |
| 53 else: | 66 else: |
| 54 compile_results.append(( | 67 try_job_results.append(( |
| 55 None, buildbucket_client.BuildbucketBuild(build_error['build']))) | 68 None, buildbucket_client.BuildbucketBuild(build_error['build']))) |
| 56 return compile_results | 69 return try_job_results |
| 57 self.mock(buildbucket_client, 'GetTryJobs', Mocked_GetTryJobs) | 70 self.mock(buildbucket_client, 'GetTryJobs', Mocked_GetTryJobs) |
| 58 | 71 |
| 59 def testMicrosecondsToDatetime(self): | 72 def testMicrosecondsToDatetime(self): |
| 60 self.assertEqual( | 73 self.assertEqual( |
| 61 datetime(2016, 2, 1, 14, 59, 34, 0), | 74 datetime(2016, 2, 1, 14, 59, 34, 0), |
| 62 MonitorTryJobPipeline._MicrosecondsToDatetime(1454367574000000)) | 75 MonitorTryJobPipeline._MicrosecondsToDatetime(1454367574000000)) |
| 63 self.assertIsNone(MonitorTryJobPipeline._MicrosecondsToDatetime(None)) | 76 self.assertIsNone(MonitorTryJobPipeline._MicrosecondsToDatetime(None)) |
| 64 | 77 |
| 65 def testUpdateTryJobMetadataForBuildError(self): | 78 def testUpdateTryJobMetadataForBuildError(self): |
| 66 error_data = { | 79 error_data = { |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 133 'url': 'url', | 146 'url': 'url', |
| 134 'try_job_id': '1', | 147 'try_job_id': '1', |
| 135 } | 148 } |
| 136 ] | 149 ] |
| 137 try_job.status = wf_analysis_status.ANALYZING | 150 try_job.status = wf_analysis_status.ANALYZING |
| 138 try_job.put() | 151 try_job.put() |
| 139 self._Mock_GetTryJobs(try_job_id) | 152 self._Mock_GetTryJobs(try_job_id) |
| 140 | 153 |
| 141 pipeline = MonitorTryJobPipeline() | 154 pipeline = MonitorTryJobPipeline() |
| 142 compile_result = pipeline.run( | 155 compile_result = pipeline.run( |
| 143 master_name, builder_name, build_number, try_job_id) | 156 master_name, builder_name, build_number, TryJobType.COMPILE, |
| 157 try_job_id) |
| 144 | 158 |
| 145 expected_compile_result = { | 159 expected_compile_result = { |
| 146 'report': { | 160 'report': { |
| 147 'result': { | 161 'result': { |
| 148 'rev1': 'passed', | 162 'rev1': 'passed', |
| 149 'rev2': 'failed' | 163 'rev2': 'failed' |
| 150 }, | 164 }, |
| 151 'metadata': { | 165 'metadata': { |
| 152 'regression_range_size': regression_range_size | 166 'regression_range_size': regression_range_size |
| 153 } | 167 } |
| 154 }, | 168 }, |
| 155 'url': 'url', | 169 'url': 'url', |
| 156 'try_job_id': '1', | 170 'try_job_id': '1', |
| 157 } | 171 } |
| 158 | 172 |
| 159 self.assertEqual(expected_compile_result, compile_result) | 173 self.assertEqual(expected_compile_result, compile_result) |
| 160 | 174 |
| 161 try_job = WfTryJob.Get(master_name, builder_name, build_number) | 175 try_job = WfTryJob.Get(master_name, builder_name, build_number) |
| 162 self.assertEqual(expected_compile_result, try_job.compile_results[-1]) | 176 self.assertEqual(expected_compile_result, try_job.compile_results[-1]) |
| 163 self.assertEqual(wf_analysis_status.ANALYZING, try_job.status) | 177 self.assertEqual(wf_analysis_status.ANALYZING, try_job.status) |
| 164 | 178 |
| 165 try_job_data = WfTryJobData.Get(try_job_id) | 179 try_job_data = WfTryJobData.Get(try_job_id) |
| 166 self.assertEqual(try_job_data.regression_range_size, regression_range_size) | 180 self.assertEqual(try_job_data.regression_range_size, regression_range_size) |
| 181 |
| 182 def testGetTryJobsForTestSuccess(self): |
| 183 master_name = 'm' |
| 184 builder_name = 'b' |
| 185 build_number = 1 |
| 186 try_job_id = '3' |
| 187 |
| 188 try_job = WfTryJob.Create(master_name, builder_name, build_number) |
| 189 try_job.test_results = [ |
| 190 { |
| 191 'report': None, |
| 192 'url': 'url', |
| 193 'try_job_id': '3', |
| 194 } |
| 195 ] |
| 196 try_job.status = wf_analysis_status.ANALYZING |
| 197 try_job.put() |
| 198 self._Mock_GetTryJobs(try_job_id) |
| 199 |
| 200 pipeline = MonitorTryJobPipeline() |
| 201 test_result = pipeline.run( |
| 202 master_name, builder_name, build_number, TryJobType.TEST, |
| 203 try_job_id) |
| 204 |
| 205 expected_test_result = { |
| 206 'report': { |
| 207 'rev1': { |
| 208 'a_test': { |
| 209 'status': 'passed', |
| 210 'valid': True |
| 211 } |
| 212 }, |
| 213 'rev2': { |
| 214 'a_test': { |
| 215 'status': 'failed', |
| 216 'valid': True, |
| 217 'failures': ['test1', 'test2'] |
| 218 } |
| 219 } |
| 220 }, |
| 221 'url': 'url', |
| 222 'try_job_id': '3', |
| 223 } |
| 224 self.assertEqual(expected_test_result, test_result) |
| 225 |
| 226 try_job = WfTryJob.Get(master_name, builder_name, build_number) |
| 227 self.assertEqual(expected_test_result, try_job.test_results[-1]) |
| 228 self.assertEqual(wf_analysis_status.ANALYZING, try_job.status) |
| OLD | NEW |