Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
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]})
Ejemplo n.º 3
0
    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]})
Ejemplo n.º 4
0
    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]})
Ejemplo n.º 5
0
 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)
Ejemplo n.º 6
0
 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)
Ejemplo n.º 7
0
 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)
Ejemplo n.º 8
0
 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])
Ejemplo n.º 9
0
    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)
Ejemplo n.º 10
0
 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]})
Ejemplo n.º 11
0
 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]})
Ejemplo n.º 12
0
 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)