Skip to content

Commit b49a7c6

Browse files
committed
Harden 'Subscription.pull' against missing 'receivedMessages' in response.
Fixes #899.
1 parent 0dcb839 commit b49a7c6

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

gcloud/pubsub/subscription.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ def pull(self, return_immediately=False, max_messages=1, connection=None):
188188
path='%s:pull' % self.path,
189189
data=data)
190190
return [(info['ackId'], Message.from_api_repr(info['message']))
191-
for info in response['receivedMessages']]
191+
for info in response.get('receivedMessages', ())]
192192

193193
def acknowledge(self, ack_ids, connection=None):
194194
"""API call: acknowledge retrieved messages for the subscription.

gcloud/pubsub/test_subscription.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,23 @@ def test_pull_w_return_immediately_w_max_messages_w_explicit_conn(self):
335335
self.assertEqual(req['data'],
336336
{'returnImmediately': True, 'maxMessages': 3})
337337

338+
def test_pull_wo_receivedMessages(self):
339+
PROJECT = 'PROJECT'
340+
SUB_NAME = 'sub_name'
341+
SUB_PATH = 'projects/%s/subscriptions/%s' % (PROJECT, SUB_NAME)
342+
TOPIC_NAME = 'topic_name'
343+
conn = _Connection({})
344+
topic = _Topic(TOPIC_NAME, project=PROJECT)
345+
subscription = self._makeOne(SUB_NAME, topic)
346+
pulled = subscription.pull(return_immediately=False, connection=conn)
347+
self.assertEqual(len(pulled), 0)
348+
self.assertEqual(len(conn._requested), 1)
349+
req = conn._requested[0]
350+
self.assertEqual(req['method'], 'POST')
351+
self.assertEqual(req['path'], '/%s:pull' % SUB_PATH)
352+
self.assertEqual(req['data'],
353+
{'returnImmediately': False, 'maxMessages': 1})
354+
338355
def test_acknowledge_w_implicit_connection(self):
339356
from gcloud.pubsub._testing import _monkey_defaults
340357
PROJECT = 'PROJECT'

0 commit comments

Comments
 (0)