@@ -45,8 +45,14 @@ using ::testing::Contains;
4545using ::testing::HasSubstr;
4646using ::testing::Pair;
4747using ::testing::Property;
48+ using ::testing::Return;
4849using ::testing::StartsWith;
4950
51+ class MockBackgroundThreads : public BackgroundThreads {
52+ public:
53+ MOCK_METHOD (CompletionQueue, cq, (), (override , const ));
54+ };
55+
5056Options MakeTestOptions (Subscription subscription, Options opts = {}) {
5157 opts.set <pubsub::SubscriptionOption>(std::move (subscription));
5258 opts.set <UnifiedCredentialsOption>(MakeInsecureCredentials ());
@@ -163,8 +169,10 @@ TEST(SubscriberConnectionTest, Subscribe) {
163169 .WillRepeatedly (FakeAsyncStreamingPull);
164170
165171 CompletionQueue cq;
172+ auto mock_background_threads = std::make_shared<MockBackgroundThreads>();
173+ ON_CALL (*mock_background_threads, cq ()).WillByDefault (Return (cq));
166174 auto subscriber = std::make_shared<SubscriberConnectionImpl>(
167- MakeTestOptions (subscription, cq), mock);
175+ MakeTestOptions (subscription, cq), mock, mock_background_threads );
168176 std::atomic_flag received_one{false };
169177 promise<void > waiter;
170178 auto handler = [&](Message const & m, AckHandler h) {
@@ -206,8 +214,10 @@ TEST(SubscriberConnectionTest, SubscribeOverrideSubscription) {
206214 .WillRepeatedly (MakeAsyncStreamingPullMock (s2.FullName ()));
207215
208216 CompletionQueue cq;
209- auto subscriber =
210- std::make_shared<SubscriberConnectionImpl>(MakeTestOptions (s1, cq), mock);
217+ auto mock_background_threads = std::make_shared<MockBackgroundThreads>();
218+ ON_CALL (*mock_background_threads, cq ()).WillByDefault (Return (cq));
219+ auto subscriber = std::make_shared<SubscriberConnectionImpl>(
220+ MakeTestOptions (s1, cq), mock, mock_background_threads);
211221 std::atomic_flag received_one{false };
212222 promise<void > waiter;
213223 auto handler = [&](Message const & m, AckHandler h) {
@@ -250,8 +260,10 @@ TEST(SubscriberConnectionTest, ExactlyOnce) {
250260 .WillRepeatedly (FakeAsyncStreamingPull);
251261
252262 CompletionQueue cq;
263+ auto mock_background_threads = std::make_shared<MockBackgroundThreads>();
264+ ON_CALL (*mock_background_threads, cq ()).WillByDefault (Return (cq));
253265 auto subscriber = std::make_shared<SubscriberConnectionImpl>(
254- MakeTestOptions (subscription, cq), mock);
266+ MakeTestOptions (subscription, cq), mock, mock_background_threads );
255267 std::atomic_flag received_one{false };
256268 promise<void > waiter;
257269 auto callback = [&](Message const & m, ExactlyOnceAckHandler h) {
@@ -294,8 +306,10 @@ TEST(SubscriberConnectionTest, ExactlyOnceOverrideSubscription) {
294306 .WillRepeatedly (MakeAsyncStreamingPullMock (s2.FullName ()));
295307
296308 CompletionQueue cq;
297- auto subscriber =
298- std::make_shared<SubscriberConnectionImpl>(MakeTestOptions (s1, cq), mock);
309+ auto mock_background_threads = std::make_shared<MockBackgroundThreads>();
310+ ON_CALL (*mock_background_threads, cq ()).WillByDefault (Return (cq));
311+ auto subscriber = std::make_shared<SubscriberConnectionImpl>(
312+ MakeTestOptions (s1, cq), mock, mock_background_threads);
299313 std::atomic_flag received_one{false };
300314 promise<void > waiter;
301315 auto handler = [&](Message const & m, AckHandler h) {
@@ -359,7 +373,8 @@ TEST(SubscriberConnectionTest, StreamingPullFailure) {
359373 auto subscriber = std::make_shared<SubscriberConnectionImpl>(
360374 pubsub_testing::MakeTestOptions (
361375 Options{}.set <pubsub::SubscriptionOption>(subscription)),
362- mock);
376+ mock,
377+ std::make_shared<internal::AutomaticallyCreatedBackgroundThreads>());
363378 auto handler = [&](Message const &, AckHandler const &) {};
364379 google::cloud::internal::OptionsSpan span (subscriber->options ());
365380 auto response = subscriber->Subscribe ({handler});
@@ -401,8 +416,10 @@ TEST(SubscriberConnectionTest, Pull) {
401416 CompletionQueue cq;
402417 std::thread t ([&cq] { cq.Run (); });
403418
419+ auto mock_background_threads = std::make_shared<MockBackgroundThreads>();
420+ ON_CALL (*mock_background_threads, cq ()).WillByDefault (Return (cq));
404421 auto subscriber = std::make_shared<SubscriberConnectionImpl>(
405- MakeTestOptions (subscription, cq), mock);
422+ MakeTestOptions (subscription, cq), mock, mock_background_threads );
406423 google::cloud::internal::OptionsSpan span (subscriber->options ());
407424 auto response = subscriber->Pull ();
408425 ASSERT_STATUS_OK (response);
@@ -440,7 +457,8 @@ TEST(SubscriberConnectionTest, PullReturnsNoMessage) {
440457
441458 CompletionQueue cq;
442459 std::thread t ([&cq] { cq.Run (); });
443-
460+ auto mock_background_threads = std::make_shared<MockBackgroundThreads>();
461+ ON_CALL (*mock_background_threads, cq ()).WillByDefault (Return (cq));
444462 auto subscriber = std::make_shared<SubscriberConnectionImpl>(
445463 MakeTestOptions (
446464 subscription,
@@ -450,7 +468,7 @@ TEST(SubscriberConnectionTest, PullReturnsNoMessage) {
450468 google::cloud::pubsub::LimitedErrorCountRetryPolicy (
451469 kNumRetries )
452470 .clone ())),
453- mock);
471+ mock, mock_background_threads );
454472 google::cloud::internal::OptionsSpan span (subscriber->options ());
455473 auto response = subscriber->Pull ();
456474 EXPECT_THAT (response, StatusIs (StatusCode::kUnavailable ,
@@ -496,9 +514,10 @@ TEST(SubscriberConnectionTest, PullOverrideSubscription) {
496514
497515 CompletionQueue cq;
498516 std::thread t ([&cq] { cq.Run (); });
499-
500- auto subscriber =
501- std::make_shared<SubscriberConnectionImpl>(MakeTestOptions (s1, cq), mock);
517+ auto mock_background_threads = std::make_shared<MockBackgroundThreads>();
518+ ON_CALL (*mock_background_threads, cq ()).WillByDefault (Return (cq));
519+ auto subscriber = std::make_shared<SubscriberConnectionImpl>(
520+ MakeTestOptions (s1, cq), mock, mock_background_threads);
502521 google::cloud::internal::OptionsSpan span (
503522 subscriber->options ().set <pubsub::SubscriptionOption>(s2));
504523 auto response = subscriber->Pull ();
@@ -523,9 +542,10 @@ TEST(SubscriberConnectionTest, PullPermanentFailure) {
523542
524543 CompletionQueue cq;
525544 std::thread t ([&cq] { cq.Run (); });
526-
545+ auto mock_background_threads = std::make_shared<MockBackgroundThreads>();
546+ ON_CALL (*mock_background_threads, cq ()).WillByDefault (Return (cq));
527547 auto subscriber = std::make_shared<SubscriberConnectionImpl>(
528- MakeTestOptions (subscription, cq), mock);
548+ MakeTestOptions (subscription, cq), mock, mock_background_threads );
529549 google::cloud::internal::OptionsSpan span (subscriber->options ());
530550 auto response = subscriber->Pull ();
531551 EXPECT_THAT (response,
@@ -550,9 +570,10 @@ TEST(SubscriberConnectionTest, PullTooManyTransientFailures) {
550570
551571 CompletionQueue cq;
552572 std::thread t ([&cq] { cq.Run (); });
553-
573+ auto mock_background_threads = std::make_shared<MockBackgroundThreads>();
574+ ON_CALL (*mock_background_threads, cq ()).WillByDefault (Return (cq));
554575 auto subscriber = std::make_shared<SubscriberConnectionImpl>(
555- MakeTestOptions (subscription, cq), mock);
576+ MakeTestOptions (subscription, cq), mock, mock_background_threads );
556577 google::cloud::internal::OptionsSpan span (subscriber->options ());
557578 auto response = subscriber->Pull ();
558579 EXPECT_THAT (response,
0 commit comments