Chromium Code Reviews| 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 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() |
| OLD | NEW |