Skip to content

Commit 4c4097a

Browse files
committed
Address flakiness in TomcatServletWebServerFactoryTests
1 parent 8cf5606 commit 4c4097a

File tree

2 files changed

+15
-22
lines changed

2 files changed

+15
-22
lines changed

spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/embedded/tomcat/TomcatServletWebServerFactoryTests.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -574,10 +574,12 @@ void whenServerIsShuttingDownGracefullyThenNewConnectionsCannotBeMade() throws E
574574
blockingServlet.awaitQueue();
575575
this.webServer.shutDownGracefully((result) -> {
576576
});
577-
Future<Object> unconnectableRequest = initiateGetRequest(HttpClients.createDefault(), port, "/");
577+
Object unconnectableRequest = Awaitility.await().until(
578+
() -> initiateGetRequest(HttpClients.createDefault(), port, "/").get(),
579+
(result) -> result instanceof Exception);
580+
assertThat(unconnectableRequest).isInstanceOf(HttpHostConnectException.class);
578581
blockingServlet.admitOne();
579582
assertThat(request.get()).isInstanceOf(HttpResponse.class);
580-
assertThat(unconnectableRequest.get()).isInstanceOf(HttpHostConnectException.class);
581583
this.webServer.stop();
582584
}
583585

@@ -600,11 +602,10 @@ void whenServerIsShuttingDownARequestOnAnIdleConnectionResultsInConnectionReset(
600602
assertThat(keepAliveRequest.get()).isInstanceOf(HttpResponse.class);
601603
Future<Object> request = initiateGetRequest(port, "/blocking");
602604
blockingServlet.awaitQueue();
603-
blockingServlet.setBlocking(false);
604605
this.webServer.shutDownGracefully((result) -> {
605606
});
606607
Object idleConnectionRequestResult = Awaitility.await().until(() -> {
607-
Future<Object> idleConnectionRequest = initiateGetRequest(httpClient, port, "/blocking");
608+
Future<Object> idleConnectionRequest = initiateGetRequest(httpClient, port, "/");
608609
Object result = idleConnectionRequest.get();
609610
return result;
610611
}, (result) -> result instanceof Exception);

spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/server/AbstractServletWebServerFactoryTests.java

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1445,26 +1445,22 @@ protected static class BlockingServlet extends HttpServlet {
14451445

14461446
private final BlockingQueue<CyclicBarrier> barriers = new ArrayBlockingQueue<>(10);
14471447

1448-
protected volatile boolean blocking = true;
1449-
14501448
public BlockingServlet() {
14511449

14521450
}
14531451

14541452
@Override
14551453
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
1456-
if (this.blocking) {
1457-
CyclicBarrier barrier = new CyclicBarrier(2);
1458-
this.barriers.add(barrier);
1459-
try {
1460-
barrier.await();
1461-
}
1462-
catch (InterruptedException ex) {
1463-
Thread.currentThread().interrupt();
1464-
}
1465-
catch (BrokenBarrierException ex) {
1466-
throw new ServletException(ex);
1467-
}
1454+
CyclicBarrier barrier = new CyclicBarrier(2);
1455+
this.barriers.add(barrier);
1456+
try {
1457+
barrier.await();
1458+
}
1459+
catch (InterruptedException ex) {
1460+
Thread.currentThread().interrupt();
1461+
}
1462+
catch (BrokenBarrierException ex) {
1463+
throw new ServletException(ex);
14681464
}
14691465
}
14701466

@@ -1495,10 +1491,6 @@ public void awaitQueue(int size) throws InterruptedException {
14951491
}
14961492
}
14971493

1498-
public void setBlocking(boolean blocking) {
1499-
this.blocking = blocking;
1500-
}
1501-
15021494
}
15031495

15041496
static class BlockingAsyncServlet extends HttpServlet {

0 commit comments

Comments
 (0)