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

Side by Side Diff: appengine/swarming/server/task_scheduler_test.py

Issue 2267363004: Add CIPD pin reporting to swarming. (Closed) Base URL: https://chromium.googlesource.com/external/github.com/luci/luci-py@master
Patch Set: Rename to cipd_pins Created 4 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
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2014 The LUCI Authors. All rights reserved. 2 # Copyright 2014 The LUCI Authors. All rights reserved.
3 # Use of this source code is governed under the Apache License, Version 2.0 3 # Use of this source code is governed under the Apache License, Version 2.0
4 # that can be found in the LICENSE file. 4 # that can be found in the LICENSE file.
5 5
6 import datetime 6 import datetime
7 import inspect 7 import inspect
8 import logging 8 import logging
9 import os 9 import os
10 import random 10 import random
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after
262 bot_dimensions, 'localhost', 'abc', None) 262 bot_dimensions, 'localhost', 'abc', None)
263 self.assertEqual(request, actual_request) 263 self.assertEqual(request, actual_request)
264 self.assertEqual('localhost', run_result.bot_id) 264 self.assertEqual('localhost', run_result.bot_id)
265 self.assertEqual(None, task_to_run.TaskToRun.query().get().queue_number) 265 self.assertEqual(None, task_to_run.TaskToRun.query().get().queue_number)
266 # It's important to terminate the task with success. 266 # It's important to terminate the task with success.
267 self.assertEqual( 267 self.assertEqual(
268 task_result.State.COMPLETED, 268 task_result.State.COMPLETED,
269 task_scheduler.bot_update_task( 269 task_scheduler.bot_update_task(
270 run_result_key=run_result.key, 270 run_result_key=run_result.key,
271 bot_id='localhost', 271 bot_id='localhost',
272 cipd_pins=None,
272 output='Foo1', 273 output='Foo1',
273 output_chunk_start=0, 274 output_chunk_start=0,
274 exit_code=0, 275 exit_code=0,
275 duration=0.1, 276 duration=0.1,
276 hard_timeout=False, 277 hard_timeout=False,
277 io_timeout=False, 278 io_timeout=False,
278 cost_usd=0.1, 279 cost_usd=0.1,
279 outputs_ref=None, 280 outputs_ref=None,
280 performance_stats=None)) 281 performance_stats=None))
281 return unicode(run_result.task_id) 282 return unicode(run_result.task_id)
(...skipping 18 matching lines...) Expand all
300 self.assertEqual(None, task_to_run.TaskToRun.query().get().queue_number) 301 self.assertEqual(None, task_to_run.TaskToRun.query().get().queue_number)
301 actual_request_2, run_result_2 = task_scheduler.bot_reap_task( 302 actual_request_2, run_result_2 = task_scheduler.bot_reap_task(
302 bot_dimensions, 'localhost', 'abc', None) 303 bot_dimensions, 'localhost', 'abc', None)
303 self.assertEqual(None, actual_request_2) 304 self.assertEqual(None, actual_request_2)
304 result_summary_duped, run_results_duped = get_results(request.key) 305 result_summary_duped, run_results_duped = get_results(request.key)
305 expected = { 306 expected = {
306 'abandoned_ts': None, 307 'abandoned_ts': None,
307 'bot_dimensions': bot_dimensions, 308 'bot_dimensions': bot_dimensions,
308 'bot_id': u'localhost', 309 'bot_id': u'localhost',
309 'bot_version': u'abc', 310 'bot_version': u'abc',
311 'cipd_pins': None,
310 'children_task_ids': [], 312 'children_task_ids': [],
311 'completed_ts': now or self.now, 313 'completed_ts': now or self.now,
312 'costs_usd': [], 314 'costs_usd': [],
313 'cost_saved_usd': 0.1, 315 'cost_saved_usd': 0.1,
314 'created_ts': new_ts, 316 'created_ts': new_ts,
315 'deduped_from': deduped_from, 317 'deduped_from': deduped_from,
316 'duration': 0.1, 318 'duration': 0.1,
317 'exit_code': 0, 319 'exit_code': 0,
318 'failure': False, 320 'failure': False,
319 'id': task_id, 321 'id': task_id,
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
460 bot_dimensions, 'localhost', 'abc', None) 462 bot_dimensions, 'localhost', 'abc', None)
461 self.assertEqual(request, actual_request) 463 self.assertEqual(request, actual_request)
462 self.assertEqual('localhost', run_result.bot_id) 464 self.assertEqual('localhost', run_result.bot_id)
463 self.assertEqual(None, task_to_run.TaskToRun.query().get().queue_number) 465 self.assertEqual(None, task_to_run.TaskToRun.query().get().queue_number)
464 # It's important to terminate the task with success. 466 # It's important to terminate the task with success.
465 self.assertEqual( 467 self.assertEqual(
466 task_result.State.COMPLETED, 468 task_result.State.COMPLETED,
467 task_scheduler.bot_update_task( 469 task_scheduler.bot_update_task(
468 run_result_key=run_result.key, 470 run_result_key=run_result.key,
469 bot_id='localhost', 471 bot_id='localhost',
472 cipd_pins=None,
470 output='Foo1', 473 output='Foo1',
471 output_chunk_start=0, 474 output_chunk_start=0,
472 exit_code=0, 475 exit_code=0,
473 duration=0.1, 476 duration=0.1,
474 hard_timeout=False, 477 hard_timeout=False,
475 io_timeout=False, 478 io_timeout=False,
476 cost_usd=0.1, 479 cost_usd=0.1,
477 outputs_ref=None, 480 outputs_ref=None,
478 performance_stats=None)) 481 performance_stats=None))
479 482
(...skipping 28 matching lines...) Expand all
508 _result_summary = task_scheduler.schedule_request(request) 511 _result_summary = task_scheduler.schedule_request(request)
509 512
510 # The TaskRequest was enqueued, the TaskResultSummary was created but no 513 # The TaskRequest was enqueued, the TaskResultSummary was created but no
511 # TaskRunResult exist yet since the task was not scheduled on any bot. 514 # TaskRunResult exist yet since the task was not scheduled on any bot.
512 result_summary, run_results = get_results(request.key) 515 result_summary, run_results = get_results(request.key)
513 expected = { 516 expected = {
514 'abandoned_ts': None, 517 'abandoned_ts': None,
515 'bot_dimensions': None, 518 'bot_dimensions': None,
516 'bot_id': None, 519 'bot_id': None,
517 'bot_version': None, 520 'bot_version': None,
521 'cipd_pins': None,
518 'children_task_ids': [], 522 'children_task_ids': [],
519 'completed_ts': None, 523 'completed_ts': None,
520 'costs_usd': [], 524 'costs_usd': [],
521 'cost_saved_usd': None, 525 'cost_saved_usd': None,
522 'created_ts': created_ts, 526 'created_ts': created_ts,
523 'deduped_from': None, 527 'deduped_from': None,
524 'duration': None, 528 'duration': None,
525 'exit_code': None, 529 'exit_code': None,
526 'failure': False, 530 'failure': False,
527 'id': '1d69b9f088008810', 531 'id': '1d69b9f088008810',
(...skipping 25 matching lines...) Expand all
553 reaped_request, run_result = task_scheduler.bot_reap_task( 557 reaped_request, run_result = task_scheduler.bot_reap_task(
554 bot_dimensions, 'localhost', 'abc', None) 558 bot_dimensions, 'localhost', 'abc', None)
555 self.assertEqual(request, reaped_request) 559 self.assertEqual(request, reaped_request)
556 self.assertTrue(run_result) 560 self.assertTrue(run_result)
557 result_summary, run_results = get_results(request.key) 561 result_summary, run_results = get_results(request.key)
558 expected = { 562 expected = {
559 'abandoned_ts': None, 563 'abandoned_ts': None,
560 'bot_dimensions': bot_dimensions, 564 'bot_dimensions': bot_dimensions,
561 'bot_id': u'localhost', 565 'bot_id': u'localhost',
562 'bot_version': u'abc', 566 'bot_version': u'abc',
567 'cipd_pins': None,
563 'children_task_ids': [], 568 'children_task_ids': [],
564 'completed_ts': None, 569 'completed_ts': None,
565 'costs_usd': [0.], 570 'costs_usd': [0.],
566 'cost_saved_usd': None, 571 'cost_saved_usd': None,
567 'created_ts': created_ts, # Time the TaskRequest was created. 572 'created_ts': created_ts, # Time the TaskRequest was created.
568 'deduped_from': None, 573 'deduped_from': None,
569 'duration': None, 574 'duration': None,
570 'exit_code': None, 575 'exit_code': None,
571 'failure': False, 576 'failure': False,
572 'id': '1d69b9f088008810', 577 'id': '1d69b9f088008810',
(...skipping 15 matching lines...) Expand all
588 'try_number': 1, 593 'try_number': 1,
589 'user': u'Jesus', 594 'user': u'Jesus',
590 } 595 }
591 self.assertEqual(expected, result_summary.to_dict()) 596 self.assertEqual(expected, result_summary.to_dict())
592 expected = [ 597 expected = [
593 { 598 {
594 'abandoned_ts': None, 599 'abandoned_ts': None,
595 'bot_dimensions': bot_dimensions, 600 'bot_dimensions': bot_dimensions,
596 'bot_id': u'localhost', 601 'bot_id': u'localhost',
597 'bot_version': u'abc', 602 'bot_version': u'abc',
603 'cipd_pins': None,
598 'children_task_ids': [], 604 'children_task_ids': [],
599 'completed_ts': None, 605 'completed_ts': None,
600 'cost_usd': 0., 606 'cost_usd': 0.,
601 'duration': None, 607 'duration': None,
602 'exit_code': None, 608 'exit_code': None,
603 'failure': False, 609 'failure': False,
604 'id': '1d69b9f088008811', 610 'id': '1d69b9f088008811',
605 'internal_failure': False, 611 'internal_failure': False,
606 'modified_ts': reaped_ts, 612 'modified_ts': reaped_ts,
607 'outputs_ref': None, 613 'outputs_ref': None,
(...skipping 20 matching lines...) Expand all
628 items_hot='bb'), 634 items_hot='bb'),
629 isolated_upload=task_result.OperationStats( 635 isolated_upload=task_result.OperationStats(
630 duration=0.1, 636 duration=0.1,
631 items_cold='aa', 637 items_cold='aa',
632 items_hot='bb')) 638 items_hot='bb'))
633 self.assertEqual( 639 self.assertEqual(
634 task_result.State.COMPLETED, 640 task_result.State.COMPLETED,
635 task_scheduler.bot_update_task( 641 task_scheduler.bot_update_task(
636 run_result_key=run_result.key, 642 run_result_key=run_result.key,
637 bot_id='localhost', 643 bot_id='localhost',
644 cipd_pins=None,
638 output='Foo1', 645 output='Foo1',
639 output_chunk_start=0, 646 output_chunk_start=0,
640 exit_code=0, 647 exit_code=0,
641 duration=3., 648 duration=3.,
642 hard_timeout=False, 649 hard_timeout=False,
643 io_timeout=False, 650 io_timeout=False,
644 cost_usd=0.1, 651 cost_usd=0.1,
645 outputs_ref=outputs_ref, 652 outputs_ref=outputs_ref,
646 performance_stats=performance_stats)) 653 performance_stats=performance_stats))
647 # Simulate an unexpected retry, e.g. the response of the previous RPC never 654 # Simulate an unexpected retry, e.g. the response of the previous RPC never
648 # got the the client even if it succeedded. 655 # got the the client even if it succeedded.
649 self.assertEqual( 656 self.assertEqual(
650 task_result.State.COMPLETED, 657 task_result.State.COMPLETED,
651 task_scheduler.bot_update_task( 658 task_scheduler.bot_update_task(
652 run_result_key=run_result.key, 659 run_result_key=run_result.key,
653 bot_id='localhost', 660 bot_id='localhost',
661 cipd_pins=None,
654 output='Foo1', 662 output='Foo1',
655 output_chunk_start=0, 663 output_chunk_start=0,
656 exit_code=0, 664 exit_code=0,
657 duration=3., 665 duration=3.,
658 hard_timeout=False, 666 hard_timeout=False,
659 io_timeout=False, 667 io_timeout=False,
660 cost_usd=0.1, 668 cost_usd=0.1,
661 outputs_ref=outputs_ref, 669 outputs_ref=outputs_ref,
662 performance_stats=performance_stats)) 670 performance_stats=performance_stats))
663 result_summary, run_results = get_results(request.key) 671 result_summary, run_results = get_results(request.key)
664 expected = { 672 expected = {
665 'abandoned_ts': None, 673 'abandoned_ts': None,
666 'bot_dimensions': bot_dimensions, 674 'bot_dimensions': bot_dimensions,
667 'bot_id': u'localhost', 675 'bot_id': u'localhost',
668 'bot_version': u'abc', 676 'bot_version': u'abc',
677 'cipd_pins': None,
669 'children_task_ids': [], 678 'children_task_ids': [],
670 'completed_ts': done_ts, 679 'completed_ts': done_ts,
671 'costs_usd': [0.1], 680 'costs_usd': [0.1],
672 'cost_saved_usd': None, 681 'cost_saved_usd': None,
673 'created_ts': created_ts, 682 'created_ts': created_ts,
674 'deduped_from': None, 683 'deduped_from': None,
675 'duration': 3.0, 684 'duration': 3.0,
676 'exit_code': 0, 685 'exit_code': 0,
677 'failure': False, 686 'failure': False,
678 'id': '1d69b9f088008810', 687 'id': '1d69b9f088008810',
(...skipping 19 matching lines...) Expand all
698 'try_number': 1, 707 'try_number': 1,
699 'user': u'Jesus', 708 'user': u'Jesus',
700 } 709 }
701 self.assertEqual(expected, result_summary.to_dict()) 710 self.assertEqual(expected, result_summary.to_dict())
702 expected = [ 711 expected = [
703 { 712 {
704 'abandoned_ts': None, 713 'abandoned_ts': None,
705 'bot_dimensions': bot_dimensions, 714 'bot_dimensions': bot_dimensions,
706 'bot_id': u'localhost', 715 'bot_id': u'localhost',
707 'bot_version': u'abc', 716 'bot_version': u'abc',
717 'cipd_pins': None,
708 'children_task_ids': [], 718 'children_task_ids': [],
709 'completed_ts': done_ts, 719 'completed_ts': done_ts,
710 'cost_usd': 0.1, 720 'cost_usd': 0.1,
711 'duration': 3.0, 721 'duration': 3.0,
712 'exit_code': 0, 722 'exit_code': 0,
713 'failure': False, 723 'failure': False,
714 'id': '1d69b9f088008811', 724 'id': '1d69b9f088008811',
715 'internal_failure': False, 725 'internal_failure': False,
716 'modified_ts': done_ts, 726 'modified_ts': done_ts,
717 'outputs_ref': { 727 'outputs_ref': {
(...skipping 19 matching lines...) Expand all
737 _result_summary = task_scheduler.schedule_request(request) 747 _result_summary = task_scheduler.schedule_request(request)
738 bot_dimensions = {'OS': 'Windows-3.1.1', u'pool': u'default'} 748 bot_dimensions = {'OS': 'Windows-3.1.1', u'pool': u'default'}
739 reaped_request, run_result = task_scheduler.bot_reap_task( 749 reaped_request, run_result = task_scheduler.bot_reap_task(
740 bot_dimensions, 'localhost', 'abc', None) 750 bot_dimensions, 'localhost', 'abc', None)
741 self.assertEqual(request, reaped_request) 751 self.assertEqual(request, reaped_request)
742 self.assertEqual( 752 self.assertEqual(
743 task_result.State.COMPLETED, 753 task_result.State.COMPLETED,
744 task_scheduler.bot_update_task( 754 task_scheduler.bot_update_task(
745 run_result_key=run_result.key, 755 run_result_key=run_result.key,
746 bot_id='localhost', 756 bot_id='localhost',
757 cipd_pins=None,
747 output='Foo1', 758 output='Foo1',
748 output_chunk_start=0, 759 output_chunk_start=0,
749 exit_code=1, 760 exit_code=1,
750 duration=0.1, 761 duration=0.1,
751 hard_timeout=False, 762 hard_timeout=False,
752 io_timeout=False, 763 io_timeout=False,
753 cost_usd=0.1, 764 cost_usd=0.1,
754 outputs_ref=None, 765 outputs_ref=None,
755 performance_stats=None)) 766 performance_stats=None))
756 result_summary, run_results = get_results(request.key) 767 result_summary, run_results = get_results(request.key)
757 768
758 expected = { 769 expected = {
759 'abandoned_ts': None, 770 'abandoned_ts': None,
760 'bot_dimensions': bot_dimensions, 771 'bot_dimensions': bot_dimensions,
761 'bot_id': u'localhost', 772 'bot_id': u'localhost',
762 'bot_version': u'abc', 773 'bot_version': u'abc',
774 'cipd_pins': None,
763 'children_task_ids': [], 775 'children_task_ids': [],
764 'completed_ts': self.now, 776 'completed_ts': self.now,
765 'costs_usd': [0.1], 777 'costs_usd': [0.1],
766 'cost_saved_usd': None, 778 'cost_saved_usd': None,
767 'created_ts': self.now, 779 'created_ts': self.now,
768 'deduped_from': None, 780 'deduped_from': None,
769 'duration': 0.1, 781 'duration': 0.1,
770 'exit_code': 1, 782 'exit_code': 1,
771 'failure': True, 783 'failure': True,
772 'id': '1d69b9f088008810', 784 'id': '1d69b9f088008810',
(...skipping 16 matching lines...) Expand all
789 'user': u'Jesus', 801 'user': u'Jesus',
790 } 802 }
791 self.assertEqual(expected, result_summary.to_dict()) 803 self.assertEqual(expected, result_summary.to_dict())
792 804
793 expected = [ 805 expected = [
794 { 806 {
795 'abandoned_ts': None, 807 'abandoned_ts': None,
796 'bot_dimensions': bot_dimensions, 808 'bot_dimensions': bot_dimensions,
797 'bot_id': u'localhost', 809 'bot_id': u'localhost',
798 'bot_version': u'abc', 810 'bot_version': u'abc',
811 'cipd_pins': None,
799 'children_task_ids': [], 812 'children_task_ids': [],
800 'completed_ts': self.now, 813 'completed_ts': self.now,
801 'cost_usd': 0.1, 814 'cost_usd': 0.1,
802 'duration': 0.1, 815 'duration': 0.1,
803 'exit_code': 1, 816 'exit_code': 1,
804 'failure': True, 817 'failure': True,
805 'id': '1d69b9f088008811', 818 'id': '1d69b9f088008811',
806 'internal_failure': False, 819 'internal_failure': False,
807 'modified_ts': self.now, 820 'modified_ts': self.now,
808 'outputs_ref': None, 821 'outputs_ref': None,
(...skipping 14 matching lines...) Expand all
823 task_request.init_new_request(request, True) 836 task_request.init_new_request(request, True)
824 self.assertTrue(task_scheduler.schedule_request(request)) 837 self.assertTrue(task_scheduler.schedule_request(request))
825 838
826 def test_bot_update_task(self): 839 def test_bot_update_task(self):
827 run_result = _quick_reap() 840 run_result = _quick_reap()
828 self.assertEqual( 841 self.assertEqual(
829 task_result.State.RUNNING, 842 task_result.State.RUNNING,
830 task_scheduler.bot_update_task( 843 task_scheduler.bot_update_task(
831 run_result_key=run_result.key, 844 run_result_key=run_result.key,
832 bot_id='localhost', 845 bot_id='localhost',
846 cipd_pins=None,
833 output='hi', 847 output='hi',
834 output_chunk_start=0, 848 output_chunk_start=0,
835 exit_code=None, 849 exit_code=None,
836 duration=None, 850 duration=None,
837 hard_timeout=False, 851 hard_timeout=False,
838 io_timeout=False, 852 io_timeout=False,
839 cost_usd=0.1, 853 cost_usd=0.1,
840 outputs_ref=None, 854 outputs_ref=None,
841 performance_stats=None)) 855 performance_stats=None))
842 self.assertEqual( 856 self.assertEqual(
843 task_result.State.COMPLETED, 857 task_result.State.COMPLETED,
844 task_scheduler.bot_update_task( 858 task_scheduler.bot_update_task(
845 run_result_key=run_result.key, 859 run_result_key=run_result.key,
846 bot_id='localhost', 860 bot_id='localhost',
861 cipd_pins=None,
847 output='hey', 862 output='hey',
848 output_chunk_start=2, 863 output_chunk_start=2,
849 exit_code=0, 864 exit_code=0,
850 duration=0.1, 865 duration=0.1,
851 hard_timeout=False, 866 hard_timeout=False,
852 io_timeout=False, 867 io_timeout=False,
853 cost_usd=0.1, 868 cost_usd=0.1,
854 outputs_ref=None, 869 outputs_ref=None,
855 performance_stats=None)) 870 performance_stats=None))
856 self.assertEqual('hihey', run_result.key.get().get_output()) 871 self.assertEqual('hihey', run_result.key.get().get_output())
857 872
858 def test_bot_update_task_new_overwrite(self): 873 def test_bot_update_task_new_overwrite(self):
859 run_result = _quick_reap() 874 run_result = _quick_reap()
860 self.assertEqual( 875 self.assertEqual(
861 task_result.State.RUNNING, 876 task_result.State.RUNNING,
862 task_scheduler.bot_update_task( 877 task_scheduler.bot_update_task(
863 run_result_key=run_result.key, 878 run_result_key=run_result.key,
864 bot_id='localhost', 879 bot_id='localhost',
880 cipd_pins=None,
865 output='hi', 881 output='hi',
866 output_chunk_start=0, 882 output_chunk_start=0,
867 exit_code=None, 883 exit_code=None,
868 duration=None, 884 duration=None,
869 hard_timeout=False, 885 hard_timeout=False,
870 io_timeout=False, 886 io_timeout=False,
871 cost_usd=0.1, 887 cost_usd=0.1,
872 outputs_ref=None, 888 outputs_ref=None,
873 performance_stats=None)) 889 performance_stats=None))
874 self.assertEqual( 890 self.assertEqual(
875 task_result.State.RUNNING, 891 task_result.State.RUNNING,
876 task_scheduler.bot_update_task( 892 task_scheduler.bot_update_task(
877 run_result_key=run_result.key, 893 run_result_key=run_result.key,
878 bot_id='localhost', 894 bot_id='localhost',
895 cipd_pins=None,
879 output='hey', 896 output='hey',
880 output_chunk_start=1, 897 output_chunk_start=1,
881 exit_code=None, 898 exit_code=None,
882 duration=None, 899 duration=None,
883 hard_timeout=False, 900 hard_timeout=False,
884 io_timeout=False, 901 io_timeout=False,
885 cost_usd=0.1, 902 cost_usd=0.1,
886 outputs_ref=None, 903 outputs_ref=None,
887 performance_stats=None)) 904 performance_stats=None))
888 self.assertEqual('hhey', run_result.key.get().get_output()) 905 self.assertEqual('hhey', run_result.key.get().get_output())
889 906
890 def test_bot_update_exception(self): 907 def test_bot_update_exception(self):
891 run_result = _quick_reap() 908 run_result = _quick_reap()
892 def r(*_): 909 def r(*_):
893 raise datastore_utils.CommitError('Sorry!') 910 raise datastore_utils.CommitError('Sorry!')
894 911
895 self.mock(ndb, 'put_multi', r) 912 self.mock(ndb, 'put_multi', r)
896 self.assertEqual( 913 self.assertEqual(
897 None, 914 None,
898 task_scheduler.bot_update_task( 915 task_scheduler.bot_update_task(
899 run_result_key=run_result.key, 916 run_result_key=run_result.key,
900 bot_id='localhost', 917 bot_id='localhost',
918 cipd_pins=None,
901 output='hi', 919 output='hi',
902 output_chunk_start=0, 920 output_chunk_start=0,
903 exit_code=0, 921 exit_code=0,
904 duration=0.1, 922 duration=0.1,
905 hard_timeout=False, 923 hard_timeout=False,
906 io_timeout=False, 924 io_timeout=False,
907 cost_usd=0.1, 925 cost_usd=0.1,
908 outputs_ref=None, 926 outputs_ref=None,
909 performance_stats=None)) 927 performance_stats=None))
910 928
(...skipping 15 matching lines...) Expand all
926 bot_dimensions, 'localhost', 'abc', None) 944 bot_dimensions, 'localhost', 'abc', None)
927 self.assertEqual('localhost', run_result.bot_id) 945 self.assertEqual('localhost', run_result.bot_id)
928 946
929 # Attempt to terminate the task with success, but make PubSub call fail. 947 # Attempt to terminate the task with success, but make PubSub call fail.
930 self.mock_pub_sub(publish_successful=False) 948 self.mock_pub_sub(publish_successful=False)
931 self.assertEqual( 949 self.assertEqual(
932 None, 950 None,
933 task_scheduler.bot_update_task( 951 task_scheduler.bot_update_task(
934 run_result_key=run_result.key, 952 run_result_key=run_result.key,
935 bot_id='localhost', 953 bot_id='localhost',
954 cipd_pins=None,
936 output='Foo1', 955 output='Foo1',
937 output_chunk_start=0, 956 output_chunk_start=0,
938 exit_code=0, 957 exit_code=0,
939 duration=0.1, 958 duration=0.1,
940 hard_timeout=False, 959 hard_timeout=False,
941 io_timeout=False, 960 io_timeout=False,
942 cost_usd=0.1, 961 cost_usd=0.1,
943 outputs_ref=None, 962 outputs_ref=None,
944 performance_stats=None)) 963 performance_stats=None))
945 964
946 # Bot retries bot_update, now PubSub works and notification is sent. 965 # Bot retries bot_update, now PubSub works and notification is sent.
947 pub_sub_calls = self.mock_pub_sub(publish_successful=True) 966 pub_sub_calls = self.mock_pub_sub(publish_successful=True)
948 self.assertEqual( 967 self.assertEqual(
949 task_result.State.COMPLETED, 968 task_result.State.COMPLETED,
950 task_scheduler.bot_update_task( 969 task_scheduler.bot_update_task(
951 run_result_key=run_result.key, 970 run_result_key=run_result.key,
952 bot_id='localhost', 971 bot_id='localhost',
972 cipd_pins=None,
953 output='Foo1', 973 output='Foo1',
954 output_chunk_start=0, 974 output_chunk_start=0,
955 exit_code=0, 975 exit_code=0,
956 duration=0.1, 976 duration=0.1,
957 hard_timeout=False, 977 hard_timeout=False,
958 io_timeout=False, 978 io_timeout=False,
959 cost_usd=0.1, 979 cost_usd=0.1,
960 outputs_ref=None, 980 outputs_ref=None,
961 performance_stats=None)) 981 performance_stats=None))
962 self.assertEqual(1, len(pub_sub_calls)) # notification is sent 982 self.assertEqual(1, len(pub_sub_calls)) # notification is sent
963 983
964 def _bot_update_timeouts(self, hard, io): 984 def _bot_update_timeouts(self, hard, io):
965 self.mock(random, 'getrandbits', lambda _: 0x88) 985 self.mock(random, 'getrandbits', lambda _: 0x88)
966 request = _gen_request( 986 request = _gen_request(
967 properties={ 987 properties={
968 'dimensions': {u'OS': u'Windows-3.1.1', u'pool': u'default'}, 988 'dimensions': {u'OS': u'Windows-3.1.1', u'pool': u'default'},
969 }) 989 })
970 task_request.init_new_request(request, True) 990 task_request.init_new_request(request, True)
971 result_summary = task_scheduler.schedule_request(request) 991 result_summary = task_scheduler.schedule_request(request)
972 bot_dimensions = {'OS': 'Windows-3.1.1', u'pool': u'default'} 992 bot_dimensions = {'OS': 'Windows-3.1.1', u'pool': u'default'}
973 reaped_request, run_result = task_scheduler.bot_reap_task( 993 reaped_request, run_result = task_scheduler.bot_reap_task(
974 bot_dimensions, 'localhost', 'abc', None) 994 bot_dimensions, 'localhost', 'abc', None)
975 self.assertEqual( 995 self.assertEqual(
976 task_result.State.TIMED_OUT, 996 task_result.State.TIMED_OUT,
977 task_scheduler.bot_update_task( 997 task_scheduler.bot_update_task(
978 run_result_key=run_result.key, 998 run_result_key=run_result.key,
979 bot_id='localhost', 999 bot_id='localhost',
1000 cipd_pins=None,
980 output='hi', 1001 output='hi',
981 output_chunk_start=0, 1002 output_chunk_start=0,
982 exit_code=0, 1003 exit_code=0,
983 duration=0.1, 1004 duration=0.1,
984 hard_timeout=hard, 1005 hard_timeout=hard,
985 io_timeout=io, 1006 io_timeout=io,
986 cost_usd=0.1, 1007 cost_usd=0.1,
987 outputs_ref=None, 1008 outputs_ref=None,
988 performance_stats=None)) 1009 performance_stats=None))
989 expected = { 1010 expected = {
990 'abandoned_ts': None, 1011 'abandoned_ts': None,
991 'bot_dimensions': bot_dimensions, 1012 'bot_dimensions': bot_dimensions,
992 'bot_id': u'localhost', 1013 'bot_id': u'localhost',
993 'bot_version': u'abc', 1014 'bot_version': u'abc',
1015 'cipd_pins': None,
994 'children_task_ids': [], 1016 'children_task_ids': [],
995 'completed_ts': self.now, 1017 'completed_ts': self.now,
996 'costs_usd': [0.1], 1018 'costs_usd': [0.1],
997 'cost_saved_usd': None, 1019 'cost_saved_usd': None,
998 'created_ts': self.now, 1020 'created_ts': self.now,
999 'deduped_from': None, 1021 'deduped_from': None,
1000 'duration': 0.1, 1022 'duration': 0.1,
1001 'exit_code': 0, 1023 'exit_code': 0,
1002 'failure': True, 1024 'failure': True,
1003 'id': '1d69b9f088008810', 1025 'id': '1d69b9f088008810',
(...skipping 15 matching lines...) Expand all
1019 'try_number': 1, 1041 'try_number': 1,
1020 'user': u'Jesus', 1042 'user': u'Jesus',
1021 } 1043 }
1022 self.assertEqual(expected, result_summary.key.get().to_dict()) 1044 self.assertEqual(expected, result_summary.key.get().to_dict())
1023 1045
1024 expected = { 1046 expected = {
1025 'abandoned_ts': None, 1047 'abandoned_ts': None,
1026 'bot_dimensions': bot_dimensions, 1048 'bot_dimensions': bot_dimensions,
1027 'bot_id': u'localhost', 1049 'bot_id': u'localhost',
1028 'bot_version': u'abc', 1050 'bot_version': u'abc',
1051 'cipd_pins': None,
1029 'children_task_ids': [], 1052 'children_task_ids': [],
1030 'completed_ts': self.now, 1053 'completed_ts': self.now,
1031 'cost_usd': 0.1, 1054 'cost_usd': 0.1,
1032 'duration': 0.1, 1055 'duration': 0.1,
1033 'exit_code': 0, 1056 'exit_code': 0,
1034 'failure': True, 1057 'failure': True,
1035 'id': '1d69b9f088008811', 1058 'id': '1d69b9f088008811',
1036 'internal_failure': False, 1059 'internal_failure': False,
1037 'modified_ts': self.now, 1060 'modified_ts': self.now,
1038 'outputs_ref': None, 1061 'outputs_ref': None,
(...skipping 22 matching lines...) Expand all
1061 reaped_request, run_result = task_scheduler.bot_reap_task( 1084 reaped_request, run_result = task_scheduler.bot_reap_task(
1062 {'OS': 'Windows-3.1.1', u'pool': u'default'}, 'localhost', 'abc', None) 1085 {'OS': 'Windows-3.1.1', u'pool': u'default'}, 'localhost', 'abc', None)
1063 1086
1064 self.assertEqual( 1087 self.assertEqual(
1065 None, task_scheduler.bot_kill_task(run_result.key, 'localhost')) 1088 None, task_scheduler.bot_kill_task(run_result.key, 'localhost'))
1066 expected = { 1089 expected = {
1067 'abandoned_ts': self.now, 1090 'abandoned_ts': self.now,
1068 'bot_dimensions': dimensions, 1091 'bot_dimensions': dimensions,
1069 'bot_id': u'localhost', 1092 'bot_id': u'localhost',
1070 'bot_version': u'abc', 1093 'bot_version': u'abc',
1094 'cipd_pins': None,
1071 'children_task_ids': [], 1095 'children_task_ids': [],
1072 'completed_ts': None, 1096 'completed_ts': None,
1073 'costs_usd': [0.], 1097 'costs_usd': [0.],
1074 'cost_saved_usd': None, 1098 'cost_saved_usd': None,
1075 'created_ts': self.now, 1099 'created_ts': self.now,
1076 'deduped_from': None, 1100 'deduped_from': None,
1077 'duration': None, 1101 'duration': None,
1078 'exit_code': None, 1102 'exit_code': None,
1079 'failure': False, 1103 'failure': False,
1080 'id': '1d69b9f088008810', 1104 'id': '1d69b9f088008810',
(...skipping 14 matching lines...) Expand all
1095 ], 1119 ],
1096 'try_number': 1, 1120 'try_number': 1,
1097 'user': u'Jesus', 1121 'user': u'Jesus',
1098 } 1122 }
1099 self.assertEqual(expected, result_summary.key.get().to_dict()) 1123 self.assertEqual(expected, result_summary.key.get().to_dict())
1100 expected = { 1124 expected = {
1101 'abandoned_ts': self.now, 1125 'abandoned_ts': self.now,
1102 'bot_dimensions': dimensions, 1126 'bot_dimensions': dimensions,
1103 'bot_id': u'localhost', 1127 'bot_id': u'localhost',
1104 'bot_version': u'abc', 1128 'bot_version': u'abc',
1129 'cipd_pins': None,
1105 'children_task_ids': [], 1130 'children_task_ids': [],
1106 'completed_ts': None, 1131 'completed_ts': None,
1107 'cost_usd': 0., 1132 'cost_usd': 0.,
1108 'duration': None, 1133 'duration': None,
1109 'exit_code': None, 1134 'exit_code': None,
1110 'failure': False, 1135 'failure': False,
1111 'id': '1d69b9f088008811', 1136 'id': '1d69b9f088008811',
1112 'internal_failure': True, 1137 'internal_failure': True,
1113 'modified_ts': self.now, 1138 'modified_ts': self.now,
1114 'outputs_ref': None, 1139 'outputs_ref': None,
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
1183 abandoned_ts = self.mock_now(self.now, request.expiration_secs+1) 1208 abandoned_ts = self.mock_now(self.now, request.expiration_secs+1)
1184 self.assertEqual( 1209 self.assertEqual(
1185 ['1d69b9f088008810'], 1210 ['1d69b9f088008810'],
1186 task_scheduler.cron_abort_expired_task_to_run('f.local')) 1211 task_scheduler.cron_abort_expired_task_to_run('f.local'))
1187 self.assertEqual([], task_result.TaskRunResult.query().fetch()) 1212 self.assertEqual([], task_result.TaskRunResult.query().fetch())
1188 expected = { 1213 expected = {
1189 'abandoned_ts': abandoned_ts, 1214 'abandoned_ts': abandoned_ts,
1190 'bot_dimensions': None, 1215 'bot_dimensions': None,
1191 'bot_id': None, 1216 'bot_id': None,
1192 'bot_version': None, 1217 'bot_version': None,
1218 'cipd_pins': None,
1193 'children_task_ids': [], 1219 'children_task_ids': [],
1194 'completed_ts': None, 1220 'completed_ts': None,
1195 'costs_usd': [], 1221 'costs_usd': [],
1196 'cost_saved_usd': None, 1222 'cost_saved_usd': None,
1197 'created_ts': self.now, 1223 'created_ts': self.now,
1198 'deduped_from': None, 1224 'deduped_from': None,
1199 'duration': None, 1225 'duration': None,
1200 'exit_code': None, 1226 'exit_code': None,
1201 'failure': False, 1227 'failure': False,
1202 'id': '1d69b9f088008810', 1228 'id': '1d69b9f088008810',
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
1256 abandoned_ts = self.mock_now(self.now, request.expiration_secs+1) 1282 abandoned_ts = self.mock_now(self.now, request.expiration_secs+1)
1257 self.assertEqual( 1283 self.assertEqual(
1258 ['1d69b9f088008810'], 1284 ['1d69b9f088008810'],
1259 task_scheduler.cron_abort_expired_task_to_run('f.local')) 1285 task_scheduler.cron_abort_expired_task_to_run('f.local'))
1260 self.assertEqual(1, len(task_result.TaskRunResult.query().fetch())) 1286 self.assertEqual(1, len(task_result.TaskRunResult.query().fetch()))
1261 expected = { 1287 expected = {
1262 'abandoned_ts': abandoned_ts, 1288 'abandoned_ts': abandoned_ts,
1263 'bot_dimensions': bot_dimensions, 1289 'bot_dimensions': bot_dimensions,
1264 'bot_id': u'localhost', 1290 'bot_id': u'localhost',
1265 'bot_version': u'abc', 1291 'bot_version': u'abc',
1292 'cipd_pins': None,
1266 'children_task_ids': [], 1293 'children_task_ids': [],
1267 'completed_ts': None, 1294 'completed_ts': None,
1268 'costs_usd': [0.], 1295 'costs_usd': [0.],
1269 'cost_saved_usd': None, 1296 'cost_saved_usd': None,
1270 'created_ts': self.now, 1297 'created_ts': self.now,
1271 'deduped_from': None, 1298 'deduped_from': None,
1272 'duration': None, 1299 'duration': None,
1273 'exit_code': None, 1300 'exit_code': None,
1274 'failure': False, 1301 'failure': False,
1275 'id': '1d69b9f088008810', 1302 'id': '1d69b9f088008810',
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
1323 self.assertEqual(task_result.State.RUNNING, run_result.state) 1350 self.assertEqual(task_result.State.RUNNING, run_result.state)
1324 now_1 = self.mock_now(self.now + task_result.BOT_PING_TOLERANCE, 1) 1351 now_1 = self.mock_now(self.now + task_result.BOT_PING_TOLERANCE, 1)
1325 self.assertEqual(([], 1, 0), task_scheduler.cron_handle_bot_died('f.local')) 1352 self.assertEqual(([], 1, 0), task_scheduler.cron_handle_bot_died('f.local'))
1326 1353
1327 # Refresh and compare: 1354 # Refresh and compare:
1328 expected = { 1355 expected = {
1329 'abandoned_ts': now_1, 1356 'abandoned_ts': now_1,
1330 'bot_dimensions': bot_dimensions, 1357 'bot_dimensions': bot_dimensions,
1331 'bot_id': u'localhost', 1358 'bot_id': u'localhost',
1332 'bot_version': u'abc', 1359 'bot_version': u'abc',
1360 'cipd_pins': None,
1333 'children_task_ids': [], 1361 'children_task_ids': [],
1334 'completed_ts': None, 1362 'completed_ts': None,
1335 'cost_usd': 0., 1363 'cost_usd': 0.,
1336 'duration': None, 1364 'duration': None,
1337 'exit_code': None, 1365 'exit_code': None,
1338 'failure': False, 1366 'failure': False,
1339 'id': '1d69b9f088008811', 1367 'id': '1d69b9f088008811',
1340 'internal_failure': True, 1368 'internal_failure': True,
1341 'modified_ts': now_1, 1369 'modified_ts': now_1,
1342 'outputs_ref': None, 1370 'outputs_ref': None,
1343 'server_versions': [u'v1a'], 1371 'server_versions': [u'v1a'],
1344 'started_ts': self.now, 1372 'started_ts': self.now,
1345 'state': task_result.State.BOT_DIED, 1373 'state': task_result.State.BOT_DIED,
1346 'try_number': 1, 1374 'try_number': 1,
1347 } 1375 }
1348 self.assertEqual(expected, run_result.key.get().to_dict()) 1376 self.assertEqual(expected, run_result.key.get().to_dict())
1349 expected = { 1377 expected = {
1350 'abandoned_ts': None, 1378 'abandoned_ts': None,
1351 'bot_dimensions': bot_dimensions, 1379 'bot_dimensions': bot_dimensions,
1352 'bot_id': u'localhost', 1380 'bot_id': u'localhost',
1353 'bot_version': u'abc', 1381 'bot_version': u'abc',
1382 'cipd_pins': None,
1354 'children_task_ids': [], 1383 'children_task_ids': [],
1355 'completed_ts': None, 1384 'completed_ts': None,
1356 'costs_usd': [0.], 1385 'costs_usd': [0.],
1357 'cost_saved_usd': None, 1386 'cost_saved_usd': None,
1358 'created_ts': self.now, 1387 'created_ts': self.now,
1359 'deduped_from': None, 1388 'deduped_from': None,
1360 'duration': None, 1389 'duration': None,
1361 'exit_code': None, 1390 'exit_code': None,
1362 'failure': False, 1391 'failure': False,
1363 'id': '1d69b9f088008810', 1392 'id': '1d69b9f088008810',
(...skipping 24 matching lines...) Expand all
1388 now_2 = self.mock_now(self.now + task_result.BOT_PING_TOLERANCE, 2) 1417 now_2 = self.mock_now(self.now + task_result.BOT_PING_TOLERANCE, 2)
1389 _request, run_result = task_scheduler.bot_reap_task( 1418 _request, run_result = task_scheduler.bot_reap_task(
1390 bot_dimensions, 'localhost-second', 'abc', None) 1419 bot_dimensions, 'localhost-second', 'abc', None)
1391 logging.info('%s', [t.to_dict() for t in task_to_run.TaskToRun.query()]) 1420 logging.info('%s', [t.to_dict() for t in task_to_run.TaskToRun.query()])
1392 self.assertEqual(2, run_result.try_number) 1421 self.assertEqual(2, run_result.try_number)
1393 self.assertEqual( 1422 self.assertEqual(
1394 task_result.State.COMPLETED, 1423 task_result.State.COMPLETED,
1395 task_scheduler.bot_update_task( 1424 task_scheduler.bot_update_task(
1396 run_result_key=run_result.key, 1425 run_result_key=run_result.key,
1397 bot_id='localhost-second', 1426 bot_id='localhost-second',
1427 cipd_pins=None,
1398 output='Foo1', 1428 output='Foo1',
1399 output_chunk_start=0, 1429 output_chunk_start=0,
1400 exit_code=0, 1430 exit_code=0,
1401 duration=0.1, 1431 duration=0.1,
1402 hard_timeout=False, 1432 hard_timeout=False,
1403 io_timeout=False, 1433 io_timeout=False,
1404 cost_usd=0.1, 1434 cost_usd=0.1,
1405 outputs_ref=None, 1435 outputs_ref=None,
1406 performance_stats=None)) 1436 performance_stats=None))
1407 expected = { 1437 expected = {
1408 'abandoned_ts': None, 1438 'abandoned_ts': None,
1409 'bot_dimensions': bot_dimensions, 1439 'bot_dimensions': bot_dimensions,
1410 'bot_id': u'localhost-second', 1440 'bot_id': u'localhost-second',
1411 'bot_version': u'abc', 1441 'bot_version': u'abc',
1442 'cipd_pins': None,
1412 'children_task_ids': [], 1443 'children_task_ids': [],
1413 'completed_ts': now_2, 1444 'completed_ts': now_2,
1414 'costs_usd': [0., 0.1], 1445 'costs_usd': [0., 0.1],
1415 'cost_saved_usd': None, 1446 'cost_saved_usd': None,
1416 'created_ts': self.now, 1447 'created_ts': self.now,
1417 'deduped_from': None, 1448 'deduped_from': None,
1418 'duration': 0.1, 1449 'duration': 0.1,
1419 'exit_code': 0, 1450 'exit_code': 0,
1420 'failure': False, 1451 'failure': False,
1421 'id': '1d69b9f088008810', 1452 'id': '1d69b9f088008810',
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1467 self.assertEqual(task_result.State.RUNNING, run_result.state) 1498 self.assertEqual(task_result.State.RUNNING, run_result.state)
1468 now_1 = self.mock_now(self.now + task_result.BOT_PING_TOLERANCE, 1) 1499 now_1 = self.mock_now(self.now + task_result.BOT_PING_TOLERANCE, 1)
1469 self.assertEqual(([], 1, 0), task_scheduler.cron_handle_bot_died('f.local')) 1500 self.assertEqual(([], 1, 0), task_scheduler.cron_handle_bot_died('f.local'))
1470 1501
1471 # Refresh and compare: 1502 # Refresh and compare:
1472 expected = { 1503 expected = {
1473 'abandoned_ts': now_1, 1504 'abandoned_ts': now_1,
1474 'bot_dimensions': bot_dimensions, 1505 'bot_dimensions': bot_dimensions,
1475 'bot_id': u'localhost', 1506 'bot_id': u'localhost',
1476 'bot_version': u'abc', 1507 'bot_version': u'abc',
1508 'cipd_pins': None,
1477 'children_task_ids': [], 1509 'children_task_ids': [],
1478 'completed_ts': None, 1510 'completed_ts': None,
1479 'cost_usd': 0., 1511 'cost_usd': 0.,
1480 'duration': None, 1512 'duration': None,
1481 'exit_code': None, 1513 'exit_code': None,
1482 'failure': False, 1514 'failure': False,
1483 'id': '1d69b9f088008811', 1515 'id': '1d69b9f088008811',
1484 'internal_failure': True, 1516 'internal_failure': True,
1485 'modified_ts': now_1, 1517 'modified_ts': now_1,
1486 'outputs_ref': None, 1518 'outputs_ref': None,
1487 'server_versions': [u'v1a'], 1519 'server_versions': [u'v1a'],
1488 'started_ts': self.now, 1520 'started_ts': self.now,
1489 'state': task_result.State.BOT_DIED, 1521 'state': task_result.State.BOT_DIED,
1490 'try_number': 1, 1522 'try_number': 1,
1491 } 1523 }
1492 self.assertEqual(expected, run_result.key.get().to_dict()) 1524 self.assertEqual(expected, run_result.key.get().to_dict())
1493 expected = { 1525 expected = {
1494 'abandoned_ts': None, 1526 'abandoned_ts': None,
1495 'bot_dimensions': bot_dimensions, 1527 'bot_dimensions': bot_dimensions,
1496 'bot_id': u'localhost', 1528 'bot_id': u'localhost',
1497 'bot_version': u'abc', 1529 'bot_version': u'abc',
1530 'cipd_pins': None,
1498 'children_task_ids': [], 1531 'children_task_ids': [],
1499 'completed_ts': None, 1532 'completed_ts': None,
1500 'costs_usd': [0.], 1533 'costs_usd': [0.],
1501 'cost_saved_usd': None, 1534 'cost_saved_usd': None,
1502 'created_ts': self.now, 1535 'created_ts': self.now,
1503 'deduped_from': None, 1536 'deduped_from': None,
1504 'duration': None, 1537 'duration': None,
1505 'exit_code': None, 1538 'exit_code': None,
1506 'failure': False, 1539 'failure': False,
1507 'id': '1d69b9f088008810', 1540 'id': '1d69b9f088008810',
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
1564 now_2 = self.mock_now(self.now + 2 * task_result.BOT_PING_TOLERANCE, 3) 1597 now_2 = self.mock_now(self.now + 2 * task_result.BOT_PING_TOLERANCE, 3)
1565 self.assertEqual( 1598 self.assertEqual(
1566 (['1d69b9f088008812'], 0, 0), 1599 (['1d69b9f088008812'], 0, 0),
1567 task_scheduler.cron_handle_bot_died('f.local')) 1600 task_scheduler.cron_handle_bot_died('f.local'))
1568 self.assertEqual(([], 0, 0), task_scheduler.cron_handle_bot_died('f.local')) 1601 self.assertEqual(([], 0, 0), task_scheduler.cron_handle_bot_died('f.local'))
1569 expected = { 1602 expected = {
1570 'abandoned_ts': now_2, 1603 'abandoned_ts': now_2,
1571 'bot_dimensions': bot_dimensions, 1604 'bot_dimensions': bot_dimensions,
1572 'bot_id': u'localhost-second', 1605 'bot_id': u'localhost-second',
1573 'bot_version': u'abc', 1606 'bot_version': u'abc',
1607 'cipd_pins': None,
1574 'children_task_ids': [], 1608 'children_task_ids': [],
1575 'completed_ts': None, 1609 'completed_ts': None,
1576 'costs_usd': [0., 0.], 1610 'costs_usd': [0., 0.],
1577 'cost_saved_usd': None, 1611 'cost_saved_usd': None,
1578 'created_ts': self.now, 1612 'created_ts': self.now,
1579 'deduped_from': None, 1613 'deduped_from': None,
1580 'duration': None, 1614 'duration': None,
1581 'exit_code': None, 1615 'exit_code': None,
1582 'failure': False, 1616 'failure': False,
1583 'id': '1d69b9f088008810', 1617 'id': '1d69b9f088008810',
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1627 (['1d69b9f088008811'], 0, 0), 1661 (['1d69b9f088008811'], 0, 0),
1628 task_scheduler.cron_handle_bot_died('f.local')) 1662 task_scheduler.cron_handle_bot_died('f.local'))
1629 1663
1630 1664
1631 if __name__ == '__main__': 1665 if __name__ == '__main__':
1632 if '-v' in sys.argv: 1666 if '-v' in sys.argv:
1633 unittest.TestCase.maxDiff = None 1667 unittest.TestCase.maxDiff = None
1634 logging.basicConfig( 1668 logging.basicConfig(
1635 level=logging.DEBUG if '-v' in sys.argv else logging.CRITICAL) 1669 level=logging.DEBUG if '-v' in sys.argv else logging.CRITICAL)
1636 unittest.main() 1670 unittest.main()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698