From 61bd7ef5e1cbc41cff54c46ca43f58cc51b6062b Mon Sep 17 00:00:00 2001 From: Isaac Mungai Date: Wed, 24 Aug 2016 11:55:50 -0400 Subject: [PATCH] cover all service creation logic in provider Completes all coverage for akamai provider service creation logic. Change-Id: Ia5987238ea5665870b28902e9f058d35c8ccfdd3 --- poppy/transport/pecan/hooks/context.py | 2 +- tests/functional/transport/validator/base.py | 2 +- tests/unit/provider/akamai/data_service.json | 17 +++- tests/unit/provider/akamai/test_services.py | 98 +++++++++++++++++--- 4 files changed, 105 insertions(+), 14 deletions(-) diff --git a/poppy/transport/pecan/hooks/context.py b/poppy/transport/pecan/hooks/context.py index 1e5cb1ca..a9ac517f 100644 --- a/poppy/transport/pecan/hooks/context.py +++ b/poppy/transport/pecan/hooks/context.py @@ -64,6 +64,6 @@ class ContextHook(hooks.PecanHook): "tenant", None) state.controller.__self__.base_url = getattr(_local_store.context, "base_url", None) - '''Attach auth_token as a member variable project_id to controller.''' + '''Attach auth_token as a member variable auth_token to controller.''' state.controller.__self__.auth_token = getattr(_local_store.context, "auth_token", None) diff --git a/tests/functional/transport/validator/base.py b/tests/functional/transport/validator/base.py index d0b9171c..27c45260 100644 --- a/tests/functional/transport/validator/base.py +++ b/tests/functional/transport/validator/base.py @@ -161,7 +161,7 @@ class _AssertRaisesContext(object): except NameError: # Python 3 compatibility basestring = unicode = str - unicode # For pep8: unicde is defined but not used. + unicode # For pep8: unicode is defined but not used. if isinstance(expected_regexp, basestring): expected_regexp = re.compile(expected_regexp) if not expected_regexp.search(str(exc_value)): diff --git a/tests/unit/provider/akamai/data_service.json b/tests/unit/provider/akamai/data_service.json index 2b2a2800..547cc296 100644 --- a/tests/unit/provider/akamai/data_service.json +++ b/tests/unit/provider/akamai/data_service.json @@ -14,6 +14,21 @@ ], "flavor_id" : "standard" }, + "single_one_origin_https_san": { + "name" : "mysite.com", + "domains": [ + {"domain": "parsely.sage.com"}, + {"domain": "densely.sage.com", + "protocol": "https", + "certificate": "san"}, + {"domain": "rosemary.thyme.net", + "protocol": "http"} + ], + "origins": [ + {"origin": "mockdomain.com", "ssl": false, "port": 80} + ], + "flavor_id" : "standard" + }, "multiple_origins": { "name" : "mysite.com", "domains": [ @@ -94,7 +109,7 @@ }, { "name": "gif-rules", "request_url": "/*.gif" - } + } ] }, {"name": "zero-cache", "ttl": 0 }, diff --git a/tests/unit/provider/akamai/test_services.py b/tests/unit/provider/akamai/test_services.py index 39d1ad62..e4d2969e 100644 --- a/tests/unit/provider/akamai/test_services.py +++ b/tests/unit/provider/akamai/test_services.py @@ -27,6 +27,7 @@ from poppy.model.helpers import origin from poppy.model.helpers import restriction from poppy.model.helpers import rule from poppy.model.service import Service +from poppy.model import ssl_certificate from poppy.provider.akamai import geo_zone_code_mapping from poppy.provider.akamai import services from poppy.transport.pecan.models.request import service @@ -36,19 +37,17 @@ from tests.unit import base @ddt.ddt class TestServices(base.TestCase): - @mock.patch( - 'poppy.provider.akamai.services.ServiceController.policy_api_client') - @mock.patch( - 'poppy.provider.akamai.services.ServiceController.ccu_api_client') - @mock.patch('poppy.provider.akamai.driver.CDNProvider') - def setUp( - self, - mock_driver, - mock_controller_ccu_api_client, - mock_controller_policy_api_client - ): + def setUp(self): super(TestServices, self).setUp() + + driver_patcher = mock.patch('poppy.provider.akamai.driver.CDNProvider') + mock_driver = driver_patcher.start() + self.addCleanup(driver_patcher.stop) + self.driver = mock_driver() + self.policy_client = self.driver.policy_api_client + self.ccu_client = self.driver.ccu_api_client + self.driver.provider_name = 'Akamai' self.driver.akamai_https_access_url_suffix = str(uuid.uuid1()) self.san_cert_cnames = [str(x) for x in range(7)] @@ -65,6 +64,16 @@ class TestServices(base.TestCase): origins=[current_origin], flavor_id='cdn') + def test_controller_properties(self): + self.assertEqual( + self.policy_client, + self.controller.policy_api_client + ) + self.assertEqual( + self.ccu_client, + self.controller.ccu_api_client + ) + @ddt.file_data('domains_list.json') def test_classify_domains(self, domains_list): domains_list = [domain.Domain(domain_s) for domain_s in domains_list] @@ -141,6 +150,27 @@ class TestServices(base.TestCase): status_code=200, text='Put successful' ) + for curr_domain in service_obj.domains: + if ( + curr_domain.certificate == 'san' and + curr_domain.protocol == 'https' + ): + curr_domain.cert_info = ssl_certificate.SSLCertificate( + 'flavor_id', + curr_domain.domain, + curr_domain.certificate, + service_obj.project_id, + cert_details={ + 'Akamai': dict( + cert_domain='1', + extra_info={ + 'status': 'deployed', + 'san cert': '1', + 'created_at': str(datetime.datetime.now()) + } + ) + } + ) provider_responses = self.controller.create(service_obj) for provider_name in provider_responses: provider_response = provider_responses[provider_name] @@ -150,6 +180,52 @@ class TestServices(base.TestCase): self.assertEqual(num_of_domains, num_of_links) self.assertIn('id', provider_responses[provider_name]) + @ddt.file_data('data_service.json') + def test_create_with_multiple_domains_no_san_edge_name(self, service_json): + service_obj = service.load_from_json(service_json) + self.controller.subcustomer_api_client.get.return_value = \ + mock.Mock(status_code=200, + ok=True, + content=json.dumps({"geo": "US"})) + self.controller.policy_api_client.put.return_value = mock.Mock( + status_code=200, + text='Put successful' + ) + num_domains_not_deployed = 0 + for curr_domain in service_obj.domains: + if ( + curr_domain.certificate == 'san' and + curr_domain.protocol == 'https' + ): + num_domains_not_deployed += 1 + curr_domain.cert_info = ssl_certificate.SSLCertificate( + 'flavor_id', + curr_domain.domain, + curr_domain.certificate, + service_obj.project_id, + cert_details={ + 'Akamai': dict( + extra_info={ + 'status': 'create_in_progress', + 'created_at': str(datetime.datetime.now()) + } + ) + } + ) + provider_responses = self.controller.create(service_obj) + for provider_name in provider_responses: + provider_response = provider_responses[provider_name] + num_of_domains = len(service_obj.domains) + num_of_links = len(provider_response['links']) + # make sure we have same number of domains and links + # usually cannot get a link for http+san cert that + # hasn't deployed. + self.assertEqual( + num_of_domains - num_domains_not_deployed, + num_of_links + ) + self.assertIn('id', provider_responses[provider_name]) + @ddt.file_data('data_service.json') def test_create(self, service_json): controller = services.ServiceController(self.driver)