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

Side by Side Diff: commit-queue/tests/try_job_steps_tests.py

Issue 135363007: Delete public commit queue to avoid confusion after move to internal repo (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/
Patch Set: Created 6 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 | Annotate | Revision Log
« no previous file with comments | « commit-queue/tests/try_job_on_rietveld_test.py ('k') | commit-queue/tests/try_server_test.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 #!/usr/bin/env python
2 # Copyright (c) 2013 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
5
6 """Unit tests for verification/try_job_steps.py."""
7
8 import os
9 import sys
10 import unittest
11
12 ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
13 sys.path.insert(0, os.path.join(ROOT_DIR, '..'))
14
15 from verification import try_job_steps
16 from verification import try_job_on_rietveld
17
18
19 def CreateRietveldTryJob(builder, requested_steps, steps_passed, steps_failed):
20 return try_job_on_rietveld.RietveldTryJob(
21 init_time=1.,
22 builder=builder,
23 build=1,
24 revision=1,
25 requested_steps=requested_steps,
26 started=1,
27 steps_passed=steps_passed,
28 steps_failed=steps_failed,
29 clobber=False,
30 completed=False,
31 tries=1,
32 parent_key=None)
33
34
35 class NeedToRunTest(unittest.TestCase):
36 def test_no_tries(self):
37 self.assertEqual(
38 set(['test1', 'test2']),
39 try_job_steps.need_to_trigger('bot', set(['test1', 'test2']), {}))
40
41 def test_non_matching_try(self):
42 tries = [
43 CreateRietveldTryJob(
44 builder='different',
45 requested_steps=[],
46 steps_passed=[],
47 steps_failed=[]),
48 ]
49
50 self.assertEqual(
51 set(['test1', 'test2']),
52 try_job_steps.need_to_trigger('bot', set(['test1', 'test2']), tries))
53
54 def test_partial_match_need_trigger(self):
55 tries = [
56 CreateRietveldTryJob(
57 builder='bot',
58 requested_steps=['test1'],
59 steps_passed=['test1'],
60 steps_failed=[]),
61 ]
62
63 self.assertEqual(
64 set(['test2']),
65 try_job_steps.need_to_trigger('bot', set(['test1', 'test2']), tries))
66
67 def test_partial_match_no_trigger(self):
68 tries = [
69 CreateRietveldTryJob(
70 builder='bot',
71 requested_steps=['test1', 'test2'],
72 steps_passed=['test1'],
73 steps_failed=[]),
74 ]
75
76 self.assertEqual(
77 set(),
78 try_job_steps.need_to_trigger('bot', set(['test1', 'test2']), tries))
79
80 def test_full_match(self):
81 tries = [
82 CreateRietveldTryJob(
83 builder='bot',
84 requested_steps=['test1', 'test2'],
85 steps_passed=['test1', 'test2'],
86 steps_failed=[]),
87 ]
88
89 self.assertEqual(
90 set(),
91 try_job_steps.need_to_trigger('bot', set(['test1', 'test2']), tries))
92
93
94 class WaitingForTest(unittest.TestCase):
95 def test_no_tries(self):
96 self.assertEqual(
97 set(['test1', 'test2']),
98 try_job_steps.waiting_for('bot', ['test1', 'test2'], {}))
99
100 def test_failed_try(self):
101 tries = [
102 CreateRietveldTryJob(
103 builder='bot',
104 requested_steps=['test1', 'test2'],
105 steps_passed=[],
106 steps_failed=['test1', 'test2']),
107 ]
108
109 self.assertEqual(
110 set(['test1', 'test2']),
111 try_job_steps.waiting_for('bot', ['test1', 'test2'], tries))
112
113 def test_partial_successful_try(self):
114 tries = [
115 CreateRietveldTryJob(
116 builder='bot',
117 requested_steps=['test1', 'test2'],
118 steps_passed=['test1'],
119 steps_failed=[]),
120 ]
121
122 self.assertEqual(
123 set(['test2']),
124 try_job_steps.waiting_for('bot', ['test1', 'test2'], tries))
125
126 def test_successful_try(self):
127 tries = [
128 CreateRietveldTryJob(
129 builder='bot',
130 requested_steps=['test1', 'test2'],
131 steps_passed=['test1', 'test2'],
132 steps_failed=[]),
133 ]
134
135 self.assertEqual(
136 set(),
137 try_job_steps.waiting_for('bot', ['test1', 'test2'], tries))
138
139
140 class TryJobTriggeredStepsTest(unittest.TestCase):
141 def test_waiting_for(self):
142 triggered_verifier = try_job_steps.TryJobTriggeredSteps(
143 builder_name='triggered_bot',
144 trigger_name='parent_bot',
145 steps={
146 'test1': 'trigger1',
147 'test2': 'trigger1',
148 'test3': 'trigger2',
149 })
150
151 self.assertEqual(
152 ('triggered_bot', set(['test1', 'test2', 'test3'])),
153 triggered_verifier.waiting_for({}))
154
155 def test_need_to_trigger(self):
156 triggered_verifier = try_job_steps.TryJobTriggeredSteps(
157 builder_name='triggered_bot',
158 trigger_name='parent_bot',
159 steps={
160 'test1': 'trigger1',
161 'test2': 'trigger1',
162 'test3': 'trigger2',
163 })
164
165 self.assertEqual(
166 ('parent_bot', set(['trigger1', 'trigger2'])),
167 triggered_verifier.need_to_trigger({}, 1.))
168
169 # With a Try Job running that will run test3, we shouldn't care
170 # about trigger2.
171 try_jobs = {
172 'key1': try_job_on_rietveld.RietveldTryJob(
173 init_time=1.,
174 builder='parent_bot',
175 build=12,
176 revision=13,
177 requested_steps=['triggered1', 'triggered2'],
178 started=1,
179 steps_passed=['triggered1', 'triggered2'],
180 steps_failed=[],
181 clobber=False,
182 completed=True,
183 tries=1,
184 parent_key=None),
185 'key2': try_job_on_rietveld.RietveldTryJob(
186 init_time=1.,
187 builder='triggered_bot',
188 build=12,
189 revision=13,
190 requested_steps=['test1', 'test2', 'test3'],
191 started=1,
192 steps_passed=[],
193 steps_failed=['test1', 'test2'],
194 clobber=False,
195 completed=False,
196 tries=1,
197 parent_key='key1')}
198 self.assertEqual(
199 ('parent_bot', set(['trigger1'])),
200 triggered_verifier.need_to_trigger(try_jobs, 1.))
201
202 # A parent bot is running with steps that won't trigger the needed
203 # tests, so nothing changes.
204 try_jobs['key2'] = CreateRietveldTryJob(
205 builder='parent_bot',
206 requested_steps=['trigger2'],
207 steps_passed=[],
208 steps_failed=[])
209 self.assertEqual(
210 ('parent_bot', set(['trigger1'])),
211 triggered_verifier.need_to_trigger(try_jobs, 1.))
212
213 # A parent bot is running steps that will triggered the required tests,
214 # so nothing needs to be triggered.
215 try_jobs['key3'] = CreateRietveldTryJob(
216 builder='parent_bot',
217 requested_steps=['trigger1'],
218 steps_passed=[],
219 steps_failed=[])
220 self.assertEqual(
221 ('parent_bot', set([])),
222 triggered_verifier.need_to_trigger(try_jobs, 1.))
223
224 def test_triggered_bot_found(self):
225 """Test that we don't wait on an non-stewed parent if the child is found."""
226 triggered_verifier = try_job_steps.TryJobTriggeredSteps(
227 builder_name='tester1',
228 trigger_name='builder1',
229 steps={'test3': 'trigger'})
230 try_jobs = {
231 'key1': try_job_on_rietveld.RietveldTryJob(
232 init_time=1.,
233 builder='builder1',
234 build=12,
235 revision=13,
236 requested_steps=['trigger'],
237 started=1,
238 steps_passed=['trigger'],
239 steps_failed=[],
240 clobber=False,
241 completed=True,
242 tries=1,
243 parent_key=None),
244 'key2': try_job_on_rietveld.RietveldTryJob(
245 init_time=1.,
246 builder='tester1',
247 build=12,
248 revision=13,
249 requested_steps=['test3'],
250 started=1,
251 steps_passed=[],
252 steps_failed=['test3'],
253 clobber=False,
254 completed=True,
255 tries=1,
256 parent_key='key1')}
257 self.assertEqual(
258 ('builder1', set(['trigger'])),
259 triggered_verifier.need_to_trigger(try_jobs, 1.))
260 self.assertEqual(
261 ('tester1', set(['test3'])),
262 triggered_verifier.waiting_for(try_jobs))
263
264 def test_triggered_wait_for_builder(self):
265 """Test that we wait for trigger if builder has recently completed."""
266 triggered_verifier = try_job_steps.TryJobTriggeredSteps(
267 builder_name='tester1',
268 trigger_name='builder1',
269 steps={'test3': 'trigger'})
270 try_jobs = {
271 'key1': try_job_on_rietveld.RietveldTryJob(
272 init_time=1.,
273 builder='builder1',
274 build=12,
275 revision=13,
276 requested_steps=['test10', 'trigger'],
277 started=1,
278 steps_passed=['test10', 'trigger'],
279 steps_failed=[],
280 clobber=False,
281 completed=True,
282 tries=1,
283 parent_key=None),
284 }
285 self.assertEqual(
286 ('builder1', set()),
287 triggered_verifier.need_to_trigger(try_jobs, 1.))
288 self.assertEqual(
289 ('tester1', set(['test3'])),
290 triggered_verifier.waiting_for(try_jobs))
291
292 def test_not_all_triggered(self):
293 """Test that waiting for one triggered job doesn't prevent other triggers
294 from getting hit."""
295 triggered_verifier = try_job_steps.TryJobTriggeredSteps(
296 builder_name='tester1',
297 trigger_name='builder1',
298 steps={
299 'test1': 'trigger1',
300 'test2': 'trigger2'})
301
302 try_jobs = {
303 'key1': try_job_on_rietveld.RietveldTryJob(
304 init_time=1.,
305 builder='builder1',
306 build=12,
307 revision=13,
308 requested_steps=['trigger1'],
309 started=1,
310 steps_passed=['trigger1'],
311 steps_failed=[],
312 clobber=False,
313 completed=True,
314 tries=1,
315 parent_key=None),
316 }
317
318 self.assertEqual(
319 ('builder1', set(['trigger2'])),
320 triggered_verifier.need_to_trigger(try_jobs, 1.))
321 self.assertEqual(
322 ('tester1', set(['test1', 'test2'])),
323 triggered_verifier.waiting_for(try_jobs))
324
325 def test_triggered_builder_second_pending(self):
326 """Test failed trigger jobs do not send trigger if another is pending."""
327 now = 1.
328 triggered_verifier = try_job_steps.TryJobTriggeredSteps(
329 builder_name='tester1',
330 trigger_name='builder1',
331 steps={'test3': 'trigger'})
332
333 try_jobs = {
334 'key1': try_job_on_rietveld.RietveldTryJob(
335 init_time=now,
336 builder='builder1',
337 build=12,
338 revision=13,
339 requested_steps=['test10', 'trigger'],
340 started=int(now),
341 steps_passed=['test10', 'trigger'],
342 steps_failed=[],
343 clobber=False,
344 completed=True,
345 tries=1,
346 parent_key=None),
347 'key2': try_job_on_rietveld.RietveldTryJob(
348 init_time=now,
349 builder='builder1',
350 build=13,
351 revision=13,
352 requested_steps=['test10', 'trigger'],
353 started=int(now),
354 steps_passed=['test10', 'trigger'],
355 steps_failed=[],
356 clobber=False,
357 completed=True,
358 tries=1,
359 parent_key=None),
360 'key3': try_job_on_rietveld.RietveldTryJob(
361 init_time=now,
362 builder='tester1',
363 build=12,
364 revision=13,
365 requested_steps=['test3'],
366 started=int(now),
367 steps_passed=[],
368 steps_failed=['test3'],
369 clobber=False,
370 completed=True,
371 tries=1,
372 parent_key='key1'),
373 }
374
375 self.assertEqual(
376 ('builder1', set()),
377 triggered_verifier.need_to_trigger(try_jobs, 1.))
378 self.assertEqual(
379 ('tester1', set(['test3'])),
380 triggered_verifier.waiting_for(try_jobs))
381
382 def testGetTriggeredSteps(self):
383 triggered_verifier = try_job_steps.TryJobTriggeredSteps(
384 builder_name='tester1',
385 trigger_name='builder1',
386 steps={'test1': 'trigger', 'test2': 'trigger2'})
387
388 self.assertEqual(
389 ('tester1', []),
390 triggered_verifier.get_triggered_steps('builder_invalid', ['build']))
391
392 self.assertEqual(
393 ('tester1', []),
394 triggered_verifier.get_triggered_steps('builder1', ['wrong_step']))
395
396 self.assertEqual(
397 ('tester1', ['test1']),
398 triggered_verifier.get_triggered_steps('builder1', ['trigger']))
399
400 self.assertEqual(
401 ('tester1', ['test1', 'test2']),
402 triggered_verifier.get_triggered_steps('builder1', ['trigger',
403 'trigger2']))
404
405
406 class TryJobTriggeredOrNormalStepsTest(unittest.TestCase):
407 def test_need_to_trigger(self):
408 now = 1.
409 triggered_or_normal_verifier = try_job_steps.TryJobTriggeredOrNormalSteps(
410 builder_name='test_triggered',
411 trigger_name='builder1',
412 steps={
413 'test2': 'test2_trigger',
414 'test3': 'test3_trigger',
415 'test4': 'test4_trigger',
416 },
417 trigger_bot_steps=[
418 'test1',
419 ],
420 use_triggered_bot=False,
421 )
422 verifier_use_triggered = try_job_steps.TryJobTriggeredOrNormalSteps(
423 builder_name='test_triggered',
424 trigger_name='builder1',
425 steps={
426 'test2': 'test2_trigger',
427 'test3': 'test3_trigger',
428 'test4': 'test4_trigger',
429 },
430 trigger_bot_steps=[
431 'test1',
432 ],
433 use_triggered_bot=True,
434 )
435
436 self.assertEqual(
437 ('builder1', set(['test1', 'test2', 'test3', 'test4'])),
438 triggered_or_normal_verifier.need_to_trigger({}, 1.))
439 self.assertEqual(
440 ('builder1', set(['test1', 'test2_trigger', 'test3_trigger',
441 'test4_trigger'])),
442 verifier_use_triggered.need_to_trigger({}, 1.))
443
444 try_jobs = {
445 'key1': try_job_on_rietveld.RietveldTryJob(
446 init_time=now,
447 builder='builder1',
448 build=1,
449 revision=1,
450 requested_steps=['test1', 'test2', 'test3_trigger',
451 'test4_trigger'],
452 started=int(now),
453 steps_passed=[],
454 steps_failed=[],
455 clobber=False,
456 completed=False,
457 tries=1,
458 parent_key=None)}
459 self.assertEqual(
460 ('builder1', set()),
461 triggered_or_normal_verifier.need_to_trigger(try_jobs, 1.))
462 self.assertEqual(
463 ('builder1', set()),
464 verifier_use_triggered.need_to_trigger(try_jobs, 1.))
465
466 try_jobs['key1'] = try_job_on_rietveld.RietveldTryJob(
467 init_time=now,
468 builder='builder1',
469 build=1,
470 revision=1,
471 requested_steps=['test1', 'test2', 'test3_trigger', 'test4_trigger'],
472 started=int(now),
473 steps_passed=['test1'],
474 steps_failed=['test2'],
475 clobber=False,
476 completed=True,
477 tries=1,
478 parent_key=None)
479 self.assertEqual(
480 ('builder1', set(['test2'])),
481 triggered_or_normal_verifier.need_to_trigger(try_jobs, 1.))
482 self.assertEqual(
483 ('builder1', set(['test2_trigger'])),
484 verifier_use_triggered.need_to_trigger(try_jobs, 1.))
485
486 try_jobs['key2'] = try_job_on_rietveld.RietveldTryJob(
487 init_time=now,
488 builder='test_triggered',
489 build=1,
490 revision=1,
491 requested_steps=['test3', 'test4'],
492 started=int(now),
493 steps_passed=['test3'],
494 steps_failed=['test4'],
495 clobber=False,
496 completed=True,
497 tries=1,
498 parent_key='key1')
499 self.assertEqual(
500 ('builder1', set(['test2', 'test4'])),
501 triggered_or_normal_verifier.need_to_trigger(try_jobs, 1.))
502 self.assertEqual(
503 ('builder1', set(['test2', 'test4'])),
504 verifier_use_triggered.need_to_trigger(try_jobs, 1.))
505
506 # Add a test bot that wasn't triggered by builder 1 to ensure we don't
507 # use its steps.
508 try_jobs['key4'] = try_job_on_rietveld.RietveldTryJob(
509 init_time=now,
510 builder='test_triggered',
511 build=2,
512 revision=1,
513 requested_steps=['test4'],
514 started=int(now),
515 steps_passed=['test4'],
516 steps_failed=[],
517 clobber=False,
518 completed=True,
519 tries=1,
520 parent_key='key3')
521 self.assertEqual(
522 ('builder1', set(['test2', 'test4'])),
523 triggered_or_normal_verifier.need_to_trigger(try_jobs, 1.))
524 self.assertEqual(
525 ('builder1', set(['test2', 'test4'])),
526 verifier_use_triggered.need_to_trigger(try_jobs, 1.))
527
528 # Now retry the failed jobs, ensuring that the verifiers accepts the
529 # non-trigger version of test2.
530 try_jobs['key5'] = try_job_on_rietveld.RietveldTryJob(
531 init_time=now,
532 builder='builder1',
533 build=2,
534 revision=1,
535 requested_steps=['test2', 'test4_trigger'],
536 started=int(now),
537 steps_passed=['test2'],
538 steps_failed=[],
539 clobber=False,
540 completed=True,
541 tries=2,
542 parent_key=None)
543 self.assertEqual(
544 ('builder1', set()),
545 triggered_or_normal_verifier.need_to_trigger(try_jobs, 1.))
546 self.assertEqual(
547 ('builder1', set()),
548 verifier_use_triggered.need_to_trigger(try_jobs, 1.))
549
550 try_jobs['key6'] = try_job_on_rietveld.RietveldTryJob(
551 init_time=now,
552 builder='test_triggered',
553 build=3,
554 revision=1,
555 requested_steps=['test4'],
556 started=int(now),
557 steps_passed=['test4'],
558 steps_failed=[],
559 clobber=False,
560 completed=True,
561 tries=2,
562 parent_key='key5')
563 self.assertEqual(
564 ('builder1', set()),
565 triggered_or_normal_verifier.need_to_trigger(try_jobs, 1.))
566 self.assertEqual(
567 ('builder1', set()),
568 verifier_use_triggered.need_to_trigger(try_jobs, 1.))
569
570
571 def test_waiting_for(self):
572 now = 1.
573 triggered_or_normal_verifier = try_job_steps.TryJobTriggeredOrNormalSteps(
574 builder_name='test_triggered',
575 trigger_name='builder1',
576 steps={
577 'test2': 'test2_trigger',
578 'test3': 'test3_trigger',
579 'test4': 'test4_trigger',
580 },
581 trigger_bot_steps=[
582 'test1',
583 ],
584 use_triggered_bot=False,
585 )
586
587 self.assertEqual(
588 ('builder1', set(['test1', 'test2', 'test3', 'test4'])),
589 triggered_or_normal_verifier.waiting_for({}))
590
591 try_jobs = {
592 'key1': try_job_on_rietveld.RietveldTryJob(
593 init_time=now,
594 builder='builder1',
595 build=1,
596 revision=1,
597 requested_steps=['test1', 'test2', 'test3_trigger',
598 'test4_trigger'],
599 started=int(now),
600 steps_passed=['test1'],
601 steps_failed=['test2'],
602 clobber=False,
603 completed=True,
604 tries=1,
605 parent_key=None)}
606 self.assertEqual(
607 ('builder1', set(['test2', 'test3', 'test4'])),
608 triggered_or_normal_verifier.waiting_for(try_jobs))
609
610 try_jobs['key2'] = try_job_on_rietveld.RietveldTryJob(
611 init_time=now,
612 builder='test_triggered',
613 build=1,
614 revision=1,
615 requested_steps=['test3', 'test4'],
616 started=int(now),
617 steps_passed=['test3'],
618 steps_failed=['test4'],
619 clobber=False,
620 completed=True,
621 tries=1,
622 parent_key='key1')
623 self.assertEqual(
624 ('builder1', set(['test2', 'test4'])),
625 triggered_or_normal_verifier.waiting_for(try_jobs))
626
627 # Add a trigger bot that wasn't triggered by builder 1 to ensure we don't
628 # use its steps.
629 try_jobs['key4'] = try_job_on_rietveld.RietveldTryJob(
630 init_time=now,
631 builder='test_triggered',
632 build=2,
633 revision=1,
634 requested_steps=['test4'],
635 started=int(now),
636 steps_passed=['test4'],
637 steps_failed=[],
638 clobber=False,
639 completed=True,
640 tries=1,
641 parent_key='key3')
642 self.assertEqual(
643 ('builder1', set(['test2', 'test4'])),
644 triggered_or_normal_verifier.waiting_for(try_jobs))
645
646 # Now retry the failed jobs, ensuring that the verifiers accepts the
647 # non-trigger version of test2.
648 try_jobs['key5'] = try_job_on_rietveld.RietveldTryJob(
649 init_time=now,
650 builder='builder1',
651 build=2,
652 revision=1,
653 requested_steps=['test2', 'test4_trigger'],
654 started=int(now),
655 steps_passed=['test2'],
656 steps_failed=[],
657 clobber=False,
658 completed=True,
659 tries=2,
660 parent_key=None)
661 self.assertEqual(
662 ('builder1', set(['test4'])),
663 triggered_or_normal_verifier.waiting_for(try_jobs))
664
665 try_jobs['key6'] = try_job_on_rietveld.RietveldTryJob(
666 init_time=now,
667 builder='test_triggered',
668 build=3,
669 revision=1,
670 requested_steps=['test4'],
671 started=int(now),
672 steps_passed=['test4'],
673 steps_failed=[],
674 clobber=False,
675 completed=True,
676 tries=2,
677 parent_key='key5')
678 self.assertEqual(
679 ('builder1', set()),
680 triggered_or_normal_verifier.waiting_for(try_jobs))
681
682
683 if __name__ == '__main__':
684 if '-v' in sys.argv:
685 unittest.TestCase.maxDiff = None
686 unittest.main()
OLDNEW
« no previous file with comments | « commit-queue/tests/try_job_on_rietveld_test.py ('k') | commit-queue/tests/try_server_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698