Skip to content

Commit

Permalink
Merge pull request #1481 from tseaver/1480-pubsub-empty_payload-missi…
Browse files Browse the repository at this point in the history
…ng_data

Harden 'Message.from_api_repr' against missing 'data'
  • Loading branch information
tseaver committed Feb 17, 2016
2 parents 75a395f + 3b9b0b6 commit 87c7a4c
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 26 deletions.
2 changes: 1 addition & 1 deletion gcloud/pubsub/message.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,6 @@ def from_api_repr(cls, api_repr):
:type api_repr: dict or None
:param api_repr: The API representation of the message
"""
data = base64.b64decode(api_repr['data'])
data = base64.b64decode(api_repr.get('data', b''))
return cls(data=data, message_id=api_repr['messageId'],
attributes=api_repr.get('attributes'))
58 changes: 33 additions & 25 deletions gcloud/pubsub/test_message.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,31 +42,6 @@ def test_ctor_w_attributes(self):
self.assertEqual(message.message_id, MESSAGE_ID)
self.assertEqual(message.attributes, ATTRS)

def test_from_api_repr_no_attributes(self):
from base64 import b64encode as b64
DATA = b'DEADBEEF'
B64_DATA = b64(DATA)
MESSAGE_ID = '12345'
api_repr = {'data': B64_DATA, 'messageId': MESSAGE_ID}
message = self._getTargetClass().from_api_repr(api_repr)
self.assertEqual(message.data, DATA)
self.assertEqual(message.message_id, MESSAGE_ID)
self.assertEqual(message.attributes, {})

def test_from_api_repr_w_attributes(self):
from base64 import b64encode as b64
DATA = b'DEADBEEF'
B64_DATA = b64(DATA)
MESSAGE_ID = '12345'
ATTRS = {'a': 'b'}
api_repr = {'data': B64_DATA,
'messageId': MESSAGE_ID,
'attributes': ATTRS}
message = self._getTargetClass().from_api_repr(api_repr)
self.assertEqual(message.data, DATA)
self.assertEqual(message.message_id, MESSAGE_ID)
self.assertEqual(message.attributes, ATTRS)

def test_timestamp_no_attributes(self):
DATA = b'DEADBEEF'
MESSAGE_ID = b'12345'
Expand Down Expand Up @@ -102,3 +77,36 @@ def test_timestamp_w_timestamp_in_attributes(self):
message = self._makeOne(data=DATA, message_id=MESSAGE_ID,
attributes=ATTRS)
self.assertEqual(message.timestamp, timestamp)

def test_from_api_repr_missing_data(self):
MESSAGE_ID = '12345'
api_repr = {'messageId': MESSAGE_ID}
message = self._getTargetClass().from_api_repr(api_repr)
self.assertEqual(message.data, b'')
self.assertEqual(message.message_id, MESSAGE_ID)
self.assertEqual(message.attributes, {})

def test_from_api_repr_no_attributes(self):
from base64 import b64encode as b64
DATA = b'DEADBEEF'
B64_DATA = b64(DATA)
MESSAGE_ID = '12345'
api_repr = {'data': B64_DATA, 'messageId': MESSAGE_ID}
message = self._getTargetClass().from_api_repr(api_repr)
self.assertEqual(message.data, DATA)
self.assertEqual(message.message_id, MESSAGE_ID)
self.assertEqual(message.attributes, {})

def test_from_api_repr_w_attributes(self):
from base64 import b64encode as b64
DATA = b'DEADBEEF'
B64_DATA = b64(DATA)
MESSAGE_ID = '12345'
ATTRS = {'a': 'b'}
api_repr = {'data': B64_DATA,
'messageId': MESSAGE_ID,
'attributes': ATTRS}
message = self._getTargetClass().from_api_repr(api_repr)
self.assertEqual(message.data, DATA)
self.assertEqual(message.message_id, MESSAGE_ID)
self.assertEqual(message.attributes, ATTRS)

0 comments on commit 87c7a4c

Please sign in to comment.