OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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() |
OLD | NEW |