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

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

Issue 1591003002: [Findit] Modify tryjob pipelines to trigger try jobs for test failure. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: . Created 4 years, 10 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 testing_utils import testing 5 from testing_utils import testing
6 6
7 from model import wf_analysis_status 7 from model import wf_analysis_status
8 from model.wf_analysis import WfAnalysis 8 from model.wf_analysis import WfAnalysis
9 from model.wf_try_job import WfTryJob 9 from model.wf_try_job import WfTryJob
10 from waterfall import try_job_util 10 from waterfall import try_job_util
11 from waterfall import waterfall_config 11 from waterfall import waterfall_config
12 from waterfall.try_job_type import TryJobType
12 13
13 14
14 class _MockRootPipeline(object): 15 class _MockRootPipeline(object):
15 STARTED = False 16 STARTED = False
16 17
17 def __init__(self, *_): 18 def __init__(self, *_):
18 pass 19 pass
19 20
20 def start(self, *_, **__): 21 def start(self, *_, **__):
21 _MockRootPipeline.STARTED = True 22 _MockRootPipeline.STARTED = True
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
120 } 121 }
121 122
122 self.mock( 123 self.mock(
123 try_job_util.try_job_pipeline, 'TryJobPipeline', _MockRootPipeline) 124 try_job_util.try_job_pipeline, 'TryJobPipeline', _MockRootPipeline)
124 _MockRootPipeline.STARTED = False 125 _MockRootPipeline.STARTED = False
125 126
126 try_job_util.ScheduleTryJobIfNeeded(failure_info) 127 try_job_util.ScheduleTryJobIfNeeded(failure_info)
127 128
128 self.assertFalse(_MockRootPipeline.STARTED) 129 self.assertFalse(_MockRootPipeline.STARTED)
129 130
130 def testNotNeedANewTryJobIfNotCompileFailure(self):
131 master_name = 'm'
132 builder_name = 'b'
133 build_number = 223
134 failed_steps = {
135 'a': {
136 'current_failure': 223,
137 'first_failure': 223,
138 'last_pass': 222
139 }
140 }
141
142 need_try_job, failure_result_map, last_pass = try_job_util._NeedANewTryJob(
143 master_name, builder_name, build_number, failed_steps)
144
145 self.assertFalse(need_try_job)
146 self.assertEqual({}, failure_result_map)
147 self.assertIsNone(last_pass)
148
149 def testNotNeedANewTryJobIfOneWithResultExists(self): 131 def testNotNeedANewTryJobIfOneWithResultExists(self):
150 master_name = 'm' 132 master_name = 'm'
151 builder_name = 'b' 133 builder_name = 'b'
152 build_number = 223 134 build_number = 223
153 failed_steps = { 135 failed_steps = {
154 'compile': { 136 'compile': {
155 'current_failure': 223, 137 'current_failure': 223,
156 'first_failure': 223, 138 'first_failure': 223,
157 'last_pass': 220 139 'last_pass': 220
158 } 140 }
159 } 141 }
160 142
161 try_job = WfTryJob.Create(master_name, builder_name, build_number) 143 try_job = WfTryJob.Create(master_name, builder_name, build_number)
162 try_job.compile_results = [['rev', 'failed']] 144 try_job.compile_results = [['rev', 'failed']]
163 try_job.status = wf_analysis_status.ANALYZED 145 try_job.status = wf_analysis_status.ANALYZED
164 try_job.put() 146 try_job.put()
165 147
166 need_try_job, failure_result_map, last_pass = try_job_util._NeedANewTryJob( 148 failure_result_map = {}
167 master_name, builder_name, build_number, failed_steps) 149 need_try_job, last_pass, try_job_type, targeted_tests = (
150 try_job_util._NeedANewTryJob(master_name, builder_name, build_number,
151 failed_steps, failure_result_map))
168 152
169 expected_failure_result_map = { 153 expected_failure_result_map = {
170 'compile': 'm/b/223' 154 'compile': 'm/b/223'
171 } 155 }
172 156
173 self.assertFalse(need_try_job) 157 self.assertFalse(need_try_job)
174 self.assertEqual(expected_failure_result_map, failure_result_map) 158 self.assertEqual(expected_failure_result_map, failure_result_map)
175 self.assertEqual(220, last_pass) 159 self.assertEqual(220, last_pass)
160 self.assertEqual(TryJobType.COMPILE, try_job_type)
161 self.assertIsNone(targeted_tests)
176 162
177 def testNeedANewTryJobIfExistingOneHasError(self): 163 def testNeedANewTryJobIfExistingOneHasError(self):
178 master_name = 'm' 164 master_name = 'm'
179 builder_name = 'b' 165 builder_name = 'b'
180 build_number = 223 166 build_number = 223
181 failed_steps = { 167 failed_steps = {
182 'compile': { 168 'compile': {
183 'current_failure': 223, 169 'current_failure': 223,
184 'first_failure': 223, 170 'first_failure': 223,
185 'last_pass': 220 171 'last_pass': 220
186 } 172 }
187 } 173 }
188 174
189 try_job = WfTryJob.Create(master_name, builder_name, build_number) 175 try_job = WfTryJob.Create(master_name, builder_name, build_number)
190 try_job.status = wf_analysis_status.ERROR 176 try_job.status = wf_analysis_status.ERROR
191 try_job.put() 177 try_job.put()
192 178
193 need_try_job, failure_result_map, last_pass = try_job_util._NeedANewTryJob( 179 failure_result_map = {}
194 master_name, builder_name, build_number, failed_steps) 180 need_try_job, last_pass, try_job_type, targeted_tests = (
181 try_job_util._NeedANewTryJob(master_name, builder_name, build_number,
182 failed_steps, failure_result_map))
195 183
196 expected_failure_result_map = { 184 expected_failure_result_map = {
197 'compile': 'm/b/223' 185 'compile': 'm/b/223'
198 } 186 }
199 self.assertTrue(need_try_job) 187 self.assertTrue(need_try_job)
200 self.assertEqual(expected_failure_result_map, failure_result_map) 188 self.assertEqual(expected_failure_result_map, failure_result_map)
201 self.assertEqual(220, last_pass) 189 self.assertEqual(220, last_pass)
190 self.assertEqual(TryJobType.COMPILE, try_job_type)
191 self.assertIsNone(targeted_tests)
202 192
203 def testNotNeedANewTryJobIfLastPassCannotDetermine(self): 193 def testNotNeedANewTryJobIfLastPassCannotDetermine(self):
204 master_name = 'm' 194 master_name = 'm'
205 builder_name = 'b' 195 builder_name = 'b'
206 build_number = 223 196 build_number = 223
207 failed_steps = { 197 failed_steps = {
208 'compile': { 198 'compile': {
209 'current_failure': 223, 199 'current_failure': 223,
210 'first_failure': 223 200 'first_failure': 223
211 } 201 }
212 } 202 }
213 203
214 try_job = WfTryJob.Create(master_name, builder_name, build_number) 204 try_job = WfTryJob.Create(master_name, builder_name, build_number)
215 try_job.status = wf_analysis_status.ERROR 205 try_job.status = wf_analysis_status.ERROR
216 try_job.put() 206 try_job.put()
217 207
218 need_try_job, failure_result_map, last_pass = try_job_util._NeedANewTryJob( 208 failure_result_map = {}
219 master_name, builder_name, build_number, failed_steps) 209 need_try_job, last_pass, try_job_type, targeted_tests = (
210 try_job_util._NeedANewTryJob(master_name, builder_name, build_number,
211 failed_steps, failure_result_map))
220 212
221 self.assertFalse(need_try_job) 213 self.assertFalse(need_try_job)
222 self.assertEqual({}, failure_result_map) 214 self.assertEqual({}, failure_result_map)
223 self.assertIsNone(last_pass) 215 self.assertIsNone(last_pass)
216 self.assertEqual(TryJobType.COMPILE, try_job_type)
217 self.assertIsNone(targeted_tests)
218
219 def testNeedANewTryJobIfTestFailureNonSwarming(self):
220 master_name = 'm'
221 builder_name = 'b'
222 build_number = 223
223 failed_steps = {
224 'a': {
225 'current_failure': 223,
226 'first_failure': 223,
227 'last_pass': 222
228 },
229 'b': {
230 'current_failure': 223,
231 'first_failure': 222,
232 'last_pass': 221
233 }
234 }
235
236 failure_result_map = {}
237 need_try_job, last_pass, try_job_type, targeted_tests = (
238 try_job_util._NeedANewTryJob(master_name, builder_name, build_number,
239 failed_steps, failure_result_map))
240
241 expected_failure_result_map = {
242 'a': 'm/b/223',
243 'b': 'm/b/222'
244 }
245
246 expected_targeted_tests = {
247 'a': []
248 }
249
250 self.assertTrue(need_try_job)
251 self.assertEqual(expected_failure_result_map, failure_result_map)
252 self.assertEqual(222, last_pass)
253 self.assertEqual('test', try_job_type)
254 self.assertEqual(expected_targeted_tests, targeted_tests)
255
256 def testNeedANewTryJobIfTestFailureSwarming(self):
257 master_name = 'm'
258 builder_name = 'b'
259 build_number = 223
260 failed_steps = {
261 'a': {
262 'current_failure': 223,
263 'first_failure': 222,
264 'last_pass': 221,
265 'tests': {
266 'a.t1': {
267 'current_failure': 223,
268 'first_failure': 223,
269 'last_pass': 221
270 },
271 'a.t2': {
272 'current_failure': 223,
273 'first_failure': 222,
274 'last_pass': 221
275 },
276 'a.t3': {
277 'current_failure': 223,
278 'first_failure': 223,
279 'last_pass': 222
280 }
281 }
282 },
283 'b': {
284 'current_failure': 223,
285 'first_failure': 222,
286 'last_pass': 221,
287 'tests': {
288 'b.t1': {
289 'current_failure': 223,
290 'first_failure': 222,
291 'last_pass': 221
292 },
293 'b.t2': {
294 'current_failure': 223,
295 'first_failure': 222,
296 'last_pass': 221
297 }
298 }
299 }
300 }
301
302 failure_result_map = {}
303 need_try_job, last_pass, try_job_type, targeted_tests = (
304 try_job_util._NeedANewTryJob(master_name, builder_name, build_number,
305 failed_steps, failure_result_map))
306
307 expected_failure_result_map = {
308 'a': {
309 'a.t1': 'm/b/223',
310 'a.t2': 'm/b/222',
311 'a.t3': 'm/b/223'
312 },
313 'b': {
314 'b.t1': 'm/b/222',
315 'b.t2': 'm/b/222'
316 },
317 }
318
319 expected_targeted_tests = {
320 'a': ['a.t1', 'a.t3']
321 }
322
323 self.assertTrue(need_try_job)
324 self.assertEqual(expected_failure_result_map, failure_result_map)
325 self.assertEqual(221, last_pass)
326 self.assertEqual('test', try_job_type)
327 self.assertEqual(expected_targeted_tests, targeted_tests)
224 328
225 def testNeedANewTryJob(self): 329 def testNeedANewTryJob(self):
226 master_name = 'm' 330 master_name = 'm'
227 builder_name = 'b' 331 builder_name = 'b'
228 build_number = 223 332 build_number = 223
229 failure_info = { 333 failure_info = {
230 'master_name': master_name, 334 'master_name': master_name,
231 'builder_name': builder_name, 335 'builder_name': builder_name,
232 'build_number': build_number, 336 'build_number': build_number,
233 'failed_steps': { 337 'failed_steps': {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
267 'compile': { 371 'compile': {
268 'failed_targets': [ 372 'failed_targets': [
269 {'target': 'a.exe'}, 373 {'target': 'a.exe'},
270 {'source': 'b.cc', 374 {'source': 'b.cc',
271 'target': 'b.o'}] 375 'target': 'b.o'}]
272 } 376 }
273 } 377 }
274 378
275 self.assertEqual( 379 self.assertEqual(
276 try_job_util._GetFailedTargetsFromSignals(signals), ['a.exe']) 380 try_job_util._GetFailedTargetsFromSignals(signals), ['a.exe'])
277
OLDNEW
« no previous file with comments | « appengine/findit/waterfall/test/try_job_pipeline_test.py ('k') | appengine/findit/waterfall/try_job_pipeline.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698