Merge "Impelment Akamai purge functionality by CCU"

This commit is contained in:
Jenkins 2014-12-03 20:57:32 +00:00 committed by Gerrit Code Review
commit 5b4361bc0b
3 changed files with 127 additions and 2 deletions

View File

@ -377,8 +377,56 @@ class ServiceController(base.ServiceBase):
else:
return self.responder.deleted(provider_service_id)
def purge(self, service_id, purge_urls=None):
pass
def purge(self, provider_service_id, purge_url=None):
try:
# Get the service
if purge_url is None:
raise RuntimeError('Akamai purge-all functionality has not'
' been implemented')
else:
try:
policies = json.loads(provider_service_id)
except Exception:
# raise a more meaningful error for debugging info
try:
raise RuntimeError('Mal-formed Akaimai policy ids: %s'
% provider_service_id)
except Exception:
return self.responder.failed("failed to delete "
"service")
for policy in policies:
resp = self.policy_api_client.get(
self.policy_api_base_url.format(policy_name=policy),
headers=self.request_header)
if resp.status_code != 200:
raise RuntimeError(resp.text)
else:
url_scheme = 'http'
policy_content = json.loads(resp.text)
# loop over matches to get the correct url scheme
for m_item in policy_content['rules'][0]['matches']:
if m_item['name'] == 'url-scheme':
url_scheme = m_item['value']
break
actual_purge_url = url_scheme + "://www." + policy + (
purge_url)
data = {
'objects': [
actual_purge_url
]
}
resp = self.ccu_api_client.post(self.ccu_api_base_url,
data=json.dumps(data),
headers=(
self.request_header
))
if resp.status_code != 201:
raise RuntimeError(resp.text)
return self.responder.purged(provider_service_id,
purge_url=purge_url)
except Exception:
return self.responder.failed("failed to PURGE service")
@decorators.lazy_property(write=False)
def current_customer(self):

View File

@ -0,0 +1,31 @@
{
"no_url_scheme": {
"rules": [{
"matches": [
{"name": "url-wildcard",
"value": "/*"}
]
}
]
},
"url_scheme_http": {
"rules": [{
"matches": [
{"name": "url-wildcard",
"value": "/*"},
{"name": "url-scheme",
"value": "http"}
]}
]
},
"url_scheme_https": {
"rules": [{
"matches": [
{"name": "url-wildcard",
"value": "/*"},
{"name": "url-scheme",
"value": "https"}
]}
]
}
}

View File

@ -167,3 +167,49 @@ class TestServices(base.TestCase):
resp = controller.update(
provider_service_id, service_obj, service_obj, service_obj)
self.assertIn('id', resp[self.driver.provider_name])
def test_purge_all(self):
provider_service_id = json.dumps([str(uuid.uuid1())])
controller = services.ServiceController(self.driver)
resp = controller.purge(provider_service_id, None)
self.assertIn('error', resp[self.driver.provider_name])
def test_purge_with_get_exception(self):
provider_service_id = json.dumps([str(uuid.uuid1())])
controller = services.ServiceController(self.driver)
controller.policy_api_client.get.return_value = mock.Mock(
status_code=400,
text='Some get error happened'
)
resp = controller.purge(provider_service_id, '/img/abc.jpeg')
self.assertIn('error', resp[self.driver.provider_name])
@ddt.file_data('policy_detail.json')
def test_purge_with_ccu_exception(self, policy_detail_json):
provider_service_id = json.dumps([str(uuid.uuid1())])
controller = services.ServiceController(self.driver)
controller.policy_api_client.get.return_value = mock.Mock(
status_code=200,
text=json.dumps(policy_detail_json)
)
controller.ccu_api_client.post.return_value = mock.Mock(
status_code=400,
text="purge request post failed"
)
resp = controller.purge(provider_service_id, '/img/abc.jpeg')
self.assertIn('error', resp[self.driver.provider_name])
@ddt.file_data('policy_detail.json')
def test_purge(self, policy_detail_json):
provider_service_id = json.dumps([str(uuid.uuid1())])
controller = services.ServiceController(self.driver)
controller.policy_api_client.get.return_value = mock.Mock(
status_code=200,
text=json.dumps(policy_detail_json)
)
controller.ccu_api_client.post.return_value = mock.Mock(
status_code=201,
text="purge request post complete"
)
resp = controller.purge(provider_service_id, '/img/abc.jpeg')
self.assertIn('id', resp[self.driver.provider_name])