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 | |
8 import time | 7 import time |
9 | 8 |
10 from common import buildbucket_client | 9 from common import buildbucket_client |
11 from model import wf_analysis_status | 10 from model import wf_analysis_status |
12 from model.wf_try_job import WfTryJob | 11 from model.wf_try_job import WfTryJob |
13 from model.wf_try_job_data import WfTryJobData | 12 from model.wf_try_job_data import WfTryJobData |
14 from waterfall import waterfall_config | |
15 from waterfall.monitor_try_job_pipeline import MonitorTryJobPipeline | 13 from waterfall.monitor_try_job_pipeline import MonitorTryJobPipeline |
| 14 from waterfall.test import wf_testcase |
16 from waterfall.try_job_type import TryJobType | 15 from waterfall.try_job_type import TryJobType |
17 | 16 |
18 | 17 |
19 # A counter to enable different responses to requests in a loop. | 18 # A counter to enable different responses to requests in a loop. |
20 REQUEST_COUNTER = { | 19 REQUEST_COUNTER = { |
21 '1': 0, | 20 '1': 0, |
22 '2': 0, | 21 '2': 0, |
23 '3': 0 | 22 '3': 0 |
24 } | 23 } |
25 | 24 |
26 | 25 |
27 class MonitorTryJobPipelineTest(testing.AppengineTestCase): | 26 class MonitorTryJobPipelineTest(wf_testcase.WaterfallTestCase): |
28 | 27 |
29 def _MockGetTryJobs(self, build_id): | 28 def _MockGetTryJobs(self, build_id): |
30 def Mocked_GetTryJobs(*_): | 29 def Mocked_GetTryJobs(*_): |
31 data = { | 30 data = { |
32 '1': [ | 31 '1': [ |
33 { | 32 { |
34 'build': { | 33 'build': { |
35 'id': '1', | 34 'id': '1', |
36 'url': 'url', | 35 'url': 'url', |
37 'status': 'COMPLETED', | 36 'status': 'COMPLETED', |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
114 try_job_results.append(( | 113 try_job_results.append(( |
115 buildbucket_client.BuildbucketError(build_error['error']), None)) | 114 buildbucket_client.BuildbucketError(build_error['error']), None)) |
116 else: | 115 else: |
117 try_job_results.append(( | 116 try_job_results.append(( |
118 None, buildbucket_client.BuildbucketBuild(build_error['build']))) | 117 None, buildbucket_client.BuildbucketBuild(build_error['build']))) |
119 REQUEST_COUNTER[build_id] += 1 | 118 REQUEST_COUNTER[build_id] += 1 |
120 return try_job_results | 119 return try_job_results |
121 | 120 |
122 self.mock(buildbucket_client, 'GetTryJobs', Mocked_GetTryJobs) | 121 self.mock(buildbucket_client, 'GetTryJobs', Mocked_GetTryJobs) |
123 | 122 |
124 def _MockGetTryJobSettings(self): | |
125 return { | |
126 'server_query_interval_seconds': 60, | |
127 'job_timeout_hours': 5, | |
128 'allowed_response_error_times': 5 | |
129 } | |
130 | |
131 def setUp(self): | 123 def setUp(self): |
132 super(MonitorTryJobPipelineTest, self).setUp() | 124 super(MonitorTryJobPipelineTest, self).setUp() |
133 self.mock( | |
134 waterfall_config, 'GetTryJobSettings', self._MockGetTryJobSettings) | |
135 self.mock(time, 'sleep', lambda x: None) | 125 self.mock(time, 'sleep', lambda x: None) |
136 | 126 |
137 def testMicrosecondsToDatetime(self): | 127 def testMicrosecondsToDatetime(self): |
138 self.assertEqual( | 128 self.assertEqual( |
139 datetime(2016, 2, 1, 22, 59, 34), | 129 datetime(2016, 2, 1, 22, 59, 34), |
140 MonitorTryJobPipeline._MicrosecondsToDatetime(1454367574000000)) | 130 MonitorTryJobPipeline._MicrosecondsToDatetime(1454367574000000)) |
141 self.assertIsNone(MonitorTryJobPipeline._MicrosecondsToDatetime(None)) | 131 self.assertIsNone(MonitorTryJobPipeline._MicrosecondsToDatetime(None)) |
142 | 132 |
143 def testUpdateTryJobMetadataForBuildError(self): | 133 def testUpdateTryJobMetadataForBuildError(self): |
144 error_data = { | 134 error_data = { |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
208 try_job.compile_results = [ | 198 try_job.compile_results = [ |
209 { | 199 { |
210 'report': None, | 200 'report': None, |
211 'url': 'url', | 201 'url': 'url', |
212 'try_job_id': '1', | 202 'try_job_id': '1', |
213 } | 203 } |
214 ] | 204 ] |
215 try_job.status = wf_analysis_status.ANALYZING | 205 try_job.status = wf_analysis_status.ANALYZING |
216 try_job.put() | 206 try_job.put() |
217 self._MockGetTryJobs(try_job_id) | 207 self._MockGetTryJobs(try_job_id) |
218 self._MockGetTryJobSettings() | |
219 | 208 |
220 pipeline = MonitorTryJobPipeline() | 209 pipeline = MonitorTryJobPipeline() |
221 compile_result = pipeline.run( | 210 compile_result = pipeline.run( |
222 master_name, builder_name, build_number, TryJobType.COMPILE, | 211 master_name, builder_name, build_number, TryJobType.COMPILE, |
223 try_job_id) | 212 try_job_id) |
224 | 213 |
225 expected_compile_result = { | 214 expected_compile_result = { |
226 'report': { | 215 'report': { |
227 'result': { | 216 'result': { |
228 'rev1': 'passed', | 217 'rev1': 'passed', |
(...skipping 26 matching lines...) Expand all Loading... |
255 try_job.test_results = [ | 244 try_job.test_results = [ |
256 { | 245 { |
257 'report': None, | 246 'report': None, |
258 'url': 'url', | 247 'url': 'url', |
259 'try_job_id': '3', | 248 'try_job_id': '3', |
260 } | 249 } |
261 ] | 250 ] |
262 try_job.status = wf_analysis_status.ANALYZING | 251 try_job.status = wf_analysis_status.ANALYZING |
263 try_job.put() | 252 try_job.put() |
264 self._MockGetTryJobs(try_job_id) | 253 self._MockGetTryJobs(try_job_id) |
265 self._MockGetTryJobSettings() | |
266 | 254 |
267 pipeline = MonitorTryJobPipeline() | 255 pipeline = MonitorTryJobPipeline() |
268 test_result = pipeline.run( | 256 test_result = pipeline.run( |
269 master_name, builder_name, build_number, TryJobType.TEST, | 257 master_name, builder_name, build_number, TryJobType.TEST, |
270 try_job_id) | 258 try_job_id) |
271 | 259 |
272 expected_test_result = { | 260 expected_test_result = { |
273 'report': { | 261 'report': { |
274 'result': { | 262 'result': { |
275 'rev1': { | 263 'rev1': { |
(...skipping 27 matching lines...) Expand all Loading... |
303 try_job_id = '3' | 291 try_job_id = '3' |
304 | 292 |
305 try_job = WfTryJob.Create(master_name, builder_name, build_number).put() | 293 try_job = WfTryJob.Create(master_name, builder_name, build_number).put() |
306 | 294 |
307 pipeline = MonitorTryJobPipeline() | 295 pipeline = MonitorTryJobPipeline() |
308 pipeline._UpdateTryJobResult( | 296 pipeline._UpdateTryJobResult( |
309 buildbucket_client.BuildbucketBuild.STARTED, master_name, builder_name, | 297 buildbucket_client.BuildbucketBuild.STARTED, master_name, builder_name, |
310 build_number, TryJobType.TEST, try_job_id, 'url') | 298 build_number, TryJobType.TEST, try_job_id, 'url') |
311 try_job = WfTryJob.Get(master_name, builder_name, build_number) | 299 try_job = WfTryJob.Get(master_name, builder_name, build_number) |
312 self.assertEqual(wf_analysis_status.ANALYZING, try_job.status) | 300 self.assertEqual(wf_analysis_status.ANALYZING, try_job.status) |
OLD | NEW |