提交 d86e4cf2 编写于 作者: R Rossen Stoyanchev

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.
上级 ea7ae894
......@@ -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();
}
......
/*
* 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();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册