From fa18d2ccbf4cb84574935036ce15a1bbe2242868 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 12 Apr 2016 12:54:57 -0700 Subject: [PATCH] Attempt to prevent BindExceptions in tests Update tests that use `doWithBlockedPort` so that the port is obtained and bound early to ensure that something else doesn't grab it. --- ...tEmbeddedServletContainerFactoryTests.java | 53 ++++++++++--------- ...tEmbeddedServletContainerFactoryTests.java | 7 +-- 2 files changed, 31 insertions(+), 29 deletions(-) diff --git a/spring-boot/src/test/java/org/springframework/boot/context/embedded/AbstractEmbeddedServletContainerFactoryTests.java b/spring-boot/src/test/java/org/springframework/boot/context/embedded/AbstractEmbeddedServletContainerFactoryTests.java index 70508de2f3..a67a513d6f 100644 --- a/spring-boot/src/test/java/org/springframework/boot/context/embedded/AbstractEmbeddedServletContainerFactoryTests.java +++ b/spring-boot/src/test/java/org/springframework/boot/context/embedded/AbstractEmbeddedServletContainerFactoryTests.java @@ -763,18 +763,14 @@ public abstract class AbstractEmbeddedServletContainerFactoryTests { public void portClashOfPrimaryConnectorResultsInPortInUseException() throws IOException { AbstractEmbeddedServletContainerFactory factory = getFactory(); - - final int port = SocketUtils.findAvailableTcpPort(40000); - - factory.setPort(port); - - this.container = factory.getEmbeddedServletContainer(); - - doWithBlockedPort(port, new Runnable() { + doWithBlockedPort(new BlockedPortAction() { @Override - public void run() { + public void run(int port) { try { + factory.setPort(port); + AbstractEmbeddedServletContainerFactoryTests.this.container = factory + .getEmbeddedServletContainer(); AbstractEmbeddedServletContainerFactoryTests.this.container.start(); fail(); } @@ -784,25 +780,21 @@ public abstract class AbstractEmbeddedServletContainerFactoryTests { } }); - } @Test public void portClashOfSecondaryConnectorResultsInPortInUseException() throws IOException { - AbstractEmbeddedServletContainerFactory factory = getFactory(); - factory.setPort(SocketUtils.findAvailableTcpPort(40000)); - - final int port = SocketUtils.findAvailableTcpPort(40000); - - addConnector(port, factory); - this.container = factory.getEmbeddedServletContainer(); - - doWithBlockedPort(port, new Runnable() { + doWithBlockedPort(new BlockedPortAction() { @Override - public void run() { + public void run(int port) { try { + AbstractEmbeddedServletContainerFactory factory = getFactory(); + factory.setPort(SocketUtils.findAvailableTcpPort(40000)); + addConnector(port, factory); + AbstractEmbeddedServletContainerFactoryTests.this.container = factory + .getEmbeddedServletContainer(); AbstractEmbeddedServletContainerFactoryTests.this.container.start(); fail(); } @@ -998,12 +990,19 @@ public abstract class AbstractEmbeddedServletContainerFactoryTests { return bean; } - protected final void doWithBlockedPort(final int port, Runnable action) - throws IOException { + protected final void doWithBlockedPort(BlockedPortAction action) throws IOException { + int port = SocketUtils.findAvailableTcpPort(40000); ServerSocket serverSocket = new ServerSocket(); - serverSocket.bind(new InetSocketAddress(port)); + for (int i = 0; i < 10; i++) { + try { + serverSocket.bind(new InetSocketAddress(port)); + break; + } + catch (Exception ex) { + } + } try { - action.run(); + action.run(port); } finally { serverSocket.close(); @@ -1051,4 +1050,10 @@ public abstract class AbstractEmbeddedServletContainerFactoryTests { }; + public interface BlockedPortAction { + + void run(int port); + + } + } diff --git a/spring-boot/src/test/java/org/springframework/boot/context/embedded/tomcat/TomcatEmbeddedServletContainerFactoryTests.java b/spring-boot/src/test/java/org/springframework/boot/context/embedded/tomcat/TomcatEmbeddedServletContainerFactoryTests.java index efbfc9bd22..c29b7a055b 100644 --- a/spring-boot/src/test/java/org/springframework/boot/context/embedded/tomcat/TomcatEmbeddedServletContainerFactoryTests.java +++ b/spring-boot/src/test/java/org/springframework/boot/context/embedded/tomcat/TomcatEmbeddedServletContainerFactoryTests.java @@ -316,12 +316,10 @@ public class TomcatEmbeddedServletContainerFactoryTests @Test public void primaryConnectorPortClashThrowsIllegalStateException() throws InterruptedException, IOException { - final int port = SocketUtils.findAvailableTcpPort(40000); - - doWithBlockedPort(port, new Runnable() { + doWithBlockedPort(new BlockedPortAction() { @Override - public void run() { + public void run(int port) { TomcatEmbeddedServletContainerFactory factory = getFactory(); factory.setPort(port); @@ -337,7 +335,6 @@ public class TomcatEmbeddedServletContainerFactoryTests } }); - } @Test