diff --git a/jetty-server/pom.xml b/jetty-server/pom.xml
index 82d3bb4babff..846723b8dd74 100644
--- a/jetty-server/pom.xml
+++ b/jetty-server/pom.xml
@@ -48,6 +48,11 @@
jetty-util-ajax
test
+
+ org.awaitility
+ awaitility
+ test
+
org.eclipse.jetty
diff --git a/jetty-server/src/test/java/org/eclipse/jetty/server/AbstractHttpTest.java b/jetty-server/src/test/java/org/eclipse/jetty/server/AbstractHttpTest.java
index 4bfadd918e22..bf50cbeb4fdc 100644
--- a/jetty-server/src/test/java/org/eclipse/jetty/server/AbstractHttpTest.java
+++ b/jetty-server/src/test/java/org/eclipse/jetty/server/AbstractHttpTest.java
@@ -21,6 +21,7 @@
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
+import java.util.concurrent.TimeUnit;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -28,11 +29,13 @@
import org.eclipse.jetty.http.HttpTester;
import org.eclipse.jetty.http.HttpVersion;
import org.eclipse.jetty.io.ArrayByteBufferPool;
+import org.eclipse.jetty.io.ArrayRetainableByteBufferPool;
import org.eclipse.jetty.logging.StacklessLogging;
import org.eclipse.jetty.server.handler.AbstractHandler;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
+import static org.awaitility.Awaitility.await;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
@@ -43,12 +46,15 @@ public abstract class AbstractHttpTest
protected static Server server;
protected static ServerConnector connector;
private StacklessLogging stacklessChannelLogging;
+ private ArrayRetainableByteBufferPool.Tracking retainableByteBufferPool;
@BeforeEach
public void setUp() throws Exception
{
server = new Server();
- connector = new ServerConnector(server, null, null, new ArrayByteBufferPool(64, 2048, 64 * 1024), 1, 1, new HttpConnectionFactory());
+ ArrayByteBufferPool.Tracking bufferPool = new ArrayByteBufferPool.Tracking(64, 2048, 64 * 1024);
+ retainableByteBufferPool = (ArrayRetainableByteBufferPool.Tracking)bufferPool.asRetainableByteBufferPool();
+ connector = new ServerConnector(server, null, null, bufferPool, 1, 1, new HttpConnectionFactory());
connector.setIdleTimeout(100000);
server.addConnector(connector);
@@ -58,8 +64,15 @@ public void setUp() throws Exception
@AfterEach
public void tearDown() throws Exception
{
- server.stop();
- stacklessChannelLogging.close();
+ try
+ {
+ await().atMost(5, TimeUnit.SECONDS).untilAsserted(() -> assertThat("Server leaks: " + retainableByteBufferPool.dumpLeaks(), retainableByteBufferPool.getLeaks().size(), is(0)));
+ }
+ finally
+ {
+ server.stop();
+ stacklessChannelLogging.close();
+ }
}
protected HttpTester.Response executeRequest(HttpVersion httpVersion) throws URISyntaxException, IOException