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.
This commit is contained in:
@@ -83,6 +83,7 @@ public abstract class AbstractWebSocketIntegrationTests {
|
||||
((Lifecycle) this.webSocketClient).start();
|
||||
}
|
||||
|
||||
this.server.setup();
|
||||
this.server.deployConfig(this.wac);
|
||||
this.server.start();
|
||||
}
|
||||
@@ -99,14 +100,12 @@ public abstract class AbstractWebSocketIntegrationTests {
|
||||
catch (Throwable t) {
|
||||
logger.error("Failed to stop WebSocket client", t);
|
||||
}
|
||||
|
||||
try {
|
||||
this.server.undeployConfig();
|
||||
}
|
||||
catch (Throwable t) {
|
||||
logger.error("Failed to undeploy application config", t);
|
||||
}
|
||||
|
||||
try {
|
||||
this.server.stop();
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2013 the original author or authors.
|
||||
* Copyright 2002-2014 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -20,6 +20,7 @@ import org.eclipse.jetty.server.Server;
|
||||
import org.eclipse.jetty.servlet.FilterHolder;
|
||||
import org.eclipse.jetty.servlet.ServletContextHandler;
|
||||
import org.eclipse.jetty.servlet.ServletHolder;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.SocketUtils;
|
||||
import org.springframework.web.context.WebApplicationContext;
|
||||
import org.springframework.web.servlet.DispatcherServlet;
|
||||
@@ -35,12 +36,13 @@ import java.util.EnumSet;
|
||||
*/
|
||||
public class JettyWebSocketTestServer implements WebSocketTestServer {
|
||||
|
||||
private final Server jettyServer;
|
||||
private Server jettyServer;
|
||||
|
||||
private final int port;
|
||||
private int port = -1;
|
||||
|
||||
|
||||
public JettyWebSocketTestServer() {
|
||||
@Override
|
||||
public void setup() {
|
||||
this.port = SocketUtils.findAvailableTcpPort();
|
||||
this.jettyServer = new Server(this.port);
|
||||
}
|
||||
@@ -52,6 +54,7 @@ public class JettyWebSocketTestServer implements WebSocketTestServer {
|
||||
|
||||
@Override
|
||||
public void deployConfig(WebApplicationContext cxt, Filter... filters) {
|
||||
Assert.state(this.port != -1, "setup() was never called.");
|
||||
ServletContextHandler contextHandler = new ServletContextHandler();
|
||||
ServletHolder servletHolder = new ServletHolder(new DispatcherServlet(cxt));
|
||||
contextHandler.addServlet(servletHolder, "/");
|
||||
|
||||
@@ -30,6 +30,7 @@ import org.apache.tomcat.util.descriptor.web.FilterDef;
|
||||
import org.apache.tomcat.util.descriptor.web.FilterMap;
|
||||
import org.apache.tomcat.websocket.server.WsContextListener;
|
||||
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.SocketUtils;
|
||||
import org.springframework.web.context.WebApplicationContext;
|
||||
import org.springframework.web.servlet.DispatcherServlet;
|
||||
@@ -41,27 +42,28 @@ import org.springframework.web.servlet.DispatcherServlet;
|
||||
*/
|
||||
public class TomcatWebSocketTestServer implements WebSocketTestServer {
|
||||
|
||||
private final Tomcat tomcatServer;
|
||||
private Tomcat tomcatServer;
|
||||
|
||||
private final int port;
|
||||
private int port = -1;
|
||||
|
||||
private Context context;
|
||||
|
||||
|
||||
public TomcatWebSocketTestServer() {
|
||||
@Override
|
||||
public void setup() {
|
||||
this.port = SocketUtils.findAvailableTcpPort();
|
||||
|
||||
Connector connector = new Connector(Http11NioProtocol.class.getName());
|
||||
connector.setPort(this.port);
|
||||
connector.setPort(this.port);
|
||||
|
||||
File baseDir = createTempDir("tomcat");
|
||||
String baseDirPath = baseDir.getAbsolutePath();
|
||||
File baseDir = createTempDir("tomcat");
|
||||
String baseDirPath = baseDir.getAbsolutePath();
|
||||
|
||||
this.tomcatServer = new Tomcat();
|
||||
this.tomcatServer.setBaseDir(baseDirPath);
|
||||
this.tomcatServer.setPort(this.port);
|
||||
this.tomcatServer.getService().addConnector(connector);
|
||||
this.tomcatServer.setConnector(connector);
|
||||
this.tomcatServer.getService().addConnector(connector);
|
||||
this.tomcatServer.setConnector(connector);
|
||||
}
|
||||
|
||||
private File createTempDir(String prefix) {
|
||||
@@ -84,7 +86,8 @@ public class TomcatWebSocketTestServer implements WebSocketTestServer {
|
||||
|
||||
@Override
|
||||
public void deployConfig(WebApplicationContext wac, Filter... filters) {
|
||||
this.context = this.tomcatServer.addContext("", System.getProperty("java.io.tmpdir"));
|
||||
Assert.state(this.port != -1, "setup() was never called.");
|
||||
this.context = this.tomcatServer.addContext("", System.getProperty("java.io.tmpdir"));
|
||||
this.context.addApplicationListener(WsContextListener.class.getName());
|
||||
Tomcat.addServlet(this.context, "dispatcherServlet", new DispatcherServlet(wac)).setAsyncSupported(true);
|
||||
this.context.addServletMapping("/", "dispatcherServlet");
|
||||
|
||||
@@ -22,6 +22,7 @@ import javax.servlet.Servlet;
|
||||
import javax.servlet.ServletException;
|
||||
|
||||
import io.undertow.Undertow;
|
||||
import io.undertow.server.HttpHandler;
|
||||
import io.undertow.servlet.api.DeploymentInfo;
|
||||
import io.undertow.servlet.api.DeploymentManager;
|
||||
import io.undertow.servlet.api.FilterInfo;
|
||||
@@ -29,6 +30,7 @@ import io.undertow.servlet.api.InstanceFactory;
|
||||
import io.undertow.servlet.api.InstanceHandle;
|
||||
import io.undertow.websockets.jsr.WebSocketDeploymentInfo;
|
||||
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.SocketUtils;
|
||||
import org.springframework.web.context.WebApplicationContext;
|
||||
import org.springframework.web.servlet.DispatcherServlet;
|
||||
@@ -42,14 +44,15 @@ import static io.undertow.servlet.Servlets.*;
|
||||
*/
|
||||
public class UndertowTestServer implements WebSocketTestServer {
|
||||
|
||||
private int port = -1;
|
||||
|
||||
private Undertow server;
|
||||
|
||||
private DeploymentManager manager;
|
||||
|
||||
private final int port;
|
||||
|
||||
|
||||
public UndertowTestServer() {
|
||||
@Override
|
||||
public void setup() {
|
||||
this.port = SocketUtils.findAvailableTcpPort();
|
||||
}
|
||||
|
||||
@@ -60,15 +63,14 @@ public class UndertowTestServer implements WebSocketTestServer {
|
||||
|
||||
@Override
|
||||
public void deployConfig(WebApplicationContext cxt, Filter... filters) {
|
||||
Assert.state(this.port != -1, "setup() was never called");
|
||||
DispatcherServletInstanceFactory servletFactory = new DispatcherServletInstanceFactory(cxt);
|
||||
|
||||
DeploymentInfo servletBuilder = deployment()
|
||||
.setClassLoader(UndertowTestServer.class.getClassLoader())
|
||||
.setDeploymentName("undertow-websocket-test")
|
||||
.setContextPath("/")
|
||||
.addServlet(servlet("DispatcherServlet", DispatcherServlet.class, servletFactory).addMapping("/"))
|
||||
.addServletContextAttribute(WebSocketDeploymentInfo.ATTRIBUTE_NAME, new WebSocketDeploymentInfo());
|
||||
|
||||
for (final Filter filter : filters) {
|
||||
String filterName = filter.getClass().getName();
|
||||
servletBuilder.addFilter(new FilterInfo(filterName, filter.getClass(), new FilterInstanceFactory(filter)));
|
||||
@@ -76,13 +78,11 @@ public class UndertowTestServer implements WebSocketTestServer {
|
||||
servletBuilder.addFilterUrlMapping(filterName, "/*", type);
|
||||
}
|
||||
}
|
||||
this.manager = defaultContainer().addDeployment(servletBuilder);
|
||||
this.manager.deploy();
|
||||
|
||||
try {
|
||||
this.server = Undertow.builder()
|
||||
.addHttpListener(this.port, "localhost")
|
||||
.setHandler(this.manager.start()).build();
|
||||
this.manager = defaultContainer().addDeployment(servletBuilder);
|
||||
this.manager.deploy();
|
||||
HttpHandler httpHandler = this.manager.start();
|
||||
this.server = Undertow.builder().addHttpListener(this.port, "localhost").setHandler(httpHandler).build();
|
||||
}
|
||||
catch (ServletException ex) {
|
||||
throw new IllegalStateException(ex);
|
||||
|
||||
@@ -29,6 +29,8 @@ public interface WebSocketTestServer {
|
||||
|
||||
int getPort();
|
||||
|
||||
void setup();
|
||||
|
||||
void deployConfig(WebApplicationContext cxt, Filter... filters);
|
||||
|
||||
void undeployConfig();
|
||||
|
||||
Reference in New Issue
Block a user