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

Side by Side Diff: tests/try_server_test.py

Issue 7108020: Add automatic retry mechanism and LKGR support. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/commit-queue
Patch Set: Created 9 years, 6 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 | Annotate | Revision Log
« no previous file with comments | « projects.py ('k') | thirdparty/README.chromium » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2011 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """Unit tests for verification/try_server.py.""" 6 """Unit tests for verification/try_server.py."""
7 7
8 import logging 8 import logging
9 import optparse 9 import optparse
10 import os 10 import os
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
187 values[-1] is None): 187 values[-1] is None):
188 result = None 188 result = None
189 for i, step in enumerate(self._steps): 189 for i, step in enumerate(self._steps):
190 data['steps'].append({ 190 data['steps'].append({
191 'name': step, 191 'name': step,
192 'results':[values[i]] 192 'results':[values[i]]
193 }) 193 })
194 data['results'] = [result] 194 data['results'] = [result]
195 self._builds[builder].append(data) 195 self._builds[builder].append(data)
196 196
197 def step_result(self, builder, name, result):
Dirk Pranke 2011/06/08 22:49:49 maybe rename this to 'set_step_result' if you rena
198 """Sets step result on builder's last build."""
199 for step in self._builds[builder][-1]['steps']:
200 if name == step['name']:
201 step['results'] = result
202 return
203 self.fail()
204
197 def build_result(self, builder, result): 205 def build_result(self, builder, result):
198 for step in self._builds[builder][-1]['steps']: 206 for step in self._builds[builder][-1]['steps']:
199 step['results'] = [result] 207 step['results'] = [result]
200 self._builds[builder][-1]['results'] = [result] 208 self._builds[builder][-1]['results'] = [result]
201 209
202 210
203 class TryServerTest(TestCase, auto_stub.AutoStubMixIn): 211 class TryServerTest(TestCase, auto_stub.AutoStubMixIn):
204 def setUp(self): 212 def setUp(self):
205 super(TryServerTest, self).setUp() 213 super(TryServerTest, self).setUp()
206 self.email = 'user1@example.com' 214 self.email = 'user1@example.com'
207 self.user = 'user1' 215 self.user = 'user1'
208 self.timestamp = [1] 216 self.timestamp = [1]
217 # Mocks http://chromium-status.appspot.com/lkgr
218 self.lkgr = 123
209 self.try_server = FakeTryServer(self) 219 self.try_server = FakeTryServer(self)
210 self.mock(time, 'time', lambda: self.timestamp[-1]) 220 self.mock(time, 'time', lambda: self.timestamp[-1])
211 221
212 try_server.TryRunner.update_latency = 0 222 try_server.TryRunner.update_latency = 0
213 self.try_runner = try_server.TryRunner( 223 self.try_runner = try_server.TryRunner(
214 self.try_server.server_url, 224 self.try_server.server_url,
215 self.email, 225 self.email,
216 ('linux', 'mac'), 226 ('linux', 'mac'),
217 ('test1', 'test2'), 227 ('test1', 'test2'),
218 ['extra_flags',]) 228 ['extra_flags',],
229 lambda: self.lkgr)
219 self.pending = pending_manager.PendingCommit( 230 self.pending = pending_manager.PendingCommit(
220 42, 'owner@example.com', [], 23, None, 'lame desc', [], 231 42, 'owner@example.com', [], 23, None, 'lame desc', [],
221 self.try_server.server_url) 232 self.try_server.server_url)
222 233
223 def tearDown(self): 234 def tearDown(self):
224 if hasattr(self, '_exc_info'): 235 if hasattr(self, '_exc_info'):
225 # Only present in python <= 2.6 236 # Only present in python <= 2.6
226 # pylint: disable=E1101 237 # pylint: disable=E1101
227 failed = self._exc_info()[0] 238 failed = self._exc_info()[0]
228 else: 239 else:
(...skipping 23 matching lines...) Expand all
252 263
253 def testVerificationVoid(self): 264 def testVerificationVoid(self):
254 self.try_runner.verify(self.pending, '123') 265 self.try_runner.verify(self.pending, '123')
255 self.assertPending(base.PROCESSING, 2, None) 266 self.assertPending(base.PROCESSING, 2, None)
256 self.try_server.check_calls( 267 self.try_server.check_calls(
257 ['trychange b=linux,mac c=False r=123 t=test1,test2']) 268 ['trychange b=linux,mac c=False r=123 t=test1,test2'])
258 269
259 def testVoidUpdate(self): 270 def testVoidUpdate(self):
260 self.try_runner.update_status([]) 271 self.try_runner.update_status([])
261 272
273 def test_steps_quality(self):
274 self.assertEquals(None, try_server.steps_quality([]))
275 self.assertEquals(True, try_server.steps_quality([True, None]))
276 self.assertEquals(False, try_server.steps_quality([True, None, False]))
277
278 def testStepQualityNone(self):
279 self.try_runner.status.builders['linux'].builds.cache()
280 self.assertEquals(
281 (None, 0),
282 self.try_runner.step_db.revision_quality_builder_steps('linux', 123))
283 self.try_server.check_calls(['builders/linux/builds/_all'])
284
285 def testStepQualityGood(self):
286 self.try_server.add_build(
287 'linux', 123, None, [SUCCESS, None, None, None])
288 self.try_runner.status.builders['linux'].builds.cache()
289 self.try_server.check_calls(['builders/linux/builds/_all'])
290 self.assertEquals(
291 ([True, None, None, None], 1),
292 self.try_runner.step_db.revision_quality_builder_steps('linux', 123))
293 self.try_server.build_result('linux', SUCCESS)
294 self.try_runner.status.builders['linux'].builds.refresh()
295 self.assertEquals(
296 ([True] * 4, 1),
297 self.try_runner.step_db.revision_quality_builder_steps('linux', 123))
298 self.try_server.check_calls(['builders/linux/builds/_all'])
299
300 def testStepQualityBad(self):
301 self.try_server.add_build(
302 'linux', 123, None, [SUCCESS, SUCCESS, FAILURE, SUCCESS])
303 self.try_runner.status.builders['linux'].builds.cache()
304 # Also test that FakeTryServer.add_build() is implemented correctly.
305 self.assertEquals(
306 ([True, True, False, True], 1),
307 self.try_runner.step_db.revision_quality_builder_steps('linux', 123))
308 self.try_server.check_calls(['builders/linux/builds/_all'])
309
310 def testStepQualityBadIncomplete(self):
311 self.try_server.add_build(
312 'linux', 123, None, [SUCCESS, SUCCESS, FAILURE, None])
313 self.try_runner.status.builders['linux'].builds.cache()
314 # Also test that FakeTryServer.add_build() is implemented correctly.
315 self.assertEquals(
316 ([True, True, False, None], 1),
317 self.try_runner.step_db.revision_quality_builder_steps('linux', 123))
318 self.try_server.check_calls(['builders/linux/builds/_all'])
319
320 def testStepQualityGoodAndBad(self):
321 self.try_server.add_build(
322 'linux', 123, None, [SUCCESS, SUCCESS, SUCCESS, SUCCESS])
323 self.try_server.add_build('linux', 123, None, [FAILURE, None, None, None])
324 self.try_runner.status.builders['linux'].builds.cache()
325 self.try_server.check_calls(['builders/linux/builds/_all'])
326 self.assertEquals(
327 ([True] * 4, 2),
328 self.try_runner.step_db.revision_quality_builder_steps('linux', 123))
329
330 def testQualityAutomatic(self):
331 self.try_runner.verify(self.pending, '123')
332 self.assertEquals(
333 (None, 0),
334 self.try_runner.step_db.revision_quality_builder_steps(
335 'linux', 123))
336 self.try_server.add_build(
337 'linux', 123, 'georges tried stuff',
338 [SUCCESS, SUCCESS, SUCCESS, SUCCESS])
339 self.try_runner.update_status([self.pending])
340 self.assertEquals(
341 ([True] * 4, 1),
342 self.try_runner.step_db.revision_quality_builder_steps(
343 'linux', 123))
344 self.try_server.check_calls(
345 ['trychange b=linux,mac c=False r=123 t=test1,test2'] +
346 ['builders/?select=linux&select=mac'] +
347 ['builders/linux/builds/_all', 'builders/mac/builds/_all'])
348
349 def testQualityManual(self):
350 self.try_server.add_build(
351 'linux', 123, 'georges tried stuff',
352 [SUCCESS, SUCCESS, SUCCESS, SUCCESS])
353 self.try_runner.status.builders['linux'].builds.cache()
354 self.assertEquals(
355 ([True] * 4, 1),
356 self.try_runner.step_db.revision_quality_builder_steps(
357 'linux', 123))
358 self.try_server.check_calls(['builders/linux/builds/_all'])
359
262 def _simple(self, status_linux, status_mac=None, error_msg=None): 360 def _simple(self, status_linux, status_mac=None, error_msg=None):
263 """status_linux affects test1, status_mac affects test2.""" 361 """status_linux affects test1, status_mac affects test2."""
264 def is_failure(status): 362 def is_failure(status):
265 return status in (FAILURE, EXCEPTION) 363 return status in (FAILURE, EXCEPTION)
364
365 self.assertEquals(
366 bool(is_failure(status_linux) or is_failure(status_mac)),
367 bool(error_msg))
266 if status_mac is None: 368 if status_mac is None:
267 status_mac = status_linux 369 status_mac = status_linux
370 self.lkgr = 12
371 self.try_server.add_build(
372 'linux', 123, None, [SUCCESS, SUCCESS, SUCCESS, SUCCESS])
373 self.try_server.add_build(
374 'mac', 123, None, [SUCCESS, SUCCESS, SUCCESS, SUCCESS])
268 375
269 self.try_runner.verify(self.pending, '123') 376 self.try_runner.verify(self.pending, '123')
270 self.try_server.check_calls( 377 self.try_server.check_calls(
271 ['trychange b=linux,mac c=False r=123 t=test1,test2']) 378 ['trychange b=linux,mac c=False r=123 t=test1,test2'])
272 self.try_server.add_build( 379 self.try_server.add_build(
273 'linux', 123, None, [SUCCESS, SUCCESS, status_linux, SUCCESS]) 380 'linux', 123, None, [SUCCESS, SUCCESS, status_linux, SUCCESS])
274 self.try_server.add_build( 381 self.try_server.add_build(
275 'mac', 123, None, [SUCCESS, SUCCESS, SUCCESS, status_mac]) 382 'mac', 123, None, [SUCCESS, SUCCESS, SUCCESS, status_mac])
383
276 self.try_runner.update_status([self.pending]) 384 self.try_runner.update_status([self.pending])
385 if is_failure(status_linux):
386 self.assertEquals(123, self.try_runner.get_lkgr('linux'))
387 else:
388 self.assertEquals(123, self.try_runner.get_lkgr('linux'))
389 if is_failure(status_mac):
390 self.assertEquals(123, self.try_runner.get_lkgr('mac'))
391 else:
392 self.assertEquals(123, self.try_runner.get_lkgr('mac'))
277 393
278 if error_msg: 394 if error_msg:
395 # Can't test failure without testing automatic retry mechanism.
396 self.assertPending(base.PROCESSING, 2, None)
397 expected = (
398 ['builders/?select=linux&select=mac'] +
399 ['builders/linux/builds/_all', 'builders/mac/builds/_all'])
400 if is_failure(status_linux):
401 expected.append('trychange b=linux c=False r=123 t=test1')
402 if is_failure(status_mac):
403 expected.append('trychange b=mac c=False r=123 t=test2')
404 self.try_server.check_calls(expected)
405 self.try_server.add_build(
406 'linux', 123, None, [SUCCESS, SUCCESS, status_linux, SUCCESS])
407 self.try_server.add_build(
408 'mac', 123, None, [SUCCESS, SUCCESS, SUCCESS, status_mac])
409
410 self.try_runner.update_status([self.pending])
279 self.assertPending(base.FAILED, 2, error_msg) 411 self.assertPending(base.FAILED, 2, error_msg)
412 if is_failure(status_linux) and is_failure(status_mac):
413 self.try_server.check_calls(
414 ['builders/?select=linux&select=mac'] +
415 ['builders/linux/builds/_all', 'builders/mac/builds/_all'])
416 elif is_failure(status_linux):
417 self.try_server.check_calls(
418 ['builders/?select=linux', 'builders/linux/builds/_all'])
419 else:
420 self.try_server.check_calls(
421 ['builders/?select=mac', 'builders/mac/builds/_all'])
280 else: 422 else:
281 self.assertPending(base.SUCCEEDED, 2, None) 423 self.assertPending(base.SUCCEEDED, 2, None)
282 424 self.try_server.check_calls(
283 # Verify good_revisions() and bad_revisions() 425 ['builders/?select=linux&select=mac'] +
284 if is_failure(status_linux) and is_failure(status_mac): 426 ['builders/linux/builds/_all', 'builders/mac/builds/_all'])
285 self.assertEquals([], list(self.try_runner.step_db.good_revisions()))
286 self.assertEquals([123], list(self.try_runner.step_db.bad_revisions()))
287 else:
288 # It passed on at least one builder.
289 self.assertEquals([123], list(self.try_runner.step_db.good_revisions()))
290 self.assertEquals([], list(self.try_runner.step_db.bad_revisions()))
291
292 # Verify revision_quality_builder.
293 self.assertEquals(
294 not is_failure(status_linux),
295 self.try_runner.step_db.revision_quality_builder('linux', 123))
296 self.assertEquals(
297 not is_failure(status_mac),
298 self.try_runner.step_db.revision_quality_builder('mac', 123))
299 self.try_server.check_calls(
300 ['builders/?select=linux&select=mac'] +
301 ['builders/linux/builds/_all', 'builders/mac/builds/_all'])
302 427
303 def testImmediateSuccess(self): 428 def testImmediateSuccess(self):
304 self._simple(SUCCESS) 429 self._simple(SUCCESS)
305 430
306 def testImmediateSuccessStr(self): 431 def testImmediateSuccessStr(self):
307 # Test with a int/str instead of str/int. 432 # Test with a int/str instead of str/int.
308 self.try_runner.verify(self.pending, 123) 433 self.try_runner.verify(self.pending, 123)
309 self.try_server.check_calls( 434 self.try_server.check_calls(
310 ['trychange b=linux,mac c=False r=123 t=test1,test2']) 435 ['trychange b=linux,mac c=False r=123 t=test1,test2'])
311 436
312 self.try_server.add_build( 437 self.try_server.add_build(
313 'linux', '123', None, [SUCCESS, SUCCESS, SUCCESS, SUCCESS]) 438 'linux', '123', None, [SUCCESS, SUCCESS, SUCCESS, SUCCESS])
314 self.try_server.add_build( 439 self.try_server.add_build(
315 'mac', '123', None, [SUCCESS, SUCCESS, SUCCESS, SUCCESS]) 440 'mac', '123', None, [SUCCESS, SUCCESS, SUCCESS, SUCCESS])
316 self.try_runner.update_status([self.pending]) 441 self.try_runner.update_status([self.pending])
317 self.assertPending(base.SUCCEEDED, 2, None) 442 self.assertPending(base.SUCCEEDED, 2, None)
318 self.try_server.check_calls( 443 self.try_server.check_calls(
319 ['builders/?select=linux&select=mac'] + 444 ['builders/?select=linux&select=mac'] +
320 ['builders/linux/builds/_all', 'builders/mac/builds/_all']) 445 ['builders/linux/builds/_all', 'builders/mac/builds/_all'])
321 446
322 def testImmediateWarnings(self): 447 def testImmediateWarnings(self):
323 self._simple(WARNINGS) 448 self._simple(WARNINGS)
324 449
325 def testImmediateSkipped(self): 450 def testImmediateSkipped(self):
326 self._simple(SKIPPED) 451 self._simple(SKIPPED)
327 452
328 def testImmediateFailureLinux(self): 453 def testImmediateFailure(self):
329 self._simple(
330 FAILURE, SUCCESS,
331 'Try job failure for 42-23 on linux for step test1:\n'
332 '%s/buildstatus?builder=linux&number=0' % self.try_server.server_url)
333
334 def testImmediateFailureMac(self):
335 self._simple( 454 self._simple(
336 SUCCESS, FAILURE, 455 SUCCESS, FAILURE,
337 'Try job failure for 42-23 on mac for step test2:\n' 456 ('Try job failure for 42-23 on mac for step "test2".\n'
338 '%s/buildstatus?builder=mac&number=0' % self.try_server.server_url) 457 'It\'s a second try, previously, step "test2" failed.\n'
458 '%s/buildstatus?builder=mac&number=2') % self.try_server.server_url)
339 459
340 def testImmediateDoubleFailure(self): 460 def testImmediateDoubleFailure(self):
341 self._simple( 461 self._simple(
342 FAILURE, FAILURE, 462 FAILURE, FAILURE,
343 'Try job failure for 42-23 on mac for step test2:\n' 463 'Try job failure for 42-23 on mac for step "test2".\n'
344 '%s/buildstatus?builder=mac&number=0' % self.try_server.server_url) 464 'It\'s a second try, previously, step "test2" failed.\n'
465 '%s/buildstatus?builder=mac&number=2' % self.try_server.server_url)
345 466
346 def testImmediateException(self): 467 def testImmediateException(self):
347 self._simple( 468 self._simple(
348 SUCCESS, EXCEPTION, 469 SUCCESS, EXCEPTION,
349 'Try job failure for 42-23 on mac for step test2:\n' 470 ('Try job failure for 42-23 on mac for step "test2".\n'
350 '%s/buildstatus?builder=mac&number=0' % self.try_server.server_url) 471 'It\'s a second try, previously, step "test2" failed.\n'
472 '%s/buildstatus?builder=mac&number=2') % self.try_server.server_url)
351 473
352 def testSuccess(self): 474 def testSuccess(self):
475 self.lkgr = 2
353 # Normal workflow with incremental success. 476 # Normal workflow with incremental success.
354 self.try_runner.verify(self.pending, '123') 477 self.try_runner.verify(self.pending, '123')
355 self.try_server.check_calls( 478 self.try_server.check_calls(
356 ['trychange b=linux,mac c=False r=123 t=test1,test2']) 479 ['trychange b=linux,mac c=False r=123 t=test1,test2'])
357 480
358 self.try_runner.update_status([self.pending]) 481 self.try_runner.update_status([self.pending])
359 self.assertPending(base.PROCESSING, 2, None) 482 self.assertPending(base.PROCESSING, 2, None)
360 self.try_server.check_calls( 483 self.try_server.check_calls(
361 ['builders/?select=linux&select=mac', 484 ['builders/?select=linux&select=mac',
362 'builders/linux/builds/_all', 'builders/mac/builds/_all']) 485 'builders/linux/builds/_all', 'builders/mac/builds/_all'])
(...skipping 17 matching lines...) Expand all
380 # This one will be cached since it's now immutable. 503 # This one will be cached since it's now immutable.
381 self.try_server.build_result('mac', SUCCESS) 504 self.try_server.build_result('mac', SUCCESS)
382 self.try_runner.update_status([self.pending]) 505 self.try_runner.update_status([self.pending])
383 self.assertPending(base.PROCESSING, 2, None) 506 self.assertPending(base.PROCESSING, 2, None)
384 self.try_server.check_calls( 507 self.try_server.check_calls(
385 ['builders/linux/builds/?select=0', 'builders/mac/builds/?select=0']) 508 ['builders/linux/builds/?select=0', 'builders/mac/builds/?select=0'])
386 509
387 self.try_server.build_result('linux', SUCCESS) 510 self.try_server.build_result('linux', SUCCESS)
388 self.try_runner.update_status([self.pending]) 511 self.try_runner.update_status([self.pending])
389 self.assertPending(base.SUCCEEDED, 2, None) 512 self.assertPending(base.SUCCEEDED, 2, None)
390 self.assertEquals([123], list(self.try_runner.step_db.good_revisions())) 513 self.assertEquals(
391 self.assertEquals([], list(self.try_runner.step_db.bad_revisions())) 514 ([True] * 4, 1),
515 self.try_runner.step_db.revision_quality_builder_steps(
516 'linux', 123))
517 self.assertEquals(
518 ([True] * 4, 1),
519 self.try_runner.step_db.revision_quality_builder_steps(
520 'mac', 123))
392 self.try_server.check_calls(['builders/linux/builds/?select=0']) 521 self.try_server.check_calls(['builders/linux/builds/?select=0'])
393 522
394 def testIgnorePreviousJobs(self): 523 def testIgnorePreviousJobs(self):
395 self.try_runner.verify(self.pending, '123') 524 self.try_runner.verify(self.pending, '123')
396 self.try_server.check_calls( 525 self.try_server.check_calls(
397 ['trychange b=linux,mac c=False r=123 t=test1,test2']) 526 ['trychange b=linux,mac c=False r=123 t=test1,test2'])
398 527
399 self.try_runner.update_status([self.pending]) 528 self.try_runner.update_status([self.pending])
400 self.try_server.check_calls( 529 self.try_server.check_calls(
401 ['builders/?select=linux&select=mac'] + 530 ['builders/?select=linux&select=mac'] +
402 ['builders/linux/builds/_all', 'builders/mac/builds/_all']) 531 ['builders/linux/builds/_all', 'builders/mac/builds/_all'])
403 532
404 self.try_server.add_build('linux', 12, None, [None] * 4) 533 self.try_server.add_build('linux', 12, None, [None] * 4)
405 self.try_server.add_build('mac', 12, None, [None] * 4) 534 self.try_server.add_build('mac', 12, None, [None] * 4)
406 self.try_runner.update_status([self.pending]) 535 self.try_runner.update_status([self.pending])
407 self.assertPending(base.PROCESSING, 2, None) 536 self.assertPending(base.PROCESSING, 2, None)
408 self.try_server.check_calls( 537 self.try_server.check_calls(
409 ['builders/?select=linux&select=mac', 538 ['builders/?select=linux&select=mac',
410 'builders/linux/builds/_all', 'builders/mac/builds/_all']) 539 'builders/linux/builds/_all', 'builders/mac/builds/_all'])
411 540
412 self.try_server.add_build('linux', 123, None, [SUCCESS] * 4) 541 self.try_server.add_build('linux', 123, None, [SUCCESS] * 4)
413 self.try_server.add_build('mac', 123, None, [SUCCESS] * 4) 542 self.try_server.add_build('mac', 123, None, [SUCCESS] * 4)
414 self.try_runner.update_status([self.pending]) 543 self.try_runner.update_status([self.pending])
415 self.assertPending(base.SUCCEEDED, 2, None) 544 self.assertPending(base.SUCCEEDED, 2, None)
416 self.assertEquals([12, 123], list(self.try_runner.step_db.good_revisions())) 545 self.assertEquals(
417 self.assertEquals([], list(self.try_runner.step_db.bad_revisions())) 546 ([True] * 4, 1),
547 self.try_runner.step_db.revision_quality_builder_steps(
548 'linux', 123))
549 self.assertEquals(
550 ([True] * 4, 1),
551 self.try_runner.step_db.revision_quality_builder_steps(
552 'mac', 123))
418 self.try_server.check_calls( 553 self.try_server.check_calls(
419 ['builders/?select=linux&select=mac', 554 ['builders/?select=linux&select=mac',
420 'builders/linux/builds/_all', 'builders/mac/builds/_all']) 555 'builders/linux/builds/_all', 'builders/mac/builds/_all'])
421 556
422 def testNames(self): 557 def testNames(self):
423 self.assertEquals('user1: 42-23', self.try_runner._job_name(self.pending)) 558 self.assertEquals('user1: 42-23', self.try_runner._job_name(self.pending))
424 self.assertEquals( 559 self.assertEquals(
425 '\'user1: 42-23\' try job', self.try_runner._job_reason(self.pending)) 560 '\'user1: 42-23\' try job', self.try_runner._job_reason(self.pending))
426 561
427 def testLostJob(self): 562 def testLostJob(self):
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
518 self.assertEquals('123', actual[1].revision) 653 self.assertEquals('123', actual[1].revision)
519 self.assertEquals(0, actual[1].build) 654 self.assertEquals(0, actual[1].build)
520 self.assertEquals('mac', actual[1].builder) 655 self.assertEquals('mac', actual[1].builder)
521 self.assertEquals(base.SUCCEEDED, actual[1].result) 656 self.assertEquals(base.SUCCEEDED, actual[1].result)
522 self.assertEquals(self.timestamp[1], actual[1].sent) 657 self.assertEquals(self.timestamp[1], actual[1].sent)
523 self.try_server.check_calls( 658 self.try_server.check_calls(
524 ['builders/?select=mac', 'builders/mac/builds/_all']) 659 ['builders/?select=mac', 'builders/mac/builds/_all'])
525 660
526 self.try_runner.update_status([self.pending]) 661 self.try_runner.update_status([self.pending])
527 662
528 def testFailedSteps(self): 663 def testFailedStepRetryLkgr(self):
529 # Verifies failed steps are listed correctly. It will be necessary for bad
530 # revision and flaky test detections.
531 self.try_runner.verify(self.pending, '123') 664 self.try_runner.verify(self.pending, '123')
532 self.try_server.check_calls( 665 self.try_server.check_calls(
533 ['trychange b=linux,mac c=False r=123 t=test1,test2']) 666 ['trychange b=linux,mac c=False r=123 t=test1,test2'])
534 self.try_server.add_build( 667 self.try_server.add_build(
535 'linux', 123, None, [SUCCESS, FAILURE, SUCCESS, FAILURE]) 668 'linux', 123, None, [SUCCESS, SUCCESS, FAILURE, SUCCESS])
669
670 self.lkgr = 122
536 self.try_runner.update_status([self.pending]) 671 self.try_runner.update_status([self.pending])
537 self.try_server.check_calls( 672 self.try_server.check_calls(
538 ['builders/?select=linux&select=mac'] + 673 ['builders/?select=linux&select=mac'] +
539 ['builders/linux/builds/_all', 'builders/mac/builds/_all']) 674 ['builders/linux/builds/_all', 'builders/mac/builds/_all'] +
540 self.assertEquals( 675 # Only the failed test is retried, on lkgr revision.
541 ['compile', 'test2'], 676 ['trychange b=linux c=False r=122 t=test1'])
542 self.get_verif().try_jobs[0].failed_steps) 677 self.assertEquals(['test1'], self.get_verif().try_jobs[0].failed_steps)
543 678
544 def testFailedUpdate(self): 679 def testFailedUpdate(self):
545 # It must not retry a failed update. 680 # It must not retry a failed update.
681
682 # Add succeededing builds, this sets quality to True, which disable retry
683 # mechanism.
684 self.try_server.add_build(
685 'linux', 123, 'georges tried stuff',
686 [SUCCESS, SUCCESS, SUCCESS, SUCCESS])
687 self.try_server.add_build(
688 'mac', 123, 'georges tried stuff', [SUCCESS, SUCCESS, SUCCESS, SUCCESS])
689 self.lkgr = 123
690
546 self.try_runner.verify(self.pending, '123') 691 self.try_runner.verify(self.pending, '123')
547 self.try_server.check_calls( 692 self.try_server.check_calls(
548 ['trychange b=linux,mac c=False r=123 t=test1,test2']) 693 ['trychange b=linux,mac c=False r=123 t=test1,test2'])
549 self.try_server.add_build( 694 self.try_server.add_build(
550 'linux', 123, None, [FAILURE, None, None, None]) 695 'linux', 123, None, [FAILURE, None, None, None])
551 self.try_runner.update_status([self.pending]) 696 self.try_runner.update_status([self.pending])
552 self.try_server.check_calls( 697 self.try_server.check_calls(
553 ['builders/?select=linux&select=mac'] + 698 ['builders/?select=linux&select=mac'] +
554 ['builders/linux/builds/_all', 'builders/mac/builds/_all']) 699 ['builders/linux/builds/_all', 'builders/mac/builds/_all'])
700 self.assertEquals('linux', self.get_verif().try_jobs[0].builder)
555 self.assertEquals(['update'], self.get_verif().try_jobs[0].failed_steps) 701 self.assertEquals(['update'], self.get_verif().try_jobs[0].failed_steps)
556 self.assertPending( 702 self.assertPending(
557 base.FAILED, 2, 703 base.FAILED, 2,
558 u'Try job failure for 42-23 on linux for step update:\n' 704 (u'Try job failure for 42-23 on linux for step '
559 u'%s/buildstatus?builder=linux&number=0' % self.try_server.server_url) 705 u'"update".\n%s/buildstatus?builder=linux&number=1\n\n'
706 u'Step "update" is always a major failure.\n'
707 u'Look at the try server FAQ for more details.') %
708 self.try_server.server_url)
560 709
561 def testFailedCompileRetryClobber(self): 710 def testFailedCompileRetryClobber(self):
562 # It must retry once a non-clobber compile. 711 # It must retry once a non-clobber compile.
563 self.try_runner.verify(self.pending, '123') 712 self.try_runner.verify(self.pending, '123')
564 self.try_server.check_calls( 713 self.try_server.check_calls(
565 ['trychange b=linux,mac c=False r=123 t=test1,test2']) 714 ['trychange b=linux,mac c=False r=123 t=test1,test2'])
566 self.try_server.add_build( 715 self.try_server.add_build(
567 'linux', 123, None, [SUCCESS, FAILURE, None, None]) 716 'linux', 123, None, [SUCCESS, FAILURE, None, None])
717 self.lkgr = 122
568 self.try_runner.update_status([self.pending]) 718 self.try_runner.update_status([self.pending])
569 self.try_server.check_calls( 719 self.try_server.check_calls(
570 ['builders/?select=linux&select=mac'] + 720 ['builders/?select=linux&select=mac'] +
571 ['builders/linux/builds/_all', 'builders/mac/builds/_all'] + 721 ['builders/linux/builds/_all', 'builders/mac/builds/_all'] +
572 ['trychange b=linux c=True r=123 t=test1,test2']) 722 ['trychange b=linux c=True r=122 t=test1,test2'])
573 self.assertEquals(['compile'], self.get_verif().try_jobs[0].failed_steps) 723 self.assertEquals(['compile'], self.get_verif().try_jobs[0].failed_steps)
574 self.assertPending(base.PROCESSING, 2, None) 724 self.assertPending(base.PROCESSING, 2, None)
575 725
576 self.try_server.add_build( 726 self.try_server.add_build(
577 'linux', 123, None, [SUCCESS, FAILURE, FAILURE, None]) 727 'linux', 122, None, [SUCCESS, FAILURE, None, None])
578 self.try_runner.update_status([self.pending]) 728 self.try_runner.update_status([self.pending])
579 self.try_server.check_calls( 729 self.try_server.check_calls(
580 ['builders/?select=linux&select=mac'] + 730 ['builders/?select=linux&select=mac'] +
581 ['builders/linux/builds/_all', 'builders/mac/builds/_all']) 731 ['builders/linux/builds/_all', 'builders/mac/builds/_all'])
582 self.assertPending( 732 self.assertPending(
583 base.FAILED, 2, 733 base.FAILED, 2,
584 u'Try job failure for 42-23 on linux for steps compile, test1:\n' 734 u'Try job failure for 42-23 on linux for step "compile" (clobber build)'
735 u'.\nIt\'s a second try, previously, step "compile" failed.\n'
585 u'%s/buildstatus?builder=linux&number=1' % self.try_server.server_url) 736 u'%s/buildstatus?builder=linux&number=1' % self.try_server.server_url)
586 737
587 738
588 if __name__ == '__main__': 739 if __name__ == '__main__':
589 logging.basicConfig( 740 logging.basicConfig(
590 level=[logging.WARNING, logging.INFO, logging.DEBUG][ 741 level=[logging.WARNING, logging.INFO, logging.DEBUG][
591 min(sys.argv.count('-v'), 2)], 742 min(sys.argv.count('-v'), 2)],
592 format='%(levelname)5s %(module)15s(%(lineno)3d): %(message)s') 743 format='%(levelname)5s %(module)15s(%(lineno)3d): %(message)s')
593 unittest.main() 744 unittest.main()
OLDNEW
« no previous file with comments | « projects.py ('k') | thirdparty/README.chromium » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698