diff --git a/jetty-util/pom.xml b/jetty-util/pom.xml
index bf58de61ba8..98b188a9e78 100644
--- a/jetty-util/pom.xml
+++ b/jetty-util/pom.xml
@@ -63,6 +63,11 @@
org.slf4j
slf4j-api
+
+ org.awaitility
+ awaitility
+ test
+
org.eclipse.jetty.toolchain
jetty-perf-helper
diff --git a/jetty-util/src/test/java/org/eclipse/jetty/util/BlockingArrayQueueTest.java b/jetty-util/src/test/java/org/eclipse/jetty/util/BlockingArrayQueueTest.java
index eac29003219..ba6da7943ad 100644
--- a/jetty-util/src/test/java/org/eclipse/jetty/util/BlockingArrayQueueTest.java
+++ b/jetty-util/src/test/java/org/eclipse/jetty/util/BlockingArrayQueueTest.java
@@ -13,13 +13,10 @@
package org.eclipse.jetty.util;
-import java.time.Duration;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
-import java.util.Objects;
import java.util.Set;
-import java.util.concurrent.Callable;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ThreadLocalRandom;
@@ -30,7 +27,7 @@ import java.util.concurrent.atomic.AtomicInteger;
import org.hamcrest.Matchers;
import org.junit.jupiter.api.Test;
-import static org.eclipse.jetty.util.BlockingArrayQueueTest.Await.await;
+import static org.awaitility.Awaitility.await;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -528,35 +525,4 @@ public class BlockingArrayQueueTest
assertThat(queue.size(), Matchers.is(0));
assertThat(queue, Matchers.empty());
}
-
- static class Await
- {
- private Duration duration;
-
- public static Await await()
- {
- return new Await();
- }
-
- public Await atMost(long time, TimeUnit unit)
- {
- duration = Duration.ofMillis(unit.toMillis(time));
- return this;
- }
-
- public void until(Callable condition) throws Exception
- {
- Objects.requireNonNull(duration);
- long start = System.nanoTime();
-
- while (true)
- {
- if (condition.call())
- return;
- if (duration.minus(Duration.ofNanos(System.nanoTime() - start)).isNegative())
- throw new AssertionError("Duration expired");
- Thread.sleep(10);
- }
- }
- }
}
diff --git a/pom.xml b/pom.xml
index 3048dc8de69..2cfbc481c77 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1131,6 +1131,11 @@
hamcrest
${hamcrest.version}
+
+ org.awaitility
+ awaitility
+ 4.1.0
+
org.testcontainers
testcontainers-bom
diff --git a/tests/test-http-client-transport/pom.xml b/tests/test-http-client-transport/pom.xml
index 9c2aab3097d..8c508d35092 100644
--- a/tests/test-http-client-transport/pom.xml
+++ b/tests/test-http-client-transport/pom.xml
@@ -46,6 +46,11 @@
slf4j-api
test
+
+ org.awaitility
+ awaitility
+ test
+
org.eclipse.jetty
jetty-alpn-java-client
diff --git a/tests/test-http-client-transport/src/test/java/org/eclipse/jetty/http/client/AsyncIOServletTest.java b/tests/test-http-client-transport/src/test/java/org/eclipse/jetty/http/client/AsyncIOServletTest.java
index 358e6afa7c0..9e11dba26c0 100644
--- a/tests/test-http-client-transport/src/test/java/org/eclipse/jetty/http/client/AsyncIOServletTest.java
+++ b/tests/test-http-client-transport/src/test/java/org/eclipse/jetty/http/client/AsyncIOServletTest.java
@@ -20,11 +20,8 @@ import java.io.InterruptedIOException;
import java.io.UncheckedIOException;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
-import java.time.Duration;
import java.util.Deque;
-import java.util.Objects;
import java.util.Queue;
-import java.util.concurrent.Callable;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.CountDownLatch;
@@ -81,6 +78,7 @@ import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ArgumentsSource;
import static java.nio.ByteBuffer.wrap;
+import static org.awaitility.Awaitility.await;
import static org.eclipse.jetty.http.client.Transport.FCGI;
import static org.eclipse.jetty.http.client.Transport.H2C;
import static org.eclipse.jetty.http.client.Transport.HTTP;
@@ -432,7 +430,7 @@ public class AsyncIOServletTest extends AbstractTest
+ await().atMost(5, TimeUnit.SECONDS).until(() ->
{
out.write(new byte[0]);
// Extract HttpOutput._apiState value from toString.
@@ -1865,35 +1863,4 @@ public class AsyncIOServletTest extends AbstractTest condition) throws Exception
- {
- Objects.requireNonNull(duration);
- long start = System.nanoTime();
-
- while (true)
- {
- if (condition.call())
- return;
- if (duration.minus(Duration.ofNanos(System.nanoTime() - start)).isNegative())
- throw new AssertionError("Duration expired");
- Thread.sleep(10);
- }
- }
- }
}