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

Side by Side Diff: appengine/machine_provider/handlers_endpoints_test.py

Issue 2692853012: Only allow explicitly whitelisted users to issue lease requests to Machine Provider (Closed)
Patch Set: Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « appengine/machine_provider/acl.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2015 The LUCI Authors. All rights reserved. 2 # Copyright 2015 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 """Unit tests for handlers_endpoints.py.""" 6 """Unit tests for handlers_endpoints.py."""
7 7
8 import datetime 8 import datetime
9 import json 9 import json
10 import unittest 10 import unittest
11 11
12 import test_env 12 import test_env
13 test_env.setup_test_env() 13 test_env.setup_test_env()
14 14
15 from google.appengine import runtime 15 from google.appengine import runtime
16 16
17 from protorpc.remote import protojson 17 from protorpc.remote import protojson
18 import webtest 18 import webtest
19 19
20 from components import auth_testing
21 from components import utils 20 from components import utils
22 from components.machine_provider import rpc_messages 21 from components.machine_provider import rpc_messages
23 from test_support import test_case 22 from test_support import test_case
24 23
25 import acl 24 import acl
26 import handlers_endpoints 25 import handlers_endpoints
27 import models 26 import models
28 27
29 28
30 def rpc_to_json(rpc_message): 29 def rpc_to_json(rpc_message):
(...skipping 523 matching lines...) Expand 10 before | Expand all | Expand 10 after
554 class MachineProviderReleaseTest(test_case.EndpointsTestCase): 553 class MachineProviderReleaseTest(test_case.EndpointsTestCase):
555 """Tests for handlers_endpoints.MachineProviderEndpoints.release.""" 554 """Tests for handlers_endpoints.MachineProviderEndpoints.release."""
556 api_service_cls = handlers_endpoints.MachineProviderEndpoints 555 api_service_cls = handlers_endpoints.MachineProviderEndpoints
557 556
558 def setUp(self): 557 def setUp(self):
559 super(MachineProviderReleaseTest, self).setUp() 558 super(MachineProviderReleaseTest, self).setUp()
560 app = handlers_endpoints.create_endpoints_app() 559 app = handlers_endpoints.create_endpoints_app()
561 self.app = webtest.TestApp(app) 560 self.app = webtest.TestApp(app)
562 561
563 def test_release(self): 562 def test_release(self):
563 self.mock(acl.auth, 'is_group_member', lambda *args, **kwargs: True)
M-A Ruel 2017/02/15 23:59:02 I'd prefer one that check the group name (so proba
smut 2017/02/16 01:15:10 Done.
564 self.mock( 564 self.mock(
565 handlers_endpoints.MachineProviderEndpoints, 565 handlers_endpoints.MachineProviderEndpoints,
566 '_release', 566 '_release',
567 lambda *args, **kwargs: None, 567 lambda *args, **kwargs: None,
568 ) 568 )
569 569
570 request = rpc_to_json(rpc_messages.LeaseReleaseRequest( 570 request = rpc_to_json(rpc_messages.LeaseReleaseRequest(
571 request_id='request-id', 571 request_id='request-id',
572 )) 572 ))
573 auth_testing.mock_get_current_identity(self)
574 573
575 response = jsonish_dict_to_rpc( 574 response = jsonish_dict_to_rpc(
576 self.call_api('release', request).json, 575 self.call_api('release', request).json,
577 rpc_messages.LeaseReleaseResponse, 576 rpc_messages.LeaseReleaseResponse,
578 ) 577 )
579 self.assertEqual(response.client_request_id, 'request-id') 578 self.assertEqual(response.client_request_id, 'request-id')
580 self.assertFalse(response.error) 579 self.assertFalse(response.error)
581 580
582 581
583 class MachineProviderBatchedReleaseTest(test_case.EndpointsTestCase): 582 class MachineProviderBatchedReleaseTest(test_case.EndpointsTestCase):
584 """Tests for handlers_endpoints.MachineProviderEndpoints.batched_release.""" 583 """Tests for handlers_endpoints.MachineProviderEndpoints.batched_release."""
585 api_service_cls = handlers_endpoints.MachineProviderEndpoints 584 api_service_cls = handlers_endpoints.MachineProviderEndpoints
586 585
587 def setUp(self): 586 def setUp(self):
588 super(MachineProviderBatchedReleaseTest, self).setUp() 587 super(MachineProviderBatchedReleaseTest, self).setUp()
589 app = handlers_endpoints.create_endpoints_app() 588 app = handlers_endpoints.create_endpoints_app()
590 self.app = webtest.TestApp(app) 589 self.app = webtest.TestApp(app)
591 590
592 def test_batch(self): 591 def test_batch(self):
592 self.mock(acl.auth, 'is_group_member', lambda *args, **kwargs: True)
593 ts = utils.utcnow() 593 ts = utils.utcnow()
594 self.mock(utils, 'utcnow', lambda *args, **kwargs: ts) 594 self.mock(utils, 'utcnow', lambda *args, **kwargs: ts)
595 595
596 release_requests = rpc_to_json(rpc_messages.BatchedLeaseReleaseRequest( 596 release_requests = rpc_to_json(rpc_messages.BatchedLeaseReleaseRequest(
597 requests=[ 597 requests=[
598 rpc_messages.LeaseReleaseRequest( 598 rpc_messages.LeaseReleaseRequest(
599 request_id='request-id', 599 request_id='request-id',
600 ), 600 ),
601 ], 601 ],
602 )) 602 ))
603 auth_testing.mock_get_current_identity(self)
604 603
605 release_responses = jsonish_dict_to_rpc( 604 release_responses = jsonish_dict_to_rpc(
606 self.call_api('batched_release', release_requests).json, 605 self.call_api('batched_release', release_requests).json,
607 rpc_messages.BatchedLeaseReleaseResponse, 606 rpc_messages.BatchedLeaseReleaseResponse,
608 ) 607 )
609 self.assertEqual(len(release_responses.responses), 1) 608 self.assertEqual(len(release_responses.responses), 1)
610 self.assertEqual( 609 self.assertEqual(
611 release_responses.responses[0].client_request_id, 'request-id') 610 release_responses.responses[0].client_request_id, 'request-id')
612 self.assertEqual( 611 self.assertEqual(
613 release_responses.responses[0].error, 612 release_responses.responses[0].error,
614 rpc_messages.LeaseReleaseRequestError.NOT_FOUND, 613 rpc_messages.LeaseReleaseRequestError.NOT_FOUND,
615 ) 614 )
616 615
617 def test_deadline_exceeded(self): 616 def test_deadline_exceeded(self):
617 self.mock(acl.auth, 'is_group_member', lambda *args, **kwargs: True)
618 class utcnow(object): 618 class utcnow(object):
619 def __init__(self, init_ts): 619 def __init__(self, init_ts):
620 self.last_ts = init_ts 620 self.last_ts = init_ts
621 def __call__(self, *args, **kwargs): 621 def __call__(self, *args, **kwargs):
622 self.last_ts = self.last_ts + datetime.timedelta(seconds=60) 622 self.last_ts = self.last_ts + datetime.timedelta(seconds=60)
623 return self.last_ts 623 return self.last_ts
624 self.mock(utils, 'utcnow', utcnow(utils.utcnow())) 624 self.mock(utils, 'utcnow', utcnow(utils.utcnow()))
625 625
626 release_requests = rpc_to_json(rpc_messages.BatchedLeaseReleaseRequest( 626 release_requests = rpc_to_json(rpc_messages.BatchedLeaseReleaseRequest(
627 requests=[ 627 requests=[
628 rpc_messages.LeaseReleaseRequest( 628 rpc_messages.LeaseReleaseRequest(
629 request_id='request-id', 629 request_id='request-id',
630 ), 630 ),
631 ], 631 ],
632 )) 632 ))
633 auth_testing.mock_get_current_identity(self)
634 633
635 release_responses = jsonish_dict_to_rpc( 634 release_responses = jsonish_dict_to_rpc(
636 self.call_api('batched_release', release_requests).json, 635 self.call_api('batched_release', release_requests).json,
637 rpc_messages.BatchedLeaseReleaseResponse, 636 rpc_messages.BatchedLeaseReleaseResponse,
638 ) 637 )
639 self.assertEqual(len(release_responses.responses), 1) 638 self.assertEqual(len(release_responses.responses), 1)
640 self.assertEqual( 639 self.assertEqual(
641 release_responses.responses[0].client_request_id, 'request-id') 640 release_responses.responses[0].client_request_id, 'request-id')
642 self.assertEqual( 641 self.assertEqual(
643 release_responses.responses[0].error, 642 release_responses.responses[0].error,
644 rpc_messages.LeaseReleaseRequestError.DEADLINE_EXCEEDED, 643 rpc_messages.LeaseReleaseRequestError.DEADLINE_EXCEEDED,
645 ) 644 )
646 645
647 def test_exception(self): 646 def test_exception(self):
647 self.mock(acl.auth, 'is_group_member', lambda *args, **kwargs: True)
648 ts = utils.utcnow() 648 ts = utils.utcnow()
649 self.mock(utils, 'utcnow', lambda *args, **kwargs: ts) 649 self.mock(utils, 'utcnow', lambda *args, **kwargs: ts)
650 650
651 def _release(*args, **kwargs): 651 def _release(*args, **kwargs):
652 raise runtime.apiproxy_errors.CancelledError 652 raise runtime.apiproxy_errors.CancelledError
653 self.mock(handlers_endpoints.MachineProviderEndpoints, '_release', _release) 653 self.mock(handlers_endpoints.MachineProviderEndpoints, '_release', _release)
654 654
655 release_requests = rpc_to_json(rpc_messages.BatchedLeaseReleaseRequest( 655 release_requests = rpc_to_json(rpc_messages.BatchedLeaseReleaseRequest(
656 requests=[ 656 requests=[
657 rpc_messages.LeaseReleaseRequest( 657 rpc_messages.LeaseReleaseRequest(
658 request_id='request-id', 658 request_id='request-id',
659 ), 659 ),
660 ], 660 ],
661 )) 661 ))
662 auth_testing.mock_get_current_identity(self)
663 662
664 release_responses = jsonish_dict_to_rpc( 663 release_responses = jsonish_dict_to_rpc(
665 self.call_api('batched_release', release_requests).json, 664 self.call_api('batched_release', release_requests).json,
666 rpc_messages.BatchedLeaseReleaseResponse, 665 rpc_messages.BatchedLeaseReleaseResponse,
667 ) 666 )
668 self.assertEqual(len(release_responses.responses), 1) 667 self.assertEqual(len(release_responses.responses), 1)
669 self.assertEqual( 668 self.assertEqual(
670 release_responses.responses[0].client_request_id, 'request-id') 669 release_responses.responses[0].client_request_id, 'request-id')
671 self.assertEqual( 670 self.assertEqual(
672 release_responses.responses[0].error, 671 release_responses.responses[0].error,
673 rpc_messages.LeaseReleaseRequestError.TRANSIENT_ERROR, 672 rpc_messages.LeaseReleaseRequestError.TRANSIENT_ERROR,
674 ) 673 )
675 674
676 675
677 class MachineProviderBatchedLeaseTest(test_case.EndpointsTestCase): 676 class MachineProviderBatchedLeaseTest(test_case.EndpointsTestCase):
678 """Tests for handlers_endpoints.MachineProviderEndpoints.batched_lease.""" 677 """Tests for handlers_endpoints.MachineProviderEndpoints.batched_lease."""
679 api_service_cls = handlers_endpoints.MachineProviderEndpoints 678 api_service_cls = handlers_endpoints.MachineProviderEndpoints
680 679
681 def setUp(self): 680 def setUp(self):
682 super(MachineProviderBatchedLeaseTest, self).setUp() 681 super(MachineProviderBatchedLeaseTest, self).setUp()
683 app = handlers_endpoints.create_endpoints_app() 682 app = handlers_endpoints.create_endpoints_app()
684 self.app = webtest.TestApp(app) 683 self.app = webtest.TestApp(app)
685 684
686 def test_batch(self): 685 def test_batch(self):
686 self.mock(acl.auth, 'is_group_member', lambda *args, **kwargs: True)
687 ts = utils.utcnow() 687 ts = utils.utcnow()
688 self.mock(utils, 'utcnow', lambda *args, **kwargs: ts) 688 self.mock(utils, 'utcnow', lambda *args, **kwargs: ts)
689 689
690 lease_requests = rpc_to_json(rpc_messages.BatchedLeaseRequest(requests=[ 690 lease_requests = rpc_to_json(rpc_messages.BatchedLeaseRequest(requests=[
691 rpc_messages.LeaseRequest( 691 rpc_messages.LeaseRequest(
692 dimensions=rpc_messages.Dimensions( 692 dimensions=rpc_messages.Dimensions(
693 os_family=rpc_messages.OSFamily.LINUX, 693 os_family=rpc_messages.OSFamily.LINUX,
694 ), 694 ),
695 duration=1, 695 duration=1,
696 request_id='request-id', 696 request_id='request-id',
697 ), 697 ),
698 ])) 698 ]))
699 auth_testing.mock_get_current_identity(self)
700 699
701 lease_responses = jsonish_dict_to_rpc( 700 lease_responses = jsonish_dict_to_rpc(
702 self.call_api('batched_lease', lease_requests).json, 701 self.call_api('batched_lease', lease_requests).json,
703 rpc_messages.BatchedLeaseResponse, 702 rpc_messages.BatchedLeaseResponse,
704 ) 703 )
705 self.assertEqual(len(lease_responses.responses), 1) 704 self.assertEqual(len(lease_responses.responses), 1)
706 self.assertEqual( 705 self.assertEqual(
707 lease_responses.responses[0].client_request_id, 'request-id') 706 lease_responses.responses[0].client_request_id, 'request-id')
708 self.assertFalse(lease_responses.responses[0].error) 707 self.assertFalse(lease_responses.responses[0].error)
709 708
710 def test_deadline_exceeded(self): 709 def test_deadline_exceeded(self):
710 self.mock(acl.auth, 'is_group_member', lambda *args, **kwargs: True)
711 class utcnow(object): 711 class utcnow(object):
712 def __init__(self, init_ts): 712 def __init__(self, init_ts):
713 self.last_ts = init_ts 713 self.last_ts = init_ts
714 def __call__(self, *args, **kwargs): 714 def __call__(self, *args, **kwargs):
715 self.last_ts = self.last_ts + datetime.timedelta(seconds=60) 715 self.last_ts = self.last_ts + datetime.timedelta(seconds=60)
716 return self.last_ts 716 return self.last_ts
717 self.mock(utils, 'utcnow', utcnow(utils.utcnow())) 717 self.mock(utils, 'utcnow', utcnow(utils.utcnow()))
718 718
719 lease_requests = rpc_to_json(rpc_messages.BatchedLeaseRequest(requests=[ 719 lease_requests = rpc_to_json(rpc_messages.BatchedLeaseRequest(requests=[
720 rpc_messages.LeaseRequest( 720 rpc_messages.LeaseRequest(
721 dimensions=rpc_messages.Dimensions( 721 dimensions=rpc_messages.Dimensions(
722 os_family=rpc_messages.OSFamily.LINUX, 722 os_family=rpc_messages.OSFamily.LINUX,
723 ), 723 ),
724 duration=1, 724 duration=1,
725 request_id='request-id', 725 request_id='request-id',
726 ), 726 ),
727 ])) 727 ]))
728 auth_testing.mock_get_current_identity(self)
729 728
730 lease_responses = jsonish_dict_to_rpc( 729 lease_responses = jsonish_dict_to_rpc(
731 self.call_api('batched_lease', lease_requests).json, 730 self.call_api('batched_lease', lease_requests).json,
732 rpc_messages.BatchedLeaseResponse, 731 rpc_messages.BatchedLeaseResponse,
733 ) 732 )
734 self.assertEqual(len(lease_responses.responses), 1) 733 self.assertEqual(len(lease_responses.responses), 1)
735 self.assertEqual( 734 self.assertEqual(
736 lease_responses.responses[0].client_request_id, 'request-id') 735 lease_responses.responses[0].client_request_id, 'request-id')
737 self.assertEqual( 736 self.assertEqual(
738 lease_responses.responses[0].error, 737 lease_responses.responses[0].error,
739 rpc_messages.LeaseRequestError.DEADLINE_EXCEEDED, 738 rpc_messages.LeaseRequestError.DEADLINE_EXCEEDED,
740 ) 739 )
741 740
742 def test_exception(self): 741 def test_exception(self):
742 self.mock(acl.auth, 'is_group_member', lambda *args, **kwargs: True)
743 ts = utils.utcnow() 743 ts = utils.utcnow()
744 self.mock(utils, 'utcnow', lambda *args, **kwargs: ts) 744 self.mock(utils, 'utcnow', lambda *args, **kwargs: ts)
745 745
746 def _lease(*args, **kwargs): 746 def _lease(*args, **kwargs):
747 raise runtime.apiproxy_errors.CancelledError 747 raise runtime.apiproxy_errors.CancelledError
748 self.mock(handlers_endpoints.MachineProviderEndpoints, '_lease', _lease) 748 self.mock(handlers_endpoints.MachineProviderEndpoints, '_lease', _lease)
749 749
750 lease_requests = rpc_to_json(rpc_messages.BatchedLeaseRequest(requests=[ 750 lease_requests = rpc_to_json(rpc_messages.BatchedLeaseRequest(requests=[
751 rpc_messages.LeaseRequest( 751 rpc_messages.LeaseRequest(
752 dimensions=rpc_messages.Dimensions( 752 dimensions=rpc_messages.Dimensions(
753 os_family=rpc_messages.OSFamily.LINUX, 753 os_family=rpc_messages.OSFamily.LINUX,
754 ), 754 ),
755 duration=1, 755 duration=1,
756 request_id='request-id', 756 request_id='request-id',
757 ), 757 ),
758 ])) 758 ]))
759 auth_testing.mock_get_current_identity(self)
760 759
761 lease_responses = jsonish_dict_to_rpc( 760 lease_responses = jsonish_dict_to_rpc(
762 self.call_api('batched_lease', lease_requests).json, 761 self.call_api('batched_lease', lease_requests).json,
763 rpc_messages.BatchedLeaseResponse, 762 rpc_messages.BatchedLeaseResponse,
764 ) 763 )
765 self.assertEqual(len(lease_responses.responses), 1) 764 self.assertEqual(len(lease_responses.responses), 1)
766 self.assertEqual( 765 self.assertEqual(
767 lease_responses.responses[0].client_request_id, 'request-id') 766 lease_responses.responses[0].client_request_id, 'request-id')
768 self.assertEqual( 767 self.assertEqual(
769 lease_responses.responses[0].error, 768 lease_responses.responses[0].error,
770 rpc_messages.LeaseRequestError.TRANSIENT_ERROR, 769 rpc_messages.LeaseRequestError.TRANSIENT_ERROR,
771 ) 770 )
772 771
773 772
774 class MachineProviderLeaseTest(test_case.EndpointsTestCase): 773 class MachineProviderLeaseTest(test_case.EndpointsTestCase):
775 """Tests for handlers_endpoints.MachineProviderEndpoints.lease.""" 774 """Tests for handlers_endpoints.MachineProviderEndpoints.lease."""
776 api_service_cls = handlers_endpoints.MachineProviderEndpoints 775 api_service_cls = handlers_endpoints.MachineProviderEndpoints
777 776
778 def setUp(self): 777 def setUp(self):
779 super(MachineProviderLeaseTest, self).setUp() 778 super(MachineProviderLeaseTest, self).setUp()
780 app = handlers_endpoints.create_endpoints_app() 779 app = handlers_endpoints.create_endpoints_app()
781 self.app = webtest.TestApp(app) 780 self.app = webtest.TestApp(app)
782 781
783 def test_lease_duration(self): 782 def test_lease_duration(self):
783 self.mock(acl.auth, 'is_group_member', lambda *args, **kwargs: True)
784 lease_request = rpc_to_json(rpc_messages.LeaseRequest( 784 lease_request = rpc_to_json(rpc_messages.LeaseRequest(
785 dimensions=rpc_messages.Dimensions( 785 dimensions=rpc_messages.Dimensions(
786 os_family=rpc_messages.OSFamily.LINUX, 786 os_family=rpc_messages.OSFamily.LINUX,
787 ), 787 ),
788 duration=1, 788 duration=1,
789 request_id='abc', 789 request_id='abc',
790 pubsub_topic='topic', 790 pubsub_topic='topic',
791 )) 791 ))
792 auth_testing.mock_get_current_identity(self)
793 792
794 lease_response = jsonish_dict_to_rpc( 793 lease_response = jsonish_dict_to_rpc(
795 self.call_api('lease', lease_request).json, 794 self.call_api('lease', lease_request).json,
796 rpc_messages.LeaseResponse, 795 rpc_messages.LeaseResponse,
797 ) 796 )
798 self.assertFalse(lease_response.error) 797 self.assertFalse(lease_response.error)
799 798
800 def test_lease_duration_zero(self): 799 def test_lease_duration_zero(self):
800 self.mock(acl.auth, 'is_group_member', lambda *args, **kwargs: True)
801 lease_request = rpc_to_json(rpc_messages.LeaseRequest( 801 lease_request = rpc_to_json(rpc_messages.LeaseRequest(
802 dimensions=rpc_messages.Dimensions( 802 dimensions=rpc_messages.Dimensions(
803 os_family=rpc_messages.OSFamily.LINUX, 803 os_family=rpc_messages.OSFamily.LINUX,
804 ), 804 ),
805 duration=0, 805 duration=0,
806 request_id='abc', 806 request_id='abc',
807 )) 807 ))
808 auth_testing.mock_get_current_identity(self)
809 808
810 lease_response = jsonish_dict_to_rpc( 809 lease_response = jsonish_dict_to_rpc(
811 self.call_api('lease', lease_request).json, 810 self.call_api('lease', lease_request).json,
812 rpc_messages.LeaseResponse, 811 rpc_messages.LeaseResponse,
813 ) 812 )
814 self.assertEqual( 813 self.assertEqual(
815 lease_response.error, 814 lease_response.error,
816 rpc_messages.LeaseRequestError.LEASE_LENGTH_UNSPECIFIED, 815 rpc_messages.LeaseRequestError.LEASE_LENGTH_UNSPECIFIED,
817 ) 816 )
818 817
819 def test_lease_duration_negative(self): 818 def test_lease_duration_negative(self):
819 self.mock(acl.auth, 'is_group_member', lambda *args, **kwargs: True)
820 lease_request = rpc_to_json(rpc_messages.LeaseRequest( 820 lease_request = rpc_to_json(rpc_messages.LeaseRequest(
821 dimensions=rpc_messages.Dimensions( 821 dimensions=rpc_messages.Dimensions(
822 os_family=rpc_messages.OSFamily.LINUX, 822 os_family=rpc_messages.OSFamily.LINUX,
823 ), 823 ),
824 duration=-1, 824 duration=-1,
825 request_id='abc', 825 request_id='abc',
826 )) 826 ))
827 auth_testing.mock_get_current_identity(self)
828 827
829 lease_response = jsonish_dict_to_rpc( 828 lease_response = jsonish_dict_to_rpc(
830 self.call_api('lease', lease_request).json, 829 self.call_api('lease', lease_request).json,
831 rpc_messages.LeaseResponse,
832 )
833 self.assertEqual(
834 lease_response.error,
835 rpc_messages.LeaseRequestError.NONPOSITIVE_DEADLINE,
836 )
837
838 def test_lease_duration_negative(self):
839 lease_request = rpc_to_json(rpc_messages.LeaseRequest(
840 dimensions=rpc_messages.Dimensions(
841 os_family=rpc_messages.OSFamily.LINUX,
842 ),
843 duration=-1,
844 request_id='abc',
845 ))
846 auth_testing.mock_get_current_identity(self)
847
848 lease_response = jsonish_dict_to_rpc(
849 self.call_api('lease', lease_request).json,
850 rpc_messages.LeaseResponse, 830 rpc_messages.LeaseResponse,
851 ) 831 )
852 self.assertEqual( 832 self.assertEqual(
853 lease_response.error, 833 lease_response.error,
854 rpc_messages.LeaseRequestError.NONPOSITIVE_DEADLINE, 834 rpc_messages.LeaseRequestError.NONPOSITIVE_DEADLINE,
855 ) 835 )
856 836
857 def test_lease_duration_and_lease_expiration_ts(self): 837 def test_lease_duration_and_lease_expiration_ts(self):
838 self.mock(acl.auth, 'is_group_member', lambda *args, **kwargs: True)
858 lease_request = rpc_to_json(rpc_messages.LeaseRequest( 839 lease_request = rpc_to_json(rpc_messages.LeaseRequest(
859 dimensions=rpc_messages.Dimensions( 840 dimensions=rpc_messages.Dimensions(
860 os_family=rpc_messages.OSFamily.LINUX, 841 os_family=rpc_messages.OSFamily.LINUX,
861 ), 842 ),
862 duration=1, 843 duration=1,
863 lease_expiration_ts=9999999999, 844 lease_expiration_ts=9999999999,
864 request_id='abc', 845 request_id='abc',
865 )) 846 ))
866 auth_testing.mock_get_current_identity(self)
867 847
868 lease_response = jsonish_dict_to_rpc( 848 lease_response = jsonish_dict_to_rpc(
869 self.call_api('lease', lease_request).json, 849 self.call_api('lease', lease_request).json,
870 rpc_messages.LeaseResponse, 850 rpc_messages.LeaseResponse,
871 ) 851 )
872 self.assertEqual( 852 self.assertEqual(
873 lease_response.error, 853 lease_response.error,
874 rpc_messages.LeaseRequestError.MUTUAL_EXCLUSION_ERROR, 854 rpc_messages.LeaseRequestError.MUTUAL_EXCLUSION_ERROR,
875 ) 855 )
876 856
877 def test_lease_timestamp(self): 857 def test_lease_timestamp(self):
858 self.mock(acl.auth, 'is_group_member', lambda *args, **kwargs: True)
878 lease_request = rpc_to_json(rpc_messages.LeaseRequest( 859 lease_request = rpc_to_json(rpc_messages.LeaseRequest(
879 dimensions=rpc_messages.Dimensions( 860 dimensions=rpc_messages.Dimensions(
880 os_family=rpc_messages.OSFamily.LINUX, 861 os_family=rpc_messages.OSFamily.LINUX,
881 ), 862 ),
882 lease_expiration_ts=9999999999, 863 lease_expiration_ts=9999999999,
883 request_id='abc', 864 request_id='abc',
884 )) 865 ))
885 auth_testing.mock_get_current_identity(self)
886 866
887 lease_response = jsonish_dict_to_rpc( 867 lease_response = jsonish_dict_to_rpc(
888 self.call_api('lease', lease_request).json, 868 self.call_api('lease', lease_request).json,
889 rpc_messages.LeaseResponse, 869 rpc_messages.LeaseResponse,
890 ) 870 )
891 self.assertFalse(lease_response.error) 871 self.assertFalse(lease_response.error)
892 872
893 def test_lease_timestamp_passed(self): 873 def test_lease_timestamp_passed(self):
874 self.mock(acl.auth, 'is_group_member', lambda *args, **kwargs: True)
894 lease_request = rpc_to_json(rpc_messages.LeaseRequest( 875 lease_request = rpc_to_json(rpc_messages.LeaseRequest(
895 dimensions=rpc_messages.Dimensions( 876 dimensions=rpc_messages.Dimensions(
896 os_family=rpc_messages.OSFamily.LINUX, 877 os_family=rpc_messages.OSFamily.LINUX,
897 ), 878 ),
898 lease_expiration_ts=1, 879 lease_expiration_ts=1,
899 request_id='abc', 880 request_id='abc',
900 )) 881 ))
901 auth_testing.mock_get_current_identity(self)
902 882
903 lease_response = jsonish_dict_to_rpc( 883 lease_response = jsonish_dict_to_rpc(
904 self.call_api('lease', lease_request).json, 884 self.call_api('lease', lease_request).json,
905 rpc_messages.LeaseResponse, 885 rpc_messages.LeaseResponse,
906 ) 886 )
907 self.assertEqual( 887 self.assertEqual(
908 lease_response.error, 888 lease_response.error,
909 rpc_messages.LeaseRequestError.LEASE_EXPIRATION_TS_ERROR, 889 rpc_messages.LeaseRequestError.LEASE_EXPIRATION_TS_ERROR,
910 ) 890 )
911 891
912 def test_duplicate(self): 892 def test_duplicate(self):
893 self.mock(acl.auth, 'is_group_member', lambda *args, **kwargs: True)
913 lease_request = rpc_to_json(rpc_messages.LeaseRequest( 894 lease_request = rpc_to_json(rpc_messages.LeaseRequest(
914 dimensions=rpc_messages.Dimensions( 895 dimensions=rpc_messages.Dimensions(
915 os_family=rpc_messages.OSFamily.OSX, 896 os_family=rpc_messages.OSFamily.OSX,
916 ), 897 ),
917 duration=3, 898 duration=3,
918 request_id='asdf', 899 request_id='asdf',
919 )) 900 ))
920 auth_testing.mock_get_current_identity(self)
921 901
922 lease_response_1 = jsonish_dict_to_rpc( 902 lease_response_1 = jsonish_dict_to_rpc(
923 self.call_api('lease', lease_request).json, 903 self.call_api('lease', lease_request).json,
924 rpc_messages.LeaseResponse, 904 rpc_messages.LeaseResponse,
925 ) 905 )
926 lease_response_2 = jsonish_dict_to_rpc( 906 lease_response_2 = jsonish_dict_to_rpc(
927 self.call_api('lease', lease_request).json, 907 self.call_api('lease', lease_request).json,
928 rpc_messages.LeaseResponse, 908 rpc_messages.LeaseResponse,
929 ) 909 )
930 self.assertFalse(lease_response_1.error) 910 self.assertFalse(lease_response_1.error)
931 self.assertFalse(lease_response_2.error) 911 self.assertFalse(lease_response_2.error)
932 self.assertEqual( 912 self.assertEqual(
933 lease_response_1.request_hash, 913 lease_response_1.request_hash,
934 lease_response_2.request_hash, 914 lease_response_2.request_hash,
935 ) 915 )
936 916
937 def test_request_id_reuse(self): 917 def test_request_id_reuse(self):
918 self.mock(acl.auth, 'is_group_member', lambda *args, **kwargs: True)
938 lease_request_1 = rpc_to_json(rpc_messages.LeaseRequest( 919 lease_request_1 = rpc_to_json(rpc_messages.LeaseRequest(
939 dimensions=rpc_messages.Dimensions( 920 dimensions=rpc_messages.Dimensions(
940 os_family=rpc_messages.OSFamily.WINDOWS, 921 os_family=rpc_messages.OSFamily.WINDOWS,
941 ), 922 ),
942 duration=7, 923 duration=7,
943 request_id='qwerty', 924 request_id='qwerty',
944 )) 925 ))
945 lease_request_2 = rpc_to_json(rpc_messages.LeaseRequest( 926 lease_request_2 = rpc_to_json(rpc_messages.LeaseRequest(
946 dimensions=rpc_messages.Dimensions( 927 dimensions=rpc_messages.Dimensions(
947 os_family=rpc_messages.OSFamily.WINDOWS, 928 os_family=rpc_messages.OSFamily.WINDOWS,
948 ), 929 ),
949 duration=189, 930 duration=189,
950 request_id='qwerty', 931 request_id='qwerty',
951 )) 932 ))
952 auth_testing.mock_get_current_identity(self)
953 933
954 lease_response_1 = jsonish_dict_to_rpc( 934 lease_response_1 = jsonish_dict_to_rpc(
955 self.call_api('lease', lease_request_1).json, 935 self.call_api('lease', lease_request_1).json,
956 rpc_messages.LeaseResponse, 936 rpc_messages.LeaseResponse,
957 ) 937 )
958 lease_response_2 = jsonish_dict_to_rpc( 938 lease_response_2 = jsonish_dict_to_rpc(
959 self.call_api('lease', lease_request_2).json, 939 self.call_api('lease', lease_request_2).json,
960 rpc_messages.LeaseResponse, 940 rpc_messages.LeaseResponse,
961 ) 941 )
962 self.assertFalse(lease_response_1.error) 942 self.assertFalse(lease_response_1.error)
963 self.assertEqual( 943 self.assertEqual(
964 lease_response_2.error, 944 lease_response_2.error,
965 rpc_messages.LeaseRequestError.REQUEST_ID_REUSE, 945 rpc_messages.LeaseRequestError.REQUEST_ID_REUSE,
966 ) 946 )
967 self.assertNotEqual( 947 self.assertNotEqual(
968 lease_response_1.request_hash, 948 lease_response_1.request_hash,
969 lease_response_2.request_hash, 949 lease_response_2.request_hash,
970 ) 950 )
971 951
972 def test_invalid_topic(self): 952 def test_invalid_topic(self):
953 self.mock(acl.auth, 'is_group_member', lambda *args, **kwargs: True)
973 lease_request = rpc_to_json(rpc_messages.LeaseRequest( 954 lease_request = rpc_to_json(rpc_messages.LeaseRequest(
974 dimensions=rpc_messages.Dimensions( 955 dimensions=rpc_messages.Dimensions(
975 os_family=rpc_messages.OSFamily.WINDOWS, 956 os_family=rpc_messages.OSFamily.WINDOWS,
976 ), 957 ),
977 duration=9, 958 duration=9,
978 pubsub_topic='../../a-different-project/topics/my-topic', 959 pubsub_topic='../../a-different-project/topics/my-topic',
979 request_id='123', 960 request_id='123',
980 )) 961 ))
981 auth_testing.mock_get_current_identity(self)
982 962
983 lease_response = jsonish_dict_to_rpc( 963 lease_response = jsonish_dict_to_rpc(
984 self.call_api('lease', lease_request).json, 964 self.call_api('lease', lease_request).json,
985 rpc_messages.LeaseResponse, 965 rpc_messages.LeaseResponse,
986 ) 966 )
987 self.assertEqual( 967 self.assertEqual(
988 lease_response.error, 968 lease_response.error,
989 rpc_messages.LeaseRequestError.INVALID_TOPIC, 969 rpc_messages.LeaseRequestError.INVALID_TOPIC,
990 ) 970 )
991 971
992 def test_invalid_project(self): 972 def test_invalid_project(self):
973 self.mock(acl.auth, 'is_group_member', lambda *args, **kwargs: True)
993 lease_request = rpc_to_json(rpc_messages.LeaseRequest( 974 lease_request = rpc_to_json(rpc_messages.LeaseRequest(
994 dimensions=rpc_messages.Dimensions( 975 dimensions=rpc_messages.Dimensions(
995 os_family=rpc_messages.OSFamily.WINDOWS, 976 os_family=rpc_messages.OSFamily.WINDOWS,
996 ), 977 ),
997 duration=9, 978 duration=9,
998 pubsub_topic='my-topic', 979 pubsub_topic='my-topic',
999 pubsub_project='../../a-different-project/topics/my-other-topic', 980 pubsub_project='../../a-different-project/topics/my-other-topic',
1000 request_id='123', 981 request_id='123',
1001 )) 982 ))
1002 auth_testing.mock_get_current_identity(self)
1003 983
1004 lease_response = jsonish_dict_to_rpc( 984 lease_response = jsonish_dict_to_rpc(
1005 self.call_api('lease', lease_request).json, 985 self.call_api('lease', lease_request).json,
1006 rpc_messages.LeaseResponse, 986 rpc_messages.LeaseResponse,
1007 ) 987 )
1008 self.assertEqual( 988 self.assertEqual(
1009 lease_response.error, 989 lease_response.error,
1010 rpc_messages.LeaseRequestError.INVALID_PROJECT, 990 rpc_messages.LeaseRequestError.INVALID_PROJECT,
1011 ) 991 )
1012 992
1013 def test_project_without_topic(self): 993 def test_project_without_topic(self):
994 self.mock(acl.auth, 'is_group_member', lambda *args, **kwargs: True)
1014 lease_request = rpc_to_json(rpc_messages.LeaseRequest( 995 lease_request = rpc_to_json(rpc_messages.LeaseRequest(
1015 dimensions=rpc_messages.Dimensions( 996 dimensions=rpc_messages.Dimensions(
1016 os_family=rpc_messages.OSFamily.WINDOWS, 997 os_family=rpc_messages.OSFamily.WINDOWS,
1017 ), 998 ),
1018 duration=9, 999 duration=9,
1019 pubsub_project='my-project', 1000 pubsub_project='my-project',
1020 request_id='123', 1001 request_id='123',
1021 )) 1002 ))
1022 auth_testing.mock_get_current_identity(self)
1023 1003
1024 lease_response = jsonish_dict_to_rpc( 1004 lease_response = jsonish_dict_to_rpc(
1025 self.call_api('lease', lease_request).json, 1005 self.call_api('lease', lease_request).json,
1026 rpc_messages.LeaseResponse, 1006 rpc_messages.LeaseResponse,
1027 ) 1007 )
1028 self.assertEqual( 1008 self.assertEqual(
1029 lease_response.error, 1009 lease_response.error,
1030 rpc_messages.LeaseRequestError.UNSPECIFIED_TOPIC, 1010 rpc_messages.LeaseRequestError.UNSPECIFIED_TOPIC,
1031 ) 1011 )
1032 1012
1033 1013
1034 if __name__ == '__main__': 1014 if __name__ == '__main__':
1035 unittest.main() 1015 unittest.main()
OLDNEW
« no previous file with comments | « appengine/machine_provider/acl.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698