Adds UPSERT functionality to Akamai's PATCH endpoint
Closes-Bug: 1420515 Change-Id: I4f0b9ed0302d4a6f8b100dff36340a8d0f8e4488
This commit is contained in:
parent
7f96674da8
commit
cb6cc283ba
@ -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))
|
||||
|
@ -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:
|
||||
|
18
tests/unit/provider/akamai/data_upsert_service.json
Normal file
18
tests/unit/provider/akamai/data_upsert_service.json
Normal 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"
|
||||
}
|
||||
}
|
@ -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'}])
|
||||
|
Loading…
Reference in New Issue
Block a user