def testMultipleTopicsDeletionWithOutput(self):
    topic_to_succeed = util.ParseTopic('topic1', self.Project())
    self.svc.Expect(
        request=self.msgs.PubsubProjectsTopicsDeleteRequest(
            topic=topic_to_succeed.RelativeName()),
        response='')

    topic_to_fail = util.ParseTopic('not_there', self.Project())
    self.svc.Expect(
        request=self.msgs.PubsubProjectsTopicsDeleteRequest(
            topic=topic_to_fail.RelativeName()),
        response='',
        exception=http_error.MakeHttpError(message='Topic does not exist.'))

    with self.AssertRaisesExceptionMatches(
        util.RequestsFailedError,
        'Failed to delete the following: [not_there].'):
      self.Run('pubsub topics delete topic1 not_there'
               ' --format=csv[no-heading](name)')

    self.AssertErrContains(
        'Deleted topic [{}].'.format(topic_to_succeed.RelativeName()))
    self.AssertErrContains(
        'Failed to delete topic [{}]: Topic does not exist.'
        .format(topic_to_fail.RelativeName()))
    self.AssertErrContains(
        'Failed to delete the following: [{}].'.format(topic_to_fail.Name()))
Beispiel #2
0
 def SetUp(self):
     self.track = calliope_base.ReleaseTrack.GA
     properties.VALUES.core.user_output_enabled.Set(True)
     self.svc = self.client.projects_snapshots.List
     self.project_ref = util.ParseProject(self.Project())
     self.snapshot_refs = [
         util.ParseSnapshot('snap{}'.format(i + 1), self.Project())
         for i in range(3)
     ]
     self.topic_refs = [
         util.ParseTopic('topic1', self.Project()),
         util.ParseTopic('topic2', self.Project())
     ]
     self.snapshots = [
         self.msgs.Snapshot(
             name=self.snapshot_refs[0].RelativeName(),
             topic=self.topic_refs[0].RelativeName(),
             expireTime='2016-10-31T12:34:56.000000Z',
         ),
         self.msgs.Snapshot(name=self.snapshot_refs[1].RelativeName(),
                            topic=self.topic_refs[1].RelativeName(),
                            expireTime='2015-02-12T09:08:07.000000Z'),
         self.msgs.Snapshot(name=self.snapshot_refs[2].RelativeName(),
                            topic=self.topic_refs[1].RelativeName(),
                            expireTime='2015-02-13T09:08:07.000000Z')
     ]
 def testCreate(self):
     sub_ref = util.ParseSubscription('sub1', self.Project())
     topic_ref = util.ParseTopic('topic1', self.Project())
     labels = self.msgs.Subscription.LabelsValue(additionalProperties=[
         self.msgs.Subscription.LabelsValue.AdditionalProperty(
             key='label1', value='value1')
     ])
     subscription = self.msgs.Subscription(
         name=sub_ref.RelativeName(),
         topic=topic_ref.RelativeName(),
         ackDeadlineSeconds=20,
         enableMessageOrdering=True,
         deadLetterPolicy=self.msgs.DeadLetterPolicy(
             deadLetterTopic='topic2', maxDeliveryAttempts=5),
         retryPolicy=self.msgs.RetryPolicy(minimumBackoff='20s',
                                           maximumBackoff='500s'),
         labels=labels)
     self.subscriptions_service.Create.Expect(subscription, subscription)
     result = self.subscriptions_client.Create(sub_ref,
                                               topic_ref,
                                               20,
                                               labels=labels,
                                               enable_message_ordering=True,
                                               dead_letter_topic='topic2',
                                               max_delivery_attempts=5,
                                               min_retry_delay='20s',
                                               max_retry_delay='500s')
     self.assertEqual(result, subscription)
