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