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

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 build = WfBuild.Create(master_name, builder_name, build_number)
74 build.start_time = datetime.utcnow()
stgao 2016/05/21 04:26:41 This might make the test flaky as it depends on th
75 build.put()
76
69 failure_result_map = try_job_util.ScheduleTryJobIfNeeded( 77 failure_result_map = try_job_util.ScheduleTryJobIfNeeded(
70 failure_info, None, None) 78 failure_info, None, None)
71 79
72 self.assertFalse(_MockRootPipeline.STARTED) 80 self.assertFalse(_MockRootPipeline.STARTED)
73 self.assertEqual({}, failure_result_map) 81 self.assertEqual({}, failure_result_map)
74 82
75 def testBailOutForTestTryJob(self): 83 def testBailOutForTestTryJob(self):
76 master_name = 'master2' 84 master_name = 'master2'
77 builder_name = 'builder2' 85 builder_name = 'builder2'
78 build_number = 223 86 build_number = 223
79 failure_info = { 87 failure_info = {
80 'master_name': master_name, 88 'master_name': master_name,
81 'builder_name': builder_name, 89 'builder_name': builder_name,
82 'build_number': build_number, 90 'build_number': build_number,
83 'failed_steps': { 91 'failed_steps': {
84 'a_test': {} 92 'a_test': {}
85 }, 93 },
86 'failure_type': failure_type.TEST 94 'failure_type': failure_type.TEST
87 } 95 }
88 96
97 build = WfBuild.Create(master_name, builder_name, build_number)
98 build.start_time = datetime.utcnow()
99 build.put()
100
89 failure_result_map = try_job_util.ScheduleTryJobIfNeeded( 101 failure_result_map = try_job_util.ScheduleTryJobIfNeeded(
90 failure_info, None, None) 102 failure_info, None, None)
91 103
92 self.assertEqual({}, failure_result_map) 104 self.assertEqual({}, failure_result_map)
93 105
106 def testBailOutForTryJobWithOutdatedTimestamp(self):
107 master_name = 'master3'
108 builder_name = 'builder3'
109 build_number = 223
110 failure_info = {
111 'master_name': master_name,
112 'builder_name': builder_name,
113 'build_number': build_number,
114 'failed_steps': {
115 'compile': {
116 'current_failure': 221,
117 'first_failure': 221,
118 'last_pass': 220
119 }
120 },
121 }
122
123 self.mock(
124 try_job_util.swarming_tasks_to_try_job_pipeline,
125 'SwarmingTasksToTryJobPipeline', _MockRootPipeline)
126 _MockRootPipeline.STARTED = False
127
128 yesterday = datetime.utcnow() - timedelta(days=1)
129 build = WfBuild.Create(master_name, builder_name, build_number)
130 build.start_time = yesterday
131 build.put()
132
133 failure_result_map = try_job_util.ScheduleTryJobIfNeeded(
134 failure_info, None, None)
135
136 self.assertFalse(_MockRootPipeline.STARTED)
137 self.assertEqual({}, failure_result_map)
138
94 def testNotNeedANewTryJobIfNotFirstTimeFailure(self): 139 def testNotNeedANewTryJobIfNotFirstTimeFailure(self):
95 master_name = 'm' 140 master_name = 'm'
96 builder_name = 'b' 141 builder_name = 'b'
97 build_number = 223 142 build_number = 223
98 failure_info = { 143 failure_info = {
99 'master_name': master_name, 144 'master_name': master_name,
100 'builder_name': builder_name, 145 'builder_name': builder_name,
101 'build_number': build_number, 146 'build_number': build_number,
102 'failed_steps': { 147 'failed_steps': {
103 'compile': { 148 'compile': {
(...skipping 21 matching lines...) Expand all
125 } 170 }
126 }, 171 },
127 'failure_type': failure_type.COMPILE 172 'failure_type': failure_type.COMPILE
128 } 173 }
129 174
130 self.mock( 175 self.mock(
131 try_job_util.swarming_tasks_to_try_job_pipeline, 176 try_job_util.swarming_tasks_to_try_job_pipeline,
132 'SwarmingTasksToTryJobPipeline', _MockRootPipeline) 177 'SwarmingTasksToTryJobPipeline', _MockRootPipeline)
133 _MockRootPipeline.STARTED = False 178 _MockRootPipeline.STARTED = False
134 179
180 build = WfBuild.Create(master_name, builder_name, build_number)
181 build.start_time = datetime.utcnow()
182 build.put()
183
135 try_job_util.ScheduleTryJobIfNeeded(failure_info, None, None) 184 try_job_util.ScheduleTryJobIfNeeded(failure_info, None, None)
136 185
137 self.assertFalse(_MockRootPipeline.STARTED) 186 self.assertFalse(_MockRootPipeline.STARTED)
138 187
139 def testNotNeedANewTryJobIfOneWithResultExists(self): 188 def testNotNeedANewTryJobIfOneWithResultExists(self):
140 master_name = 'm' 189 master_name = 'm'
141 builder_name = 'b' 190 builder_name = 'b'
142 build_number = 223 191 build_number = 223
143 failed_steps = { 192 failed_steps = {
144 'compile': { 193 'compile': {
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
360 } 409 }
361 }, 410 },
362 'failure_type': failure_type.COMPILE 411 'failure_type': failure_type.COMPILE
363 } 412 }
364 413
365 self.mock( 414 self.mock(
366 try_job_util.swarming_tasks_to_try_job_pipeline, 415 try_job_util.swarming_tasks_to_try_job_pipeline,
367 'SwarmingTasksToTryJobPipeline', _MockRootPipeline) 416 'SwarmingTasksToTryJobPipeline', _MockRootPipeline)
368 _MockRootPipeline.STARTED = False 417 _MockRootPipeline.STARTED = False
369 418
419 build = WfBuild.Create(master_name, builder_name, build_number)
420 build.start_time = datetime.utcnow()
421 build.put()
422
370 try_job_util.ScheduleTryJobIfNeeded(failure_info, None, None) 423 try_job_util.ScheduleTryJobIfNeeded(failure_info, None, None)
371 424
372 try_job = WfTryJob.Get(master_name, builder_name, build_number) 425 try_job = WfTryJob.Get(master_name, builder_name, build_number)
373 426
374 self.assertTrue(_MockRootPipeline.STARTED) 427 self.assertTrue(_MockRootPipeline.STARTED)
375 self.assertIsNotNone(try_job) 428 self.assertIsNotNone(try_job)
376 429
377 def testUseFailedOutputNodesFromSignals(self): 430 def testUseFailedOutputNodesFromSignals(self):
378 signals = { 431 signals = {
379 'compile': { 432 'compile': {
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
468 'revision': 'r3', 521 'revision': 'r3',
469 }, 522 },
470 ], 523 ],
471 }, 524 },
472 ] 525 ]
473 } 526 }
474 expected_suspected_revisions = ['r1', 'r2', 'r3'] 527 expected_suspected_revisions = ['r1', 'r2', 'r3']
475 self.assertEqual( 528 self.assertEqual(
476 expected_suspected_revisions, 529 expected_suspected_revisions,
477 try_job_util._GetSuspectsFromHeuristicResult(heuristic_result)) 530 try_job_util._GetSuspectsFromHeuristicResult(heuristic_result))
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698