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

Side by Side Diff: tests/try_job_on_rietveld_test.py

Issue 10907197: Differentiate between tests that needs to be run or need to wait for completion. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/commit-queue
Patch Set: Created 8 years, 3 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 | « no previous file | verification/try_job_on_rietveld.py » ('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) 2012 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2012 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_job_on_rietveld.py.""" 6 """Unit tests for verification/try_job_on_rietveld.py."""
7 7
8 import logging 8 import logging
9 import os 9 import os
10 import random 10 import random
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 def add_build(self, builder, number, revision, key): 66 def add_build(self, builder, number, revision, key):
67 """Add a build to a builder.""" 67 """Add a build to a builder."""
68 self.builders[builder].builds[number] = BuildbotBuild(revision, key) 68 self.builders[builder].builds[number] = BuildbotBuild(revision, key)
69 return self.builders[builder].builds[number] 69 return self.builders[builder].builds[number]
70 70
71 71
72 def _posted(builders): 72 def _posted(builders):
73 return 'trigger_try_jobs(42, 23, \'CQ\', False, None, %s)' % str(builders) 73 return 'trigger_try_jobs(42, 23, \'CQ\', False, None, %s)' % str(builders)
74 74
75 75
76 def gen_job_pending(**kwargs):
77 value = {
78 '__persistent_module__': 'verification.try_job_on_rietveld',
79 '__persistent_type__': 'RietveldTryJobPending',
80 'builder': None,
81 'clobber': False,
82 'requested_steps': [],
83 'revision': None,
84 'tries': 1,
85 }
86 assert all(arg in value for arg in kwargs)
87 value.update(kwargs)
88 return value
89
90
76 def gen_job(**kwargs): 91 def gen_job(**kwargs):
77 value = { 92 value = {
78 '__persistent_module__': 'verification.try_job_on_rietveld', 93 '__persistent_module__': 'verification.try_job_on_rietveld',
79 '__persistent_type__': 'RietveldTryJob', 94 '__persistent_type__': 'RietveldTryJob',
80 'build': None, 95 'build': None,
81 'builder': None, 96 'builder': None,
82 'clobber': False, 97 'clobber': False,
83 'completed': False, 98 'completed': False,
84 'requested_steps': [], 99 'requested_steps': [],
85 'revision': None, 100 'revision': None,
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 return self.pending.verifications[self.try_runner.name] 163 return self.pending.verifications[self.try_runner.name]
149 164
150 def _assert_pending_is_empty(self): 165 def _assert_pending_is_empty(self):
151 actual = self._get_verif().as_dict() 166 actual = self._get_verif().as_dict()
152 expected = gen_jobs( 167 expected = gen_jobs(
153 builders_and_tests={ 168 builders_and_tests={
154 'linux': ['test1', 'test2'], 169 'linux': ['test1', 'test2'],
155 'mac': ['test1', 'test2'], 170 'mac': ['test1', 'test2'],
156 }, 171 },
157 pendings=[ 172 pendings=[
158 gen_job(builder='linux', requested_steps=['test1', 'test2']), 173 gen_job_pending(builder='linux', requested_steps=['test1', 'test2']),
159 gen_job(builder='mac', requested_steps=['test1', 'test2']), 174 gen_job_pending(builder='mac', requested_steps=['test1', 'test2']),
160 ]) 175 ])
161 self.assertEquals(expected, actual) 176 self.assertEquals(expected, actual)
162 177
163 def _add_build(self, builder, buildnumber, revision, steps): 178 def _add_build(self, builder, buildnumber, revision, steps):
164 """Adds a build with a randomly generated key. 179 """Adds a build with a randomly generated key.
165 180
166 Adds the build to both the try server and to Rietveld. 181 Adds the build to both the try server and to Rietveld.
167 """ 182 """
168 key = ''.join(random.choice(string.ascii_letters) for _ in xrange(8)) 183 key = ''.join(random.choice(string.ascii_letters) for _ in xrange(8))
169 build = self.try_runner.status.add_build( 184 build = self.try_runner.status.add_build(
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 ]) 240 ])
226 key = self._add_build('mac', 32, 42, []) 241 key = self._add_build('mac', 32, 42, [])
227 242
228 self.try_runner.update_status([self.pending]) 243 self.try_runner.update_status([self.pending])
229 expected = gen_jobs( 244 expected = gen_jobs(
230 builders_and_tests={ 245 builders_and_tests={
231 'linux': ['test1', 'test2'], 246 'linux': ['test1', 'test2'],
232 'mac': ['test1', 'test2'], 247 'mac': ['test1', 'test2'],
233 }, 248 },
234 pendings=[ 249 pendings=[
235 gen_job(builder='linux', requested_steps=['test1', 'test2']), 250 gen_job_pending(builder='linux', requested_steps=['test1', 'test2']),
236 ], 251 ],
237 try_jobs={ 252 try_jobs={
238 key: gen_job( 253 key: gen_job(
239 builder='mac', 254 builder='mac',
240 build=32, 255 build=32,
241 requested_steps=['test1', 'test2'], 256 requested_steps=['test1', 'test2'],
242 revision=42), 257 revision=42),
243 }) 258 })
244 self.assertEquals(expected, self._get_verif().as_dict()) 259 self.assertEquals(expected, self._get_verif().as_dict())
245 self.context.status.check_names(['try job rietveld'] * 1) 260 self.context.status.check_names(['try job rietveld'] * 1)
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
301 'linux', 32, 42, 316 'linux', 32, 42,
302 [BuildbotBuildStep('test1', True), BuildbotBuildStep('test2', True)]) 317 [BuildbotBuildStep('test1', True), BuildbotBuildStep('test2', True)])
303 318
304 self.try_runner.update_status([self.pending]) 319 self.try_runner.update_status([self.pending])
305 expected = gen_jobs( 320 expected = gen_jobs(
306 builders_and_tests={ 321 builders_and_tests={
307 'linux': ['test1', 'test2'], 322 'linux': ['test1', 'test2'],
308 'mac': ['test1', 'test2'], 323 'mac': ['test1', 'test2'],
309 }, 324 },
310 pendings=[ 325 pendings=[
311 gen_job(builder='mac', requested_steps=['test2'], tries=2), 326 gen_job_pending(builder='mac', requested_steps=['test2'], tries=2),
312 ], 327 ],
313 try_jobs={ 328 try_jobs={
314 key1: gen_job( 329 key1: gen_job(
315 builder='mac', 330 builder='mac',
316 build=32, 331 build=32,
317 requested_steps=['test1', 'test2'], 332 requested_steps=['test1', 'test2'],
318 steps_failed=['test2'], 333 steps_failed=['test2'],
319 steps_passed=['test1'], 334 steps_passed=['test1'],
320 revision=42), 335 revision=42),
321 key2: gen_job( 336 key2: gen_job(
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
386 'linux', 32, 42, 401 'linux', 32, 42,
387 [BuildbotBuildStep('test1', True), BuildbotBuildStep('test2', True)]) 402 [BuildbotBuildStep('test1', True), BuildbotBuildStep('test2', True)])
388 403
389 self.try_runner.update_status([self.pending]) 404 self.try_runner.update_status([self.pending])
390 expected = gen_jobs( 405 expected = gen_jobs(
391 builders_and_tests={ 406 builders_and_tests={
392 'linux': ['test1', 'test2'], 407 'linux': ['test1', 'test2'],
393 'mac': ['test1', 'test2'], 408 'mac': ['test1', 'test2'],
394 }, 409 },
395 pendings=[ 410 pendings=[
396 gen_job(builder='mac', requested_steps=['test2'], tries=2), 411 gen_job_pending(builder='mac', requested_steps=['test2'], tries=2),
397 ], 412 ],
398 try_jobs={ 413 try_jobs={
399 key1: gen_job( 414 key1: gen_job(
400 builder='mac', 415 builder='mac',
401 build=32, 416 build=32,
402 requested_steps=['test1', 'test2'], 417 requested_steps=['test1', 'test2'],
403 steps_failed=['test2'], 418 steps_failed=['test2'],
404 steps_passed=['test1'], 419 steps_passed=['test1'],
405 revision=42), 420 revision=42),
406 key2: gen_job( 421 key2: gen_job(
(...skipping 15 matching lines...) Expand all
422 key3 = self._add_build('mac', 33, 42, [BuildbotBuildStep('test2', False)]) 437 key3 = self._add_build('mac', 33, 42, [BuildbotBuildStep('test2', False)])
423 438
424 self.try_runner.update_status([self.pending]) 439 self.try_runner.update_status([self.pending])
425 self.context.status.check_names(['try job rietveld'] * 2) 440 self.context.status.check_names(['try job rietveld'] * 2)
426 expected = gen_jobs( 441 expected = gen_jobs(
427 builders_and_tests={ 442 builders_and_tests={
428 'linux': ['test1', 'test2'], 443 'linux': ['test1', 'test2'],
429 'mac': ['test1', 'test2'], 444 'mac': ['test1', 'test2'],
430 }, 445 },
431 pendings=[ 446 pendings=[
432 gen_job(builder='mac', requested_steps=['test2'], tries=3), 447 gen_job_pending(builder='mac', requested_steps=['test2'], tries=3),
433 ], 448 ],
434 try_jobs={ 449 try_jobs={
435 key1: gen_job( 450 key1: gen_job(
436 build=32, 451 build=32,
437 builder='mac', 452 builder='mac',
438 requested_steps=['test1', 'test2'], 453 requested_steps=['test1', 'test2'],
439 steps_failed=['test2'], 454 steps_failed=['test2'],
440 steps_passed=['test1'], 455 steps_passed=['test1'],
441 revision=42), 456 revision=42),
442 key2: gen_job( 457 key2: gen_job(
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
483 _posted({"linux": ["test1", "test2"]}), 498 _posted({"linux": ["test1", "test2"]}),
484 ]) 499 ])
485 500
486 self.try_runner.update_status([self.pending]) 501 self.try_runner.update_status([self.pending])
487 expected = gen_jobs( 502 expected = gen_jobs(
488 builders_and_tests={ 503 builders_and_tests={
489 'linux': ['test1', 'test2'], 504 'linux': ['test1', 'test2'],
490 'mac': ['test1', 'test2'], 505 'mac': ['test1', 'test2'],
491 }, 506 },
492 pendings=[ 507 pendings=[
493 gen_job(builder='linux', requested_steps=['test1', 'test2']), 508 gen_job_pending(builder='linux', requested_steps=['test1', 'test2']),
494 ], 509 ],
495 try_jobs={ 510 try_jobs={
496 key1: gen_job( 511 key1: gen_job(
497 build=32, 512 build=32,
498 builder='mac', 513 builder='mac',
499 # Note that requested_steps is empty since testfilter is not parsed. 514 # Note that requested_steps is empty since testfilter is not parsed.
500 steps_passed=['test1', 'test2'], 515 steps_passed=['test1', 'test2'],
501 revision=42, 516 revision=42,
502 # tries == 0 since we didn't start it. 517 # tries == 0 since we didn't start it.
503 tries=0), 518 tries=0),
(...skipping 11 matching lines...) Expand all
515 530
516 self.try_runner.verify(self.pending) 531 self.try_runner.verify(self.pending)
517 self.context.status.check_names(['try job rietveld'] * 2) 532 self.context.status.check_names(['try job rietveld'] * 2)
518 self.context.rietveld.check_calls( 533 self.context.rietveld.check_calls(
519 [ 534 [
520 _posted({"linux": ["test1", "test2"]}), 535 _posted({"linux": ["test1", "test2"]}),
521 _posted({"mac": ["test1", "test2"]}), 536 _posted({"mac": ["test1", "test2"]}),
522 ]) 537 ])
523 538
524 self.try_runner.update_status([self.pending]) 539 self.try_runner.update_status([self.pending])
525 # self.timestamp is a mock for time.time()
526 started = self.timestamp[-1]
527 expected = gen_jobs( 540 expected = gen_jobs(
528 builders_and_tests={ 541 builders_and_tests={
529 'linux': ['test1', 'test2'], 542 'linux': ['test1', 'test2'],
530 'mac': ['test1', 'test2'], 543 'mac': ['test1', 'test2'],
531 }, 544 },
532 irrelevant=[key1], 545 irrelevant=[key1],
533 pendings=[ 546 pendings=[
534 gen_job( 547 gen_job_pending(builder='linux', requested_steps=['test1', 'test2']),
535 builder='linux', 548 gen_job_pending(builder='mac', requested_steps=['test1', 'test2']),
536 requested_steps=['test1', 'test2'],
537 started=started),
538 gen_job(
539 builder='mac',
540 requested_steps=['test1', 'test2'],
541 started=started),
542 ]) 549 ])
543 self.assertEquals(expected, self._get_verif().as_dict()) 550 self.assertEquals(expected, self._get_verif().as_dict())
544 self.assertEquals(base.PROCESSING, self.pending.get_state()) 551 self.assertEquals(base.PROCESSING, self.pending.get_state())
545 self.assertEquals('', self.pending.error_message()) 552 self.assertEquals('', self.pending.error_message())
546 553
547 def testVerificationPreviousExpiredRevisionTooOld(self): 554 def testVerificationPreviousExpiredRevisionTooOld(self):
548 self.context.checkout.revisions = lambda _r1, _r2: 201 555 self.context.checkout.revisions = lambda _r1, _r2: 201
549 self._expired() 556 self._expired()
550 557
551 def testVerificationPreviousExpiredDateTooOld(self): 558 def testVerificationPreviousExpiredDateTooOld(self):
(...skipping 14 matching lines...) Expand all
566 _posted({"mac": ["test1"]}), 573 _posted({"mac": ["test1"]}),
567 ]) 574 ])
568 575
569 self.try_runner.update_status([self.pending]) 576 self.try_runner.update_status([self.pending])
570 expected = gen_jobs( 577 expected = gen_jobs(
571 builders_and_tests={ 578 builders_and_tests={
572 'linux': ['test1', 'test2'], 579 'linux': ['test1', 'test2'],
573 'mac': ['test1', 'test2'], 580 'mac': ['test1', 'test2'],
574 }, 581 },
575 pendings=[ 582 pendings=[
576 gen_job(builder='linux', requested_steps=['test1', 'test2']), 583 gen_job_pending(builder='linux', requested_steps=['test1', 'test2']),
577 gen_job(builder='mac', requested_steps=['test1']), 584 gen_job_pending(builder='mac', requested_steps=['test1']),
578 ], 585 ],
579 try_jobs={ 586 try_jobs={
580 key1: gen_job( 587 key1: gen_job(
581 build=32, 588 build=32,
582 builder='mac', 589 builder='mac',
583 # Note that requested_steps is empty since testfilter is not parsed. 590 # Note that requested_steps is empty since testfilter is not parsed.
584 steps_failed=steps_failed, 591 steps_failed=steps_failed,
585 steps_passed=['test2'], 592 steps_passed=['test2'],
586 revision=42, 593 revision=42,
587 # tries == 0 since we didn't start it. 594 # tries == 0 since we didn't start it.
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
637 steps_passed=['test1', 'test2'], 644 steps_passed=['test1', 'test2'],
638 revision=42, 645 revision=42,
639 # tries == 0 since we didn't start it. 646 # tries == 0 since we didn't start it.
640 tries=0), 647 tries=0),
641 }) 648 })
642 self.assertEquals(expected, self._get_verif().as_dict()) 649 self.assertEquals(expected, self._get_verif().as_dict())
643 # People will love that! 650 # People will love that!
644 self.assertEquals(base.SUCCEEDED, self.pending.get_state()) 651 self.assertEquals(base.SUCCEEDED, self.pending.get_state())
645 self.assertEquals('', self.pending.error_message()) 652 self.assertEquals('', self.pending.error_message())
646 653
654 def testRietveldTryJobs_1(self):
655 jobs = try_job_on_rietveld.RietveldTryJobs()
656 jobs.builders_and_tests['builder1'] = ['test10', 'test11']
657 jobs.try_jobs['key1'] = try_job_on_rietveld.RietveldTryJob(
658 builder='builder1',
659 build=12,
660 revision=13,
661 requested_steps=['test10'],
662 started=time.time(),
663 passed=['test10'],
664 failed=[],
665 clobber=False,
666 completed=True,
667 tries=1)
668 self.assertEquals({'builder1': ['test11']}, jobs.tests_need_to_be_run())
669 self.assertEquals({'builder1': ['test11']}, jobs.tests_waiting_for_result())
670
671 def testRietveldTryJobs_2(self):
672 jobs = try_job_on_rietveld.RietveldTryJobs()
673 jobs.builders_and_tests['builder1'] = ['test10', 'test11']
674 jobs.try_jobs['key1'] = try_job_on_rietveld.RietveldTryJob(
675 'builder1',
676 12,
677 13,
678 ['test10'],
679 time.time(),
680 ['test10'],
681 [],
682 False,
683 True,
684 1)
685 self.assertEquals({'builder1': ['test11']}, jobs.tests_need_to_be_run())
686 self.assertEquals({'builder1': ['test11']}, jobs.tests_waiting_for_result())
687
688 def testRietveldTryJobs_3(self):
689 jobs = try_job_on_rietveld.RietveldTryJobs()
690 jobs.builders_and_tests['builder1'] = ['test10', 'test11']
691 jobs.try_jobs['key1'] = try_job_on_rietveld.RietveldTryJob(
692 builder='builder1',
693 build=12,
694 revision=13,
695 requested_steps=['test10'],
696 started=time.time(),
697 passed=['test10'],
698 failed=[],
699 clobber=False,
700 completed=True,
701 tries=1)
702 jobs.pendings.append(
703 try_job_on_rietveld.RietveldTryJobPending(
704 builder='builder1',
705 revision=13,
706 requested_steps=['test11'],
707 clobber=False,
708 tries=1))
709 self.assertEquals({}, jobs.tests_need_to_be_run())
710 self.assertEquals({'builder1': ['test11']}, jobs.tests_waiting_for_result())
711
712 def testRietveldTryJobs_4(self):
713 # Construct an instance that has both tests to trigger and tests that are
714 # pending results.
715 jobs = try_job_on_rietveld.RietveldTryJobs()
716 jobs.builders_and_tests = {
717 'builder1': ['test10', 'test11'],
718 'builder2': ['test20', 'test21'],
719 }
720 jobs.try_jobs['key1'] = try_job_on_rietveld.RietveldTryJob(
721 builder='builder1',
722 build=12,
723 revision=13,
724 requested_steps=['test10'],
725 started=time.time(),
726 passed=['test10'],
727 failed=[],
728 clobber=False,
729 completed=True,
730 tries=1)
731 jobs.try_jobs['key2'] = try_job_on_rietveld.RietveldTryJob(
732 builder='builder2',
733 build=13,
734 revision=14,
735 requested_steps=[],
736 started=time.time(),
737 passed=['test21'],
738 failed=[],
739 clobber=False,
740 completed=False,
741 tries=1)
742 jobs.pendings.append(
743 try_job_on_rietveld.RietveldTryJobPending(
744 builder='builder2',
745 revision=14,
746 requested_steps=['test20'],
747 clobber=False,
748 tries=1))
749 # test11 is still not queued to be run but build with test20 in it has still
750 # not started yet.
751 self.assertEquals({'builder1': ['test11']}, jobs.tests_need_to_be_run())
752 self.assertEquals(
753 {'builder1': ['test11'], 'builder2': ['test20']},
754 jobs.tests_waiting_for_result())
755
647 756
648 if __name__ == '__main__': 757 if __name__ == '__main__':
649 logging.basicConfig( 758 logging.basicConfig(
650 level=[logging.WARNING, logging.INFO, logging.DEBUG][ 759 level=[logging.WARNING, logging.INFO, logging.DEBUG][
651 min(sys.argv.count('-v'), 2)], 760 min(sys.argv.count('-v'), 2)],
652 format='%(levelname)5s %(module)15s(%(lineno)3d): %(message)s') 761 format='%(levelname)5s %(module)15s(%(lineno)3d): %(message)s')
653 unittest.main() 762 unittest.main()
OLDNEW
« no previous file with comments | « no previous file | verification/try_job_on_rietveld.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698