Skip to content

Commit d86e4cf

Browse files
committed
Re-obtain port on every WebSocket integration test
This change adds a WebSocketTestServer setup method that initializes the server and obtains a new port. In turn AbstractWebSocketIntegrationTests invokes the new method from its setup method thus ensuring a new port is used on every test.
1 parent ea7ae89 commit d86e4cf

File tree

5 files changed

+33
-26
lines changed

5 files changed

+33
-26
lines changed

spring-websocket/src/test/java/org/springframework/web/socket/AbstractWebSocketIntegrationTests.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ public void setup() throws Exception {
8383
((Lifecycle) this.webSocketClient).start();
8484
}
8585

86+
this.server.setup();
8687
this.server.deployConfig(this.wac);
8788
this.server.start();
8889
}
@@ -99,14 +100,12 @@ public void teardown() throws Exception {
99100
catch (Throwable t) {
100101
logger.error("Failed to stop WebSocket client", t);
101102
}
102-
103103
try {
104104
this.server.undeployConfig();
105105
}
106106
catch (Throwable t) {
107107
logger.error("Failed to undeploy application config", t);
108108
}
109-
110109
try {
111110
this.server.stop();
112111
}

spring-websocket/src/test/java/org/springframework/web/socket/JettyWebSocketTestServer.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2013 the original author or authors.
2+
* Copyright 2002-2014 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -20,6 +20,7 @@
2020
import org.eclipse.jetty.servlet.FilterHolder;
2121
import org.eclipse.jetty.servlet.ServletContextHandler;
2222
import org.eclipse.jetty.servlet.ServletHolder;
23+
import org.springframework.util.Assert;
2324
import org.springframework.util.SocketUtils;
2425
import org.springframework.web.context.WebApplicationContext;
2526
import org.springframework.web.servlet.DispatcherServlet;
@@ -35,12 +36,13 @@
3536
*/
3637
public class JettyWebSocketTestServer implements WebSocketTestServer {
3738

38-
private final Server jettyServer;
39+
private Server jettyServer;
3940

40-
private final int port;
41+
private int port = -1;
4142

4243

43-
public JettyWebSocketTestServer() {
44+
@Override
45+
public void setup() {
4446
this.port = SocketUtils.findAvailableTcpPort();
4547
this.jettyServer = new Server(this.port);
4648
}
@@ -52,6 +54,7 @@ public int getPort() {
5254

5355
@Override
5456
public void deployConfig(WebApplicationContext cxt, Filter... filters) {
57+
Assert.state(this.port != -1, "setup() was never called.");
5558
ServletContextHandler contextHandler = new ServletContextHandler();
5659
ServletHolder servletHolder = new ServletHolder(new DispatcherServlet(cxt));
5760
contextHandler.addServlet(servletHolder, "/");

spring-websocket/src/test/java/org/springframework/web/socket/TomcatWebSocketTestServer.java

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import org.apache.tomcat.util.descriptor.web.FilterMap;
3131
import org.apache.tomcat.websocket.server.WsContextListener;
3232

33+
import org.springframework.util.Assert;
3334
import org.springframework.util.SocketUtils;
3435
import org.springframework.web.context.WebApplicationContext;
3536
import org.springframework.web.servlet.DispatcherServlet;
@@ -41,27 +42,28 @@
4142
*/
4243
public class TomcatWebSocketTestServer implements WebSocketTestServer {
4344

44-
private final Tomcat tomcatServer;
45+
private Tomcat tomcatServer;
4546

46-
private final int port;
47+
private int port = -1;
4748

4849
private Context context;
4950

5051

51-
public TomcatWebSocketTestServer() {
52+
@Override
53+
public void setup() {
5254
this.port = SocketUtils.findAvailableTcpPort();
5355

5456
Connector connector = new Connector(Http11NioProtocol.class.getName());
55-
connector.setPort(this.port);
57+
connector.setPort(this.port);
5658

57-
File baseDir = createTempDir("tomcat");
58-
String baseDirPath = baseDir.getAbsolutePath();
59+
File baseDir = createTempDir("tomcat");
60+
String baseDirPath = baseDir.getAbsolutePath();
5961

6062
this.tomcatServer = new Tomcat();
6163
this.tomcatServer.setBaseDir(baseDirPath);
6264
this.tomcatServer.setPort(this.port);
63-
this.tomcatServer.getService().addConnector(connector);
64-
this.tomcatServer.setConnector(connector);
65+
this.tomcatServer.getService().addConnector(connector);
66+
this.tomcatServer.setConnector(connector);
6567
}
6668

6769
private File createTempDir(String prefix) {
@@ -84,7 +86,8 @@ public int getPort() {
8486

8587
@Override
8688
public void deployConfig(WebApplicationContext wac, Filter... filters) {
87-
this.context = this.tomcatServer.addContext("", System.getProperty("java.io.tmpdir"));
89+
Assert.state(this.port != -1, "setup() was never called.");
90+
this.context = this.tomcatServer.addContext("", System.getProperty("java.io.tmpdir"));
8891
this.context.addApplicationListener(WsContextListener.class.getName());
8992
Tomcat.addServlet(this.context, "dispatcherServlet", new DispatcherServlet(wac)).setAsyncSupported(true);
9093
this.context.addServletMapping("/", "dispatcherServlet");

spring-websocket/src/test/java/org/springframework/web/socket/UndertowTestServer.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,15 @@
2222
import javax.servlet.ServletException;
2323

2424
import io.undertow.Undertow;
25+
import io.undertow.server.HttpHandler;
2526
import io.undertow.servlet.api.DeploymentInfo;
2627
import io.undertow.servlet.api.DeploymentManager;
2728
import io.undertow.servlet.api.FilterInfo;
2829
import io.undertow.servlet.api.InstanceFactory;
2930
import io.undertow.servlet.api.InstanceHandle;
3031
import io.undertow.websockets.jsr.WebSocketDeploymentInfo;
3132

33+
import org.springframework.util.Assert;
3234
import org.springframework.util.SocketUtils;
3335
import org.springframework.web.context.WebApplicationContext;
3436
import org.springframework.web.servlet.DispatcherServlet;
@@ -42,14 +44,15 @@
4244
*/
4345
public class UndertowTestServer implements WebSocketTestServer {
4446

47+
private int port = -1;
48+
4549
private Undertow server;
4650

4751
private DeploymentManager manager;
4852

49-
private final int port;
50-
5153

52-
public UndertowTestServer() {
54+
@Override
55+
public void setup() {
5356
this.port = SocketUtils.findAvailableTcpPort();
5457
}
5558

@@ -60,29 +63,26 @@ public int getPort() {
6063

6164
@Override
6265
public void deployConfig(WebApplicationContext cxt, Filter... filters) {
66+
Assert.state(this.port != -1, "setup() was never called");
6367
DispatcherServletInstanceFactory servletFactory = new DispatcherServletInstanceFactory(cxt);
64-
6568
DeploymentInfo servletBuilder = deployment()
6669
.setClassLoader(UndertowTestServer.class.getClassLoader())
6770
.setDeploymentName("undertow-websocket-test")
6871
.setContextPath("/")
6972
.addServlet(servlet("DispatcherServlet", DispatcherServlet.class, servletFactory).addMapping("/"))
7073
.addServletContextAttribute(WebSocketDeploymentInfo.ATTRIBUTE_NAME, new WebSocketDeploymentInfo());
71-
7274
for (final Filter filter : filters) {
7375
String filterName = filter.getClass().getName();
7476
servletBuilder.addFilter(new FilterInfo(filterName, filter.getClass(), new FilterInstanceFactory(filter)));
7577
for (DispatcherType type : DispatcherType.values()) {
7678
servletBuilder.addFilterUrlMapping(filterName, "/*", type);
7779
}
7880
}
79-
this.manager = defaultContainer().addDeployment(servletBuilder);
80-
this.manager.deploy();
81-
8281
try {
83-
this.server = Undertow.builder()
84-
.addHttpListener(this.port, "localhost")
85-
.setHandler(this.manager.start()).build();
82+
this.manager = defaultContainer().addDeployment(servletBuilder);
83+
this.manager.deploy();
84+
HttpHandler httpHandler = this.manager.start();
85+
this.server = Undertow.builder().addHttpListener(this.port, "localhost").setHandler(httpHandler).build();
8686
}
8787
catch (ServletException ex) {
8888
throw new IllegalStateException(ex);

spring-websocket/src/test/java/org/springframework/web/socket/WebSocketTestServer.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ public interface WebSocketTestServer {
2929

3030
int getPort();
3131

32+
void setup();
33+
3234
void deployConfig(WebApplicationContext cxt, Filter... filters);
3335

3436
void undeployConfig();

0 commit comments

Comments
 (0)