Merge "cover all service creation logic in provider"

This commit is contained in:
Jenkins 2016-09-06 18:06:39 +00:00 committed by Gerrit Code Review
commit 78e5cbe917
4 changed files with 104 additions and 14 deletions

View File

@ -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)

View File

@ -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)):

View File

@ -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 },

View File

@ -37,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)]
@ -66,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]
@ -142,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]
@ -151,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)