Skip to content

Commit 40954e3

Browse files
committed
Harden 'Client.list_subscriptions' against keys omitted by backend.
1 parent d725d2f commit 40954e3

2 files changed

Lines changed: 22 additions & 1 deletion

File tree

gcloud/pubsub/client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ def list_subscriptions(self, page_size=None, page_token=None,
128128
topics = {}
129129
subscriptions = [Subscription.from_api_repr(resource, self,
130130
topics=topics)
131-
for resource in resp['subscriptions']]
131+
for resource in resp.get('subscriptions', ())]
132132
return subscriptions, resp.get('nextPageToken')
133133

134134
def topic(self, name, timestamp_messages=False):

gcloud/pubsub/test_client.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,27 @@ def test_list_subscriptions_with_paging(self):
175175
self.assertEqual(req['query_params'],
176176
{'pageSize': SIZE, 'pageToken': TOKEN1})
177177

178+
def test_list_subscriptions_w_missing_key(self):
179+
PROJECT = 'PROJECT'
180+
CREDS = _Credentials()
181+
182+
CLIENT_OBJ = self._makeOne(project=PROJECT, credentials=CREDS)
183+
184+
RETURNED = {}
185+
# Replace the connection on the client with one of our own.
186+
CLIENT_OBJ.connection = _Connection(RETURNED)
187+
188+
# Execute request.
189+
subscriptions, next_page_token = CLIENT_OBJ.list_subscriptions()
190+
# Test values are correct.
191+
self.assertEqual(len(subscriptions), 0)
192+
self.assertEqual(next_page_token, None)
193+
self.assertEqual(len(CLIENT_OBJ.connection._requested), 1)
194+
req = CLIENT_OBJ.connection._requested[0]
195+
self.assertEqual(req['method'], 'GET')
196+
self.assertEqual(req['path'], '/projects/%s/subscriptions' % PROJECT)
197+
self.assertEqual(req['query_params'], {})
198+
178199
def test_list_subscriptions_with_topic_name(self):
179200
from gcloud.pubsub.subscription import Subscription
180201
PROJECT = 'PROJECT'

0 commit comments

Comments
 (0)