def test_context_mgr_failure(self): import base64 from gcloud.pubsub._testing import _monkey_defaults PAYLOAD1 = b'This is the first message text' PAYLOAD2 = b'This is the second message text' B64_1 = base64.b64encode(PAYLOAD1) B64_2 = base64.b64encode(PAYLOAD2) MSGID1 = 'DEADBEEF' MSGID2 = 'BEADCAFE' MESSAGE1 = {'data': B64_1.decode('ascii'), 'attributes': {}} MESSAGE2 = {'data': B64_2.decode('ascii'), 'attributes': {'attr1': 'value1', 'attr2': 'value2'}} conn = _Connection({'messageIds': [MSGID1, MSGID2]}) topic = _Topic() batch = self._makeOne(topic) try: with _monkey_defaults(connection=conn): with batch as other: batch.publish(PAYLOAD1) batch.publish(PAYLOAD2, attr1='value1', attr2='value2') raise _Bugout() except _Bugout: pass self.assertTrue(other is batch) self.assertEqual(list(batch), []) self.assertEqual(list(batch.messages), [MESSAGE1, MESSAGE2]) self.assertEqual(len(conn._requested), 0)
def test_publish_multiple_w_implicit_connection(self): import base64 from gcloud.pubsub._testing import _monkey_defaults TOPIC_NAME = 'topic_name' PROJECT = 'PROJECT' PAYLOAD1 = b'This is the first message text' PAYLOAD2 = b'This is the second message text' B64_1 = base64.b64encode(PAYLOAD1) B64_2 = base64.b64encode(PAYLOAD2) MSGID1 = 'DEADBEEF' MSGID2 = 'BEADCAFE' MESSAGE1 = {'data': B64_1.decode('ascii'), 'attributes': {}} MESSAGE2 = {'data': B64_2.decode('ascii'), 'attributes': {'attr1': 'value1', 'attr2': 'value2'}} PATH = 'projects/%s/topics/%s' % (PROJECT, TOPIC_NAME) conn = _Connection({'messageIds': [MSGID1, MSGID2]}) topic = self._makeOne(TOPIC_NAME, project=PROJECT) with _monkey_defaults(connection=conn): with topic.batch() as batch: batch.publish(PAYLOAD1) batch.publish(PAYLOAD2, attr1='value1', attr2='value2') self.assertEqual(list(batch), [MSGID1, MSGID2]) self.assertEqual(list(batch.messages), []) self.assertEqual(len(conn._requested), 1) req = conn._requested[0] self.assertEqual(req['method'], 'POST') self.assertEqual(req['path'], '/%s:publish' % PATH) self.assertEqual(req['data'], {'messages': [MESSAGE1, MESSAGE2]})
def test_context_mgr_success(self): import base64 from gcloud.pubsub._testing import _monkey_defaults PAYLOAD1 = b'This is the first message text' PAYLOAD2 = b'This is the second message text' B64_1 = base64.b64encode(PAYLOAD1) B64_2 = base64.b64encode(PAYLOAD2) MSGID1 = 'DEADBEEF' MSGID2 = 'BEADCAFE' MESSAGE1 = {'data': B64_1.decode('ascii'), 'attributes': {}} MESSAGE2 = {'data': B64_2.decode('ascii'), 'attributes': {'attr1': 'value1', 'attr2': 'value2'}} conn = _Connection({'messageIds': [MSGID1, MSGID2]}) topic = _Topic() batch = self._makeOne(topic) with _monkey_defaults(connection=conn): with batch as other: batch.publish(PAYLOAD1) batch.publish(PAYLOAD2, attr1='value1', attr2='value2') self.assertTrue(other is batch) self.assertEqual(list(batch), [MSGID1, MSGID2]) self.assertEqual(list(batch.messages), []) self.assertEqual(len(conn._requested), 1) req = conn._requested[0] self.assertEqual(req['method'], 'POST') self.assertEqual(req['path'], '%s:publish' % topic.path) self.assertEqual(req['data'], {'messages': [MESSAGE1, MESSAGE2]})
def test_publish_single_bytes_wo_attrs_w_add_timestamp_explicit_conn(self): import base64 import datetime from gcloud.pubsub import topic as MUT from gcloud._helpers import _RFC3339_MICROS from gcloud._testing import _Monkey from gcloud.pubsub._testing import _monkey_defaults NOW = datetime.datetime.utcnow() def _utcnow(): return NOW TOPIC_NAME = 'topic_name' PROJECT = 'PROJECT' PAYLOAD = b'This is the message text' B64 = base64.b64encode(PAYLOAD).decode('ascii') MSGID = 'DEADBEEF' MESSAGE = {'data': B64, 'attributes': {'timestamp': NOW.strftime(_RFC3339_MICROS)}} PATH = 'projects/%s/topics/%s' % (PROJECT, TOPIC_NAME) conn = _Connection({'messageIds': [MSGID]}) topic = self._makeOne(TOPIC_NAME, project=PROJECT, timestamp_messages=True) with _Monkey(MUT, _NOW=_utcnow): with _monkey_defaults(connection=conn): msgid = topic.publish(PAYLOAD, connection=conn) self.assertEqual(msgid, MSGID) self.assertEqual(len(conn._requested), 1) req = conn._requested[0] self.assertEqual(req['method'], 'POST') self.assertEqual(req['path'], '/%s:publish' % PATH) self.assertEqual(req['data'], {'messages': [MESSAGE]})
def test_ctor_wo_inferred_project(self): from gcloud._testing import _monkey_defaults TOPIC_NAME = 'topic_name' PROJECT = 'PROJECT' with _monkey_defaults(project=PROJECT): topic = self._makeOne(TOPIC_NAME) self.assertEqual(topic.name, TOPIC_NAME) self.assertEqual(topic.project, PROJECT) self.assertEqual(topic.full_name, 'projects/%s/topics/%s' % (PROJECT, TOPIC_NAME)) self.assertFalse(topic.timestamp_messages)
def test_exists_miss_w_implicit_connection(self): from gcloud.pubsub._testing import _monkey_defaults TOPIC_NAME = 'topic_name' PROJECT = 'PROJECT' PATH = 'projects/%s/topics/%s' % (PROJECT, TOPIC_NAME) conn = _Connection() topic = self._makeOne(TOPIC_NAME, project=PROJECT) with _monkey_defaults(connection=conn): self.assertFalse(topic.exists()) self.assertEqual(len(conn._requested), 1) req = conn._requested[0] self.assertEqual(req['method'], 'GET') self.assertEqual(req['path'], '/%s' % PATH)
def test_from_api_repr(self): from gcloud.pubsub._testing import _monkey_defaults TOPIC_NAME = 'topic_name' PROJECT = 'PROJECT' PATH = 'projects/%s/topics/%s' % (PROJECT, TOPIC_NAME) resource = {'name': PATH} klass = self._getTargetClass() conn = _Connection() with _monkey_defaults(connection=conn): topic = klass.from_api_repr(resource) self.assertEqual(topic.name, TOPIC_NAME) self.assertEqual(topic.project, PROJECT) self.assertEqual(topic.full_name, PATH)
def test_publish_bytes_w_add_timestamp(self): import base64 from gcloud.pubsub._testing import _monkey_defaults PAYLOAD = b'This is the message text' B64 = base64.b64encode(PAYLOAD).decode('ascii') MESSAGE = {'data': B64, 'attributes': {'timestamp': 'TIMESTAMP'}} connection = _Connection() topic = _Topic(timestamp_messages=True) with _monkey_defaults(connection=connection): batch = self._makeOne(topic) batch.publish(PAYLOAD) self.assertEqual(len(connection._requested), 0) self.assertEqual(batch.messages, [MESSAGE])
def test_create_hit_implicit_project(self): from gcloud._testing import _monkey_defaults BUCKET_NAME = 'bucket-name' DATA = {'name': BUCKET_NAME} connection = _Connection(DATA) PROJECT = 'PROJECT' bucket = self._makeOne(BUCKET_NAME, connection=connection) with _monkey_defaults(project=PROJECT): bucket.create() kw, = connection._requested self.assertEqual(kw['method'], 'POST') self.assertEqual(kw['path'], '/b') self.assertEqual(kw['query_params'], {'project': PROJECT}) self.assertEqual(kw['data'], DATA)
def test_publish_single_w_attrs(self): import base64 from gcloud.pubsub._testing import _monkey_defaults TOPIC_NAME = 'topic_name' PROJECT = 'PROJECT' PAYLOAD = b'This is the message text' B64 = base64.b64encode(PAYLOAD).decode('ascii') MSGID = 'DEADBEEF' MESSAGE = {'data': B64, 'attributes': {'attr1': 'value1', 'attr2': 'value2'}} PATH = 'projects/%s/topics/%s' % (PROJECT, TOPIC_NAME) conn = _Connection({'messageIds': [MSGID]}) topic = self._makeOne(TOPIC_NAME, project=PROJECT) with _monkey_defaults(connection=conn): msgid = topic.publish(PAYLOAD, attr1='value1', attr2='value2') self.assertEqual(msgid, MSGID) self.assertEqual(len(conn._requested), 1) req = conn._requested[0] self.assertEqual(req['method'], 'POST') self.assertEqual(req['path'], '/%s:publish' % PATH) self.assertEqual(req['data'], {'messages': [MESSAGE]})
def test_publish_single_bytes_w_add_timestamp_w_ts_in_attrs(self): import base64 from gcloud.pubsub._testing import _monkey_defaults TOPIC_NAME = 'topic_name' PROJECT = 'PROJECT' PAYLOAD = b'This is the message text' B64 = base64.b64encode(PAYLOAD).decode('ascii') MSGID = 'DEADBEEF' OVERRIDE = '2015-04-10T16:46:22.868399Z' MESSAGE = {'data': B64, 'attributes': {'timestamp': OVERRIDE}} PATH = 'projects/%s/topics/%s' % (PROJECT, TOPIC_NAME) conn = _Connection({'messageIds': [MSGID]}) topic = self._makeOne(TOPIC_NAME, project=PROJECT, timestamp_messages=True) with _monkey_defaults(connection=conn): msgid = topic.publish(PAYLOAD, timestamp=OVERRIDE) self.assertEqual(msgid, MSGID) self.assertEqual(len(conn._requested), 1) req = conn._requested[0] self.assertEqual(req['method'], 'POST') self.assertEqual(req['path'], '/%s:publish' % PATH) self.assertEqual(req['data'], {'messages': [MESSAGE]})
def test_create_no_project(self): from gcloud._testing import _monkey_defaults BUCKET_NAME = 'bucket-name' bucket = self._makeOne(BUCKET_NAME) with _monkey_defaults(project=None): self.assertRaises(EnvironmentError, bucket.create)