From a842af7f205377715be06d514303d48ed65381f5 Mon Sep 17 00:00:00 2001 From: Mike Prieto Date: Tue, 21 Oct 2025 14:44:38 +0000 Subject: [PATCH 1/7] chore: Deflake WaiterTest --- .kokoro/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.kokoro/build.sh b/.kokoro/build.sh index 41903cda1..ddf3de313 100755 --- a/.kokoro/build.sh +++ b/.kokoro/build.sh @@ -48,7 +48,7 @@ set +e case ${JOB_TYPE} in test) echo "SUREFIRE_JVM_OPT: ${SUREFIRE_JVM_OPT}" - mvn test -B -ntp -Dclirr.skip=true -Denforcer.skip=true ${SUREFIRE_JVM_OPT} + mvn test -B -ntp -Dclirr.skip=true -Denforcer.skip=true ${SUREFIRE_JVM_OPT} -Dtest=WaiterTest RETURN_CODE=$? ;; lint) From 79d34865f50d47548bcfd16457c69bf66dcb2fcc Mon Sep 17 00:00:00 2001 From: Mike Prieto Date: Tue, 21 Oct 2025 14:59:33 +0000 Subject: [PATCH 2/7] chore: Update test --- .kokoro/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.kokoro/build.sh b/.kokoro/build.sh index ddf3de313..4cfba3183 100755 --- a/.kokoro/build.sh +++ b/.kokoro/build.sh @@ -48,7 +48,7 @@ set +e case ${JOB_TYPE} in test) echo "SUREFIRE_JVM_OPT: ${SUREFIRE_JVM_OPT}" - mvn test -B -ntp -Dclirr.skip=true -Denforcer.skip=true ${SUREFIRE_JVM_OPT} -Dtest=WaiterTest + mvn test -B -ntp -Dclirr.skip=true -Denforcer.skip=true ${SUREFIRE_JVM_OPT} -Dtest=WaiterTest -Dsurefire.failIfNoSpecifiedTests=false RETURN_CODE=$? ;; lint) From 0cf1809eed38590ed23a0921101db7fd27febe88 Mon Sep 17 00:00:00 2001 From: Mike Prieto Date: Tue, 21 Oct 2025 15:06:27 +0000 Subject: [PATCH 3/7] chore: Test specific case --- .kokoro/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.kokoro/build.sh b/.kokoro/build.sh index 4cfba3183..c1c4857c9 100755 --- a/.kokoro/build.sh +++ b/.kokoro/build.sh @@ -48,7 +48,7 @@ set +e case ${JOB_TYPE} in test) echo "SUREFIRE_JVM_OPT: ${SUREFIRE_JVM_OPT}" - mvn test -B -ntp -Dclirr.skip=true -Denforcer.skip=true ${SUREFIRE_JVM_OPT} -Dtest=WaiterTest -Dsurefire.failIfNoSpecifiedTests=false + mvn test -B -ntp -Dclirr.skip=true -Denforcer.skip=true ${SUREFIRE_JVM_OPT} -Dtest=WaiterTest#testTryWait_TimesOut -Dsurefire.failIfNoSpecifiedTests=false RETURN_CODE=$? ;; lint) From c38b7a58afd4f49d12944b1b0ece048bef109b1c Mon Sep 17 00:00:00 2001 From: Mike Prieto Date: Tue, 21 Oct 2025 15:26:21 +0000 Subject: [PATCH 4/7] fix: Update WaiterTest --- .../google/cloud/pubsub/v1/WaiterTest.java | 33 ++++++++++++++----- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/WaiterTest.java b/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/WaiterTest.java index c9eed7e16..4a5314087 100644 --- a/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/WaiterTest.java +++ b/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/WaiterTest.java @@ -55,23 +55,29 @@ public void run() { } @Test - public void testTryWait_Completes() { + public void testTryWait_Completes() throws Exception { final Waiter waiter = new Waiter(); waiter.incrementPendingCount(1); final FakeClock clock = new FakeClock(); + final Thread mainThread = Thread.currentThread(); Thread t = new Thread( - () -> { - try { - Thread.sleep(100); - } catch (InterruptedException e) { + new Runnable() { + @Override + public void run() { + while (mainThread.getState() != Thread.State.WAITING) { + Thread.yield(); } waiter.incrementPendingCount(-1); - }); + } + }); t.start(); assertTrue(waiter.tryWait(500, clock)); + t.join(); + + assertEquals(0, waiter.pendingCount()); } @Test @@ -80,14 +86,23 @@ public void testTryWait_TimesOut() { waiter.incrementPendingCount(1); final FakeClock clock = new FakeClock(); + final Thread mainThread = Thread.currentThread(); Thread t = new Thread( - () -> { - clock.advance(100, TimeUnit.MILLISECONDS); - }); + new Runnable() { + @Override + public void run() { + while (mainThread.getState() != Thread.State.WAITING) { + Thread.yield(); + } + clock.advance(200, TimeUnit.MILLISECONDS); + } + } + ); t.start(); assertFalse(waiter.tryWait(100, clock)); + assertEquals(1, waiter.pendingCount()); } @Test From a03bea94b6019584fb9e4d0f48bdb14258f84686 Mon Sep 17 00:00:00 2001 From: Mike Prieto Date: Tue, 21 Oct 2025 15:43:41 +0000 Subject: [PATCH 5/7] fix: Fix flaky test --- .../google/cloud/pubsub/v1/WaiterTest.java | 37 ++++++++++--------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/WaiterTest.java b/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/WaiterTest.java index 4a5314087..ab5526528 100644 --- a/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/WaiterTest.java +++ b/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/WaiterTest.java @@ -63,15 +63,15 @@ public void testTryWait_Completes() throws Exception { final Thread mainThread = Thread.currentThread(); Thread t = new Thread( - new Runnable() { - @Override - public void run() { - while (mainThread.getState() != Thread.State.WAITING) { - Thread.yield(); + new Runnable() { + @Override + public void run() { + while (mainThread.getState() == Thread.State.NEW) { + Thread.yield(); + } + waiter.incrementPendingCount(-1); } - waiter.incrementPendingCount(-1); - } - }); + }); t.start(); assertTrue(waiter.tryWait(500, clock)); @@ -81,7 +81,7 @@ public void run() { } @Test - public void testTryWait_TimesOut() { + public void testTryWait_TimesOut() throws Exception { final Waiter waiter = new Waiter(); waiter.incrementPendingCount(1); final FakeClock clock = new FakeClock(); @@ -89,19 +89,20 @@ public void testTryWait_TimesOut() { final Thread mainThread = Thread.currentThread(); Thread t = new Thread( - new Runnable() { - @Override - public void run() { - while (mainThread.getState() != Thread.State.WAITING) { - Thread.yield(); + new Runnable() { + @Override + public void run() { + while (mainThread.getState() == Thread.State.NEW) { + Thread.yield(); + } + clock.advance(200, TimeUnit.MILLISECONDS); } - clock.advance(200, TimeUnit.MILLISECONDS); - } - } - ); + }); t.start(); assertFalse(waiter.tryWait(100, clock)); + t.join(); + assertEquals(1, waiter.pendingCount()); } From ad300b109cfd1fca3de90ccdce46880de544d127 Mon Sep 17 00:00:00 2001 From: Mike Prieto Date: Tue, 21 Oct 2025 15:50:09 +0000 Subject: [PATCH 6/7] fix: Try more fixes --- .../test/java/com/google/cloud/pubsub/v1/WaiterTest.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/WaiterTest.java b/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/WaiterTest.java index ab5526528..9da30605a 100644 --- a/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/WaiterTest.java +++ b/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/WaiterTest.java @@ -95,7 +95,14 @@ public void run() { while (mainThread.getState() == Thread.State.NEW) { Thread.yield(); } - clock.advance(200, TimeUnit.MILLISECONDS); + try { + Thread.sleep(100); + clock.advance(200, TimeUnit.MILLISECONDS); + Thread.sleep(100); + clock.advance(200, TimeUnit.MILLISECONDS); + } catch (InterruptedException e) { + // Ignored. + } } }); t.start(); From 8d0d9389dc1dc887dffbda47dd47c7ac13b479e5 Mon Sep 17 00:00:00 2001 From: Mike Prieto Date: Tue, 21 Oct 2025 16:17:34 +0000 Subject: [PATCH 7/7] fix: Simplify WaiterTest logic and removing special testing on Kokoro config --- .kokoro/build.sh | 2 +- .../src/test/java/com/google/cloud/pubsub/v1/WaiterTest.java | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.kokoro/build.sh b/.kokoro/build.sh index c1c4857c9..41903cda1 100755 --- a/.kokoro/build.sh +++ b/.kokoro/build.sh @@ -48,7 +48,7 @@ set +e case ${JOB_TYPE} in test) echo "SUREFIRE_JVM_OPT: ${SUREFIRE_JVM_OPT}" - mvn test -B -ntp -Dclirr.skip=true -Denforcer.skip=true ${SUREFIRE_JVM_OPT} -Dtest=WaiterTest#testTryWait_TimesOut -Dsurefire.failIfNoSpecifiedTests=false + mvn test -B -ntp -Dclirr.skip=true -Denforcer.skip=true ${SUREFIRE_JVM_OPT} RETURN_CODE=$? ;; lint) diff --git a/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/WaiterTest.java b/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/WaiterTest.java index 9da30605a..aaa396690 100644 --- a/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/WaiterTest.java +++ b/google-cloud-pubsub/src/test/java/com/google/cloud/pubsub/v1/WaiterTest.java @@ -96,8 +96,7 @@ public void run() { Thread.yield(); } try { - Thread.sleep(100); - clock.advance(200, TimeUnit.MILLISECONDS); + // Waits some additional time to ensure that the waiter is actually waiting. Thread.sleep(100); clock.advance(200, TimeUnit.MILLISECONDS); } catch (InterruptedException e) {