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

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: Fix bottest 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 logging 7 import logging
8 import os 8 import os
9 import random 9 import random
10 import sys 10 import sys
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after
265 bot_dimensions, 'localhost', 'abc', None) 265 bot_dimensions, 'localhost', 'abc', None)
266 self.assertEqual(request, actual_request) 266 self.assertEqual(request, actual_request)
267 self.assertEqual('localhost', run_result.bot_id) 267 self.assertEqual('localhost', run_result.bot_id)
268 self.assertEqual(None, task_to_run.TaskToRun.query().get().queue_number) 268 self.assertEqual(None, task_to_run.TaskToRun.query().get().queue_number)
269 # It's important to terminate the task with success. 269 # It's important to terminate the task with success.
270 self.assertEqual( 270 self.assertEqual(
271 task_result.State.COMPLETED, 271 task_result.State.COMPLETED,
272 task_scheduler.bot_update_task( 272 task_scheduler.bot_update_task(
273 run_result_key=run_result.key, 273 run_result_key=run_result.key,
274 bot_id='localhost', 274 bot_id='localhost',
275 cipd_pins=None,
275 output='Foo1', 276 output='Foo1',
276 output_chunk_start=0, 277 output_chunk_start=0,
277 exit_code=0, 278 exit_code=0,
278 duration=0.1, 279 duration=0.1,
279 hard_timeout=False, 280 hard_timeout=False,
280 io_timeout=False, 281 io_timeout=False,
281 cost_usd=0.1, 282 cost_usd=0.1,
282 outputs_ref=None, 283 outputs_ref=None,
283 performance_stats=None)) 284 performance_stats=None))
284 return unicode(run_result.task_id) 285 return unicode(run_result.task_id)
(...skipping 18 matching lines...) Expand all
303 self.assertEqual(None, task_to_run.TaskToRun.query().get().queue_number) 304 self.assertEqual(None, task_to_run.TaskToRun.query().get().queue_number)
304 actual_request_2, run_result_2 = task_scheduler.bot_reap_task( 305 actual_request_2, run_result_2 = task_scheduler.bot_reap_task(
305 bot_dimensions, 'localhost', 'abc', None) 306 bot_dimensions, 'localhost', 'abc', None)
306 self.assertEqual(None, actual_request_2) 307 self.assertEqual(None, actual_request_2)
307 result_summary_duped, run_results_duped = get_results(request.key) 308 result_summary_duped, run_results_duped = get_results(request.key)
308 expected = { 309 expected = {
309 'abandoned_ts': None, 310 'abandoned_ts': None,
310 'bot_dimensions': bot_dimensions, 311 'bot_dimensions': bot_dimensions,
311 'bot_id': u'localhost', 312 'bot_id': u'localhost',
312 'bot_version': u'abc', 313 'bot_version': u'abc',
314 'cipd_pins': None,
313 'children_task_ids': [], 315 'children_task_ids': [],
314 'completed_ts': now or self.now, 316 'completed_ts': now or self.now,
315 'costs_usd': [], 317 'costs_usd': [],
316 'cost_saved_usd': 0.1, 318 'cost_saved_usd': 0.1,
317 'created_ts': new_ts, 319 'created_ts': new_ts,
318 'deduped_from': deduped_from, 320 'deduped_from': deduped_from,
319 'duration': 0.1, 321 'duration': 0.1,
320 'exit_code': 0, 322 'exit_code': 0,
321 'failure': False, 323 'failure': False,
322 'id': task_id, 324 'id': task_id,
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
463 bot_dimensions, 'localhost', 'abc', None) 465 bot_dimensions, 'localhost', 'abc', None)
464 self.assertEqual(request, actual_request) 466 self.assertEqual(request, actual_request)
465 self.assertEqual('localhost', run_result.bot_id) 467 self.assertEqual('localhost', run_result.bot_id)
466 self.assertEqual(None, task_to_run.TaskToRun.query().get().queue_number) 468 self.assertEqual(None, task_to_run.TaskToRun.query().get().queue_number)
467 # It's important to terminate the task with success. 469 # It's important to terminate the task with success.
468 self.assertEqual( 470 self.assertEqual(
469 task_result.State.COMPLETED, 471 task_result.State.COMPLETED,
470 task_scheduler.bot_update_task( 472 task_scheduler.bot_update_task(
471 run_result_key=run_result.key, 473 run_result_key=run_result.key,
472 bot_id='localhost', 474 bot_id='localhost',
475 cipd_pins=None,
473 output='Foo1', 476 output='Foo1',
474 output_chunk_start=0, 477 output_chunk_start=0,
475 exit_code=0, 478 exit_code=0,
476 duration=0.1, 479 duration=0.1,
477 hard_timeout=False, 480 hard_timeout=False,
478 io_timeout=False, 481 io_timeout=False,
479 cost_usd=0.1, 482 cost_usd=0.1,
480 outputs_ref=None, 483 outputs_ref=None,
481 performance_stats=None)) 484 performance_stats=None))
482 485
(...skipping 28 matching lines...) Expand all
511 _result_summary = task_scheduler.schedule_request(request) 514 _result_summary = task_scheduler.schedule_request(request)
512 515
513 # The TaskRequest was enqueued, the TaskResultSummary was created but no 516 # The TaskRequest was enqueued, the TaskResultSummary was created but no
514 # TaskRunResult exist yet since the task was not scheduled on any bot. 517 # TaskRunResult exist yet since the task was not scheduled on any bot.
515 result_summary, run_results = get_results(request.key) 518 result_summary, run_results = get_results(request.key)
516 expected = { 519 expected = {
517 'abandoned_ts': None, 520 'abandoned_ts': None,
518 'bot_dimensions': None, 521 'bot_dimensions': None,
519 'bot_id': None, 522 'bot_id': None,
520 'bot_version': None, 523 'bot_version': None,
524 'cipd_pins': None,
521 'children_task_ids': [], 525 'children_task_ids': [],
522 'completed_ts': None, 526 'completed_ts': None,
523 'costs_usd': [], 527 'costs_usd': [],
524 'cost_saved_usd': None, 528 'cost_saved_usd': None,
525 'created_ts': created_ts, 529 'created_ts': created_ts,
526 'deduped_from': None, 530 'deduped_from': None,
527 'duration': None, 531 'duration': None,
528 'exit_code': None, 532 'exit_code': None,
529 'failure': False, 533 'failure': False,
530 'id': '1d69b9f088008810', 534 'id': '1d69b9f088008810',
(...skipping 25 matching lines...) Expand all
556 reaped_request, run_result = task_scheduler.bot_reap_task( 560 reaped_request, run_result = task_scheduler.bot_reap_task(
557 bot_dimensions, 'localhost', 'abc', None) 561 bot_dimensions, 'localhost', 'abc', None)
558 self.assertEqual(request, reaped_request) 562 self.assertEqual(request, reaped_request)
559 self.assertTrue(run_result) 563 self.assertTrue(run_result)
560 result_summary, run_results = get_results(request.key) 564 result_summary, run_results = get_results(request.key)
561 expected = { 565 expected = {
562 'abandoned_ts': None, 566 'abandoned_ts': None,
563 'bot_dimensions': bot_dimensions, 567 'bot_dimensions': bot_dimensions,
564 'bot_id': u'localhost', 568 'bot_id': u'localhost',
565 'bot_version': u'abc', 569 'bot_version': u'abc',
570 'cipd_pins': None,
566 'children_task_ids': [], 571 'children_task_ids': [],
567 'completed_ts': None, 572 'completed_ts': None,
568 'costs_usd': [0.], 573 'costs_usd': [0.],
569 'cost_saved_usd': None, 574 'cost_saved_usd': None,
570 'created_ts': created_ts, # Time the TaskRequest was created. 575 'created_ts': created_ts, # Time the TaskRequest was created.
571 'deduped_from': None, 576 'deduped_from': None,
572 'duration': None, 577 'duration': None,
573 'exit_code': None, 578 'exit_code': None,
574 'failure': False, 579 'failure': False,
575 'id': '1d69b9f088008810', 580 'id': '1d69b9f088008810',
(...skipping 15 matching lines...) Expand all
591 'try_number': 1, 596 'try_number': 1,
592 'user': u'Jesus', 597 'user': u'Jesus',
593 } 598 }
594 self.assertEqual(expected, result_summary.to_dict()) 599 self.assertEqual(expected, result_summary.to_dict())
595 expected = [ 600 expected = [
596 { 601 {
597 'abandoned_ts': None, 602 'abandoned_ts': None,
598 'bot_dimensions': bot_dimensions, 603 'bot_dimensions': bot_dimensions,
599 'bot_id': u'localhost', 604 'bot_id': u'localhost',
600 'bot_version': u'abc', 605 'bot_version': u'abc',
606 'cipd_pins': None,
601 'children_task_ids': [], 607 'children_task_ids': [],
602 'completed_ts': None, 608 'completed_ts': None,
603 'cost_usd': 0., 609 'cost_usd': 0.,
604 'duration': None, 610 'duration': None,
605 'exit_code': None, 611 'exit_code': None,
606 'failure': False, 612 'failure': False,
607 'id': '1d69b9f088008811', 613 'id': '1d69b9f088008811',
608 'internal_failure': False, 614 'internal_failure': False,
609 'modified_ts': reaped_ts, 615 'modified_ts': reaped_ts,
610 'outputs_ref': None, 616 'outputs_ref': None,
(...skipping 20 matching lines...) Expand all
631 items_hot='bb'), 637 items_hot='bb'),
632 isolated_upload=task_result.OperationStats( 638 isolated_upload=task_result.OperationStats(
633 duration=0.1, 639 duration=0.1,
634 items_cold='aa', 640 items_cold='aa',
635 items_hot='bb')) 641 items_hot='bb'))
636 self.assertEqual( 642 self.assertEqual(
637 task_result.State.COMPLETED, 643 task_result.State.COMPLETED,
638 task_scheduler.bot_update_task( 644 task_scheduler.bot_update_task(
639 run_result_key=run_result.key, 645 run_result_key=run_result.key,
640 bot_id='localhost', 646 bot_id='localhost',
647 cipd_pins=None,
641 output='Foo1', 648 output='Foo1',
642 output_chunk_start=0, 649 output_chunk_start=0,
643 exit_code=0, 650 exit_code=0,
644 duration=3., 651 duration=3.,
645 hard_timeout=False, 652 hard_timeout=False,
646 io_timeout=False, 653 io_timeout=False,
647 cost_usd=0.1, 654 cost_usd=0.1,
648 outputs_ref=outputs_ref, 655 outputs_ref=outputs_ref,
649 performance_stats=performance_stats)) 656 performance_stats=performance_stats))
650 # Simulate an unexpected retry, e.g. the response of the previous RPC never 657 # Simulate an unexpected retry, e.g. the response of the previous RPC never
651 # got the the client even if it succeedded. 658 # got the the client even if it succeedded.
652 self.assertEqual( 659 self.assertEqual(
653 task_result.State.COMPLETED, 660 task_result.State.COMPLETED,
654 task_scheduler.bot_update_task( 661 task_scheduler.bot_update_task(
655 run_result_key=run_result.key, 662 run_result_key=run_result.key,
656 bot_id='localhost', 663 bot_id='localhost',
664 cipd_pins=None,
657 output='Foo1', 665 output='Foo1',
658 output_chunk_start=0, 666 output_chunk_start=0,
659 exit_code=0, 667 exit_code=0,
660 duration=3., 668 duration=3.,
661 hard_timeout=False, 669 hard_timeout=False,
662 io_timeout=False, 670 io_timeout=False,
663 cost_usd=0.1, 671 cost_usd=0.1,
664 outputs_ref=outputs_ref, 672 outputs_ref=outputs_ref,
665 performance_stats=performance_stats)) 673 performance_stats=performance_stats))
666 result_summary, run_results = get_results(request.key) 674 result_summary, run_results = get_results(request.key)
667 expected = { 675 expected = {
668 'abandoned_ts': None, 676 'abandoned_ts': None,
669 'bot_dimensions': bot_dimensions, 677 'bot_dimensions': bot_dimensions,
670 'bot_id': u'localhost', 678 'bot_id': u'localhost',
671 'bot_version': u'abc', 679 'bot_version': u'abc',
680 'cipd_pins': None,
672 'children_task_ids': [], 681 'children_task_ids': [],
673 'completed_ts': done_ts, 682 'completed_ts': done_ts,
674 'costs_usd': [0.1], 683 'costs_usd': [0.1],
675 'cost_saved_usd': None, 684 'cost_saved_usd': None,
676 'created_ts': created_ts, 685 'created_ts': created_ts,
677 'deduped_from': None, 686 'deduped_from': None,
678 'duration': 3.0, 687 'duration': 3.0,
679 'exit_code': 0, 688 'exit_code': 0,
680 'failure': False, 689 'failure': False,
681 'id': '1d69b9f088008810', 690 'id': '1d69b9f088008810',
(...skipping 19 matching lines...) Expand all
701 'try_number': 1, 710 'try_number': 1,
702 'user': u'Jesus', 711 'user': u'Jesus',
703 } 712 }
704 self.assertEqual(expected, result_summary.to_dict()) 713 self.assertEqual(expected, result_summary.to_dict())
705 expected = [ 714 expected = [
706 { 715 {
707 'abandoned_ts': None, 716 'abandoned_ts': None,
708 'bot_dimensions': bot_dimensions, 717 'bot_dimensions': bot_dimensions,
709 'bot_id': u'localhost', 718 'bot_id': u'localhost',
710 'bot_version': u'abc', 719 'bot_version': u'abc',
720 'cipd_pins': None,
711 'children_task_ids': [], 721 'children_task_ids': [],
712 'completed_ts': done_ts, 722 'completed_ts': done_ts,
713 'cost_usd': 0.1, 723 'cost_usd': 0.1,
714 'duration': 3.0, 724 'duration': 3.0,
715 'exit_code': 0, 725 'exit_code': 0,
716 'failure': False, 726 'failure': False,
717 'id': '1d69b9f088008811', 727 'id': '1d69b9f088008811',
718 'internal_failure': False, 728 'internal_failure': False,
719 'modified_ts': done_ts, 729 'modified_ts': done_ts,
720 'outputs_ref': { 730 'outputs_ref': {
(...skipping 19 matching lines...) Expand all
740 _result_summary = task_scheduler.schedule_request(request) 750 _result_summary = task_scheduler.schedule_request(request)
741 bot_dimensions = {'OS': 'Windows-3.1.1', u'pool': u'default'} 751 bot_dimensions = {'OS': 'Windows-3.1.1', u'pool': u'default'}
742 reaped_request, run_result = task_scheduler.bot_reap_task( 752 reaped_request, run_result = task_scheduler.bot_reap_task(
743 bot_dimensions, 'localhost', 'abc', None) 753 bot_dimensions, 'localhost', 'abc', None)
744 self.assertEqual(request, reaped_request) 754 self.assertEqual(request, reaped_request)
745 self.assertEqual( 755 self.assertEqual(
746 task_result.State.COMPLETED, 756 task_result.State.COMPLETED,
747 task_scheduler.bot_update_task( 757 task_scheduler.bot_update_task(
748 run_result_key=run_result.key, 758 run_result_key=run_result.key,
749 bot_id='localhost', 759 bot_id='localhost',
760 cipd_pins=None,
750 output='Foo1', 761 output='Foo1',
751 output_chunk_start=0, 762 output_chunk_start=0,
752 exit_code=1, 763 exit_code=1,
753 duration=0.1, 764 duration=0.1,
754 hard_timeout=False, 765 hard_timeout=False,
755 io_timeout=False, 766 io_timeout=False,
756 cost_usd=0.1, 767 cost_usd=0.1,
757 outputs_ref=None, 768 outputs_ref=None,
758 performance_stats=None)) 769 performance_stats=None))
759 result_summary, run_results = get_results(request.key) 770 result_summary, run_results = get_results(request.key)
760 771
761 expected = { 772 expected = {
762 'abandoned_ts': None, 773 'abandoned_ts': None,
763 'bot_dimensions': bot_dimensions, 774 'bot_dimensions': bot_dimensions,
764 'bot_id': u'localhost', 775 'bot_id': u'localhost',
765 'bot_version': u'abc', 776 'bot_version': u'abc',
777 'cipd_pins': None,
766 'children_task_ids': [], 778 'children_task_ids': [],
767 'completed_ts': self.now, 779 'completed_ts': self.now,
768 'costs_usd': [0.1], 780 'costs_usd': [0.1],
769 'cost_saved_usd': None, 781 'cost_saved_usd': None,
770 'created_ts': self.now, 782 'created_ts': self.now,
771 'deduped_from': None, 783 'deduped_from': None,
772 'duration': 0.1, 784 'duration': 0.1,
773 'exit_code': 1, 785 'exit_code': 1,
774 'failure': True, 786 'failure': True,
775 'id': '1d69b9f088008810', 787 'id': '1d69b9f088008810',
(...skipping 16 matching lines...) Expand all
792 'user': u'Jesus', 804 'user': u'Jesus',
793 } 805 }
794 self.assertEqual(expected, result_summary.to_dict()) 806 self.assertEqual(expected, result_summary.to_dict())
795 807
796 expected = [ 808 expected = [
797 { 809 {
798 'abandoned_ts': None, 810 'abandoned_ts': None,
799 'bot_dimensions': bot_dimensions, 811 'bot_dimensions': bot_dimensions,
800 'bot_id': u'localhost', 812 'bot_id': u'localhost',
801 'bot_version': u'abc', 813 'bot_version': u'abc',
814 'cipd_pins': None,
802 'children_task_ids': [], 815 'children_task_ids': [],
803 'completed_ts': self.now, 816 'completed_ts': self.now,
804 'cost_usd': 0.1, 817 'cost_usd': 0.1,
805 'duration': 0.1, 818 'duration': 0.1,
806 'exit_code': 1, 819 'exit_code': 1,
807 'failure': True, 820 'failure': True,
808 'id': '1d69b9f088008811', 821 'id': '1d69b9f088008811',
809 'internal_failure': False, 822 'internal_failure': False,
810 'modified_ts': self.now, 823 'modified_ts': self.now,
811 'outputs_ref': None, 824 'outputs_ref': None,
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
864 with self.assertRaises(auth.AuthorizationError): 877 with self.assertRaises(auth.AuthorizationError):
865 _quick_schedule({u'id': u'abc', u'pool': u'bad'}) 878 _quick_schedule({u'id': u'abc', u'pool': u'bad'})
866 879
867 def test_bot_update_task(self): 880 def test_bot_update_task(self):
868 run_result = _quick_reap() 881 run_result = _quick_reap()
869 self.assertEqual( 882 self.assertEqual(
870 task_result.State.RUNNING, 883 task_result.State.RUNNING,
871 task_scheduler.bot_update_task( 884 task_scheduler.bot_update_task(
872 run_result_key=run_result.key, 885 run_result_key=run_result.key,
873 bot_id='localhost', 886 bot_id='localhost',
887 cipd_pins=None,
874 output='hi', 888 output='hi',
875 output_chunk_start=0, 889 output_chunk_start=0,
876 exit_code=None, 890 exit_code=None,
877 duration=None, 891 duration=None,
878 hard_timeout=False, 892 hard_timeout=False,
879 io_timeout=False, 893 io_timeout=False,
880 cost_usd=0.1, 894 cost_usd=0.1,
881 outputs_ref=None, 895 outputs_ref=None,
882 performance_stats=None)) 896 performance_stats=None))
883 self.assertEqual( 897 self.assertEqual(
884 task_result.State.COMPLETED, 898 task_result.State.COMPLETED,
885 task_scheduler.bot_update_task( 899 task_scheduler.bot_update_task(
886 run_result_key=run_result.key, 900 run_result_key=run_result.key,
887 bot_id='localhost', 901 bot_id='localhost',
902 cipd_pins=None,
888 output='hey', 903 output='hey',
889 output_chunk_start=2, 904 output_chunk_start=2,
890 exit_code=0, 905 exit_code=0,
891 duration=0.1, 906 duration=0.1,
892 hard_timeout=False, 907 hard_timeout=False,
893 io_timeout=False, 908 io_timeout=False,
894 cost_usd=0.1, 909 cost_usd=0.1,
895 outputs_ref=None, 910 outputs_ref=None,
896 performance_stats=None)) 911 performance_stats=None))
897 self.assertEqual('hihey', run_result.key.get().get_output()) 912 self.assertEqual('hihey', run_result.key.get().get_output())
898 913
899 def test_bot_update_task_new_overwrite(self): 914 def test_bot_update_task_new_overwrite(self):
900 run_result = _quick_reap() 915 run_result = _quick_reap()
901 self.assertEqual( 916 self.assertEqual(
902 task_result.State.RUNNING, 917 task_result.State.RUNNING,
903 task_scheduler.bot_update_task( 918 task_scheduler.bot_update_task(
904 run_result_key=run_result.key, 919 run_result_key=run_result.key,
905 bot_id='localhost', 920 bot_id='localhost',
921 cipd_pins=None,
906 output='hi', 922 output='hi',
907 output_chunk_start=0, 923 output_chunk_start=0,
908 exit_code=None, 924 exit_code=None,
909 duration=None, 925 duration=None,
910 hard_timeout=False, 926 hard_timeout=False,
911 io_timeout=False, 927 io_timeout=False,
912 cost_usd=0.1, 928 cost_usd=0.1,
913 outputs_ref=None, 929 outputs_ref=None,
914 performance_stats=None)) 930 performance_stats=None))
915 self.assertEqual( 931 self.assertEqual(
916 task_result.State.RUNNING, 932 task_result.State.RUNNING,
917 task_scheduler.bot_update_task( 933 task_scheduler.bot_update_task(
918 run_result_key=run_result.key, 934 run_result_key=run_result.key,
919 bot_id='localhost', 935 bot_id='localhost',
936 cipd_pins=None,
920 output='hey', 937 output='hey',
921 output_chunk_start=1, 938 output_chunk_start=1,
922 exit_code=None, 939 exit_code=None,
923 duration=None, 940 duration=None,
924 hard_timeout=False, 941 hard_timeout=False,
925 io_timeout=False, 942 io_timeout=False,
926 cost_usd=0.1, 943 cost_usd=0.1,
927 outputs_ref=None, 944 outputs_ref=None,
928 performance_stats=None)) 945 performance_stats=None))
929 self.assertEqual('hhey', run_result.key.get().get_output()) 946 self.assertEqual('hhey', run_result.key.get().get_output())
930 947
931 def test_bot_update_exception(self): 948 def test_bot_update_exception(self):
932 run_result = _quick_reap() 949 run_result = _quick_reap()
933 def r(*_): 950 def r(*_):
934 raise datastore_utils.CommitError('Sorry!') 951 raise datastore_utils.CommitError('Sorry!')
935 952
936 self.mock(ndb, 'put_multi', r) 953 self.mock(ndb, 'put_multi', r)
937 self.assertEqual( 954 self.assertEqual(
938 None, 955 None,
939 task_scheduler.bot_update_task( 956 task_scheduler.bot_update_task(
940 run_result_key=run_result.key, 957 run_result_key=run_result.key,
941 bot_id='localhost', 958 bot_id='localhost',
959 cipd_pins=None,
942 output='hi', 960 output='hi',
943 output_chunk_start=0, 961 output_chunk_start=0,
944 exit_code=0, 962 exit_code=0,
945 duration=0.1, 963 duration=0.1,
946 hard_timeout=False, 964 hard_timeout=False,
947 io_timeout=False, 965 io_timeout=False,
948 cost_usd=0.1, 966 cost_usd=0.1,
949 outputs_ref=None, 967 outputs_ref=None,
950 performance_stats=None)) 968 performance_stats=None))
951 969
(...skipping 15 matching lines...) Expand all
967 bot_dimensions, 'localhost', 'abc', None) 985 bot_dimensions, 'localhost', 'abc', None)
968 self.assertEqual('localhost', run_result.bot_id) 986 self.assertEqual('localhost', run_result.bot_id)
969 987
970 # Attempt to terminate the task with success, but make PubSub call fail. 988 # Attempt to terminate the task with success, but make PubSub call fail.
971 self.mock_pub_sub(publish_successful=False) 989 self.mock_pub_sub(publish_successful=False)
972 self.assertEqual( 990 self.assertEqual(
973 None, 991 None,
974 task_scheduler.bot_update_task( 992 task_scheduler.bot_update_task(
975 run_result_key=run_result.key, 993 run_result_key=run_result.key,
976 bot_id='localhost', 994 bot_id='localhost',
995 cipd_pins=None,
977 output='Foo1', 996 output='Foo1',
978 output_chunk_start=0, 997 output_chunk_start=0,
979 exit_code=0, 998 exit_code=0,
980 duration=0.1, 999 duration=0.1,
981 hard_timeout=False, 1000 hard_timeout=False,
982 io_timeout=False, 1001 io_timeout=False,
983 cost_usd=0.1, 1002 cost_usd=0.1,
984 outputs_ref=None, 1003 outputs_ref=None,
985 performance_stats=None)) 1004 performance_stats=None))
986 1005
987 # Bot retries bot_update, now PubSub works and notification is sent. 1006 # Bot retries bot_update, now PubSub works and notification is sent.
988 pub_sub_calls = self.mock_pub_sub(publish_successful=True) 1007 pub_sub_calls = self.mock_pub_sub(publish_successful=True)
989 self.assertEqual( 1008 self.assertEqual(
990 task_result.State.COMPLETED, 1009 task_result.State.COMPLETED,
991 task_scheduler.bot_update_task( 1010 task_scheduler.bot_update_task(
992 run_result_key=run_result.key, 1011 run_result_key=run_result.key,
993 bot_id='localhost', 1012 bot_id='localhost',
1013 cipd_pins=None,
994 output='Foo1', 1014 output='Foo1',
995 output_chunk_start=0, 1015 output_chunk_start=0,
996 exit_code=0, 1016 exit_code=0,
997 duration=0.1, 1017 duration=0.1,
998 hard_timeout=False, 1018 hard_timeout=False,
999 io_timeout=False, 1019 io_timeout=False,
1000 cost_usd=0.1, 1020 cost_usd=0.1,
1001 outputs_ref=None, 1021 outputs_ref=None,
1002 performance_stats=None)) 1022 performance_stats=None))
1003 self.assertEqual(1, len(pub_sub_calls)) # notification is sent 1023 self.assertEqual(1, len(pub_sub_calls)) # notification is sent
1004 1024
1005 def _bot_update_timeouts(self, hard, io): 1025 def _bot_update_timeouts(self, hard, io):
1006 self.mock(random, 'getrandbits', lambda _: 0x88) 1026 self.mock(random, 'getrandbits', lambda _: 0x88)
1007 request = _gen_request( 1027 request = _gen_request(
1008 properties={ 1028 properties={
1009 'dimensions': {u'OS': u'Windows-3.1.1', u'pool': u'default'}, 1029 'dimensions': {u'OS': u'Windows-3.1.1', u'pool': u'default'},
1010 }) 1030 })
1011 task_request.init_new_request(request, True) 1031 task_request.init_new_request(request, True)
1012 result_summary = task_scheduler.schedule_request(request) 1032 result_summary = task_scheduler.schedule_request(request)
1013 bot_dimensions = {'OS': 'Windows-3.1.1', u'pool': u'default'} 1033 bot_dimensions = {'OS': 'Windows-3.1.1', u'pool': u'default'}
1014 reaped_request, run_result = task_scheduler.bot_reap_task( 1034 reaped_request, run_result = task_scheduler.bot_reap_task(
1015 bot_dimensions, 'localhost', 'abc', None) 1035 bot_dimensions, 'localhost', 'abc', None)
1016 self.assertEqual( 1036 self.assertEqual(
1017 task_result.State.TIMED_OUT, 1037 task_result.State.TIMED_OUT,
1018 task_scheduler.bot_update_task( 1038 task_scheduler.bot_update_task(
1019 run_result_key=run_result.key, 1039 run_result_key=run_result.key,
1020 bot_id='localhost', 1040 bot_id='localhost',
1041 cipd_pins=None,
1021 output='hi', 1042 output='hi',
1022 output_chunk_start=0, 1043 output_chunk_start=0,
1023 exit_code=0, 1044 exit_code=0,
1024 duration=0.1, 1045 duration=0.1,
1025 hard_timeout=hard, 1046 hard_timeout=hard,
1026 io_timeout=io, 1047 io_timeout=io,
1027 cost_usd=0.1, 1048 cost_usd=0.1,
1028 outputs_ref=None, 1049 outputs_ref=None,
1029 performance_stats=None)) 1050 performance_stats=None))
1030 expected = { 1051 expected = {
1031 'abandoned_ts': None, 1052 'abandoned_ts': None,
1032 'bot_dimensions': bot_dimensions, 1053 'bot_dimensions': bot_dimensions,
1033 'bot_id': u'localhost', 1054 'bot_id': u'localhost',
1034 'bot_version': u'abc', 1055 'bot_version': u'abc',
1056 'cipd_pins': None,
1035 'children_task_ids': [], 1057 'children_task_ids': [],
1036 'completed_ts': self.now, 1058 'completed_ts': self.now,
1037 'costs_usd': [0.1], 1059 'costs_usd': [0.1],
1038 'cost_saved_usd': None, 1060 'cost_saved_usd': None,
1039 'created_ts': self.now, 1061 'created_ts': self.now,
1040 'deduped_from': None, 1062 'deduped_from': None,
1041 'duration': 0.1, 1063 'duration': 0.1,
1042 'exit_code': 0, 1064 'exit_code': 0,
1043 'failure': True, 1065 'failure': True,
1044 'id': '1d69b9f088008810', 1066 'id': '1d69b9f088008810',
(...skipping 15 matching lines...) Expand all
1060 'try_number': 1, 1082 'try_number': 1,
1061 'user': u'Jesus', 1083 'user': u'Jesus',
1062 } 1084 }
1063 self.assertEqual(expected, result_summary.key.get().to_dict()) 1085 self.assertEqual(expected, result_summary.key.get().to_dict())
1064 1086
1065 expected = { 1087 expected = {
1066 'abandoned_ts': None, 1088 'abandoned_ts': None,
1067 'bot_dimensions': bot_dimensions, 1089 'bot_dimensions': bot_dimensions,
1068 'bot_id': u'localhost', 1090 'bot_id': u'localhost',
1069 'bot_version': u'abc', 1091 'bot_version': u'abc',
1092 'cipd_pins': None,
1070 'children_task_ids': [], 1093 'children_task_ids': [],
1071 'completed_ts': self.now, 1094 'completed_ts': self.now,
1072 'cost_usd': 0.1, 1095 'cost_usd': 0.1,
1073 'duration': 0.1, 1096 'duration': 0.1,
1074 'exit_code': 0, 1097 'exit_code': 0,
1075 'failure': True, 1098 'failure': True,
1076 'id': '1d69b9f088008811', 1099 'id': '1d69b9f088008811',
1077 'internal_failure': False, 1100 'internal_failure': False,
1078 'modified_ts': self.now, 1101 'modified_ts': self.now,
1079 'outputs_ref': None, 1102 'outputs_ref': None,
(...skipping 22 matching lines...) Expand all
1102 reaped_request, run_result = task_scheduler.bot_reap_task( 1125 reaped_request, run_result = task_scheduler.bot_reap_task(
1103 {'OS': 'Windows-3.1.1', u'pool': u'default'}, 'localhost', 'abc', None) 1126 {'OS': 'Windows-3.1.1', u'pool': u'default'}, 'localhost', 'abc', None)
1104 1127
1105 self.assertEqual( 1128 self.assertEqual(
1106 None, task_scheduler.bot_kill_task(run_result.key, 'localhost')) 1129 None, task_scheduler.bot_kill_task(run_result.key, 'localhost'))
1107 expected = { 1130 expected = {
1108 'abandoned_ts': self.now, 1131 'abandoned_ts': self.now,
1109 'bot_dimensions': dimensions, 1132 'bot_dimensions': dimensions,
1110 'bot_id': u'localhost', 1133 'bot_id': u'localhost',
1111 'bot_version': u'abc', 1134 'bot_version': u'abc',
1135 'cipd_pins': None,
1112 'children_task_ids': [], 1136 'children_task_ids': [],
1113 'completed_ts': None, 1137 'completed_ts': None,
1114 'costs_usd': [0.], 1138 'costs_usd': [0.],
1115 'cost_saved_usd': None, 1139 'cost_saved_usd': None,
1116 'created_ts': self.now, 1140 'created_ts': self.now,
1117 'deduped_from': None, 1141 'deduped_from': None,
1118 'duration': None, 1142 'duration': None,
1119 'exit_code': None, 1143 'exit_code': None,
1120 'failure': False, 1144 'failure': False,
1121 'id': '1d69b9f088008810', 1145 'id': '1d69b9f088008810',
(...skipping 14 matching lines...) Expand all
1136 ], 1160 ],
1137 'try_number': 1, 1161 'try_number': 1,
1138 'user': u'Jesus', 1162 'user': u'Jesus',
1139 } 1163 }
1140 self.assertEqual(expected, result_summary.key.get().to_dict()) 1164 self.assertEqual(expected, result_summary.key.get().to_dict())
1141 expected = { 1165 expected = {
1142 'abandoned_ts': self.now, 1166 'abandoned_ts': self.now,
1143 'bot_dimensions': dimensions, 1167 'bot_dimensions': dimensions,
1144 'bot_id': u'localhost', 1168 'bot_id': u'localhost',
1145 'bot_version': u'abc', 1169 'bot_version': u'abc',
1170 'cipd_pins': None,
1146 'children_task_ids': [], 1171 'children_task_ids': [],
1147 'completed_ts': None, 1172 'completed_ts': None,
1148 'cost_usd': 0., 1173 'cost_usd': 0.,
1149 'duration': None, 1174 'duration': None,
1150 'exit_code': None, 1175 'exit_code': None,
1151 'failure': False, 1176 'failure': False,
1152 'id': '1d69b9f088008811', 1177 'id': '1d69b9f088008811',
1153 'internal_failure': True, 1178 'internal_failure': True,
1154 'modified_ts': self.now, 1179 'modified_ts': self.now,
1155 'outputs_ref': None, 1180 'outputs_ref': None,
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
1224 abandoned_ts = self.mock_now(self.now, request.expiration_secs+1) 1249 abandoned_ts = self.mock_now(self.now, request.expiration_secs+1)
1225 self.assertEqual( 1250 self.assertEqual(
1226 ['1d69b9f088008810'], 1251 ['1d69b9f088008810'],
1227 task_scheduler.cron_abort_expired_task_to_run('f.local')) 1252 task_scheduler.cron_abort_expired_task_to_run('f.local'))
1228 self.assertEqual([], task_result.TaskRunResult.query().fetch()) 1253 self.assertEqual([], task_result.TaskRunResult.query().fetch())
1229 expected = { 1254 expected = {
1230 'abandoned_ts': abandoned_ts, 1255 'abandoned_ts': abandoned_ts,
1231 'bot_dimensions': None, 1256 'bot_dimensions': None,
1232 'bot_id': None, 1257 'bot_id': None,
1233 'bot_version': None, 1258 'bot_version': None,
1259 'cipd_pins': None,
1234 'children_task_ids': [], 1260 'children_task_ids': [],
1235 'completed_ts': None, 1261 'completed_ts': None,
1236 'costs_usd': [], 1262 'costs_usd': [],
1237 'cost_saved_usd': None, 1263 'cost_saved_usd': None,
1238 'created_ts': self.now, 1264 'created_ts': self.now,
1239 'deduped_from': None, 1265 'deduped_from': None,
1240 'duration': None, 1266 'duration': None,
1241 'exit_code': None, 1267 'exit_code': None,
1242 'failure': False, 1268 'failure': False,
1243 'id': '1d69b9f088008810', 1269 'id': '1d69b9f088008810',
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
1297 abandoned_ts = self.mock_now(self.now, request.expiration_secs+1) 1323 abandoned_ts = self.mock_now(self.now, request.expiration_secs+1)
1298 self.assertEqual( 1324 self.assertEqual(
1299 ['1d69b9f088008810'], 1325 ['1d69b9f088008810'],
1300 task_scheduler.cron_abort_expired_task_to_run('f.local')) 1326 task_scheduler.cron_abort_expired_task_to_run('f.local'))
1301 self.assertEqual(1, len(task_result.TaskRunResult.query().fetch())) 1327 self.assertEqual(1, len(task_result.TaskRunResult.query().fetch()))
1302 expected = { 1328 expected = {
1303 'abandoned_ts': abandoned_ts, 1329 'abandoned_ts': abandoned_ts,
1304 'bot_dimensions': bot_dimensions, 1330 'bot_dimensions': bot_dimensions,
1305 'bot_id': u'localhost', 1331 'bot_id': u'localhost',
1306 'bot_version': u'abc', 1332 'bot_version': u'abc',
1333 'cipd_pins': None,
1307 'children_task_ids': [], 1334 'children_task_ids': [],
1308 'completed_ts': None, 1335 'completed_ts': None,
1309 'costs_usd': [0.], 1336 'costs_usd': [0.],
1310 'cost_saved_usd': None, 1337 'cost_saved_usd': None,
1311 'created_ts': self.now, 1338 'created_ts': self.now,
1312 'deduped_from': None, 1339 'deduped_from': None,
1313 'duration': None, 1340 'duration': None,
1314 'exit_code': None, 1341 'exit_code': None,
1315 'failure': False, 1342 'failure': False,
1316 'id': '1d69b9f088008810', 1343 'id': '1d69b9f088008810',
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
1364 self.assertEqual(task_result.State.RUNNING, run_result.state) 1391 self.assertEqual(task_result.State.RUNNING, run_result.state)
1365 now_1 = self.mock_now(self.now + task_result.BOT_PING_TOLERANCE, 1) 1392 now_1 = self.mock_now(self.now + task_result.BOT_PING_TOLERANCE, 1)
1366 self.assertEqual(([], 1, 0), task_scheduler.cron_handle_bot_died('f.local')) 1393 self.assertEqual(([], 1, 0), task_scheduler.cron_handle_bot_died('f.local'))
1367 1394
1368 # Refresh and compare: 1395 # Refresh and compare:
1369 expected = { 1396 expected = {
1370 'abandoned_ts': now_1, 1397 'abandoned_ts': now_1,
1371 'bot_dimensions': bot_dimensions, 1398 'bot_dimensions': bot_dimensions,
1372 'bot_id': u'localhost', 1399 'bot_id': u'localhost',
1373 'bot_version': u'abc', 1400 'bot_version': u'abc',
1401 'cipd_pins': None,
1374 'children_task_ids': [], 1402 'children_task_ids': [],
1375 'completed_ts': None, 1403 'completed_ts': None,
1376 'cost_usd': 0., 1404 'cost_usd': 0.,
1377 'duration': None, 1405 'duration': None,
1378 'exit_code': None, 1406 'exit_code': None,
1379 'failure': False, 1407 'failure': False,
1380 'id': '1d69b9f088008811', 1408 'id': '1d69b9f088008811',
1381 'internal_failure': True, 1409 'internal_failure': True,
1382 'modified_ts': now_1, 1410 'modified_ts': now_1,
1383 'outputs_ref': None, 1411 'outputs_ref': None,
1384 'server_versions': [u'v1a'], 1412 'server_versions': [u'v1a'],
1385 'started_ts': self.now, 1413 'started_ts': self.now,
1386 'state': task_result.State.BOT_DIED, 1414 'state': task_result.State.BOT_DIED,
1387 'try_number': 1, 1415 'try_number': 1,
1388 } 1416 }
1389 self.assertEqual(expected, run_result.key.get().to_dict()) 1417 self.assertEqual(expected, run_result.key.get().to_dict())
1390 expected = { 1418 expected = {
1391 'abandoned_ts': None, 1419 'abandoned_ts': None,
1392 'bot_dimensions': bot_dimensions, 1420 'bot_dimensions': bot_dimensions,
1393 'bot_id': u'localhost', 1421 'bot_id': u'localhost',
1394 'bot_version': u'abc', 1422 'bot_version': u'abc',
1423 'cipd_pins': None,
1395 'children_task_ids': [], 1424 'children_task_ids': [],
1396 'completed_ts': None, 1425 'completed_ts': None,
1397 'costs_usd': [0.], 1426 'costs_usd': [0.],
1398 'cost_saved_usd': None, 1427 'cost_saved_usd': None,
1399 'created_ts': self.now, 1428 'created_ts': self.now,
1400 'deduped_from': None, 1429 'deduped_from': None,
1401 'duration': None, 1430 'duration': None,
1402 'exit_code': None, 1431 'exit_code': None,
1403 'failure': False, 1432 'failure': False,
1404 'id': '1d69b9f088008810', 1433 'id': '1d69b9f088008810',
(...skipping 24 matching lines...) Expand all
1429 now_2 = self.mock_now(self.now + task_result.BOT_PING_TOLERANCE, 2) 1458 now_2 = self.mock_now(self.now + task_result.BOT_PING_TOLERANCE, 2)
1430 _request, run_result = task_scheduler.bot_reap_task( 1459 _request, run_result = task_scheduler.bot_reap_task(
1431 bot_dimensions, 'localhost-second', 'abc', None) 1460 bot_dimensions, 'localhost-second', 'abc', None)
1432 logging.info('%s', [t.to_dict() for t in task_to_run.TaskToRun.query()]) 1461 logging.info('%s', [t.to_dict() for t in task_to_run.TaskToRun.query()])
1433 self.assertEqual(2, run_result.try_number) 1462 self.assertEqual(2, run_result.try_number)
1434 self.assertEqual( 1463 self.assertEqual(
1435 task_result.State.COMPLETED, 1464 task_result.State.COMPLETED,
1436 task_scheduler.bot_update_task( 1465 task_scheduler.bot_update_task(
1437 run_result_key=run_result.key, 1466 run_result_key=run_result.key,
1438 bot_id='localhost-second', 1467 bot_id='localhost-second',
1468 cipd_pins=None,
1439 output='Foo1', 1469 output='Foo1',
1440 output_chunk_start=0, 1470 output_chunk_start=0,
1441 exit_code=0, 1471 exit_code=0,
1442 duration=0.1, 1472 duration=0.1,
1443 hard_timeout=False, 1473 hard_timeout=False,
1444 io_timeout=False, 1474 io_timeout=False,
1445 cost_usd=0.1, 1475 cost_usd=0.1,
1446 outputs_ref=None, 1476 outputs_ref=None,
1447 performance_stats=None)) 1477 performance_stats=None))
1448 expected = { 1478 expected = {
1449 'abandoned_ts': None, 1479 'abandoned_ts': None,
1450 'bot_dimensions': bot_dimensions, 1480 'bot_dimensions': bot_dimensions,
1451 'bot_id': u'localhost-second', 1481 'bot_id': u'localhost-second',
1452 'bot_version': u'abc', 1482 'bot_version': u'abc',
1483 'cipd_pins': None,
1453 'children_task_ids': [], 1484 'children_task_ids': [],
1454 'completed_ts': now_2, 1485 'completed_ts': now_2,
1455 'costs_usd': [0., 0.1], 1486 'costs_usd': [0., 0.1],
1456 'cost_saved_usd': None, 1487 'cost_saved_usd': None,
1457 'created_ts': self.now, 1488 'created_ts': self.now,
1458 'deduped_from': None, 1489 'deduped_from': None,
1459 'duration': 0.1, 1490 'duration': 0.1,
1460 'exit_code': 0, 1491 'exit_code': 0,
1461 'failure': False, 1492 'failure': False,
1462 'id': '1d69b9f088008810', 1493 'id': '1d69b9f088008810',
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1508 self.assertEqual(task_result.State.RUNNING, run_result.state) 1539 self.assertEqual(task_result.State.RUNNING, run_result.state)
1509 now_1 = self.mock_now(self.now + task_result.BOT_PING_TOLERANCE, 1) 1540 now_1 = self.mock_now(self.now + task_result.BOT_PING_TOLERANCE, 1)
1510 self.assertEqual(([], 1, 0), task_scheduler.cron_handle_bot_died('f.local')) 1541 self.assertEqual(([], 1, 0), task_scheduler.cron_handle_bot_died('f.local'))
1511 1542
1512 # Refresh and compare: 1543 # Refresh and compare:
1513 expected = { 1544 expected = {
1514 'abandoned_ts': now_1, 1545 'abandoned_ts': now_1,
1515 'bot_dimensions': bot_dimensions, 1546 'bot_dimensions': bot_dimensions,
1516 'bot_id': u'localhost', 1547 'bot_id': u'localhost',
1517 'bot_version': u'abc', 1548 'bot_version': u'abc',
1549 'cipd_pins': None,
1518 'children_task_ids': [], 1550 'children_task_ids': [],
1519 'completed_ts': None, 1551 'completed_ts': None,
1520 'cost_usd': 0., 1552 'cost_usd': 0.,
1521 'duration': None, 1553 'duration': None,
1522 'exit_code': None, 1554 'exit_code': None,
1523 'failure': False, 1555 'failure': False,
1524 'id': '1d69b9f088008811', 1556 'id': '1d69b9f088008811',
1525 'internal_failure': True, 1557 'internal_failure': True,
1526 'modified_ts': now_1, 1558 'modified_ts': now_1,
1527 'outputs_ref': None, 1559 'outputs_ref': None,
1528 'server_versions': [u'v1a'], 1560 'server_versions': [u'v1a'],
1529 'started_ts': self.now, 1561 'started_ts': self.now,
1530 'state': task_result.State.BOT_DIED, 1562 'state': task_result.State.BOT_DIED,
1531 'try_number': 1, 1563 'try_number': 1,
1532 } 1564 }
1533 self.assertEqual(expected, run_result.key.get().to_dict()) 1565 self.assertEqual(expected, run_result.key.get().to_dict())
1534 expected = { 1566 expected = {
1535 'abandoned_ts': None, 1567 'abandoned_ts': None,
1536 'bot_dimensions': bot_dimensions, 1568 'bot_dimensions': bot_dimensions,
1537 'bot_id': u'localhost', 1569 'bot_id': u'localhost',
1538 'bot_version': u'abc', 1570 'bot_version': u'abc',
1571 'cipd_pins': None,
1539 'children_task_ids': [], 1572 'children_task_ids': [],
1540 'completed_ts': None, 1573 'completed_ts': None,
1541 'costs_usd': [0.], 1574 'costs_usd': [0.],
1542 'cost_saved_usd': None, 1575 'cost_saved_usd': None,
1543 'created_ts': self.now, 1576 'created_ts': self.now,
1544 'deduped_from': None, 1577 'deduped_from': None,
1545 'duration': None, 1578 'duration': None,
1546 'exit_code': None, 1579 'exit_code': None,
1547 'failure': False, 1580 'failure': False,
1548 'id': '1d69b9f088008810', 1581 'id': '1d69b9f088008810',
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
1605 now_2 = self.mock_now(self.now + 2 * task_result.BOT_PING_TOLERANCE, 3) 1638 now_2 = self.mock_now(self.now + 2 * task_result.BOT_PING_TOLERANCE, 3)
1606 self.assertEqual( 1639 self.assertEqual(
1607 (['1d69b9f088008812'], 0, 0), 1640 (['1d69b9f088008812'], 0, 0),
1608 task_scheduler.cron_handle_bot_died('f.local')) 1641 task_scheduler.cron_handle_bot_died('f.local'))
1609 self.assertEqual(([], 0, 0), task_scheduler.cron_handle_bot_died('f.local')) 1642 self.assertEqual(([], 0, 0), task_scheduler.cron_handle_bot_died('f.local'))
1610 expected = { 1643 expected = {
1611 'abandoned_ts': now_2, 1644 'abandoned_ts': now_2,
1612 'bot_dimensions': bot_dimensions, 1645 'bot_dimensions': bot_dimensions,
1613 'bot_id': u'localhost-second', 1646 'bot_id': u'localhost-second',
1614 'bot_version': u'abc', 1647 'bot_version': u'abc',
1648 'cipd_pins': None,
1615 'children_task_ids': [], 1649 'children_task_ids': [],
1616 'completed_ts': None, 1650 'completed_ts': None,
1617 'costs_usd': [0., 0.], 1651 'costs_usd': [0., 0.],
1618 'cost_saved_usd': None, 1652 'cost_saved_usd': None,
1619 'created_ts': self.now, 1653 'created_ts': self.now,
1620 'deduped_from': None, 1654 'deduped_from': None,
1621 'duration': None, 1655 'duration': None,
1622 'exit_code': None, 1656 'exit_code': None,
1623 'failure': False, 1657 'failure': False,
1624 'id': '1d69b9f088008810', 1658 'id': '1d69b9f088008810',
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1668 (['1d69b9f088008811'], 0, 0), 1702 (['1d69b9f088008811'], 0, 0),
1669 task_scheduler.cron_handle_bot_died('f.local')) 1703 task_scheduler.cron_handle_bot_died('f.local'))
1670 1704
1671 1705
1672 if __name__ == '__main__': 1706 if __name__ == '__main__':
1673 if '-v' in sys.argv: 1707 if '-v' in sys.argv:
1674 unittest.TestCase.maxDiff = None 1708 unittest.TestCase.maxDiff = None
1675 logging.basicConfig( 1709 logging.basicConfig(
1676 level=logging.DEBUG if '-v' in sys.argv else logging.CRITICAL) 1710 level=logging.DEBUG if '-v' in sys.argv else logging.CRITICAL)
1677 unittest.main() 1711 unittest.main()
OLDNEW
« no previous file with comments | « appengine/swarming/server/task_scheduler.py ('k') | appengine/swarming/swarming_bot/bot_code/task_runner.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698