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

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

Issue 1999653003: [Findit] Bailing out if build data is too old and moving relevant settings to config (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Addressing comments Created 4 years, 7 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
6 from datetime import timedelta
7
5 from common.waterfall import failure_type 8 from common.waterfall import failure_type
6 from model import analysis_status 9 from model import analysis_status
10 from model.wf_build import WfBuild
7 from model.wf_try_job import WfTryJob 11 from model.wf_try_job import WfTryJob
8 from waterfall import try_job_util 12 from waterfall import try_job_util
9 from waterfall.test import wf_testcase 13 from waterfall.test import wf_testcase
10 from waterfall.try_job_type import TryJobType 14 from waterfall.try_job_type import TryJobType
11 15
12 16
13 class _MockRootPipeline(object): 17 class _MockRootPipeline(object):
14 STARTED = False 18 STARTED = False
15 19
16 def __init__(self, *_): 20 def __init__(self, *_):
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 'chromium_revision': '223-3' 63 'chromium_revision': '223-3'
60 } 64 }
61 } 65 }
62 } 66 }
63 67
64 self.mock( 68 self.mock(
65 try_job_util.swarming_tasks_to_try_job_pipeline, 69 try_job_util.swarming_tasks_to_try_job_pipeline,
66 'SwarmingTasksToTryJobPipeline', _MockRootPipeline) 70 'SwarmingTasksToTryJobPipeline', _MockRootPipeline)
67 _MockRootPipeline.STARTED = False 71 _MockRootPipeline.STARTED = False
68 72
73 def _MockShouldBailOutForOutdatedBuild(*_):
74 return False
75 self.mock(
76 try_job_util, '_ShouldBailOutForOutdatedBuild',
77 _MockShouldBailOutForOutdatedBuild)
78
69 failure_result_map = try_job_util.ScheduleTryJobIfNeeded( 79 failure_result_map = try_job_util.ScheduleTryJobIfNeeded(
70 failure_info, None, None) 80 failure_info, None, None)
71 81
72 self.assertFalse(_MockRootPipeline.STARTED) 82 self.assertFalse(_MockRootPipeline.STARTED)
73 self.assertEqual({}, failure_result_map) 83 self.assertEqual({}, failure_result_map)
74 84
75 def testBailOutForTestTryJob(self): 85 def testBailOutForTestTryJob(self):
76 master_name = 'master2' 86 master_name = 'master2'
77 builder_name = 'builder2' 87 builder_name = 'builder2'
78 build_number = 223 88 build_number = 223
79 failure_info = { 89 failure_info = {
80 'master_name': master_name, 90 'master_name': master_name,
81 'builder_name': builder_name, 91 'builder_name': builder_name,
82 'build_number': build_number, 92 'build_number': build_number,
83 'failed_steps': { 93 'failed_steps': {
84 'a_test': {} 94 'a_test': {}
85 }, 95 },
86 'failure_type': failure_type.TEST 96 'failure_type': failure_type.TEST
87 } 97 }
88 98
99 def _MockShouldBailOutForOutdatedBuild(*_):
100 return False
101 self.mock(
102 try_job_util, '_ShouldBailOutForOutdatedBuild',
103 _MockShouldBailOutForOutdatedBuild)
104
89 failure_result_map = try_job_util.ScheduleTryJobIfNeeded( 105 failure_result_map = try_job_util.ScheduleTryJobIfNeeded(
90 failure_info, None, None) 106 failure_info, None, None)
91 107
92 self.assertEqual({}, failure_result_map) 108 self.assertEqual({}, failure_result_map)
93 109
110 def testBailOutForTryJobWithOutdatedTimestamp(self):
111 master_name = 'master3'
112 builder_name = 'builder3'
113 build_number = 223
114 failure_info = {
115 'master_name': master_name,
116 'builder_name': builder_name,
117 'build_number': build_number,
118 'failed_steps': {
119 'compile': {
120 'current_failure': 221,
121 'first_failure': 221,
122 'last_pass': 220
123 }
124 },
125 }
126
127 self.mock(
128 try_job_util.swarming_tasks_to_try_job_pipeline,
129 'SwarmingTasksToTryJobPipeline', _MockRootPipeline)
130 _MockRootPipeline.STARTED = False
131
132 def _MockShouldBailOutForOutdatedBuild(*_):
133 return True
134 self.mock(
135 try_job_util, '_ShouldBailOutForOutdatedBuild',
136 _MockShouldBailOutForOutdatedBuild)
137
138 failure_result_map = try_job_util.ScheduleTryJobIfNeeded(
139 failure_info, None, None)
140
141 self.assertFalse(_MockRootPipeline.STARTED)
142 self.assertEqual({}, failure_result_map)
143
94 def testNotNeedANewTryJobIfNotFirstTimeFailure(self): 144 def testNotNeedANewTryJobIfNotFirstTimeFailure(self):
95 master_name = 'm' 145 master_name = 'm'
96 builder_name = 'b' 146 builder_name = 'b'
97 build_number = 223 147 build_number = 223
98 failure_info = { 148 failure_info = {
99 'master_name': master_name, 149 'master_name': master_name,
100 'builder_name': builder_name, 150 'builder_name': builder_name,
101 'build_number': build_number, 151 'build_number': build_number,
102 'failed_steps': { 152 'failed_steps': {
103 'compile': { 153 'compile': {
(...skipping 21 matching lines...) Expand all
125 } 175 }
126 }, 176 },
127 'failure_type': failure_type.COMPILE 177 'failure_type': failure_type.COMPILE
128 } 178 }
129 179
130 self.mock( 180 self.mock(
131 try_job_util.swarming_tasks_to_try_job_pipeline, 181 try_job_util.swarming_tasks_to_try_job_pipeline,
132 'SwarmingTasksToTryJobPipeline', _MockRootPipeline) 182 'SwarmingTasksToTryJobPipeline', _MockRootPipeline)
133 _MockRootPipeline.STARTED = False 183 _MockRootPipeline.STARTED = False
134 184
185 def _MockShouldBailOutForOutdatedBuild(*_):
186 return False
187 self.mock(
188 try_job_util, '_ShouldBailOutForOutdatedBuild',
189 _MockShouldBailOutForOutdatedBuild)
190
135 try_job_util.ScheduleTryJobIfNeeded(failure_info, None, None) 191 try_job_util.ScheduleTryJobIfNeeded(failure_info, None, None)
136 192
137 self.assertFalse(_MockRootPipeline.STARTED) 193 self.assertFalse(_MockRootPipeline.STARTED)
138 194
139 def testNotNeedANewTryJobIfOneWithResultExists(self): 195 def testNotNeedANewTryJobIfOneWithResultExists(self):
140 master_name = 'm' 196 master_name = 'm'
141 builder_name = 'b' 197 builder_name = 'b'
142 build_number = 223 198 build_number = 223
143 failed_steps = { 199 failed_steps = {
144 'compile': { 200 'compile': {
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
360 } 416 }
361 }, 417 },
362 'failure_type': failure_type.COMPILE 418 'failure_type': failure_type.COMPILE
363 } 419 }
364 420
365 self.mock( 421 self.mock(
366 try_job_util.swarming_tasks_to_try_job_pipeline, 422 try_job_util.swarming_tasks_to_try_job_pipeline,
367 'SwarmingTasksToTryJobPipeline', _MockRootPipeline) 423 'SwarmingTasksToTryJobPipeline', _MockRootPipeline)
368 _MockRootPipeline.STARTED = False 424 _MockRootPipeline.STARTED = False
369 425
426 def _MockShouldBailOutForOutdatedBuild(*_):
427 return False
428 self.mock(
429 try_job_util, '_ShouldBailOutForOutdatedBuild',
430 _MockShouldBailOutForOutdatedBuild)
431
370 try_job_util.ScheduleTryJobIfNeeded(failure_info, None, None) 432 try_job_util.ScheduleTryJobIfNeeded(failure_info, None, None)
371 433
372 try_job = WfTryJob.Get(master_name, builder_name, build_number) 434 try_job = WfTryJob.Get(master_name, builder_name, build_number)
373 435
374 self.assertTrue(_MockRootPipeline.STARTED) 436 self.assertTrue(_MockRootPipeline.STARTED)
375 self.assertIsNotNone(try_job) 437 self.assertIsNotNone(try_job)
376 438
377 def testUseFailedOutputNodesFromSignals(self): 439 def testUseFailedOutputNodesFromSignals(self):
378 signals = { 440 signals = {
379 'compile': { 441 'compile': {
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
468 'revision': 'r3', 530 'revision': 'r3',
469 }, 531 },
470 ], 532 ],
471 }, 533 },
472 ] 534 ]
473 } 535 }
474 expected_suspected_revisions = ['r1', 'r2', 'r3'] 536 expected_suspected_revisions = ['r1', 'r2', 'r3']
475 self.assertEqual( 537 self.assertEqual(
476 expected_suspected_revisions, 538 expected_suspected_revisions,
477 try_job_util._GetSuspectsFromHeuristicResult(heuristic_result)) 539 try_job_util._GetSuspectsFromHeuristicResult(heuristic_result))
540
541 def testShouldBailOutforOutdatedBuild(self):
542 yesterday = datetime.utcnow() - timedelta(days=1)
543 build = WfBuild.Create('m', 'b', 1)
544 build.start_time = yesterday
545 self.assertTrue(try_job_util._ShouldBailOutForOutdatedBuild(build))
546
547 build.start_time = yesterday + timedelta(hours=1)
548 self.assertFalse(try_job_util._ShouldBailOutForOutdatedBuild(build))
OLDNEW
« no previous file with comments | « appengine/findit/waterfall/test/build_util_test.py ('k') | appengine/findit/waterfall/test/waterfall_config_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698