Beispiel #4
0
 def testGet(self):
     topic_ref = util.ParseTopic('topic1', self.Project())
     topic = self.msgs.Topic(name=topic_ref.RelativeName())
     self.topics_service.Get.Expect(
         self.msgs.PubsubProjectsTopicsGetRequest(
             topic=topic_ref.RelativeName()), topic)
     self.assertEqual(self.topics_client.Get(topic_ref), topic)
    def testPushSubscriptionsCreateWithOutputAndFormat(self):
        properties.VALUES.core.user_output_enabled.Set(True)

        sub_refs = [
            util.ParseSubscription('subs2', self.Project()),
            util.ParseSubscription('subs3', self.Project())
        ]
        topic_ref = util.ParseTopic('topic2', self.Project())
        req_subscriptions = [
            self.msgs.Subscription(
                name=sub_ref.RelativeName(),
                topic=topic_ref.RelativeName(),
                pushConfig=self.msgs.PushConfig(
                    pushEndpoint='https://my.appspot.com/push'))
            for sub_ref in sub_refs
        ]

        self.ExpectCreatedSubscriptions(
            ('pubsub subscriptions create subs2 subs3 --topic topic2'
             ' --push-endpoint https://my.appspot.com/push'
             ' --format=csv[no-heading]'
             '(name,pushConfig.pushEndpoint,ackDeadlineSeconds)'),
            req_subscriptions)

        self.AssertOutputEquals("""\
{},https://my.appspot.com/push,10
{},https://my.appspot.com/push,10
""".format(sub_refs[0].RelativeName(), sub_refs[1].RelativeName()))
        self.AssertErrEquals("""\
Created subscription [{}].
Created subscription [{}].
""".format(sub_refs[0].RelativeName(), sub_refs[1].RelativeName()))
    def testPushSubscriptionsCreateNoOutput(self):
        sub_refs = [
            util.ParseSubscription('subs2', self.Project()),
            util.ParseSubscription('subs3', self.Project())
        ]
        topic_ref = util.ParseTopic('topic2', self.Project())
        req_subscriptions = [
            self.msgs.Subscription(
                name=sub_ref.RelativeName(),
                topic=topic_ref.RelativeName(),
                pushConfig=self.msgs.PushConfig(
                    pushEndpoint='https://my.appspot.com/push'))
            for sub_ref in sub_refs
        ]

        result = self.ExpectCreatedSubscriptions(
            ('pubsub subscriptions create subs2 subs3 --topic topic2'
             ' --push-endpoint https://my.appspot.com/push'),
            req_subscriptions)

        self.assertEqual(2, len(result))
        for idx, sub_ref in enumerate(sub_refs):
            self.assertEqual(result[idx].ackDeadlineSeconds, 10)
            self.assertEqual(result[idx].name, sub_ref.RelativeName())
            self.assertEqual(result[idx].topic, topic_ref.RelativeName())
            self.assertEqual(result[idx].pushConfig.pushEndpoint,
                             'https://my.appspot.com/push')

        self.AssertOutputEquals('')
        self.AssertErrEquals('')
    def testSubscriptionsCreateAuthenticatedPush(self):
        sub_ref = util.ParseSubscription('subs1', self.Project())
        topic_ref = util.ParseTopic('topic1', self.Project())
        req_subscription = self.msgs.Subscription(
            name=sub_ref.RelativeName(),
            topic=topic_ref.RelativeName(),
            pushConfig=self.msgs.PushConfig(
                pushEndpoint='https://example.com/push',
                oidcToken=self.msgs.OidcToken(
                    serviceAccountEmail='*****@*****.**',
                    audience='my-audience')))

        result = self.ExpectCreatedSubscriptions(
            'pubsub subscriptions create subs1 --topic topic1 '
            '--push-endpoint=https://example.com/push '
            '[email protected] '
            '--push-auth-token-audience=my-audience', [req_subscription])

        self.assertEqual(result[0].name, sub_ref.RelativeName())
        self.assertEqual(result[0].topic, topic_ref.RelativeName())
        self.assertEqual(result[0].pushConfig.pushEndpoint,
                         'https://example.com/push')
        self.assertEqual(result[0].pushConfig.oidcToken.serviceAccountEmail,
                         '*****@*****.**')
        self.assertEqual(result[0].pushConfig.oidcToken.audience,
                         'my-audience')
Beispiel #8
0
    def Run(self, args):
        """This is what gets called when the user runs this command.

    Args:
      args: an argparse namespace. All the arguments that were provided to this
        command invocation.

    Returns:
      A serialized object (dict) describing the results of the operation.

    Raises:
      An HttpException if there was a problem calling the
      API topics.Patch command.
    """
        client = topics.TopicsClient()
        topic_ref = util.ParseTopic(args.topic)

        labels_diff = labels_util.Diff.FromUpdateArgs(args)
        if labels_diff.MayHaveUpdates():
            original_topic = client.Get(topic_ref)
            labels = labels_diff.Apply(client.messages.Topic.LabelsValue,
                                       original_topic.labels)
        else:
            labels = None
        result = client.Patch(topic_ref, labels=labels)

        log.UpdatedResource(topic_ref.RelativeName(), kind='topic')
        return result
