Merge "Disable Metadata write operations on v1.1"

This commit is contained in:
Jenkins 2014-04-18 00:02:55 +00:00 committed by Gerrit Code Review
commit cc199757e1
3 changed files with 73 additions and 53 deletions

View File

@ -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.")

View File

@ -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)

View File

@ -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):