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

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: Fix 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 def is_group_member(group):
564 return group == 'machine-provider-users'
565 self.mock(acl.auth, 'is_group_member', is_group_member)
564 self.mock( 566 self.mock(
565 handlers_endpoints.MachineProviderEndpoints, 567 handlers_endpoints.MachineProviderEndpoints,
566 '_release', 568 '_release',
567 lambda *args, **kwargs: None, 569 lambda *args, **kwargs: None,
568 ) 570 )
569 571
570 request = rpc_to_json(rpc_messages.LeaseReleaseRequest( 572 request = rpc_to_json(rpc_messages.LeaseReleaseRequest(
571 request_id='request-id', 573 request_id='request-id',
572 )) 574 ))
573 auth_testing.mock_get_current_identity(self)
574 575
575 response = jsonish_dict_to_rpc( 576 response = jsonish_dict_to_rpc(
576 self.call_api('release', request).json, 577 self.call_api('release', request).json,
577 rpc_messages.LeaseReleaseResponse, 578 rpc_messages.LeaseReleaseResponse,
578 ) 579 )
579 self.assertEqual(response.client_request_id, 'request-id') 580 self.assertEqual(response.client_request_id, 'request-id')
580 self.assertFalse(response.error) 581 self.assertFalse(response.error)
581 582
582 583
583 class MachineProviderBatchedReleaseTest(test_case.EndpointsTestCase): 584 class MachineProviderBatchedReleaseTest(test_case.EndpointsTestCase):
584 """Tests for handlers_endpoints.MachineProviderEndpoints.batched_release.""" 585 """Tests for handlers_endpoints.MachineProviderEndpoints.batched_release."""
585 api_service_cls = handlers_endpoints.MachineProviderEndpoints 586 api_service_cls = handlers_endpoints.MachineProviderEndpoints
586 587
587 def setUp(self): 588 def setUp(self):
588 super(MachineProviderBatchedReleaseTest, self).setUp() 589 super(MachineProviderBatchedReleaseTest, self).setUp()
589 app = handlers_endpoints.create_endpoints_app() 590 app = handlers_endpoints.create_endpoints_app()
590 self.app = webtest.TestApp(app) 591 self.app = webtest.TestApp(app)
591 592
592 def test_batch(self): 593 def test_batch(self):
594 def is_group_member(group):
595 return group == 'machine-provider-users'
596 self.mock(acl.auth, 'is_group_member', is_group_member)
593 ts = utils.utcnow() 597 ts = utils.utcnow()
594 self.mock(utils, 'utcnow', lambda *args, **kwargs: ts) 598 self.mock(utils, 'utcnow', lambda *args, **kwargs: ts)
595 599
596 release_requests = rpc_to_json(rpc_messages.BatchedLeaseReleaseRequest( 600 release_requests = rpc_to_json(rpc_messages.BatchedLeaseReleaseRequest(
597 requests=[ 601 requests=[
598 rpc_messages.LeaseReleaseRequest( 602 rpc_messages.LeaseReleaseRequest(
599 request_id='request-id', 603 request_id='request-id',
600 ), 604 ),
601 ], 605 ],
602 )) 606 ))
603 auth_testing.mock_get_current_identity(self)
604 607
605 release_responses = jsonish_dict_to_rpc( 608 release_responses = jsonish_dict_to_rpc(
606 self.call_api('batched_release', release_requests).json, 609 self.call_api('batched_release', release_requests).json,
607 rpc_messages.BatchedLeaseReleaseResponse, 610 rpc_messages.BatchedLeaseReleaseResponse,
608 ) 611 )
609 self.assertEqual(len(release_responses.responses), 1) 612 self.assertEqual(len(release_responses.responses), 1)
610 self.assertEqual( 613 self.assertEqual(
611 release_responses.responses[0].client_request_id, 'request-id') 614 release_responses.responses[0].client_request_id, 'request-id')
612 self.assertEqual( 615 self.assertEqual(
613 release_responses.responses[0].error, 616 release_responses.responses[0].error,
614 rpc_messages.LeaseReleaseRequestError.NOT_FOUND, 617 rpc_messages.LeaseReleaseRequestError.NOT_FOUND,
615 ) 618 )
616 619
617 def test_deadline_exceeded(self): 620 def test_deadline_exceeded(self):
621 def is_group_member(group):
622 return group == 'machine-provider-users'
623 self.mock(acl.auth, 'is_group_member', is_group_member)
618 class utcnow(object): 624 class utcnow(object):
619 def __init__(self, init_ts): 625 def __init__(self, init_ts):
620 self.last_ts = init_ts 626 self.last_ts = init_ts
621 def __call__(self, *args, **kwargs): 627 def __call__(self, *args, **kwargs):
622 self.last_ts = self.last_ts + datetime.timedelta(seconds=60) 628 self.last_ts = self.last_ts + datetime.timedelta(seconds=60)
623 return self.last_ts 629 return self.last_ts
624 self.mock(utils, 'utcnow', utcnow(utils.utcnow())) 630 self.mock(utils, 'utcnow', utcnow(utils.utcnow()))
625 631
626 release_requests = rpc_to_json(rpc_messages.BatchedLeaseReleaseRequest( 632 release_requests = rpc_to_json(rpc_messages.BatchedLeaseReleaseRequest(
627 requests=[ 633 requests=[
628 rpc_messages.LeaseReleaseRequest( 634 rpc_messages.LeaseReleaseRequest(
629 request_id='request-id', 635 request_id='request-id',
630 ), 636 ),
631 ], 637 ],
632 )) 638 ))
633 auth_testing.mock_get_current_identity(self)
634 639
635 release_responses = jsonish_dict_to_rpc( 640 release_responses = jsonish_dict_to_rpc(
636 self.call_api('batched_release', release_requests).json, 641 self.call_api('batched_release', release_requests).json,
637 rpc_messages.BatchedLeaseReleaseResponse, 642 rpc_messages.BatchedLeaseReleaseResponse,
638 ) 643 )
639 self.assertEqual(len(release_responses.responses), 1) 644 self.assertEqual(len(release_responses.responses), 1)
640 self.assertEqual( 645 self.assertEqual(
641 release_responses.responses[0].client_request_id, 'request-id') 646 release_responses.responses[0].client_request_id, 'request-id')
642 self.assertEqual( 647 self.assertEqual(
643 release_responses.responses[0].error, 648 release_responses.responses[0].error,
644 rpc_messages.LeaseReleaseRequestError.DEADLINE_EXCEEDED, 649 rpc_messages.LeaseReleaseRequestError.DEADLINE_EXCEEDED,
645 ) 650 )
646 651
647 def test_exception(self): 652 def test_exception(self):
653 def is_group_member(group):
654 return group == 'machine-provider-users'
655 self.mock(acl.auth, 'is_group_member', is_group_member)
648 ts = utils.utcnow() 656 ts = utils.utcnow()
649 self.mock(utils, 'utcnow', lambda *args, **kwargs: ts) 657 self.mock(utils, 'utcnow', lambda *args, **kwargs: ts)
650 658
651 def _release(*args, **kwargs): 659 def _release(*args, **kwargs):
652 raise runtime.apiproxy_errors.CancelledError 660 raise runtime.apiproxy_errors.CancelledError
653 self.mock(handlers_endpoints.MachineProviderEndpoints, '_release', _release) 661 self.mock(handlers_endpoints.MachineProviderEndpoints, '_release', _release)
654 662
655 release_requests = rpc_to_json(rpc_messages.BatchedLeaseReleaseRequest( 663 release_requests = rpc_to_json(rpc_messages.BatchedLeaseReleaseRequest(
656 requests=[ 664 requests=[
657 rpc_messages.LeaseReleaseRequest( 665 rpc_messages.LeaseReleaseRequest(
658 request_id='request-id', 666 request_id='request-id',
659 ), 667 ),
660 ], 668 ],
661 )) 669 ))
662 auth_testing.mock_get_current_identity(self)
663 670
664 release_responses = jsonish_dict_to_rpc( 671 release_responses = jsonish_dict_to_rpc(
665 self.call_api('batched_release', release_requests).json, 672 self.call_api('batched_release', release_requests).json,
666 rpc_messages.BatchedLeaseReleaseResponse, 673 rpc_messages.BatchedLeaseReleaseResponse,
667 ) 674 )
668 self.assertEqual(len(release_responses.responses), 1) 675 self.assertEqual(len(release_responses.responses), 1)
669 self.assertEqual( 676 self.assertEqual(
670 release_responses.responses[0].client_request_id, 'request-id') 677 release_responses.responses[0].client_request_id, 'request-id')
671 self.assertEqual( 678 self.assertEqual(
672 release_responses.responses[0].error, 679 release_responses.responses[0].error,
673 rpc_messages.LeaseReleaseRequestError.TRANSIENT_ERROR, 680 rpc_messages.LeaseReleaseRequestError.TRANSIENT_ERROR,
674 ) 681 )
675 682
676 683
677 class MachineProviderBatchedLeaseTest(test_case.EndpointsTestCase): 684 class MachineProviderBatchedLeaseTest(test_case.EndpointsTestCase):
678 """Tests for handlers_endpoints.MachineProviderEndpoints.batched_lease.""" 685 """Tests for handlers_endpoints.MachineProviderEndpoints.batched_lease."""
679 api_service_cls = handlers_endpoints.MachineProviderEndpoints 686 api_service_cls = handlers_endpoints.MachineProviderEndpoints
680 687
681 def setUp(self): 688 def setUp(self):
682 super(MachineProviderBatchedLeaseTest, self).setUp() 689 super(MachineProviderBatchedLeaseTest, self).setUp()
683 app = handlers_endpoints.create_endpoints_app() 690 app = handlers_endpoints.create_endpoints_app()
684 self.app = webtest.TestApp(app) 691 self.app = webtest.TestApp(app)
685 692
686 def test_batch(self): 693 def test_batch(self):
694 def is_group_member(group):
695 return group == 'machine-provider-users'
696 self.mock(acl.auth, 'is_group_member', is_group_member)
687 ts = utils.utcnow() 697 ts = utils.utcnow()
688 self.mock(utils, 'utcnow', lambda *args, **kwargs: ts) 698 self.mock(utils, 'utcnow', lambda *args, **kwargs: ts)
689 699
690 lease_requests = rpc_to_json(rpc_messages.BatchedLeaseRequest(requests=[ 700 lease_requests = rpc_to_json(rpc_messages.BatchedLeaseRequest(requests=[
691 rpc_messages.LeaseRequest( 701 rpc_messages.LeaseRequest(
692 dimensions=rpc_messages.Dimensions( 702 dimensions=rpc_messages.Dimensions(
693 os_family=rpc_messages.OSFamily.LINUX, 703 os_family=rpc_messages.OSFamily.LINUX,
694 ), 704 ),
695 duration=1, 705 duration=1,
696 request_id='request-id', 706 request_id='request-id',
697 ), 707 ),
698 ])) 708 ]))
699 auth_testing.mock_get_current_identity(self)
700 709
701 lease_responses = jsonish_dict_to_rpc( 710 lease_responses = jsonish_dict_to_rpc(
702 self.call_api('batched_lease', lease_requests).json, 711 self.call_api('batched_lease', lease_requests).json,
703 rpc_messages.BatchedLeaseResponse, 712 rpc_messages.BatchedLeaseResponse,
704 ) 713 )
705 self.assertEqual(len(lease_responses.responses), 1) 714 self.assertEqual(len(lease_responses.responses), 1)
706 self.assertEqual( 715 self.assertEqual(
707 lease_responses.responses[0].client_request_id, 'request-id') 716 lease_responses.responses[0].client_request_id, 'request-id')
708 self.assertFalse(lease_responses.responses[0].error) 717 self.assertFalse(lease_responses.responses[0].error)
709 718
710 def test_deadline_exceeded(self): 719 def test_deadline_exceeded(self):
720 def is_group_member(group):
721 return group == 'machine-provider-users'
722 self.mock(acl.auth, 'is_group_member', is_group_member)
711 class utcnow(object): 723 class utcnow(object):
712 def __init__(self, init_ts): 724 def __init__(self, init_ts):
713 self.last_ts = init_ts 725 self.last_ts = init_ts
714 def __call__(self, *args, **kwargs): 726 def __call__(self, *args, **kwargs):
715 self.last_ts = self.last_ts + datetime.timedelta(seconds=60) 727 self.last_ts = self.last_ts + datetime.timedelta(seconds=60)
716 return self.last_ts 728 return self.last_ts
717 self.mock(utils, 'utcnow', utcnow(utils.utcnow())) 729 self.mock(utils, 'utcnow', utcnow(utils.utcnow()))
718 730
719 lease_requests = rpc_to_json(rpc_messages.BatchedLeaseRequest(requests=[ 731 lease_requests = rpc_to_json(rpc_messages.BatchedLeaseRequest(requests=[
720 rpc_messages.LeaseRequest( 732 rpc_messages.LeaseRequest(
721 dimensions=rpc_messages.Dimensions( 733 dimensions=rpc_messages.Dimensions(
722 os_family=rpc_messages.OSFamily.LINUX, 734 os_family=rpc_messages.OSFamily.LINUX,
723 ), 735 ),
724 duration=1, 736 duration=1,
725 request_id='request-id', 737 request_id='request-id',
726 ), 738 ),
727 ])) 739 ]))
728 auth_testing.mock_get_current_identity(self)
729 740
730 lease_responses = jsonish_dict_to_rpc( 741 lease_responses = jsonish_dict_to_rpc(
731 self.call_api('batched_lease', lease_requests).json, 742 self.call_api('batched_lease', lease_requests).json,
732 rpc_messages.BatchedLeaseResponse, 743 rpc_messages.BatchedLeaseResponse,
733 ) 744 )
734 self.assertEqual(len(lease_responses.responses), 1) 745 self.assertEqual(len(lease_responses.responses), 1)
735 self.assertEqual( 746 self.assertEqual(
736 lease_responses.responses[0].client_request_id, 'request-id') 747 lease_responses.responses[0].client_request_id, 'request-id')
737 self.assertEqual( 748 self.assertEqual(
738 lease_responses.responses[0].error, 749 lease_responses.responses[0].error,
739 rpc_messages.LeaseRequestError.DEADLINE_EXCEEDED, 750 rpc_messages.LeaseRequestError.DEADLINE_EXCEEDED,
740 ) 751 )
741 752
742 def test_exception(self): 753 def test_exception(self):
754 def is_group_member(group):
755 return group == 'machine-provider-users'
756 self.mock(acl.auth, 'is_group_member', is_group_member)
743 ts = utils.utcnow() 757 ts = utils.utcnow()
744 self.mock(utils, 'utcnow', lambda *args, **kwargs: ts) 758 self.mock(utils, 'utcnow', lambda *args, **kwargs: ts)
745 759
746 def _lease(*args, **kwargs): 760 def _lease(*args, **kwargs):
747 raise runtime.apiproxy_errors.CancelledError 761 raise runtime.apiproxy_errors.CancelledError
748 self.mock(handlers_endpoints.MachineProviderEndpoints, '_lease', _lease) 762 self.mock(handlers_endpoints.MachineProviderEndpoints, '_lease', _lease)
749 763
750 lease_requests = rpc_to_json(rpc_messages.BatchedLeaseRequest(requests=[ 764 lease_requests = rpc_to_json(rpc_messages.BatchedLeaseRequest(requests=[
751 rpc_messages.LeaseRequest( 765 rpc_messages.LeaseRequest(
752 dimensions=rpc_messages.Dimensions( 766 dimensions=rpc_messages.Dimensions(
753 os_family=rpc_messages.OSFamily.LINUX, 767 os_family=rpc_messages.OSFamily.LINUX,
754 ), 768 ),
755 duration=1, 769 duration=1,
756 request_id='request-id', 770 request_id='request-id',
757 ), 771 ),
758 ])) 772 ]))
759 auth_testing.mock_get_current_identity(self)
760 773
761 lease_responses = jsonish_dict_to_rpc( 774 lease_responses = jsonish_dict_to_rpc(
762 self.call_api('batched_lease', lease_requests).json, 775 self.call_api('batched_lease', lease_requests).json,
763 rpc_messages.BatchedLeaseResponse, 776 rpc_messages.BatchedLeaseResponse,
764 ) 777 )
765 self.assertEqual(len(lease_responses.responses), 1) 778 self.assertEqual(len(lease_responses.responses), 1)
766 self.assertEqual( 779 self.assertEqual(
767 lease_responses.responses[0].client_request_id, 'request-id') 780 lease_responses.responses[0].client_request_id, 'request-id')
768 self.assertEqual( 781 self.assertEqual(
769 lease_responses.responses[0].error, 782 lease_responses.responses[0].error,
770 rpc_messages.LeaseRequestError.TRANSIENT_ERROR, 783 rpc_messages.LeaseRequestError.TRANSIENT_ERROR,
771 ) 784 )
772 785
773 786
774 class MachineProviderLeaseTest(test_case.EndpointsTestCase): 787 class MachineProviderLeaseTest(test_case.EndpointsTestCase):
775 """Tests for handlers_endpoints.MachineProviderEndpoints.lease.""" 788 """Tests for handlers_endpoints.MachineProviderEndpoints.lease."""
776 api_service_cls = handlers_endpoints.MachineProviderEndpoints 789 api_service_cls = handlers_endpoints.MachineProviderEndpoints
777 790
778 def setUp(self): 791 def setUp(self):
779 super(MachineProviderLeaseTest, self).setUp() 792 super(MachineProviderLeaseTest, self).setUp()
780 app = handlers_endpoints.create_endpoints_app() 793 app = handlers_endpoints.create_endpoints_app()
781 self.app = webtest.TestApp(app) 794 self.app = webtest.TestApp(app)
782 795
783 def test_lease_duration(self): 796 def test_lease_duration(self):
797 def is_group_member(group):
798 return group == 'machine-provider-users'
799 self.mock(acl.auth, 'is_group_member', is_group_member)
784 lease_request = rpc_to_json(rpc_messages.LeaseRequest( 800 lease_request = rpc_to_json(rpc_messages.LeaseRequest(
785 dimensions=rpc_messages.Dimensions( 801 dimensions=rpc_messages.Dimensions(
786 os_family=rpc_messages.OSFamily.LINUX, 802 os_family=rpc_messages.OSFamily.LINUX,
787 ), 803 ),
788 duration=1, 804 duration=1,
789 request_id='abc', 805 request_id='abc',
790 pubsub_topic='topic', 806 pubsub_topic='topic',
791 )) 807 ))
792 auth_testing.mock_get_current_identity(self)
793 808
794 lease_response = jsonish_dict_to_rpc( 809 lease_response = jsonish_dict_to_rpc(
795 self.call_api('lease', lease_request).json, 810 self.call_api('lease', lease_request).json,
796 rpc_messages.LeaseResponse, 811 rpc_messages.LeaseResponse,
797 ) 812 )
798 self.assertFalse(lease_response.error) 813 self.assertFalse(lease_response.error)
799 814
800 def test_lease_duration_zero(self): 815 def test_lease_duration_zero(self):
816 def is_group_member(group):
817 return group == 'machine-provider-users'
818 self.mock(acl.auth, 'is_group_member', is_group_member)
801 lease_request = rpc_to_json(rpc_messages.LeaseRequest( 819 lease_request = rpc_to_json(rpc_messages.LeaseRequest(
802 dimensions=rpc_messages.Dimensions( 820 dimensions=rpc_messages.Dimensions(
803 os_family=rpc_messages.OSFamily.LINUX, 821 os_family=rpc_messages.OSFamily.LINUX,
804 ), 822 ),
805 duration=0, 823 duration=0,
806 request_id='abc', 824 request_id='abc',
807 )) 825 ))
808 auth_testing.mock_get_current_identity(self)
809 826
810 lease_response = jsonish_dict_to_rpc( 827 lease_response = jsonish_dict_to_rpc(
811 self.call_api('lease', lease_request).json, 828 self.call_api('lease', lease_request).json,
812 rpc_messages.LeaseResponse, 829 rpc_messages.LeaseResponse,
813 ) 830 )
814 self.assertEqual( 831 self.assertEqual(
815 lease_response.error, 832 lease_response.error,
816 rpc_messages.LeaseRequestError.LEASE_LENGTH_UNSPECIFIED, 833 rpc_messages.LeaseRequestError.LEASE_LENGTH_UNSPECIFIED,
817 ) 834 )
818 835
819 def test_lease_duration_negative(self): 836 def test_lease_duration_negative(self):
837 def is_group_member(group):
838 return group == 'machine-provider-users'
839 self.mock(acl.auth, 'is_group_member', is_group_member)
820 lease_request = rpc_to_json(rpc_messages.LeaseRequest( 840 lease_request = rpc_to_json(rpc_messages.LeaseRequest(
821 dimensions=rpc_messages.Dimensions( 841 dimensions=rpc_messages.Dimensions(
822 os_family=rpc_messages.OSFamily.LINUX, 842 os_family=rpc_messages.OSFamily.LINUX,
823 ), 843 ),
824 duration=-1, 844 duration=-1,
825 request_id='abc', 845 request_id='abc',
826 )) 846 ))
827 auth_testing.mock_get_current_identity(self)
828 847
829 lease_response = jsonish_dict_to_rpc( 848 lease_response = jsonish_dict_to_rpc(
830 self.call_api('lease', lease_request).json, 849 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, 850 rpc_messages.LeaseResponse,
851 ) 851 )
852 self.assertEqual( 852 self.assertEqual(
853 lease_response.error, 853 lease_response.error,
854 rpc_messages.LeaseRequestError.NONPOSITIVE_DEADLINE, 854 rpc_messages.LeaseRequestError.NONPOSITIVE_DEADLINE,
855 ) 855 )
856 856
857 def test_lease_duration_and_lease_expiration_ts(self): 857 def test_lease_duration_and_lease_expiration_ts(self):
858 def is_group_member(group):
859 return group == 'machine-provider-users'
860 self.mock(acl.auth, 'is_group_member', is_group_member)
858 lease_request = rpc_to_json(rpc_messages.LeaseRequest( 861 lease_request = rpc_to_json(rpc_messages.LeaseRequest(
859 dimensions=rpc_messages.Dimensions( 862 dimensions=rpc_messages.Dimensions(
860 os_family=rpc_messages.OSFamily.LINUX, 863 os_family=rpc_messages.OSFamily.LINUX,
861 ), 864 ),
862 duration=1, 865 duration=1,
863 lease_expiration_ts=9999999999, 866 lease_expiration_ts=9999999999,
864 request_id='abc', 867 request_id='abc',
865 )) 868 ))
866 auth_testing.mock_get_current_identity(self)
867 869
868 lease_response = jsonish_dict_to_rpc( 870 lease_response = jsonish_dict_to_rpc(
869 self.call_api('lease', lease_request).json, 871 self.call_api('lease', lease_request).json,
870 rpc_messages.LeaseResponse, 872 rpc_messages.LeaseResponse,
871 ) 873 )
872 self.assertEqual( 874 self.assertEqual(
873 lease_response.error, 875 lease_response.error,
874 rpc_messages.LeaseRequestError.MUTUAL_EXCLUSION_ERROR, 876 rpc_messages.LeaseRequestError.MUTUAL_EXCLUSION_ERROR,
875 ) 877 )
876 878
877 def test_lease_timestamp(self): 879 def test_lease_timestamp(self):
880 def is_group_member(group):
881 return group == 'machine-provider-users'
882 self.mock(acl.auth, 'is_group_member', is_group_member)
878 lease_request = rpc_to_json(rpc_messages.LeaseRequest( 883 lease_request = rpc_to_json(rpc_messages.LeaseRequest(
879 dimensions=rpc_messages.Dimensions( 884 dimensions=rpc_messages.Dimensions(
880 os_family=rpc_messages.OSFamily.LINUX, 885 os_family=rpc_messages.OSFamily.LINUX,
881 ), 886 ),
882 lease_expiration_ts=9999999999, 887 lease_expiration_ts=9999999999,
883 request_id='abc', 888 request_id='abc',
884 )) 889 ))
885 auth_testing.mock_get_current_identity(self)
886 890
887 lease_response = jsonish_dict_to_rpc( 891 lease_response = jsonish_dict_to_rpc(
888 self.call_api('lease', lease_request).json, 892 self.call_api('lease', lease_request).json,
889 rpc_messages.LeaseResponse, 893 rpc_messages.LeaseResponse,
890 ) 894 )
891 self.assertFalse(lease_response.error) 895 self.assertFalse(lease_response.error)
892 896
893 def test_lease_timestamp_passed(self): 897 def test_lease_timestamp_passed(self):
898 def is_group_member(group):
899 return group == 'machine-provider-users'
900 self.mock(acl.auth, 'is_group_member', is_group_member)
894 lease_request = rpc_to_json(rpc_messages.LeaseRequest( 901 lease_request = rpc_to_json(rpc_messages.LeaseRequest(
895 dimensions=rpc_messages.Dimensions( 902 dimensions=rpc_messages.Dimensions(
896 os_family=rpc_messages.OSFamily.LINUX, 903 os_family=rpc_messages.OSFamily.LINUX,
897 ), 904 ),
898 lease_expiration_ts=1, 905 lease_expiration_ts=1,
899 request_id='abc', 906 request_id='abc',
900 )) 907 ))
901 auth_testing.mock_get_current_identity(self)
902 908
903 lease_response = jsonish_dict_to_rpc( 909 lease_response = jsonish_dict_to_rpc(
904 self.call_api('lease', lease_request).json, 910 self.call_api('lease', lease_request).json,
905 rpc_messages.LeaseResponse, 911 rpc_messages.LeaseResponse,
906 ) 912 )
907 self.assertEqual( 913 self.assertEqual(
908 lease_response.error, 914 lease_response.error,
909 rpc_messages.LeaseRequestError.LEASE_EXPIRATION_TS_ERROR, 915 rpc_messages.LeaseRequestError.LEASE_EXPIRATION_TS_ERROR,
910 ) 916 )
911 917
912 def test_duplicate(self): 918 def test_duplicate(self):
919 def is_group_member(group):
920 return group == 'machine-provider-users'
921 self.mock(acl.auth, 'is_group_member', is_group_member)
913 lease_request = rpc_to_json(rpc_messages.LeaseRequest( 922 lease_request = rpc_to_json(rpc_messages.LeaseRequest(
914 dimensions=rpc_messages.Dimensions( 923 dimensions=rpc_messages.Dimensions(
915 os_family=rpc_messages.OSFamily.OSX, 924 os_family=rpc_messages.OSFamily.OSX,
916 ), 925 ),
917 duration=3, 926 duration=3,
918 request_id='asdf', 927 request_id='asdf',
919 )) 928 ))
920 auth_testing.mock_get_current_identity(self)
921 929
922 lease_response_1 = jsonish_dict_to_rpc( 930 lease_response_1 = jsonish_dict_to_rpc(
923 self.call_api('lease', lease_request).json, 931 self.call_api('lease', lease_request).json,
924 rpc_messages.LeaseResponse, 932 rpc_messages.LeaseResponse,
925 ) 933 )
926 lease_response_2 = jsonish_dict_to_rpc( 934 lease_response_2 = jsonish_dict_to_rpc(
927 self.call_api('lease', lease_request).json, 935 self.call_api('lease', lease_request).json,
928 rpc_messages.LeaseResponse, 936 rpc_messages.LeaseResponse,
929 ) 937 )
930 self.assertFalse(lease_response_1.error) 938 self.assertFalse(lease_response_1.error)
931 self.assertFalse(lease_response_2.error) 939 self.assertFalse(lease_response_2.error)
932 self.assertEqual( 940 self.assertEqual(
933 lease_response_1.request_hash, 941 lease_response_1.request_hash,
934 lease_response_2.request_hash, 942 lease_response_2.request_hash,
935 ) 943 )
936 944
937 def test_request_id_reuse(self): 945 def test_request_id_reuse(self):
946 def is_group_member(group):
947 return group == 'machine-provider-users'
948 self.mock(acl.auth, 'is_group_member', is_group_member)
938 lease_request_1 = rpc_to_json(rpc_messages.LeaseRequest( 949 lease_request_1 = rpc_to_json(rpc_messages.LeaseRequest(
939 dimensions=rpc_messages.Dimensions( 950 dimensions=rpc_messages.Dimensions(
940 os_family=rpc_messages.OSFamily.WINDOWS, 951 os_family=rpc_messages.OSFamily.WINDOWS,
941 ), 952 ),
942 duration=7, 953 duration=7,
943 request_id='qwerty', 954 request_id='qwerty',
944 )) 955 ))
945 lease_request_2 = rpc_to_json(rpc_messages.LeaseRequest( 956 lease_request_2 = rpc_to_json(rpc_messages.LeaseRequest(
946 dimensions=rpc_messages.Dimensions( 957 dimensions=rpc_messages.Dimensions(
947 os_family=rpc_messages.OSFamily.WINDOWS, 958 os_family=rpc_messages.OSFamily.WINDOWS,
948 ), 959 ),
949 duration=189, 960 duration=189,
950 request_id='qwerty', 961 request_id='qwerty',
951 )) 962 ))
952 auth_testing.mock_get_current_identity(self)
953 963
954 lease_response_1 = jsonish_dict_to_rpc( 964 lease_response_1 = jsonish_dict_to_rpc(
955 self.call_api('lease', lease_request_1).json, 965 self.call_api('lease', lease_request_1).json,
956 rpc_messages.LeaseResponse, 966 rpc_messages.LeaseResponse,
957 ) 967 )
958 lease_response_2 = jsonish_dict_to_rpc( 968 lease_response_2 = jsonish_dict_to_rpc(
959 self.call_api('lease', lease_request_2).json, 969 self.call_api('lease', lease_request_2).json,
960 rpc_messages.LeaseResponse, 970 rpc_messages.LeaseResponse,
961 ) 971 )
962 self.assertFalse(lease_response_1.error) 972 self.assertFalse(lease_response_1.error)
963 self.assertEqual( 973 self.assertEqual(
964 lease_response_2.error, 974 lease_response_2.error,
965 rpc_messages.LeaseRequestError.REQUEST_ID_REUSE, 975 rpc_messages.LeaseRequestError.REQUEST_ID_REUSE,
966 ) 976 )
967 self.assertNotEqual( 977 self.assertNotEqual(
968 lease_response_1.request_hash, 978 lease_response_1.request_hash,
969 lease_response_2.request_hash, 979 lease_response_2.request_hash,
970 ) 980 )
971 981
972 def test_invalid_topic(self): 982 def test_invalid_topic(self):
983 def is_group_member(group):
984 return group == 'machine-provider-users'
985 self.mock(acl.auth, 'is_group_member', is_group_member)
973 lease_request = rpc_to_json(rpc_messages.LeaseRequest( 986 lease_request = rpc_to_json(rpc_messages.LeaseRequest(
974 dimensions=rpc_messages.Dimensions( 987 dimensions=rpc_messages.Dimensions(
975 os_family=rpc_messages.OSFamily.WINDOWS, 988 os_family=rpc_messages.OSFamily.WINDOWS,
976 ), 989 ),
977 duration=9, 990 duration=9,
978 pubsub_topic='../../a-different-project/topics/my-topic', 991 pubsub_topic='../../a-different-project/topics/my-topic',
979 request_id='123', 992 request_id='123',
980 )) 993 ))
981 auth_testing.mock_get_current_identity(self)
982 994
983 lease_response = jsonish_dict_to_rpc( 995 lease_response = jsonish_dict_to_rpc(
984 self.call_api('lease', lease_request).json, 996 self.call_api('lease', lease_request).json,
985 rpc_messages.LeaseResponse, 997 rpc_messages.LeaseResponse,
986 ) 998 )
987 self.assertEqual( 999 self.assertEqual(
988 lease_response.error, 1000 lease_response.error,
989 rpc_messages.LeaseRequestError.INVALID_TOPIC, 1001 rpc_messages.LeaseRequestError.INVALID_TOPIC,
990 ) 1002 )
991 1003
992 def test_invalid_project(self): 1004 def test_invalid_project(self):
1005 def is_group_member(group):
1006 return group == 'machine-provider-users'
1007 self.mock(acl.auth, 'is_group_member', is_group_member)
993 lease_request = rpc_to_json(rpc_messages.LeaseRequest( 1008 lease_request = rpc_to_json(rpc_messages.LeaseRequest(
994 dimensions=rpc_messages.Dimensions( 1009 dimensions=rpc_messages.Dimensions(
995 os_family=rpc_messages.OSFamily.WINDOWS, 1010 os_family=rpc_messages.OSFamily.WINDOWS,
996 ), 1011 ),
997 duration=9, 1012 duration=9,
998 pubsub_topic='my-topic', 1013 pubsub_topic='my-topic',
999 pubsub_project='../../a-different-project/topics/my-other-topic', 1014 pubsub_project='../../a-different-project/topics/my-other-topic',
1000 request_id='123', 1015 request_id='123',
1001 )) 1016 ))
1002 auth_testing.mock_get_current_identity(self)
1003 1017
1004 lease_response = jsonish_dict_to_rpc( 1018 lease_response = jsonish_dict_to_rpc(
1005 self.call_api('lease', lease_request).json, 1019 self.call_api('lease', lease_request).json,
1006 rpc_messages.LeaseResponse, 1020 rpc_messages.LeaseResponse,
1007 ) 1021 )
1008 self.assertEqual( 1022 self.assertEqual(
1009 lease_response.error, 1023 lease_response.error,
1010 rpc_messages.LeaseRequestError.INVALID_PROJECT, 1024 rpc_messages.LeaseRequestError.INVALID_PROJECT,
1011 ) 1025 )
1012 1026
1013 def test_project_without_topic(self): 1027 def test_project_without_topic(self):
1028 def is_group_member(group):
1029 return group == 'machine-provider-users'
1030 self.mock(acl.auth, 'is_group_member', is_group_member)
1014 lease_request = rpc_to_json(rpc_messages.LeaseRequest( 1031 lease_request = rpc_to_json(rpc_messages.LeaseRequest(
1015 dimensions=rpc_messages.Dimensions( 1032 dimensions=rpc_messages.Dimensions(
1016 os_family=rpc_messages.OSFamily.WINDOWS, 1033 os_family=rpc_messages.OSFamily.WINDOWS,
1017 ), 1034 ),
1018 duration=9, 1035 duration=9,
1019 pubsub_project='my-project', 1036 pubsub_project='my-project',
1020 request_id='123', 1037 request_id='123',
1021 )) 1038 ))
1022 auth_testing.mock_get_current_identity(self)
1023 1039
1024 lease_response = jsonish_dict_to_rpc( 1040 lease_response = jsonish_dict_to_rpc(
1025 self.call_api('lease', lease_request).json, 1041 self.call_api('lease', lease_request).json,
1026 rpc_messages.LeaseResponse, 1042 rpc_messages.LeaseResponse,
1027 ) 1043 )
1028 self.assertEqual( 1044 self.assertEqual(
1029 lease_response.error, 1045 lease_response.error,
1030 rpc_messages.LeaseRequestError.UNSPECIFIED_TOPIC, 1046 rpc_messages.LeaseRequestError.UNSPECIFIED_TOPIC,
1031 ) 1047 )
1032 1048
1033 1049
1034 if __name__ == '__main__': 1050 if __name__ == '__main__':
1035 unittest.main() 1051 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