From 67cc427d2b6602ca643f8e012667b11437c0f8ba Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Wed, 27 Nov 2013 15:50:46 +0000 Subject: [PATCH] Expose local port in EmbeddedServletContainer --- .../context/embedded/EmbeddedServletContainer.java | 9 +++++++++ .../jetty/JettyEmbeddedServletContainer.java | 10 ++++++++++ .../tomcat/TomcatEmbeddedServletContainer.java | 13 +++++++++++-- ...bstractEmbeddedServletContainerFactoryTests.java | 2 ++ 4 files changed, 32 insertions(+), 2 deletions(-) diff --git a/spring-boot/src/main/java/org/springframework/boot/context/embedded/EmbeddedServletContainer.java b/spring-boot/src/main/java/org/springframework/boot/context/embedded/EmbeddedServletContainer.java index 8cf3e87f62f..208858430f7 100644 --- a/spring-boot/src/main/java/org/springframework/boot/context/embedded/EmbeddedServletContainer.java +++ b/spring-boot/src/main/java/org/springframework/boot/context/embedded/EmbeddedServletContainer.java @@ -44,6 +44,10 @@ public interface EmbeddedServletContainer { public void stop() throws EmbeddedServletContainerException { // Do nothing } + + public int getPort() { + return 0; + } }; /** @@ -60,4 +64,9 @@ public interface EmbeddedServletContainer { */ void stop() throws EmbeddedServletContainerException; + /** + * @return the port this server is listening on (or zero if none) + */ + int getPort(); + } diff --git a/spring-boot/src/main/java/org/springframework/boot/context/embedded/jetty/JettyEmbeddedServletContainer.java b/spring-boot/src/main/java/org/springframework/boot/context/embedded/jetty/JettyEmbeddedServletContainer.java index cc6ff8b6ab4..00f92e37c06 100644 --- a/spring-boot/src/main/java/org/springframework/boot/context/embedded/jetty/JettyEmbeddedServletContainer.java +++ b/spring-boot/src/main/java/org/springframework/boot/context/embedded/jetty/JettyEmbeddedServletContainer.java @@ -109,6 +109,16 @@ public class JettyEmbeddedServletContainer implements EmbeddedServletContainer { } } + @Override + public int getPort() { + Connector[] connectors = this.server.getConnectors(); + for (Connector connector : connectors) { + // Probably only one... + return connector.getLocalPort(); + } + return 0; + } + /** * Returns access to the underlying Jetty Server. */ diff --git a/spring-boot/src/main/java/org/springframework/boot/context/embedded/tomcat/TomcatEmbeddedServletContainer.java b/spring-boot/src/main/java/org/springframework/boot/context/embedded/tomcat/TomcatEmbeddedServletContainer.java index 906cf9bc54a..5bc3541fc28 100644 --- a/spring-boot/src/main/java/org/springframework/boot/context/embedded/tomcat/TomcatEmbeddedServletContainer.java +++ b/spring-boot/src/main/java/org/springframework/boot/context/embedded/tomcat/TomcatEmbeddedServletContainer.java @@ -126,11 +126,20 @@ public class TomcatEmbeddedServletContainer implements EmbeddedServletContainer this.tomcat.destroy(); } catch (Exception ex) { - throw new EmbeddedServletContainerException( - "Unable to stop embedded Tomcat", ex); + throw new EmbeddedServletContainerException("Unable to stop embedded Tomcat", + ex); } } + @Override + public int getPort() { + Connector connector = this.tomcat.getConnector(); + if (connector != null) { + return connector.getLocalPort(); + } + return 0; + } + /** * Returns access to the underlying Tomcat server. */ 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 c6bc69fb256..5e3c245a0d4 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 @@ -47,6 +47,7 @@ import org.springframework.util.StreamUtils; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.notNullValue; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; import static org.mockito.Matchers.anyObject; import static org.mockito.Mockito.inOrder; @@ -172,6 +173,7 @@ public abstract class AbstractEmbeddedServletContainerFactoryTests { .getEmbeddedServletContainer(exampleServletRegistration()); this.container.start(); assertThat(getResponse("http://localhost:8081/hello"), equalTo("Hello World")); + assertEquals(8081, this.container.getPort()); } @Test