Commit 4c4097a2 authored by Andy Wilkinson's avatar Andy Wilkinson

Address flakiness in TomcatServletWebServerFactoryTests

parent 8cf56069
...@@ -574,10 +574,12 @@ class TomcatServletWebServerFactoryTests extends AbstractServletWebServerFactory ...@@ -574,10 +574,12 @@ class TomcatServletWebServerFactoryTests extends AbstractServletWebServerFactory
blockingServlet.awaitQueue(); blockingServlet.awaitQueue();
this.webServer.shutDownGracefully((result) -> { this.webServer.shutDownGracefully((result) -> {
}); });
Future<Object> unconnectableRequest = initiateGetRequest(HttpClients.createDefault(), port, "/"); Object unconnectableRequest = Awaitility.await().until(
() -> initiateGetRequest(HttpClients.createDefault(), port, "/").get(),
(result) -> result instanceof Exception);
assertThat(unconnectableRequest).isInstanceOf(HttpHostConnectException.class);
blockingServlet.admitOne(); blockingServlet.admitOne();
assertThat(request.get()).isInstanceOf(HttpResponse.class); assertThat(request.get()).isInstanceOf(HttpResponse.class);
assertThat(unconnectableRequest.get()).isInstanceOf(HttpHostConnectException.class);
this.webServer.stop(); this.webServer.stop();
} }
...@@ -600,11 +602,10 @@ class TomcatServletWebServerFactoryTests extends AbstractServletWebServerFactory ...@@ -600,11 +602,10 @@ class TomcatServletWebServerFactoryTests extends AbstractServletWebServerFactory
assertThat(keepAliveRequest.get()).isInstanceOf(HttpResponse.class); assertThat(keepAliveRequest.get()).isInstanceOf(HttpResponse.class);
Future<Object> request = initiateGetRequest(port, "/blocking"); Future<Object> request = initiateGetRequest(port, "/blocking");
blockingServlet.awaitQueue(); blockingServlet.awaitQueue();
blockingServlet.setBlocking(false);
this.webServer.shutDownGracefully((result) -> { this.webServer.shutDownGracefully((result) -> {
}); });
Object idleConnectionRequestResult = Awaitility.await().until(() -> { Object idleConnectionRequestResult = Awaitility.await().until(() -> {
Future<Object> idleConnectionRequest = initiateGetRequest(httpClient, port, "/blocking"); Future<Object> idleConnectionRequest = initiateGetRequest(httpClient, port, "/");
Object result = idleConnectionRequest.get(); Object result = idleConnectionRequest.get();
return result; return result;
}, (result) -> result instanceof Exception); }, (result) -> result instanceof Exception);
......
...@@ -1445,26 +1445,22 @@ public abstract class AbstractServletWebServerFactoryTests { ...@@ -1445,26 +1445,22 @@ public abstract class AbstractServletWebServerFactoryTests {
private final BlockingQueue<CyclicBarrier> barriers = new ArrayBlockingQueue<>(10); private final BlockingQueue<CyclicBarrier> barriers = new ArrayBlockingQueue<>(10);
protected volatile boolean blocking = true;
public BlockingServlet() { public BlockingServlet() {
} }
@Override @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
if (this.blocking) { CyclicBarrier barrier = new CyclicBarrier(2);
CyclicBarrier barrier = new CyclicBarrier(2); this.barriers.add(barrier);
this.barriers.add(barrier); try {
try { barrier.await();
barrier.await(); }
} catch (InterruptedException ex) {
catch (InterruptedException ex) { Thread.currentThread().interrupt();
Thread.currentThread().interrupt(); }
} catch (BrokenBarrierException ex) {
catch (BrokenBarrierException ex) { throw new ServletException(ex);
throw new ServletException(ex);
}
} }
} }
...@@ -1495,10 +1491,6 @@ public abstract class AbstractServletWebServerFactoryTests { ...@@ -1495,10 +1491,6 @@ public abstract class AbstractServletWebServerFactoryTests {
} }
} }
public void setBlocking(boolean blocking) {
this.blocking = blocking;
}
} }
static class BlockingAsyncServlet extends HttpServlet { static class BlockingAsyncServlet extends HttpServlet {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment