@@ -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