Address flakiness in TomcatServletWebServerFactoryTests

This commit is contained in:
Andy Wilkinson
2020-05-12 22:41:56 +01:00
parent 8cf56069d2
commit 4c4097a29b
2 changed files with 15 additions and 22 deletions

View File

@@ -574,10 +574,12 @@ class TomcatServletWebServerFactoryTests extends AbstractServletWebServerFactory
blockingServlet.awaitQueue();
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();
assertThat(request.get()).isInstanceOf(HttpResponse.class);
assertThat(unconnectableRequest.get()).isInstanceOf(HttpHostConnectException.class);
this.webServer.stop();
}
@@ -600,11 +602,10 @@ class TomcatServletWebServerFactoryTests extends AbstractServletWebServerFactory
assertThat(keepAliveRequest.get()).isInstanceOf(HttpResponse.class);
Future<Object> request = initiateGetRequest(port, "/blocking");
blockingServlet.awaitQueue();
blockingServlet.setBlocking(false);
this.webServer.shutDownGracefully((result) -> {
});
Object idleConnectionRequestResult = Awaitility.await().until(() -> {
Future<Object> idleConnectionRequest = initiateGetRequest(httpClient, port, "/blocking");
Future<Object> idleConnectionRequest = initiateGetRequest(httpClient, port, "/");
Object result = idleConnectionRequest.get();
return result;
}, (result) -> result instanceof Exception);

View File

@@ -1445,26 +1445,22 @@ public abstract class AbstractServletWebServerFactoryTests {
private final BlockingQueue<CyclicBarrier> barriers = new ArrayBlockingQueue<>(10);
protected volatile boolean blocking = true;
public BlockingServlet() {
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
if (this.blocking) {
CyclicBarrier barrier = new CyclicBarrier(2);
this.barriers.add(barrier);
try {
barrier.await();
}
catch (InterruptedException ex) {
Thread.currentThread().interrupt();
}
catch (BrokenBarrierException ex) {
throw new ServletException(ex);
}
CyclicBarrier barrier = new CyclicBarrier(2);
this.barriers.add(barrier);
try {
barrier.await();
}
catch (InterruptedException ex) {
Thread.currentThread().interrupt();
}
catch (BrokenBarrierException ex) {
throw new ServletException(ex);
}
}
@@ -1495,10 +1491,6 @@ public abstract class AbstractServletWebServerFactoryTests {
}
}
public void setBlocking(boolean blocking) {
this.blocking = blocking;
}
}
static class BlockingAsyncServlet extends HttpServlet {