Beispiel #9
0
  def testUpdateAll(self):
    sub_ref = util.ParseSubscription('sub', self.Project())
    new_sub = self.msgs.Subscription(
        name=sub_ref.RelativeName(),
        ackDeadlineSeconds=100,
        pushConfig=self.msgs.PushConfig(
            pushEndpoint='https://my.appspot.com/push'),
        retainAckedMessages=True,
        messageRetentionDuration='259200s',
        deadLetterPolicy=self.msgs.DeadLetterPolicy(
            deadLetterTopic=util.ParseTopic('topic2',
                                            self.Project()).RelativeName(),
            maxDeliveryAttempts=5))

    update_req = self.msgs.PubsubProjectsSubscriptionsPatchRequest(
        updateSubscriptionRequest=self.msgs.UpdateSubscriptionRequest(
            subscription=new_sub,
            updateMask=('ackDeadlineSeconds,pushConfig,retainAckedMessages,'
                        'messageRetentionDuration,deadLetterPolicy')),
        name=sub_ref.RelativeName())
    self.svc.Expect(
        request=update_req, response=self.msgs.Subscription())  # Ignore
    self.Run('pubsub subscriptions update sub --ack-deadline 100'
             ' --push-endpoint https://my.appspot.com/push'
             ' --retain-acked-messages --message-retention-duration 3d'
             ' --dead-letter-topic topic2 --max-delivery-attempts 5')
    self.AssertErrEquals('Updated subscription [{0}].\n'.format(
        sub_ref.RelativeName()))
Beispiel #10
0
  def testSnapshotsCreateLabels(self):
    snap_ref = util.ParseSnapshot('snap1', self.Project())
    sub_ref = util.ParseSubscription('subs1', self.Project())
    topic_ref = util.ParseTopic('topic1', self.Project())

    labels = self.msgs.CreateSnapshotRequest.LabelsValue(additionalProperties=[
        self.msgs.CreateSnapshotRequest.LabelsValue.AdditionalProperty(
            key='key1', value='value1'),
        self.msgs.CreateSnapshotRequest.LabelsValue.AdditionalProperty(
            key='key2', value='value2')])
    create_req = self.msgs.PubsubProjectsSnapshotsCreateRequest(
        createSnapshotRequest=self.msgs.CreateSnapshotRequest(
            subscription=sub_ref.RelativeName(),
            labels=labels),
        name=snap_ref.RelativeName()
    )

    create_resp = self.msgs.Snapshot(
        name=snap_ref.RelativeName(),
        topic=topic_ref.RelativeName(),
        expireTime='sometime')

    self.svc.Expect(request=create_req, response=create_resp)

    result = list(self.Run(
        'pubsub snapshots create snap1 '
        '--labels key1=value1,key2=value2 '
        '--subscription subs1'))

    self.assertEqual(result[0]['snapshotId'], snap_ref.RelativeName())
    self.assertEqual(result[0]['topic'], topic_ref.RelativeName())
    self.assertEqual(result[0]['expireTime'], 'sometime')
