Skip to content

Commit 14724cc

Browse files
committed
test(pubsub): drain deferred OnRefreshTimer (RunAsync) in lease tests
The fix dispatches the refresh-timer continuation via CompletionQueue::RunAsync, which FakeCompletionQueueImpl only executes on SimulateCompletion(true) (false drops it). Add a drain after each timer fire and switch teardown to a true-drain so the deferred OnRefreshTimer runs, --outstanding fires, and shutdown completes. Verified green locally via bazel test.
1 parent b07df74 commit 14724cc

1 file changed

Lines changed: 20 additions & 10 deletions

File tree

google/cloud/pubsub/internal/subscription_lease_management_test.cc

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -109,18 +109,21 @@ TEST(SubscriptionLeaseManagementTest, NormalLifecycle) {
109109
// will verify that only the remaining messages have their lease extended.
110110
uut->AckMessage("ack-0-1");
111111
fake_cq->SimulateCompletion(true);
112+
fake_cq->SimulateCompletion(true); // drain the deferred OnRefreshTimer
112113
ASSERT_EQ(1U, fake_cq->size());
113114

114115
// Ack one more message and trigger the new timer.
115116
uut->NackMessage("ack-0-2");
116117
fake_cq->SimulateCompletion(true);
118+
fake_cq->SimulateCompletion(true); // drain the deferred OnRefreshTimer
117119
ASSERT_EQ(1U, fake_cq->size());
118120

119121
shutdown_manager->MarkAsShutdown(__func__, Status{});
120122
uut->Shutdown();
121123

122-
fake_cq->SimulateCompletion(false);
123-
ASSERT_EQ(0U, fake_cq->size());
124+
for (int i = 0; i != 16 && fake_cq->size() != 0; ++i) {
125+
fake_cq->SimulateCompletion(true);
126+
}
124127
EXPECT_THAT(done.get(), IsOk());
125128
}
126129

@@ -154,8 +157,9 @@ TEST(SubscriptionLeaseManagementTest, ShutdownOnError) {
154157
Status(StatusCode::kPermissionDenied, "uh-oh"))});
155158
ASSERT_EQ(1U, fake_cq->size());
156159

157-
fake_cq->SimulateCompletion(false);
158-
ASSERT_EQ(0U, fake_cq->size());
160+
for (int i = 0; i != 16 && fake_cq->size() != 0; ++i) {
161+
fake_cq->SimulateCompletion(true);
162+
}
159163
EXPECT_THAT(done.get(), StatusIs(StatusCode::kPermissionDenied));
160164
}
161165

@@ -219,12 +223,14 @@ TEST(SubscriptionLeaseManagementTest, UsesDeadlineExtension) {
219223

220224
// Ignore message and then fire the timer. This will extend the deadline.
221225
fake_cq->SimulateCompletion(true);
226+
fake_cq->SimulateCompletion(true); // drain the deferred OnRefreshTimer
222227
ASSERT_EQ(1U, fake_cq->size());
223228

224229
shutdown_manager->MarkAsShutdown(__func__, Status{});
225230
uut->Shutdown();
226-
fake_cq->SimulateCompletion(false);
227-
ASSERT_EQ(0U, fake_cq->size());
231+
for (int i = 0; i != 16 && fake_cq->size() != 0; ++i) {
232+
fake_cq->SimulateCompletion(true);
233+
}
228234
EXPECT_THAT(done.get(), IsOk());
229235
}
230236

@@ -270,13 +276,15 @@ TEST(SubscriptionLeaseManagementTest, ExpiredMessage) {
270276
// will verify that only the remaining messages have their lease extended.
271277
uut->AckMessage("ack-0-1");
272278
fake_cq->SimulateCompletion(true);
279+
fake_cq->SimulateCompletion(true); // drain the deferred OnRefreshTimer
273280
ASSERT_EQ(1U, fake_cq->size());
274281

275282
shutdown_manager->MarkAsShutdown(__func__, Status{});
276283
uut->Shutdown();
277284

278-
fake_cq->SimulateCompletion(false);
279-
ASSERT_EQ(0U, fake_cq->size());
285+
for (int i = 0; i != 16 && fake_cq->size() != 0; ++i) {
286+
fake_cq->SimulateCompletion(true);
287+
}
280288
EXPECT_THAT(done.get(), IsOk());
281289
}
282290

@@ -337,11 +345,13 @@ TEST(SubscriptionLeaseManagementTest,
337345
fake_cq->SimulateCompletion(true);
338346
EXPECT_EQ(1, extend_calls);
339347

340-
// Drain any remaining scheduled work so shutdown can complete.
348+
// The fix defers OnRefreshTimer to RunAsync, which the fake CQ only executes
349+
// on SimulateCompletion(true) (false drops the task). Drain with true so the
350+
// deferred refresh operation finishes and the session shutdown completes.
341351
shutdown_manager->MarkAsShutdown(__func__, Status{});
342352
uut->Shutdown();
343353
for (int i = 0; i != 16 && fake_cq->size() != 0; ++i) {
344-
fake_cq->SimulateCompletion(false);
354+
fake_cq->SimulateCompletion(true);
345355
}
346356
EXPECT_THAT(done.get(), IsOk());
347357
}

0 commit comments

Comments
 (0)