Class PubsubTestClient
- java.lang.Object
-
- org.apache.beam.sdk.io.gcp.pubsub.PubsubClient
-
- org.apache.beam.sdk.io.gcp.pubsub.PubsubTestClient
-
- All Implemented Interfaces:
java.io.Closeable
,java.io.Serializable
,java.lang.AutoCloseable
@Experimental public class PubsubTestClient extends PubsubClient implements java.io.Serializable
A (partial) implementation ofPubsubClient
for use by unit tests. Only suitable for testingpublish(org.apache.beam.sdk.io.gcp.pubsub.PubsubClient.TopicPath, java.util.List<org.apache.beam.sdk.io.gcp.pubsub.PubsubClient.OutgoingMessage>)
,pull(long, org.apache.beam.sdk.io.gcp.pubsub.PubsubClient.SubscriptionPath, int, boolean)
,acknowledge(org.apache.beam.sdk.io.gcp.pubsub.PubsubClient.SubscriptionPath, java.util.List<java.lang.String>)
andmodifyAckDeadline(org.apache.beam.sdk.io.gcp.pubsub.PubsubClient.SubscriptionPath, java.util.List<java.lang.String>, int)
methods. Relies on statics to mimic the Pubsub service, though we try to hide that.- See Also:
- Serialized Form
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interface
PubsubTestClient.PubsubTestClientFactory
Closing the factory will validate all expected messages were processed.-
Nested classes/interfaces inherited from class org.apache.beam.sdk.io.gcp.pubsub.PubsubClient
PubsubClient.OutgoingMessage, PubsubClient.ProjectPath, PubsubClient.PubsubClientFactory, PubsubClient.SubscriptionPath, PubsubClient.TopicPath
-
-
Constructor Summary
Constructors Constructor Description PubsubTestClient()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description int
ackDeadlineSeconds(PubsubClient.SubscriptionPath subscription)
Return the ack deadline, in seconds, forsubscription
.void
acknowledge(PubsubClient.SubscriptionPath subscription, java.util.List<java.lang.String> ackIds)
Acknowldege messages fromsubscription
withackIds
.void
advance()
For subscription mode only: Track progression of time according to theClock
passed .void
close()
static PubsubTestClient.PubsubTestClientFactory
createFactoryForCreateSubscription()
static PubsubTestClient.PubsubTestClientFactory
createFactoryForPublish(PubsubClient.TopicPath expectedTopic, java.lang.Iterable<PubsubClient.OutgoingMessage> expectedOutgoingMessages, java.lang.Iterable<PubsubClient.OutgoingMessage> failingOutgoingMessages)
Return a factory for testing publishers.static PubsubTestClient.PubsubTestClientFactory
createFactoryForPull(com.google.api.client.util.Clock clock, PubsubClient.SubscriptionPath expectedSubscription, int ackTimeoutSec, java.lang.Iterable<org.apache.beam.sdk.io.gcp.pubsub.PubsubClient.IncomingMessage> expectedIncomingMessages)
Return a factory for testing subscribers.static PubsubTestClient.PubsubTestClientFactory
createFactoryForPullAndPublish(PubsubClient.SubscriptionPath pullSubscription, PubsubClient.TopicPath publishTopicPath, com.google.api.client.util.Clock pullClock, int pullAckTimeoutSec, java.lang.Iterable<org.apache.beam.sdk.io.gcp.pubsub.PubsubClient.IncomingMessage> expectedIncomingMessages, java.lang.Iterable<PubsubClient.OutgoingMessage> expectedOutgoingMessages, java.lang.Iterable<PubsubClient.OutgoingMessage> failingOutgoingMessages)
Returns a factory for a test that is expected to both publish and pull messages over the course of the test.void
createSubscription(PubsubClient.TopicPath topic, PubsubClient.SubscriptionPath subscription, int ackDeadlineSeconds)
Createsubscription
totopic
.void
createTopic(PubsubClient.TopicPath topic)
Createtopic
.void
deleteSubscription(PubsubClient.SubscriptionPath subscription)
Deletesubscription
.void
deleteTopic(PubsubClient.TopicPath topic)
boolean
isEOF()
Return true ifPubsubClient.pull(long, org.apache.beam.sdk.io.gcp.pubsub.PubsubClient.SubscriptionPath, int, boolean)
will always return empty list.java.util.List<PubsubClient.SubscriptionPath>
listSubscriptions(PubsubClient.ProjectPath project, PubsubClient.TopicPath topic)
Return a list of subscriptions fortopic
inproject
.java.util.List<PubsubClient.TopicPath>
listTopics(PubsubClient.ProjectPath project)
Return a list of topics forproject
.void
modifyAckDeadline(PubsubClient.SubscriptionPath subscription, java.util.List<java.lang.String> ackIds, int deadlineSeconds)
Modify the ack deadline for messages fromsubscription
withackIds
to bedeadlineSeconds
from now.int
publish(PubsubClient.TopicPath topic, java.util.List<PubsubClient.OutgoingMessage> outgoingMessages)
PublishoutgoingMessages
to Pubsubtopic
.java.util.List<org.apache.beam.sdk.io.gcp.pubsub.PubsubClient.IncomingMessage>
pull(long requestTimeMsSinceEpoch, PubsubClient.SubscriptionPath subscription, int batchSize, boolean returnImmediately)
Request the next batch of up tobatchSize
messages fromsubscription
.-
Methods inherited from class org.apache.beam.sdk.io.gcp.pubsub.PubsubClient
createRandomSubscription, extractTimestampAttribute, parseTimestampAsMsSinceEpoch, projectPathFromId, projectPathFromPath, subscriptionPathFromName, subscriptionPathFromPath, topicPathFromName, topicPathFromPath
-
-
-
-
Method Detail
-
createFactoryForPublish
public static PubsubTestClient.PubsubTestClientFactory createFactoryForPublish(PubsubClient.TopicPath expectedTopic, java.lang.Iterable<PubsubClient.OutgoingMessage> expectedOutgoingMessages, java.lang.Iterable<PubsubClient.OutgoingMessage> failingOutgoingMessages)
Return a factory for testing publishers. Only one factory may be in-flight at a time. The factory must be closed when the test is complete, at which point final validation will occur.
-
createFactoryForPull
public static PubsubTestClient.PubsubTestClientFactory createFactoryForPull(com.google.api.client.util.Clock clock, PubsubClient.SubscriptionPath expectedSubscription, int ackTimeoutSec, java.lang.Iterable<org.apache.beam.sdk.io.gcp.pubsub.PubsubClient.IncomingMessage> expectedIncomingMessages)
Return a factory for testing subscribers. Only one factory may be in-flight at a time. The factory must be closed when the test in complete
-
createFactoryForPullAndPublish
public static PubsubTestClient.PubsubTestClientFactory createFactoryForPullAndPublish(PubsubClient.SubscriptionPath pullSubscription, PubsubClient.TopicPath publishTopicPath, com.google.api.client.util.Clock pullClock, int pullAckTimeoutSec, java.lang.Iterable<org.apache.beam.sdk.io.gcp.pubsub.PubsubClient.IncomingMessage> expectedIncomingMessages, java.lang.Iterable<PubsubClient.OutgoingMessage> expectedOutgoingMessages, java.lang.Iterable<PubsubClient.OutgoingMessage> failingOutgoingMessages)
Returns a factory for a test that is expected to both publish and pull messages over the course of the test.
-
createFactoryForCreateSubscription
public static PubsubTestClient.PubsubTestClientFactory createFactoryForCreateSubscription()
-
advance
public void advance()
For subscription mode only: Track progression of time according to theClock
passed . This will simulate Pubsub expiring outstanding ACKs.
-
close
public void close()
- Specified by:
close
in interfacejava.lang.AutoCloseable
- Specified by:
close
in interfacejava.io.Closeable
-
publish
public int publish(PubsubClient.TopicPath topic, java.util.List<PubsubClient.OutgoingMessage> outgoingMessages) throws java.io.IOException
Description copied from class:PubsubClient
PublishoutgoingMessages
to Pubsubtopic
. Return number of messages published.- Specified by:
publish
in classPubsubClient
- Throws:
java.io.IOException
-
pull
public java.util.List<org.apache.beam.sdk.io.gcp.pubsub.PubsubClient.IncomingMessage> pull(long requestTimeMsSinceEpoch, PubsubClient.SubscriptionPath subscription, int batchSize, boolean returnImmediately) throws java.io.IOException
Description copied from class:PubsubClient
Request the next batch of up tobatchSize
messages fromsubscription
. Return the received messages, or empty collection if none were available. Does not wait for messages to arrive ifreturnImmediately
is true. Returned messages will record their request time asrequestTimeMsSinceEpoch
.- Specified by:
pull
in classPubsubClient
- Throws:
java.io.IOException
-
acknowledge
public void acknowledge(PubsubClient.SubscriptionPath subscription, java.util.List<java.lang.String> ackIds) throws java.io.IOException
Description copied from class:PubsubClient
Acknowldege messages fromsubscription
withackIds
.- Specified by:
acknowledge
in classPubsubClient
- Throws:
java.io.IOException
-
modifyAckDeadline
public void modifyAckDeadline(PubsubClient.SubscriptionPath subscription, java.util.List<java.lang.String> ackIds, int deadlineSeconds) throws java.io.IOException
Description copied from class:PubsubClient
Modify the ack deadline for messages fromsubscription
withackIds
to bedeadlineSeconds
from now.- Specified by:
modifyAckDeadline
in classPubsubClient
- Throws:
java.io.IOException
-
createTopic
public void createTopic(PubsubClient.TopicPath topic) throws java.io.IOException
Description copied from class:PubsubClient
Createtopic
.- Specified by:
createTopic
in classPubsubClient
- Throws:
java.io.IOException
-
deleteTopic
public void deleteTopic(PubsubClient.TopicPath topic) throws java.io.IOException
- Specified by:
deleteTopic
in classPubsubClient
- Throws:
java.io.IOException
-
listTopics
public java.util.List<PubsubClient.TopicPath> listTopics(PubsubClient.ProjectPath project) throws java.io.IOException
Description copied from class:PubsubClient
Return a list of topics forproject
.- Specified by:
listTopics
in classPubsubClient
- Throws:
java.io.IOException
-
createSubscription
public void createSubscription(PubsubClient.TopicPath topic, PubsubClient.SubscriptionPath subscription, int ackDeadlineSeconds) throws java.io.IOException
Description copied from class:PubsubClient
Createsubscription
totopic
.- Specified by:
createSubscription
in classPubsubClient
- Throws:
java.io.IOException
-
deleteSubscription
public void deleteSubscription(PubsubClient.SubscriptionPath subscription) throws java.io.IOException
Description copied from class:PubsubClient
Deletesubscription
.- Specified by:
deleteSubscription
in classPubsubClient
- Throws:
java.io.IOException
-
listSubscriptions
public java.util.List<PubsubClient.SubscriptionPath> listSubscriptions(PubsubClient.ProjectPath project, PubsubClient.TopicPath topic) throws java.io.IOException
Description copied from class:PubsubClient
Return a list of subscriptions fortopic
inproject
.- Specified by:
listSubscriptions
in classPubsubClient
- Throws:
java.io.IOException
-
ackDeadlineSeconds
public int ackDeadlineSeconds(PubsubClient.SubscriptionPath subscription) throws java.io.IOException
Description copied from class:PubsubClient
Return the ack deadline, in seconds, forsubscription
.- Specified by:
ackDeadlineSeconds
in classPubsubClient
- Throws:
java.io.IOException
-
isEOF
public boolean isEOF()
Description copied from class:PubsubClient
Return true ifPubsubClient.pull(long, org.apache.beam.sdk.io.gcp.pubsub.PubsubClient.SubscriptionPath, int, boolean)
will always return empty list. Actual clients will return false. Test clients may return true to signal that all expected messages have been pulled and the test may complete.- Specified by:
isEOF
in classPubsubClient
-
-