Beispiel #11
0
    def Run(self, args):
        """This is what gets called when the user runs this command.

    Args:
      args: an argparse namespace. All the arguments that were provided to this
        command invocation.

    Returns:
      PublishResponse with the response of the Publish operation.

    Raises:
      topics.EmptyMessageException: if neither message or attributes is
        specified.
      topics.PublishOperationException: When something went wrong with the
        publish operation.
    """
        client = topics.TopicsClient()

        attributes = util.ParseAttributes(args.attribute,
                                          messages=client.messages)
        topic_ref = util.ParseTopic(args.topic)

        result = client.Publish(topic_ref, args.message_body, attributes)

        # We only allow to publish one message at a time, so do not return a
        # list of messageId.
        resource = resource_projector.MakeSerializable(result)
        resource['messageIds'] = result.messageIds[0]
        return resource
    def Run(self, args):
        """This is what gets called when the user runs this command.

    Args:
      args: an argparse namespace. All the arguments that were provided to this
        command invocation.

    Yields:
      A serialized object (dict) describing the results of the operation.
      This description fits the Resource described in the ResourceRegistry under
      'pubsub.projects.subscriptions'.

    Raises:
      util.RequestFailedError: if any of the requests to the API failed.
    """
        client = subscriptions.SubscriptionsClient()

        topic_ref = util.ParseTopic(args.topic, args.topic_project)
        push_config = util.ParsePushConfig(args.push_endpoint)
        retain_acked_messages = getattr(args, 'retain_acked_messages', None)
        retention_duration = getattr(args, 'message_retention_duration', None)
        if retention_duration:
            retention_duration = util.FormatDuration(retention_duration)

        labels = labels_util.UpdateLabels(
            None,
            client.messages.Subscription.LabelsValue,
            update_labels=labels_util.GetUpdateLabelsDictFromArgs(args))

        failed = []
        for subscription_name in args.subscription:
            subscription_ref = util.ParseSubscription(subscription_name)

            try:
                result = client.Create(subscription_ref,
                                       topic_ref,
                                       args.ack_deadline,
                                       push_config,
                                       retain_acked_messages,
                                       retention_duration,
                                       labels=labels)
            except api_ex.HttpError as error:
                exc = exceptions.HttpException(error)
                log.CreatedResource(subscription_ref.RelativeName(),
                                    kind='subscription',
                                    failed=exc.payload.status_message)
                failed.append(subscription_name)
                continue

            result = util.SubscriptionDisplayDict(result)
            log.CreatedResource(subscription_ref.RelativeName(),
                                kind='subscription')

            yield result

        if failed:
            raise util.RequestsFailedError(failed, 'create')
  def testSingleTopicDeleteFullUri(self):
    topic_to_delete = util.ParseTopic('topic1', self.Project())
    self.svc.Expect(
        request=self.msgs.PubsubProjectsTopicsDeleteRequest(
            topic=topic_to_delete.RelativeName()),
        response='')

    self.Run('pubsub topics delete {}'.format(topic_to_delete.SelfLink()))
    self.AssertErrContains(
        'Deleted topic [{}]'.format(topic_to_delete.RelativeName()))
Beispiel #14
0
 def testCreateLabels(self):
     topic_ref = util.ParseTopic('topic1', self.Project())
     labels = self.msgs.Topic.LabelsValue(additionalProperties=[
         self.msgs.Topic.LabelsValue.AdditionalProperty(key='label1',
                                                        value='value1')
     ])
     topic = self.msgs.Topic(name=topic_ref.RelativeName(), labels=labels)
     self.topics_service.Create.Expect(topic, topic)
     result = self.topics_client.Create(topic_ref, labels=labels)
     self.assertEqual(result, topic)
  def testGetIamPolicy(self):
    topic_ref = util.ParseTopic('topic1', self.Project())
    self.svc.Expect(
        self.msgs.PubsubProjectsTopicsGetIamPolicyRequest(
            resource=topic_ref.RelativeName()), self.policy)

    result = self.Run(
        'pubsub topics get-iam-policy topic1')

    self.assertEqual(result, self.policy)
Beispiel #16
0
  def testTopicsAcknowledge(self):
    topic_ref = util.ParseTopic('topic1', self.Project())
    topic = self.msgs.Topic(name=topic_ref.RelativeName())
    self.svc.Expect(
        request=self.msgs.PubsubProjectsTopicsGetRequest(
            topic=topic_ref.RelativeName()),
        response=topic)

    result = self.Run('pubsub topics describe topic1')

    self.assertEqual(result, topic)
Beispiel #17
0
    def testMalformedResponseFails(self):
        topic_ref = util.ParseTopic('topic1', self.Project())
        topic = topic_ref.RelativeName()
        self.svc.Expect(request=self.msgs.PubsubProjectsTopicsPublishRequest(
            publishRequest=self.msgs.PublishRequest(
                messages=self.messages[0:1]),
            topic=topic),
                        response=self.msgs.PublishResponse(messageIds=[]))

        with self.assertRaises(topics.PublishOperationException):
            self.Run('pubsub topics publish topic1'
                     ' --message "{0}"'.format(self.message_data[0]))
  def testTopicsDeleteNoLegacyOutput(self):
    properties.VALUES.pubsub.legacy_output.Set(True)
    properties.VALUES.core.user_output_enabled.Set(False)
    topic_to_delete = util.ParseTopic('topic1', self.Project())
    self.svc.Expect(
        request=self.msgs.PubsubProjectsTopicsDeleteRequest(
            topic=topic_to_delete.RelativeName()),
        response=self.msgs.Empty())

    result = list(self.Run('pubsub topics delete topic1'))

    self.assertEqual(result[0], self.msgs.Empty())
