Skip to content
This repository has been archived by the owner on Sep 26, 2019. It is now read-only.

Commit

Permalink
Merge "Unit tests for akamai services controller"
Browse files Browse the repository at this point in the history
  • Loading branch information
Jenkins authored and openstack-gerrit committed Sep 6, 2016
2 parents 665c577 + 876d1e2 commit 54709c6
Show file tree
Hide file tree
Showing 2 changed files with 187 additions and 2 deletions.
13 changes: 11 additions & 2 deletions tests/unit/provider/akamai/data_update_service.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,24 @@
"name" : "mysite.com",
"domains": [
{"domain": "parsely.sage.com"},
{"domain": "densely.sage.com"},
{"domain": "densely.sage.com",
"protocol": "https",
"certificate": "san"},
{"domain": "rosemary.thyme.net"}
],
"origins": [
{"origin": "mockdomain.com", "ssl": true, "port": 443},
{"origin": "mockdomain-image.com",
"rules": [{"name": "img", "request_url": "/img"}] }
],
"flavor_id" : "standard"
"flavor_id" : "standard",
"provider_details": {
"Akamai": {
"access_urls": [{"provider_url": "akamai.provider.com", "domain": "densely.sage.com"}],
"id": [{"protocol": "https", "certificate": "san", "policy_name": "densely.sage.com"}],
"domains_certificate_status": {"densely.sage.com": "create_in_progress"}
}
}
},
"single_one_origin_without_domains": {
"name" : "mysite.com",
Expand Down
176 changes: 176 additions & 0 deletions tests/unit/provider/akamai/test_services.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
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
Expand Down Expand Up @@ -387,6 +388,181 @@ def test_update(self, service_json):
provider_service_id, service_obj)
self.assertIn('id', resp[self.driver.provider_name])

@ddt.file_data('data_update_service.json')
def test_update_create_new_sub_customer_new_policy(self, service_json):
provider_service_id = json.dumps([{'policy_name': str(uuid.uuid1()),
'protocol': 'http',
'certificate': None}])
controller = services.ServiceController(self.driver)
controller.subcustomer_api_client.get.side_effect = [
mock.Mock(status_code=400,
ok=False,
text='Error retrieving sub customer!'),
mock.Mock(status_code=200,
ok=True,
content=json.dumps({"geo": "US"})),
mock.Mock(status_code=200,
ok=True,
content=json.dumps({"geo": "US"})),
mock.Mock(status_code=200,
ok=True,
content=json.dumps({"geo": "US"}))
]

controller.subcustomer_api_client.delete.return_value = \
mock.Mock(status_code=200,
ok=True)

controller.policy_api_client.get.return_value = mock.Mock(
status_code=200,
text=json.dumps(dict(rules=[]))
)
controller.policy_api_client.put.return_value = mock.Mock(
status_code=200,
text='Put successful'
)
controller.policy_api_client.delete.return_value = mock.Mock(
status_code=200,
text='Delete successful'
)
service_obj = service.load_from_json(service_json)
resp = controller.update(
provider_service_id, service_obj)
self.assertIn('id', resp[self.driver.provider_name])

@ddt.file_data('data_update_service.json')
def test_update_create_new_sub_customer_policy_exists(self, service_json):
provider_service_id = []
for domain_obj in service_json.get('domains', []):
provider_service_id.append(
{
'policy_name': domain_obj['domain'],
'protocol': domain_obj.get('protocol', 'http'),
'certificate': domain_obj.get('certificate', None)
}
)
if len(provider_service_id) == 0:
provider_service_id = [{'policy_name': str(uuid.uuid1()),
'protocol': 'http',
'certificate': None}]
provider_service_id = json.dumps(provider_service_id)

controller = services.ServiceController(self.driver)
controller.subcustomer_api_client.get.side_effect = [
mock.Mock(status_code=400,
ok=False,
text='Error retrieving sub customer!'),
mock.Mock(status_code=200,
ok=True,
content=json.dumps({"geo": "US"})),
mock.Mock(status_code=200,
ok=True,
content=json.dumps({"geo": "US"})),
mock.Mock(status_code=200,
ok=True,
content=json.dumps({"geo": "US"}))
]

controller.subcustomer_api_client.delete.return_value = \
mock.Mock(status_code=200,
ok=True)

controller.policy_api_client.get.return_value = mock.Mock(
status_code=200,
text=json.dumps(dict(rules=[]))
)
controller.policy_api_client.put.return_value = mock.Mock(
status_code=200,
text='Put successful'
)
controller.policy_api_client.delete.return_value = mock.Mock(
status_code=200,
text='Delete successful'
)

service_obj = service.load_from_json(service_json)
resp = controller.update(
provider_service_id, service_obj)
self.assertIn('id', resp[self.driver.provider_name])

@ddt.file_data('data_update_service.json')
def test_update_https_san_domains_with_cert_info(self, service_json):
provider_service_id = []
for domain_obj in service_json.get('domains', []):
provider_service_id.append(
{
'policy_name': domain_obj['domain'],
'protocol': domain_obj.get('protocol', 'http'),
'certificate': domain_obj.get('certificate', None)
}
)
if len(provider_service_id) == 0:
provider_service_id = [{'policy_name': str(uuid.uuid1()),
'protocol': 'http',
'certificate': None}]
provider_service_id = json.dumps(provider_service_id)

controller = services.ServiceController(self.driver)
controller.subcustomer_api_client.get.side_effect = [
mock.Mock(status_code=400,
ok=False,
text='Error retrieving sub customer!'),
mock.Mock(status_code=200,
ok=True,
content=json.dumps({"geo": "US"})),
mock.Mock(status_code=200,
ok=True,
content=json.dumps({"geo": "US"})),
mock.Mock(status_code=200,
ok=True,
content=json.dumps({"geo": "US"}))
]

controller.subcustomer_api_client.delete.return_value = \
mock.Mock(status_code=200,
ok=True)

controller.policy_api_client.get.return_value = mock.Mock(
status_code=200,
text=json.dumps(dict(rules=[]))
)
controller.policy_api_client.put.return_value = mock.Mock(
status_code=200,
text='Put successful'
)
controller.policy_api_client.delete.return_value = mock.Mock(
status_code=200,
text='Delete successful'
)

service_obj = service.load_from_json(service_json)
san_domains = []
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())
}
)
}
)
san_domains.append(curr_domain)

resp = controller.update(provider_service_id, service_obj)
self.assertIn('id', resp[self.driver.provider_name])

@ddt.file_data('data_update_service.json')
def test_update_with_domain_protocol_change(self, service_json):
provider_service_id = json.dumps([{'policy_name': "densely.sage.com",
Expand Down

0 comments on commit 54709c6

Please sign in to comment.