Commit 5c61df31 authored by Stefan Partusch's avatar Stefan Partusch Committed by Phillip Webb

Return -1 port for non-listening WebServers

Update `WebServer` implementations to return -1 from `getPort()` if
the server  isn't listening on a port. This aligns the implementations
with the interface Javadoc.

See gh-24606
parent 2ad9a47d
...@@ -275,11 +275,13 @@ public class JettyWebServer implements WebServer { ...@@ -275,11 +275,13 @@ public class JettyWebServer implements WebServer {
@Override @Override
public int getPort() { public int getPort() {
Connector[] connectors = this.server.getConnectors(); Connector[] connectors = this.server.getConnectors();
Integer localPort = -1;
for (Connector connector : connectors) { for (Connector connector : connectors) {
// Probably only one... // Probably only one...
return getLocalPort(connector); localPort = getLocalPort(connector);
break;
} }
return 0; return (localPort > 0) ? localPort : -1;
} }
@Override @Override
......
...@@ -192,7 +192,7 @@ public class NettyWebServer implements WebServer { ...@@ -192,7 +192,7 @@ public class NettyWebServer implements WebServer {
if (this.disposableServer != null) { if (this.disposableServer != null) {
return this.disposableServer.port(); return this.disposableServer.port();
} }
return 0; return -1;
} }
} }
...@@ -364,7 +364,7 @@ public class TomcatWebServer implements WebServer { ...@@ -364,7 +364,7 @@ public class TomcatWebServer implements WebServer {
if (connector != null) { if (connector != null) {
return connector.getLocalPort(); return connector.getLocalPort();
} }
return 0; return -1;
} }
private String getContextPath() { private String getContextPath() {
......
...@@ -295,7 +295,7 @@ public class UndertowWebServer implements WebServer { ...@@ -295,7 +295,7 @@ public class UndertowWebServer implements WebServer {
public int getPort() { public int getPort() {
List<Port> ports = getActualPorts(); List<Port> ports = getActualPorts();
if (ports.isEmpty()) { if (ports.isEmpty()) {
return 0; return -1;
} }
return ports.get(0).getNumber(); return ports.get(0).getNumber();
} }
......
...@@ -115,6 +115,16 @@ public abstract class AbstractReactiveWebServerFactoryTests { ...@@ -115,6 +115,16 @@ public abstract class AbstractReactiveWebServerFactoryTests {
assertThat(this.webServer.getPort()).isEqualTo(specificPort); assertThat(this.webServer.getPort()).isEqualTo(specificPort);
} }
@Test
void portIsMinusOneWhenConnectionIsClosed() {
AbstractReactiveWebServerFactory factory = getFactory();
this.webServer = factory.getWebServer(new EchoHandler());
this.webServer.start();
assertThat(this.webServer.getPort()).isGreaterThan(0);
this.webServer.stop();
assertThat(this.webServer.getPort()).isEqualTo(-1);
}
@Test @Test
void basicSslFromClassPath() { void basicSslFromClassPath() {
testBasicSslWithKeyStore("classpath:test.jks", "password"); testBasicSslWithKeyStore("classpath:test.jks", "password");
......
...@@ -250,7 +250,7 @@ public abstract class AbstractServletWebServerFactoryTests { ...@@ -250,7 +250,7 @@ public abstract class AbstractServletWebServerFactoryTests {
factory.setPort(-1); factory.setPort(-1);
this.webServer = factory.getWebServer(exampleServletRegistration()); this.webServer = factory.getWebServer(exampleServletRegistration());
this.webServer.start(); this.webServer.start();
assertThat(this.webServer.getPort()).isLessThan(0); // Jetty is -2 assertThat(this.webServer.getPort()).isEqualTo(-1);
} }
@Test @Test
...@@ -300,6 +300,16 @@ public abstract class AbstractServletWebServerFactoryTests { ...@@ -300,6 +300,16 @@ public abstract class AbstractServletWebServerFactoryTests {
assertThat(servlet.getInitCount()).isEqualTo(1); assertThat(servlet.getInitCount()).isEqualTo(1);
} }
@Test
void portIsMinusOneWhenConnectionIsClosed() {
AbstractServletWebServerFactory factory = getFactory();
this.webServer = factory.getWebServer();
this.webServer.start();
assertThat(this.webServer.getPort()).isGreaterThan(0);
this.webServer.stop();
assertThat(this.webServer.getPort()).isEqualTo(-1);
}
@Test @Test
void specificPort() throws Exception { void specificPort() throws Exception {
AbstractServletWebServerFactory factory = getFactory(); AbstractServletWebServerFactory factory = getFactory();
......
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