Beispiel #19
0
  def testTopicsDescribeFullUri(self):
    topic_ref = util.ParseTopic('topic1', self.Project())
    topic = self.msgs.Topic(name=topic_ref.RelativeName())
    self.svc.Expect(
        request=self.msgs.PubsubProjectsTopicsGetRequest(
            topic=topic_ref.RelativeName()),
        response=topic)

    result = self.Run(
        'pubsub topics describe {}'.format(topic_ref.SelfLink()))

    self.assertEqual(result, topic)
Beispiel #20
0
 def SetUp(self):
     properties.VALUES.core.user_output_enabled.Set(True)
     self.track = calliope_base.ReleaseTrack.GA
     self.svc = self.client.projects_topics.List
     self.topic_refs = [
         util.ParseTopic('topic{}'.format(i), self.Project)
         for i in (1, 2, 3)
     ]
     self.topics = [
         self.msgs.Topic(name=topic_ref.RelativeName())
         for topic_ref in self.topic_refs
     ]
    def testDeadLetterPolicyPullSubscriptionsCreate(self, dead_letter_flags,
                                                    dead_letter_topic,
                                                    max_delivery_attempts):
        sub_ref = util.ParseSubscription('subs1', self.Project())
        topic_ref = util.ParseTopic('topic1', self.Project())
        dead_letter_policy = self.msgs.DeadLetterPolicy(
            deadLetterTopic=util.ParseTopic(dead_letter_topic,
                                            self.Project()).RelativeName(),
            maxDeliveryAttempts=max_delivery_attempts)
        req_subscription = self.msgs.Subscription(
            name=sub_ref.RelativeName(),
            topic=topic_ref.RelativeName(),
            deadLetterPolicy=dead_letter_policy)

        result = self.ExpectCreatedSubscriptions(
            ('pubsub subscriptions create subs1 --topic topic1' +
             dead_letter_flags), [req_subscription])

        self.assertEqual(result[0].name, sub_ref.RelativeName())
        self.assertEqual(result[0].topic, topic_ref.RelativeName())
        self.assertEqual(result[0].deadLetterPolicy, dead_letter_policy)
  def testTopicsDeleteNonExistent(self):
    topic_to_delete = util.ParseTopic('not_there', self.Project())

    self.svc.Expect(
        request=self.msgs.PubsubProjectsTopicsDeleteRequest(
            topic=topic_to_delete.RelativeName()),
        response='',
        exception=http_error.MakeHttpError(message='Topic does not exist.'))

    with self.AssertRaisesExceptionMatches(
        util.RequestsFailedError,
        'Failed to delete the following: [not_there].'):
      self.Run('pubsub topics delete not_there')
  def Run(self, args):
    client = topics.TopicsClient()
    messages = client.messages

    topic_ref = util.ParseTopic(args.topic)
    policy = iam_util.ParsePolicyFile(args.policy_file, messages.Policy)

    response = client.SetIamPolicy(
        topic_ref,
        policy=policy)
    log.status.Print(
        'Set IAM policy for Topic [{}].'.format(topic_ref.Name()))
    return response
  def testGetIamPolicy_Filter(self):
    topic_ref = util.ParseTopic('topic1', self.Project())
    self.svc.Expect(
        self.msgs.PubsubProjectsTopicsGetIamPolicyRequest(
            resource=topic_ref.RelativeName()), self.policy)

    self.Run(
        'pubsub topics get-iam-policy topic1 '
        '--flatten=bindings[].members '
        '--filter=bindings.role:roles/owner '
        '--format=value(bindings.members)')

    self.AssertOutputEquals('user:[email protected]\n')
Beispiel #25
0
 def testPatch(self):
     topic_ref = util.ParseTopic('topic1', self.Project())
     labels = self.msgs.Topic.LabelsValue(additionalProperties=[
         self.msgs.Topic.LabelsValue.AdditionalProperty(key='label',
                                                        value='value')
     ])
     topic = self.msgs.Topic(name=topic_ref.RelativeName(), labels=labels)
     self.topics_service.Patch.Expect(
         self.msgs.PubsubProjectsTopicsPatchRequest(
             name=topic_ref.RelativeName(),
             updateTopicRequest=self.msgs.UpdateTopicRequest(
                 topic=topic, updateMask='labels')), topic)
     self.assertEqual(self.topics_client.Patch(topic_ref, labels), topic)
