Disable Metadata write operations on v1.1
This is the first step towards removing metadata completely from the API. This is temporary until we decided whether we will remove read operations too. Partially-Implements: api-v1.1-remove-queue-metadata Change-Id: I18b8b7a9284b37d866dec7ab1f8117dc779431f8
This commit is contained in:
parent
80befb5b9c
commit
23fa8e80c7
@ -14,15 +14,12 @@
|
||||
# limitations under the License.
|
||||
|
||||
import falcon
|
||||
import six
|
||||
|
||||
from marconi.openstack.common.gettextutils import _
|
||||
import marconi.openstack.common.log as logging
|
||||
from marconi.queues.storage import errors as storage_errors
|
||||
from marconi.queues.transport import utils
|
||||
from marconi.queues.transport import validation
|
||||
from marconi.queues.transport.wsgi import errors as wsgi_errors
|
||||
from marconi.queues.transport.wsgi import utils as wsgi_utils
|
||||
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
@ -63,34 +60,8 @@ class Resource(object):
|
||||
u'project: %(project)s',
|
||||
{'queue': queue_name, 'project': project_id})
|
||||
|
||||
try:
|
||||
# Place JSON size restriction before parsing
|
||||
self._validate.queue_metadata_length(req.content_length)
|
||||
except validation.ValidationFailed as ex:
|
||||
LOG.debug(ex)
|
||||
raise wsgi_errors.HTTPBadRequestAPI(six.text_type(ex))
|
||||
|
||||
# Deserialize queue metadata
|
||||
metadata, = wsgi_utils.filter_stream(req.stream,
|
||||
req.content_length,
|
||||
spec=None)
|
||||
|
||||
try:
|
||||
self.queue_ctrl.set_metadata(queue_name,
|
||||
metadata=metadata,
|
||||
project=project_id)
|
||||
|
||||
except validation.ValidationFailed as ex:
|
||||
LOG.debug(ex)
|
||||
raise wsgi_errors.HTTPBadRequestAPI(six.text_type(ex))
|
||||
|
||||
except storage_errors.QueueDoesNotExist:
|
||||
raise falcon.HTTPNotFound()
|
||||
|
||||
except Exception as ex:
|
||||
LOG.exception(ex)
|
||||
description = _(u'Metadata could not be updated.')
|
||||
raise wsgi_errors.HTTPServiceUnavailable(description)
|
||||
|
||||
resp.status = falcon.HTTP_204
|
||||
resp.status = falcon.HTTP_405
|
||||
resp.location = req.path
|
||||
resp.body = ("Queue's metadata has been deprecated. "
|
||||
"It will be removed completely in the next "
|
||||
"version of the API.")
|
||||
|
@ -27,6 +27,15 @@ class QueueLifecycleBaseTest(base.TestBase):
|
||||
|
||||
config_file = None
|
||||
|
||||
# NOTE(flaper87): This is temporary. Ideally, each version
|
||||
# of the API should have its own lifecycle tests. The v1.1
|
||||
# of our API removes the support for the API. Although most of
|
||||
# the test methods were overwritten in the test definition, there
|
||||
# are some that need to be disabled in-lieu for other tests to be
|
||||
# excuted. Also, ddt plays dirty and makes it impossible to override
|
||||
# a test case.
|
||||
metadata_support = True
|
||||
|
||||
def setUp(self):
|
||||
super(QueueLifecycleBaseTest, self).setUp()
|
||||
|
||||
@ -73,17 +82,18 @@ class QueueLifecycleBaseTest(base.TestBase):
|
||||
self.assertEqual(self.srmock.status, falcon.HTTP_204)
|
||||
|
||||
# Add metadata
|
||||
doc = '{"messages": {"ttl": 600}}'
|
||||
self.simulate_put(gumshoe_queue_path_metadata,
|
||||
project_id, body=doc)
|
||||
self.assertEqual(self.srmock.status, falcon.HTTP_204)
|
||||
if self.metadata_support:
|
||||
doc = '{"messages": {"ttl": 600}}'
|
||||
self.simulate_put(gumshoe_queue_path_metadata,
|
||||
project_id, body=doc)
|
||||
self.assertEqual(self.srmock.status, falcon.HTTP_204)
|
||||
|
||||
# Fetch metadata
|
||||
result = self.simulate_get(gumshoe_queue_path_metadata,
|
||||
project_id)
|
||||
result_doc = json.loads(result[0])
|
||||
self.assertEqual(self.srmock.status, falcon.HTTP_200)
|
||||
self.assertEqual(result_doc, json.loads(doc))
|
||||
# Fetch metadata
|
||||
result = self.simulate_get(gumshoe_queue_path_metadata,
|
||||
project_id)
|
||||
result_doc = json.loads(result[0])
|
||||
self.assertEqual(self.srmock.status, falcon.HTTP_200)
|
||||
self.assertEqual(result_doc, json.loads(doc))
|
||||
|
||||
# Stats empty queue
|
||||
self.simulate_get(gumshoe_queue_path_stats, project_id)
|
||||
@ -102,8 +112,9 @@ class QueueLifecycleBaseTest(base.TestBase):
|
||||
self.assertEqual(self.srmock.status, falcon.HTTP_404)
|
||||
|
||||
# Get non-existent metadata
|
||||
self.simulate_get(gumshoe_queue_path_metadata, project_id)
|
||||
self.assertEqual(self.srmock.status, falcon.HTTP_404)
|
||||
if self.metadata_support:
|
||||
self.simulate_get(gumshoe_queue_path_metadata, project_id)
|
||||
self.assertEqual(self.srmock.status, falcon.HTTP_404)
|
||||
|
||||
def test_name_restrictions(self):
|
||||
self.simulate_put(self.queue_path + '/Nice-Boat_2')
|
||||
@ -158,6 +169,9 @@ class QueueLifecycleBaseTest(base.TestBase):
|
||||
|
||||
@ddt.data('{', '[]', '.', ' ', '')
|
||||
def test_bad_metadata(self, document):
|
||||
if not self.metadata_support:
|
||||
return
|
||||
|
||||
self.simulate_put(self.fizbat_queue_path, '7e55e1a7e')
|
||||
self.assertEqual(self.srmock.status, falcon.HTTP_201)
|
||||
|
||||
@ -261,7 +275,8 @@ class QueueLifecycleBaseTest(base.TestBase):
|
||||
def create_queue(name, project_id, body):
|
||||
uri = self.queue_path + '/' + name
|
||||
self.simulate_put(uri, project_id)
|
||||
self.simulate_put(uri + '/metadata', project_id, body=body)
|
||||
if self.metadata_support:
|
||||
self.simulate_put(uri + '/metadata', project_id, body=body)
|
||||
|
||||
create_queue('g1', None, '{"answer": 42}')
|
||||
create_queue('g2', None, '{"answer": 42}')
|
||||
@ -280,8 +295,9 @@ class QueueLifecycleBaseTest(base.TestBase):
|
||||
queues = result_doc['queues']
|
||||
self.assertEqual(len(queues), 2)
|
||||
|
||||
for queue in queues:
|
||||
self.assertEqual(queue['metadata'], {'answer': 42})
|
||||
if self.metadata_support:
|
||||
for queue in queues:
|
||||
self.assertEqual(queue['metadata'], {'answer': 42})
|
||||
|
||||
# List (limit)
|
||||
result = self.simulate_get(self.queue_path, project_id,
|
||||
@ -322,11 +338,12 @@ class QueueLifecycleBaseTest(base.TestBase):
|
||||
result_doc = json.loads(result[0])
|
||||
[target, params] = result_doc['links'][0]['href'].split('?')
|
||||
|
||||
queue = result_doc['queues'][0]
|
||||
result = self.simulate_get(queue['href'] + '/metadata', project_id)
|
||||
result_doc = json.loads(result[0])
|
||||
self.assertEqual(result_doc, queue['metadata'])
|
||||
self.assertEqual(result_doc, {'node': 31})
|
||||
if self.metadata_support:
|
||||
queue = result_doc['queues'][0]
|
||||
result = self.simulate_get(queue['href'] + '/metadata', project_id)
|
||||
result_doc = json.loads(result[0])
|
||||
self.assertEqual(result_doc, queue['metadata'])
|
||||
self.assertEqual(result_doc, {'node': 31})
|
||||
|
||||
# List tail
|
||||
self.simulate_get(target, project_id, query_string=params)
|
||||
|
@ -76,10 +76,42 @@ class TestQueueFaultyDriver(wsgi.TestQueueFaultyDriver):
|
||||
# sort of a pain; is there a better way?
|
||||
class TestQueueLifecycleMongoDB(wsgi.TestQueueLifecycleMongoDB):
|
||||
url_prefix = URL_PREFIX
|
||||
metadata_support = False
|
||||
|
||||
def test_no_metadata(self):
|
||||
"""Metadata deprecated."""
|
||||
|
||||
def test_too_much_metadata(self):
|
||||
"""Metadata deprecated."""
|
||||
|
||||
def test_way_too_much_metadata(self):
|
||||
"""Metadata deprecated."""
|
||||
|
||||
def test_custom_metadata(self):
|
||||
"""Metadata deprecated."""
|
||||
|
||||
def test_update_metadata(self):
|
||||
"""Metadata deprecated."""
|
||||
|
||||
|
||||
class TestQueueLifecycleSqlalchemy(wsgi.TestQueueLifecycleSqlalchemy):
|
||||
url_prefix = URL_PREFIX
|
||||
metadata_support = False
|
||||
|
||||
def test_no_metadata(self):
|
||||
"""Metadata deprecated."""
|
||||
|
||||
def test_too_much_metadata(self):
|
||||
"""Metadata deprecated."""
|
||||
|
||||
def test_way_too_much_metadata(self):
|
||||
"""Metadata deprecated."""
|
||||
|
||||
def test_custom_metadata(self):
|
||||
"""Metadata deprecated."""
|
||||
|
||||
def test_update_metadata(self):
|
||||
"""Metadata deprecated."""
|
||||
|
||||
|
||||
class TestShardsMongoDB(wsgi.TestShardsMongoDB):
|
||||
|
Loading…
x
Reference in New Issue
Block a user