Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(304)

Side by Side Diff: appengine/findit/waterfall/test/process_base_swarming_task_result_pipeline_test.py

Issue 2526963002: [Findit] Implement retry within swarming_util.py when making server calls (Closed)
Patch Set: Addressing comments Rebase Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 # Copyright 2016 The Chromium Authors. All rights reserved. 1 # Copyright 2016 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 import datetime 5 import datetime
6 import mock 6 import mock
7 7
8 from model import analysis_status 8 from model import analysis_status
9 from model.flake.flake_swarming_task import FlakeSwarmingTask 9 from model.flake.flake_swarming_task import FlakeSwarmingTask
10 from model.flake.master_flake_analysis import MasterFlakeAnalysis 10 from model.flake.master_flake_analysis import MasterFlakeAnalysis
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 'completed_ts': '2016-02-10T18:33:09' 109 'completed_ts': '2016-02-10T18:33:09'
110 }, 110 },
111 'task_id2': { 111 'task_id2': {
112 'state': 'TIMED_OUT', 112 'state': 'TIMED_OUT',
113 'outputs_ref': None 113 'outputs_ref': None
114 }, 114 },
115 'task_id3': { 115 'task_id3': {
116 'state': 'COMPLETED', 116 'state': 'COMPLETED',
117 'exit_code': '2', # Swarming task failed. 117 'exit_code': '2', # Swarming task failed.
118 }, 118 },
119 'task_id4': { 119 'task_id4': {
120 'state': 'COMPLETED', 120 'state': 'COMPLETED',
121 'exit_code': '1', 121 'exit_code': '1',
122 }, 122 },
123 } 123 }
124 124
125 125
126 _EXPECTED_TESTS_STATUS = { 126 _EXPECTED_TESTS_STATUS = {
127 'TestSuite1.test1': { 127 'TestSuite1.test1': {
128 'total_run': 2, 128 'total_run': 2,
129 'SUCCESS': 2 129 'SUCCESS': 2
130 }, 130 },
131 'TestSuite1.test2': { 131 'TestSuite1.test2': {
132 'total_run': 4, 132 'total_run': 4,
(...skipping 11 matching lines...) Expand all
144 'flaky_tests': ['TestSuite1.test2', 'TestSuite1.test1'], 144 'flaky_tests': ['TestSuite1.test2', 'TestSuite1.test1'],
145 'reliable_tests': ['TestSuite1.test3'] 145 'reliable_tests': ['TestSuite1.test3']
146 } 146 }
147 147
148 148
149 class ProcessBaseSwarmingTaskResultPipelineTest(wf_testcase.WaterfallTestCase): 149 class ProcessBaseSwarmingTaskResultPipelineTest(wf_testcase.WaterfallTestCase):
150 150
151 def _MockedGetSwarmingTaskResultById(self, task_id, _): 151 def _MockedGetSwarmingTaskResultById(self, task_id, _):
152 return _SWARMING_TASK_RESULTS[task_id], None 152 return _SWARMING_TASK_RESULTS[task_id], None
153 153
154 def _MockedGetSwarmingTaskFailureLog(self, *_):
155 return _SAMPLE_FAILURE_LOG, None
156
157 def setUp(self): 154 def setUp(self):
158 super(ProcessBaseSwarmingTaskResultPipelineTest, self).setUp() 155 super(ProcessBaseSwarmingTaskResultPipelineTest, self).setUp()
159 self.pipeline = ProcessBaseSwarmingTaskResultPipeline() 156 self.pipeline = ProcessBaseSwarmingTaskResultPipeline()
160 self.master_name = 'm' 157 self.master_name = 'm'
161 self.builder_name = 'b' 158 self.builder_name = 'b'
162 self.build_number = 121 159 self.build_number = 121
163 self.step_name = 'abc_tests on platform' 160 self.step_name = 'abc_tests on platform'
164 self.test_name = 'test' 161 self.test_name = 'test'
165 self.mock(swarming_util, 'GetSwarmingTaskResultById', 162 self.mock(swarming_util, 'GetSwarmingTaskResultById',
166 self._MockedGetSwarmingTaskResultById) 163 self._MockedGetSwarmingTaskResultById)
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
257 task.task_id = 'task_id2' 254 task.task_id = 'task_id2'
258 task.put() 255 task.put()
259 256
260 pipeline = ProcessSwarmingTaskResultPipeline() 257 pipeline = ProcessSwarmingTaskResultPipeline()
261 pipeline.run( 258 pipeline.run(
262 self.master_name, self.builder_name, self.build_number, self.step_name) 259 self.master_name, self.builder_name, self.build_number, self.step_name)
263 260
264 self.assertEqual(analysis_status.ERROR, task.status) 261 self.assertEqual(analysis_status.ERROR, task.status)
265 self.assertEqual(task.error, {'code': 1, 'message': 'error'}) 262 self.assertEqual(task.error, {'code': 1, 'message': 'error'})
266 263
264 @mock.patch.object(swarming_util, 'GetSwarmingTaskResultById',
265 return_value=(_SWARMING_TASK_RESULTS['task_id1'],
266 {'code': 1, 'message': 'error'}))
267 @mock.patch.object(swarming_util, 'GetSwarmingTaskFailureLog',
268 return_value=(_SAMPLE_FAILURE_LOG, None))
269 def testMonitorSwarmingTaskGetSwarmingTaskResultIdErrorRecovered(self, *_):
270 task = WfSwarmingTask.Create(
271 self.master_name, self.builder_name,
272 self.build_number, self.step_name)
273 task.task_id = 'task_id1'
274 task.put()
275
276 pipeline = ProcessSwarmingTaskResultPipeline()
277 pipeline.run(
278 self.master_name, self.builder_name, self.build_number, self.step_name)
279
280 self.assertEqual(analysis_status.COMPLETED, task.status)
281 self.assertEqual(task.error, {'code': 1, 'message': 'error'})
282
283 @mock.patch.object(swarming_util, 'GetSwarmingTaskFailureLog',
284 return_value=(_SAMPLE_FAILURE_LOG,
285 {'code': 1, 'message': 'error'}))
286 def testMonitorSwarmingTaskGetSwarmingTaskFailureLogErrorRecovered(self, _):
287 task = WfSwarmingTask.Create(
288 self.master_name, self.builder_name,
289 self.build_number, self.step_name)
290 task.task_id = 'task_id1'
291 task.put()
292
293 pipeline = ProcessSwarmingTaskResultPipeline()
294 pipeline.run(
295 self.master_name, self.builder_name, self.build_number, self.step_name)
296
297 self.assertEqual(analysis_status.COMPLETED, task.status)
298 self.assertEqual(task.error, {'code': 1, 'message': 'error'})
299
267 @mock.patch.object(swarming_util, 'GetSwarmingTaskFailureLog', 300 @mock.patch.object(swarming_util, 'GetSwarmingTaskFailureLog',
268 return_value=(None, {'code': 1, 'message': 'error'})) 301 return_value=(None, {'code': 1, 'message': 'error'}))
269 def testMonitorSwarmingTaskGetSwarmingTaskFailureLogError(self, _): 302 def testMonitorSwarmingTaskGetSwarmingTaskFailureLogError(self, _):
270 task = WfSwarmingTask.Create( 303 task = WfSwarmingTask.Create(
271 self.master_name, self.builder_name, 304 self.master_name, self.builder_name,
272 self.build_number, self.step_name) 305 self.build_number, self.step_name)
273 task.task_id = 'task_id1' 306 task.task_id = 'task_id1'
274 task.put() 307 task.put()
275 308
276 pipeline = ProcessSwarmingTaskResultPipeline() 309 pipeline = ProcessSwarmingTaskResultPipeline()
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
312 self.master_name, self.builder_name, self.build_number, self.step_name) 345 self.master_name, self.builder_name, self.build_number, self.step_name)
313 346
314 self.assertEqual(analysis_status.ERROR, task.status) 347 self.assertEqual(analysis_status.ERROR, task.status)
315 self.assertEqual( 348 self.assertEqual(
316 task.error, 349 task.error,
317 { 350 {
318 'code': swarming_util.NO_TASK_OUTPUTS, 351 'code': swarming_util.NO_TASK_OUTPUTS,
319 'message': 'outputs_ref is None' 352 'message': 'outputs_ref is None'
320 }) 353 })
321 354
322 def testProcessSwarmingTaskResultPipeline(self): 355 @mock.patch.object(swarming_util, 'GetSwarmingTaskFailureLog',
356 return_value=(_SAMPLE_FAILURE_LOG, None))
357 def testProcessSwarmingTaskResultPipeline(self, _):
323 # End to end test. 358 # End to end test.
324 self.mock(swarming_util, 'GetSwarmingTaskFailureLog',
325 self._MockedGetSwarmingTaskFailureLog)
326
327 task = WfSwarmingTask.Create( 359 task = WfSwarmingTask.Create(
328 self.master_name, self.builder_name, 360 self.master_name, self.builder_name,
329 self.build_number, self.step_name) 361 self.build_number, self.step_name)
330 task.task_id = 'task_id1' 362 task.task_id = 'task_id1'
331 task.put() 363 task.put()
332 364
333 pipeline = ProcessSwarmingTaskResultPipeline() 365 pipeline = ProcessSwarmingTaskResultPipeline()
334 step_name, task_info = pipeline.run( 366 step_name, task_info = pipeline.run(
335 self.master_name, self.builder_name, 367 self.master_name, self.builder_name,
336 self.build_number, self.step_name) 368 self.build_number, self.step_name)
337 369
338 self.assertEqual(self.step_name, step_name) 370 self.assertEqual(self.step_name, step_name)
339 self.assertEqual('abc_tests', task_info[0]) 371 self.assertEqual('abc_tests', task_info[0])
340 self.assertEqual( 372 self.assertEqual(
341 _EXPECTED_CLASSIFIED_TESTS['reliable_tests'], task_info[1]) 373 _EXPECTED_CLASSIFIED_TESTS['reliable_tests'], task_info[1])
342 374
343 task = WfSwarmingTask.Get( 375 task = WfSwarmingTask.Get(
344 self.master_name, self.builder_name, self.build_number, self.step_name) 376 self.master_name, self.builder_name, self.build_number, self.step_name)
345 377
346 self.assertEqual(analysis_status.COMPLETED, task.status) 378 self.assertEqual(analysis_status.COMPLETED, task.status)
347 self.assertEqual(_EXPECTED_TESTS_STATUS, task.tests_statuses) 379 self.assertEqual(_EXPECTED_TESTS_STATUS, task.tests_statuses)
348 self.assertEqual( 380 self.assertEqual(
349 _EXPECTED_CLASSIFIED_TESTS, task.classified_tests) 381 _EXPECTED_CLASSIFIED_TESTS, task.classified_tests)
350 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 32, 6, 538220), 382 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 32, 6, 538220),
351 task.created_time) 383 task.created_time)
352 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 32, 9, 90550), 384 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 32, 9, 90550),
353 task.started_time) 385 task.started_time)
354 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 33, 9), 386 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 33, 9),
355 task.completed_time) 387 task.completed_time)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698