Beispiel #26
0
 def testPatchKmsKey(self):
     topic_ref = util.ParseTopic('topic1', self.Project())
     kms_key_name = 'projects/foo/locations/global/keyRings/baz/cryptoKeys/qux'
     topic = self.msgs.Topic(name=topic_ref.RelativeName(),
                             kmsKeyName=kms_key_name)
     self.topics_service.Patch.Expect(
         self.msgs.PubsubProjectsTopicsPatchRequest(
             name=topic_ref.RelativeName(),
             updateTopicRequest=self.msgs.UpdateTopicRequest(
                 topic=topic, updateMask='kmsKeyName')), topic)
     self.assertEqual(
         self.topics_client.Patch(topic_ref, kms_key_name=kms_key_name),
         topic)
Beispiel #27
0
 def SetUp(self):
     properties.VALUES.core.user_output_enabled.Set(True)
     self.svc = self.client.projects_subscriptions.List
     # List of test Cloud Pub/Sub resource objects
     self.project_ref = util.ParseProject(self.Project())
     self.subscription_refs = [
         util.ParseSubscription('subs{}'.format(i + 1), self.Project())
         for i in range(3)
     ]
     self.topic_refs = [
         util.ParseTopic('topic1', self.Project()),
         util.ParseTopic('topic2', self.Project())
     ]
     self.subscriptions = [
         self.msgs.Subscription(
             name=self.subscription_refs[0].RelativeName(),
             ackDeadlineSeconds=180,
             messageRetentionDuration='604800s',
             retainAckedMessages=False,
             topic=self.topic_refs[0].RelativeName(),
             pushConfig=self.msgs.PushConfig(pushEndpoint=None)),
         self.msgs.Subscription(
             name=self.subscription_refs[1].RelativeName(),
             ackDeadlineSeconds=10,
             messageRetentionDuration='604800s',
             retainAckedMessages=False,
             topic=self.topic_refs[1].RelativeName(),
             pushConfig=self.msgs.PushConfig(
                 pushEndpoint='https://my.appspot.com/push')),
         self.msgs.Subscription(
             name=self.subscription_refs[2].RelativeName(),
             ackDeadlineSeconds=10,
             messageRetentionDuration='604800s',
             retainAckedMessages=False,
             topic=self.topic_refs[1].RelativeName(),
             pushConfig=self.msgs.PushConfig(
                 pushEndpoint='https://my.appspot.com/push'))
     ]
    def testSubscriptionFormatsProjectsPathsCorrectly(self):
        sub_ref = util.ParseSubscription('subs1', self.Project())
        topic_ref = util.ParseTopic('topic1', 'my_project')
        req_subscription = self.msgs.Subscription(
            name=sub_ref.RelativeName(),
            ackDeadlineSeconds=180,
            topic=topic_ref.RelativeName())

        result = self.ExpectCreatedSubscriptions((
            'pubsub subscriptions create subs1 --ack-deadline 180 --topic topic1'
            ' --topic-project my_project'), [req_subscription])

        self.assertEqual(result[0].name, sub_ref.RelativeName())
        self.assertEqual(result[0].topic, topic_ref.RelativeName())
Beispiel #29
0
    def testSimpleTopicsPublishFullUri(self):
        topic_ref = util.ParseTopic('topic1', self.Project())
        topic = topic_ref.RelativeName()
        self.svc.Expect(request=self.msgs.PubsubProjectsTopicsPublishRequest(
            publishRequest=self.msgs.PublishRequest(
                messages=self.messages[0:1]),
            topic=topic),
                        response=self.msgs.PublishResponse(
                            messageIds=self.message_ids[0:1]))

        result = self.Run('pubsub topics publish {0} --message "{1}"'.format(
            topic_ref.SelfLink(), self.message_data[0]))

        self.assertEqual(result.messageIds, ['123456'])
    def testSubscriptionProjectFlags(self):
        sub_ref = util.ParseSubscription('subs1', 'proj1')
        topic_ref = util.ParseTopic('topic1', 'proj2')
        req_subscription = self.msgs.Subscription(
            name=sub_ref.RelativeName(),
            ackDeadlineSeconds=180,
            topic=topic_ref.RelativeName())

        result = self.ExpectCreatedSubscriptions((
            'pubsub subscriptions create subs1 --ack-deadline 180 --topic topic1'
            ' --topic-project proj2 --project proj1'), [req_subscription])

        self.assertEqual(result[0].name, sub_ref.RelativeName())
        self.assertEqual(result[0].topic, topic_ref.RelativeName())