v1.1 and v2 claims return document not list

The current claims code doesn't work on v1.1 and v2 because on claims
creation it expects a list rather than a document. This patch fixes this
issue in a backwards compatible way.

Change-Id: I64e824227f148297aba4c27bbd2053d5bab483c5
Closes-bug: #1489863
This commit is contained in:
Flavio Percoco 2015-08-28 14:38:00 +02:00
parent 0d80728124
commit baf6fa7eb8
3 changed files with 35 additions and 1 deletions

View File

@ -25,7 +25,7 @@ class QueuesV1ClaimsHttpUnitTest(claims.QueueV1ClaimUnitTest):
version = 1
class QueuesV1_1ClaimsHttpUnitTest(claims.QueueV1ClaimUnitTest):
class QueuesV1_1ClaimsHttpUnitTest(claims.QueueV1_1ClaimUnitTest):
transport_cls = http.HttpTransport
url = 'http://127.0.0.1:8888/v1.1'

View File

@ -59,9 +59,13 @@ class Claim(object):
ttl=self._ttl,
grace=self._grace,
limit=self._limit)
# extract the id from the first message
if msgs is not None:
if self._queue.client.api_version >= 1.1:
msgs = msgs['messages']
self.id = msgs[0]['href'].split('=')[-1]
self._message_iter = iterate._Iterator(self._queue.client,
msgs or [],
'messages',

View File

@ -137,3 +137,33 @@ class QueuesV1ClaimFunctionalTest(base.QueuesTestBase):
claim_id = cl.id
cl.delete()
self.assertRaises(errors.ResourceNotFound, queue.claim, id=claim_id)
class QueueV1_1ClaimUnitTest(QueueV1ClaimUnitTest):
def test_claim(self):
result = [{
'href': '/v1/queues/fizbit/messages/50b68a50d6f5b8c8a7c62b01',
'ttl': 800,
'age': 790,
'body': {'event': 'ActivateAccount', 'mode': 'active'}
}, {
'href': '/v1/queues/fizbit/messages/50b68a50d6f5b8c8a7c62b02',
'ttl': 800,
'age': 790,
'body': {'event': 'ActivateAccount', 'mode': 'active'}
}]
with mock.patch.object(self.transport, 'send',
autospec=True) as send_method:
resp = response.Response(None, json.dumps({'messages': result}))
send_method.return_value = resp
claimed = self.queue.claim(ttl=60, grace=60)
# messages doesn't support len()
num_tested = 0
for num, msg in enumerate(claimed):
num_tested += 1
self.assertEqual(result[num]['href'], msg.href)
self.assertEqual(len(result), num_tested)