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

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

Issue 2605153002: [Findit] Adding schedule_flake_try_job_pipeline.py to trigger flake try jobs (Closed)
Patch Set: Created 3 years, 11 months 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 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 import mock 7 import mock
8 import time 8 import time
9 9
10 from common.waterfall import buildbucket_client 10 from common.waterfall import buildbucket_client
11 from common.waterfall import failure_type
11 from common.waterfall import try_job_error 12 from common.waterfall import try_job_error
12 from common.waterfall import failure_type
13 from model import analysis_status 13 from model import analysis_status
14 from model.flake.flake_try_job import FlakeTryJob 14 from model.flake.flake_try_job import FlakeTryJob
15 from model.flake.flake_try_job_data import FlakeTryJobData
15 from model.wf_try_job import WfTryJob 16 from model.wf_try_job import WfTryJob
16 from model.wf_try_job_data import WfTryJobData 17 from model.wf_try_job_data import WfTryJobData
17 from waterfall import monitor_try_job_pipeline 18 from waterfall import monitor_try_job_pipeline
18 from waterfall import waterfall_config 19 from waterfall import waterfall_config
19 from waterfall.monitor_try_job_pipeline import MonitorTryJobPipeline 20 from waterfall.monitor_try_job_pipeline import MonitorTryJobPipeline
20 from waterfall.test import wf_testcase 21 from waterfall.test import wf_testcase
21 22
22 23
23 class MonitorTryJobPipelineTest(wf_testcase.WaterfallTestCase): 24 class MonitorTryJobPipelineTest(wf_testcase.WaterfallTestCase):
24 25
(...skipping 29 matching lines...) Expand all
54 55
55 def testUpdateTryJobMetadataForBuildError(self): 56 def testUpdateTryJobMetadataForBuildError(self):
56 error_data = { 57 error_data = {
57 'reason': 'BUILD_NOT_FOUND', 58 'reason': 'BUILD_NOT_FOUND',
58 'message': 'message' 59 'message': 'message'
59 } 60 }
60 error = buildbucket_client.BuildbucketError(error_data) 61 error = buildbucket_client.BuildbucketError(error_data)
61 try_job_data = WfTryJobData.Create('1') 62 try_job_data = WfTryJobData.Create('1')
62 63
63 monitor_try_job_pipeline._UpdateTryJobMetadata( 64 monitor_try_job_pipeline._UpdateTryJobMetadata(
64 try_job_data, None, None, error, False) 65 try_job_data, failure_type.COMPILE, None, None, error, False)
65 self.assertEqual(try_job_data.error, error_data) 66 self.assertEqual(try_job_data.error, error_data)
66 67
67 def testUpdateTryJobMetadata(self): 68 def testUpdateTryJobMetadata(self):
68 try_job_id = '1' 69 try_job_id = '1'
69 url = 'url' 70 url = 'url'
70 build_data = { 71 build_data = {
71 'id': try_job_id, 72 'id': try_job_id,
72 'url': url, 73 'url': url,
73 'status': 'COMPLETED', 74 'status': 'COMPLETED',
74 'completed_ts': '1454367574000000', 75 'completed_ts': '1454367574000000',
(...skipping 15 matching lines...) Expand all
90 build = buildbucket_client.BuildbucketBuild(build_data) 91 build = buildbucket_client.BuildbucketBuild(build_data)
91 expected_error_dict = { 92 expected_error_dict = {
92 'message': 'Try job monitoring was abandoned.', 93 'message': 'Try job monitoring was abandoned.',
93 'reason': ('Timeout after %s hours' % 94 'reason': ('Timeout after %s hours' %
94 waterfall_config.GetTryJobSettings().get( 95 waterfall_config.GetTryJobSettings().get(
95 'job_timeout_hours')) 96 'job_timeout_hours'))
96 } 97 }
97 try_job_data = WfTryJobData.Create(try_job_id) 98 try_job_data = WfTryJobData.Create(try_job_id)
98 99
99 monitor_try_job_pipeline._UpdateTryJobMetadata( 100 monitor_try_job_pipeline._UpdateTryJobMetadata(
100 try_job_data, None, build, None, False) 101 try_job_data, failure_type.COMPILE, None, build, None, False)
101 try_job_data = WfTryJobData.Get(try_job_id) 102 try_job_data = WfTryJobData.Get(try_job_id)
102 self.assertIsNone(try_job_data.error) 103 self.assertIsNone(try_job_data.error)
103 self.assertEqual(try_job_data.regression_range_size, 2) 104 self.assertEqual(try_job_data.regression_range_size, 2)
104 self.assertEqual(try_job_data.number_of_commits_analyzed, 2) 105 self.assertEqual(try_job_data.number_of_commits_analyzed, 2)
105 self.assertEqual(try_job_data.end_time, datetime(2016, 2, 1, 22, 59, 34)) 106 self.assertEqual(try_job_data.end_time, datetime(2016, 2, 1, 22, 59, 34))
106 self.assertEqual(try_job_data.request_time, 107 self.assertEqual(try_job_data.request_time,
107 datetime(2016, 2, 1, 22, 59, 30)) 108 datetime(2016, 2, 1, 22, 59, 30))
108 self.assertEqual(try_job_data.try_job_url, url) 109 self.assertEqual(try_job_data.try_job_url, url)
109 110
110 monitor_try_job_pipeline._UpdateTryJobMetadata( 111 monitor_try_job_pipeline._UpdateTryJobMetadata(
111 try_job_data, None, build, None, True) 112 try_job_data, failure_type.COMPILE, None, build, None, True)
112 self.assertEqual(try_job_data.error, expected_error_dict) 113 self.assertEqual(try_job_data.error, expected_error_dict)
113 self.assertEqual(try_job_data.error_code, try_job_error.TIMEOUT) 114 self.assertEqual(try_job_data.error_code, try_job_error.TIMEOUT)
114 115
115 @mock.patch.object(monitor_try_job_pipeline, 'buildbucket_client') 116 @mock.patch.object(monitor_try_job_pipeline, 'buildbucket_client')
116 def testGetTryJobsForCompileSuccess(self, mock_module): 117 def testGetTryJobsForCompileSuccess(self, mock_module):
117 master_name = 'm' 118 master_name = 'm'
118 builder_name = 'b' 119 builder_name = 'b'
119 build_number = 1 120 build_number = 1
120 try_job_id = '1' 121 try_job_id = '1'
121 regression_range_size = 2 122 regression_range_size = 2
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
291 }, 292 },
292 'url': 'url', 293 'url': 'url',
293 'try_job_id': '3', 294 'try_job_id': '3',
294 } 295 }
295 self.assertEqual(expected_test_result, test_result) 296 self.assertEqual(expected_test_result, test_result)
296 297
297 try_job = WfTryJob.Get(master_name, builder_name, build_number) 298 try_job = WfTryJob.Get(master_name, builder_name, build_number)
298 self.assertEqual(expected_test_result, try_job.test_results[-1]) 299 self.assertEqual(expected_test_result, try_job.test_results[-1])
299 self.assertEqual(analysis_status.RUNNING, try_job.status) 300 self.assertEqual(analysis_status.RUNNING, try_job.status)
300 301
302 @mock.patch.object(monitor_try_job_pipeline, 'buildbucket_client')
303 def testGetTryJobsForFlakeSuccess(self, mock_module):
304 master_name = 'm'
305 builder_name = 'b'
306 step_name = 's'
307 test_name = 't'
308 git_hash = 'a1b2c3d4'
309 try_job_id = '1'
310
311 try_job = FlakeTryJob.Create(
312 master_name, builder_name, step_name, test_name, git_hash)
313 try_job_data = FlakeTryJobData.Create(try_job_id)
314 try_job_data.put()
315 try_job.flake_results = [
316 {
317 'report': None,
318 'url': 'url',
319 'try_job_id': '1',
320 }
321 ]
322 try_job.status = analysis_status.RUNNING
323 try_job.put()
324
325 build_response = {
326 'id': '1',
327 'url': 'url',
328 'status': 'COMPLETED',
329 'result_details_json': json.dumps({
330 'properties': {
331 'report': {
332 'result': {
333 'r0': {
334 'gl_tests': {
335 'status': 'passed',
336 'valid': True,
337 'pass_fail_counts': {
338 'Test.One': {
339 'pass_count': 100,
340 'fail_count': 0
341 }
342 }
343 }
344 }
345 }
346 }
347 }
348 })
349 }
350
351 mock_module.GetTryJobs.return_value = [
352 (None, buildbucket_client.BuildbucketBuild(build_response))]
353
354 pipeline = MonitorTryJobPipeline()
355 flake_result = pipeline.run(
356 try_job.key.urlsafe(), failure_type.FLAKY_TEST, try_job_id)
357
358 expected_flake_result = {
359 'report': {
360 'result': {
361 'r0': {
362 'gl_tests': {
363 'status': 'passed',
364 'valid': True,
365 'pass_fail_counts': {
366 'Test.One': {
367 'pass_count': 100,
368 'fail_count': 0
369 }
370 }
371 }
372 }
373 }
374 },
375 'url': 'url',
376 'try_job_id': '1',
377 }
378
379 self.assertEqual(expected_flake_result, flake_result)
380
381 try_job = FlakeTryJob.Get(
382 master_name, builder_name, step_name, test_name, git_hash)
383 self.assertEqual(expected_flake_result, try_job.flake_results[-1])
384 self.assertEqual(analysis_status.RUNNING, try_job.status)
385
386 try_job_data = FlakeTryJobData.Get(try_job_id)
387 self.assertEqual(try_job_data.last_buildbucket_response, build_response)
388
301 def testUpdateTryJobResultAnalyzing(self): 389 def testUpdateTryJobResultAnalyzing(self):
302 master_name = 'm' 390 master_name = 'm'
303 builder_name = 'b' 391 builder_name = 'b'
304 build_number = 1 392 build_number = 1
305 try_job_id = '3' 393 try_job_id = '3'
306 394
307 try_job = WfTryJob.Create(master_name, builder_name, build_number) 395 try_job = WfTryJob.Create(master_name, builder_name, build_number)
308 try_job.put() 396 try_job.put()
309 397
310 pipeline = MonitorTryJobPipeline() 398 pipeline = MonitorTryJobPipeline()
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
493 (expected_error_dict, try_job_error.UNKNOWN)) 581 (expected_error_dict, try_job_error.UNKNOWN))
494 582
495 def testReturnNoneIfNoTryJobId(self): 583 def testReturnNoneIfNoTryJobId(self):
496 master_name = 'm' 584 master_name = 'm'
497 builder_name = 'b' 585 builder_name = 'b'
498 build_number = 1 586 build_number = 1
499 pipeline = MonitorTryJobPipeline() 587 pipeline = MonitorTryJobPipeline()
500 try_job = WfTryJob.Create(master_name, builder_name, build_number) 588 try_job = WfTryJob.Create(master_name, builder_name, build_number)
501 test_result = pipeline.run(try_job.key.urlsafe(), failure_type.TEST, None) 589 test_result = pipeline.run(try_job.key.urlsafe(), failure_type.TEST, None)
502 self.assertIsNone(test_result) 590 self.assertIsNone(test_result)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698