fix: change default for hard
querystring
- default `hard` to True, which does an actual purge. - when `hard` is set to False, api does a cache invalidation. - fix admin api tests, to wait for service deployed Change-Id: I1e1b4680fb908d734904cd17103d0daf54c93cc3
This commit is contained in:
parent
29191c6d8c
commit
bccf02a2f9
@ -40,7 +40,6 @@ class PurgeProviderServicesTask(task.Task):
|
||||
service_obj = service.load_from_json(service_json)
|
||||
hard = json.loads(hard)
|
||||
provider_details = json.loads(provider_details)
|
||||
purge_url = None if purge_url == 'None' else purge_url
|
||||
|
||||
responders = []
|
||||
# try to purge all service from each provider presented
|
||||
|
@ -408,8 +408,8 @@ class ServiceController(base.ServiceBase):
|
||||
else:
|
||||
return self.responder.deleted(provider_service_id)
|
||||
|
||||
def purge(self, provider_service_id, service_obj, hard=False,
|
||||
purge_url=None):
|
||||
def purge(self, provider_service_id, service_obj, hard=True,
|
||||
purge_url='/*'):
|
||||
if not hard:
|
||||
if not purge_url.startswith('/'):
|
||||
purge_url = ('/' + purge_url)
|
||||
@ -419,7 +419,7 @@ class ServiceController(base.ServiceBase):
|
||||
try:
|
||||
|
||||
# Get the service
|
||||
if purge_url is None:
|
||||
if purge_url == '/*':
|
||||
raise RuntimeError('Akamai purge-all functionality has not'
|
||||
' been implemented')
|
||||
else:
|
||||
@ -444,6 +444,8 @@ class ServiceController(base.ServiceBase):
|
||||
# purge_url has to be a full path
|
||||
# with a starting slash,
|
||||
# e.g: /cdntest.html
|
||||
if not purge_url.startswith('/'):
|
||||
purge_url = ('/' + purge_url)
|
||||
actual_purge_url = ''.join([url_scheme,
|
||||
policy['policy_name'],
|
||||
purge_url])
|
||||
|
@ -58,7 +58,7 @@ class ServicesControllerBase(controller.ProviderControllerBase):
|
||||
raise NotImplementedError
|
||||
|
||||
@abc.abstractmethod
|
||||
def purge(self, provider_service_id, hard=False, purge_url=None):
|
||||
def purge(self, provider_service_id, hard=True, purge_url='/*'):
|
||||
"""purge.
|
||||
|
||||
:param provider_service_id
|
||||
|
@ -84,7 +84,7 @@ class ServiceController(base.ServiceBase):
|
||||
except Exception as e:
|
||||
return self.responder.failed(str(e))
|
||||
|
||||
def purge(self, distribution_id, hard=False, purge_url=None):
|
||||
def purge(self, distribution_id, hard=True, purge_url='/*'):
|
||||
# NOTE(tonytan4ever): boto does not have an API to efficiently
|
||||
# purge all urls yet
|
||||
try:
|
||||
|
@ -223,10 +223,10 @@ class ServiceController(base.ServiceBase):
|
||||
except Exception as e:
|
||||
return self.responder.failed(str(e))
|
||||
|
||||
def purge(self, service_id, hard=False, purge_url=None):
|
||||
def purge(self, service_id, hard=True, purge_url='/*'):
|
||||
try:
|
||||
# Get the service
|
||||
if purge_url is None:
|
||||
if purge_url == '/*':
|
||||
self.client.purge_service(service_id)
|
||||
return self.responder.purged(service_id, purge_url=purge_url)
|
||||
else:
|
||||
|
@ -109,7 +109,7 @@ class ServiceController(base.ServiceBase):
|
||||
# this exception branch will most likely for a network failure
|
||||
return self.responder.failed(str(e))
|
||||
|
||||
def purge(self, pullzone_id, hard=False, purge_url=None):
|
||||
def purge(self, pullzone_id, hard=True, purge_url='/*'):
|
||||
try:
|
||||
purge_response = self.client.purge(pullzone_id, purge_url)
|
||||
if purge_response['code'] != 200:
|
||||
|
@ -43,7 +43,7 @@ class ServiceController(base.ServiceBase):
|
||||
def delete(self, provider_service_id):
|
||||
return self.responder.deleted(provider_service_id)
|
||||
|
||||
def purge(self, provider_service_id, hard=False, purge_url=None):
|
||||
def purge(self, provider_service_id, hard=True, purge_url='/*'):
|
||||
return self.responder.purged(provider_service_id,
|
||||
purge_url=purge_url)
|
||||
|
||||
|
@ -54,14 +54,16 @@ class ServiceAssetsController(base.Controller, hooks.HookController):
|
||||
helpers.abort_with_message)
|
||||
)
|
||||
def delete(self, service_id):
|
||||
purge_url = pecan.request.GET.get('url', None)
|
||||
purge_url = pecan.request.GET.get('url', '/*')
|
||||
purge_all = pecan.request.GET.get('all', False)
|
||||
hard = pecan.request.GET.get('hard', 'False')
|
||||
hard = pecan.request.GET.get('hard', 'True')
|
||||
if purge_url:
|
||||
try:
|
||||
purge_url.encode('ascii')
|
||||
except (UnicodeDecodeError, UnicodeEncodeError):
|
||||
pecan.abort(400, detail='non ascii character present in url')
|
||||
if hard and hard.lower() == 'false':
|
||||
hard = 'False'
|
||||
if hard and hard.lower() == 'true':
|
||||
hard = 'True'
|
||||
try:
|
||||
@ -72,10 +74,7 @@ class ServiceAssetsController(base.Controller, hooks.HookController):
|
||||
pecan.abort(400, detail='hard can only be set to True or False')
|
||||
purge_all = (
|
||||
True if purge_all and purge_all.lower() == 'true' else False)
|
||||
if purge_url is None and not purge_all:
|
||||
pecan.abort(400, detail='No purge url provided '
|
||||
'when not purging all...')
|
||||
elif purge_all and purge_url is not None:
|
||||
if purge_all and purge_url != '/*':
|
||||
pecan.abort(400, detail='Cannot provide all=true '
|
||||
'and a url at the same time')
|
||||
services_controller = self._driver.manager.services_controller
|
||||
|
@ -384,6 +384,13 @@ class TestGetServiceBySANCertDomain(base.TestBase):
|
||||
|
||||
self.service_url = resp.headers["location"]
|
||||
|
||||
self.client.wait_for_service_status(
|
||||
location=self.service_url,
|
||||
status='deployed',
|
||||
abort_on_status='failed',
|
||||
retry_interval=self.test_config.status_check_retry_interval,
|
||||
retry_timeout=self.test_config.status_check_retry_timeout)
|
||||
|
||||
def test_get_service_by_domain(self):
|
||||
self.skipTest('See https://bugs.launchpad.net/poppy/+bug/1486103')
|
||||
get_resp = self.client.get_service(self.service_url)
|
||||
|
@ -181,6 +181,14 @@ class TestAssets(base.TestBase):
|
||||
param=url_param)
|
||||
self.assertEqual(resp.status_code, 400)
|
||||
|
||||
@attrib.attr('smoke')
|
||||
def test_purge_assets_no_url(self):
|
||||
|
||||
url_param = {'url': 'myurl.com'}
|
||||
resp = self.client.purge_assets(location=self.service_url,
|
||||
param=url_param)
|
||||
self.assertEqual(resp.status_code, 400)
|
||||
|
||||
def tearDown(self):
|
||||
self.client.delete_service(location=self.service_location)
|
||||
if self.test_config.generate_flavors:
|
||||
|
@ -366,7 +366,7 @@ class ServiceControllerTest(base.FunctionalTest):
|
||||
},
|
||||
expect_errors=True)
|
||||
|
||||
self.assertEqual(400, response.status_code)
|
||||
self.assertEqual(202, response.status_code)
|
||||
|
||||
response = self.app.delete(
|
||||
self.service_url + '/assets?all=true&url=/abc',
|
||||
@ -380,7 +380,7 @@ class ServiceControllerTest(base.FunctionalTest):
|
||||
|
||||
def test_purge_all(self):
|
||||
response = self.app.delete(
|
||||
self.service_url + '/assets?all=true',
|
||||
self.service_url + '/assets?all=True',
|
||||
headers={
|
||||
"Content-Type": "application/json",
|
||||
'X-Project-ID': self.project_id
|
||||
@ -391,6 +391,17 @@ class ServiceControllerTest(base.FunctionalTest):
|
||||
self.assertEqual(self.service_url,
|
||||
urlparse.urlparse(response.headers["Location"]).path)
|
||||
|
||||
def test_purge_url_and_all(self):
|
||||
response = self.app.delete(
|
||||
self.service_url + '/assets?all=True',
|
||||
headers={
|
||||
"Content-Type": "application/json",
|
||||
'X-Project-ID': self.project_id
|
||||
},
|
||||
expect_errors=True)
|
||||
|
||||
self.assertEqual(202, response.status_code)
|
||||
|
||||
def test_purge_single_url(self):
|
||||
response = self.app.delete(
|
||||
self.service_url + '/assets?url=/abc',
|
||||
@ -442,6 +453,28 @@ class ServiceControllerTest(base.FunctionalTest):
|
||||
self.assertEqual(self.service_url,
|
||||
urlparse.urlparse(response.headers["Location"]).path)
|
||||
|
||||
def test_purge_no_url_with_querystring(self):
|
||||
response = self.app.delete(
|
||||
self.service_url + '/assets?hard=True',
|
||||
headers={
|
||||
"Content-Type": "application/json",
|
||||
'X-Project-ID': self.project_id
|
||||
},
|
||||
expect_errors=True)
|
||||
|
||||
self.assertEqual(202, response.status_code)
|
||||
|
||||
def test_purge_no_url(self):
|
||||
response = self.app.delete(
|
||||
self.service_url + '/assets',
|
||||
headers={
|
||||
"Content-Type": "application/json",
|
||||
'X-Project-ID': self.project_id
|
||||
},
|
||||
expect_errors=True)
|
||||
|
||||
self.assertEqual(202, response.status_code)
|
||||
|
||||
def test_purge_wildcard_url_and_soft_invalidate(self):
|
||||
response = self.app.delete(
|
||||
self.service_url + '/assets?url=/abc/*&hard=False',
|
||||
@ -465,3 +498,17 @@ class ServiceControllerTest(base.FunctionalTest):
|
||||
expect_errors=True)
|
||||
|
||||
self.assertEqual(400, response.status_code)
|
||||
|
||||
@ddt.data(True, False)
|
||||
def test_purge_none_url(self, hard):
|
||||
response = self.app.delete(
|
||||
self.service_url + '/assets?url=None&hard={0}'.format(hard),
|
||||
headers={
|
||||
"Content-Type": "application/json",
|
||||
'X-Project-ID': self.project_id
|
||||
},
|
||||
expect_errors=True)
|
||||
|
||||
self.assertEqual(202, response.status_code)
|
||||
self.assertEqual(self.service_url,
|
||||
urlparse.urlparse(response.headers["Location"]).path)
|
||||
|
@ -332,14 +332,16 @@ class TestServices(base.TestCase):
|
||||
controller = services.ServiceController(self.driver)
|
||||
exception = fastly.FastlyError(Exception('ding'))
|
||||
controller.client.purge_service.side_effect = exception
|
||||
resp = controller.purge(provider_service_id, None)
|
||||
resp = controller.purge(provider_service_id, hard=True,
|
||||
purge_url='/*')
|
||||
self.assertIn('error', resp[self.driver.provider_name])
|
||||
|
||||
def test_purge_all(self):
|
||||
provider_service_id = uuid.uuid1()
|
||||
controller = services.ServiceController(self.driver)
|
||||
controller.client.purge_service.return_value = 'some_value'
|
||||
resp = controller.purge(provider_service_id, None)
|
||||
resp = controller.purge(provider_service_id, hard=True,
|
||||
purge_url='/*')
|
||||
controller.client.purge_service.assert_called_once_with(
|
||||
provider_service_id
|
||||
)
|
||||
|
Loading…
Reference in New Issue
Block a user