Metadata zero value will skip valid check

At present, the metadata attributes of the queue are validated. Metadata
must be within a valid range, otherwise an exception will be raised. For
example, the default metadata '_default_message_ttl' must be greater than
60s, but this bug will cause I can enter 0 and can also succeed. This is
clearly contrary to the original logic of implementation.

Closes-Bug: #1729200
Change-Id: Id72771eaa4139e0c871e12e15577107457abc61c
This commit is contained in:
yangzhenyu 2017-10-31 19:21:22 +08:00
parent 5cded65dff
commit b135653fcf
2 changed files with 22 additions and 4 deletions

View File

@ -125,6 +125,12 @@ class TestValidation(base.V2Base):
headers=self.headers)
self.assertEqual(falcon.HTTP_201, self.srmock.status)
# TTL value is zero
self.simulate_put(queue_1,
self.project_id,
body='{"_default_message_ttl": 0}')
self.assertEqual(falcon.HTTP_400, self.srmock.status)
# TTL under min
self.simulate_put(queue_1,
self.project_id,
@ -153,6 +159,12 @@ class TestValidation(base.V2Base):
body='{"_max_messages_post_size": 257}')
self.assertEqual(falcon.HTTP_400, self.srmock.status)
# Size value is zero
self.simulate_put(queue_2,
self.project_id,
body='{"_max_messages_post_size": 0}')
self.assertEqual(falcon.HTTP_400, self.srmock.status)
# _dead_letter_queue_messages_ttl is not integer
self.simulate_put(queue_2,
self.project_id,
@ -171,6 +183,12 @@ class TestValidation(base.V2Base):
body='{"_dead_letter_queue_messages_ttl": 59}')
self.assertEqual(falcon.HTTP_400, self.srmock.status)
# _dead_letter_queue_messages_ttl value is zero
self.simulate_put(queue_2,
self.project_id,
body='{"_dead_letter_queue_messages_ttl": 0}')
self.assertEqual(falcon.HTTP_400, self.srmock.status)
def test_queue_patching(self):
headers = {
'Client-ID': uuidutils.generate_uuid(),

View File

@ -350,7 +350,7 @@ class Validator(object):
msg = _(u'_default_message_ttl must be integer.')
raise ValidationFailed(msg)
if queue_default_ttl:
if queue_default_ttl is not None:
if not (MIN_MESSAGE_TTL <= queue_default_ttl <=
self._limits_conf.max_message_ttl):
msg = _(u'_default_message_ttl can not exceed {0} '
@ -364,7 +364,7 @@ class Validator(object):
msg = _(u'_max_messages_post_size must be integer.')
raise ValidationFailed(msg)
if queue_max_msg_size:
if queue_max_msg_size is not None:
if not (0 < queue_max_msg_size <=
self._limits_conf.max_messages_post_size):
raise ValidationFailed(
@ -382,8 +382,8 @@ class Validator(object):
msg = _(u'_dead_letter_queue_messages_ttl must be integer.')
raise ValidationFailed(msg)
if dlq_ttl and not (MIN_MESSAGE_TTL <= dlq_ttl <=
self._limits_conf.max_message_ttl):
if dlq_ttl is not None and not (MIN_MESSAGE_TTL <= dlq_ttl <=
self._limits_conf.max_message_ttl):
msg = _(u'The TTL for a message may not exceed {0} seconds, '
'and must be at least {1} seconds long.')
raise ValidationFailed(msg, self._limits_conf.max_message_ttl,