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