Adds UPSERT functionality to Akamai's PATCH endpoint

Closes-Bug: 1420515

Change-Id: I4f0b9ed0302d4a6f8b100dff36340a8d0f8e4488
This commit is contained in:
Obulpathi 2015-02-10 17:23:59 -05:00
parent 7f96674da8
commit cb6cc283ba
4 changed files with 43 additions and 5 deletions

View File

@ -159,7 +159,13 @@ class ServiceController(base.ServiceBase):
configuration_number=configuration_number,
policy_name=policies[0]['policy_name']),
headers=self.request_header)
if resp.status_code != 200:
# if the policy is not found with provider, create it
if resp.status_code == 404:
print('akamai response code: %s' % resp.status_code)
print('upserting service with akamai: %s' %
service_obj.service_id)
return self.create(service_obj)
elif resp.status_code != 200:
raise RuntimeError(resp.text)
except Exception as e:
return self.responder.failed(str(e))

View File

@ -205,10 +205,6 @@ class ServicesController(base.Controller, hooks.HookController):
def patch_one(self, service_id):
service_updates = json.loads(pecan.request.body.decode('utf-8'))
# if service_updates is empty, abort
if not service_updates:
pecan.abort(400, detail='No details provided to update')
services_controller = self._driver.manager.services_controller
try:

View File

@ -0,0 +1,18 @@
{
"service_multiple_origins": {
"name" : "mysite.com",
"domains": [
{"domain": "parsely.sage.com"},
{"domain": "densely.sage.com"},
{"domain": "rosemary.thyme.net"}
],
"origins": [
{"origin": "mockdomain-text.com", "ssl": false, "port": 80,
"rules": [{"name": "global", "request_url": "/*"},
{"name": "text", "request_url": "/text"}]},
{"origin": "mockdomain-image.com",
"rules": [{"name": "img", "request_url": "/img"}] }
],
"flavor_id" : "standard"
}
}

View File

@ -211,6 +211,24 @@ class TestServices(base.TestCase):
provider_service_id, service_obj)
self.assertIn('id', resp[self.driver.provider_name])
@ddt.file_data('data_upsert_service.json')
def test_upsert(self, service_json):
provider_service_id = json.dumps([{'policy_name': "densely.sage.com",
'protocol': 'http'}])
controller = services.ServiceController(self.driver)
controller.policy_api_client.get.return_value = mock.Mock(
status_code=404,
text='Service not found'
)
controller.policy_api_client.put.return_value = mock.Mock(
status_code=200,
text='Put 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])
def test_purge_all(self):
provider_service_id = json.dumps([{'policy_name': str(uuid.uuid1()),
'protocol': 'http'}])