From d86e4cf2038ea67c51e0da4286034331225c16a6 Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Tue, 15 Jul 2014 16:48:48 -0400 Subject: [PATCH] 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. --- .../AbstractWebSocketIntegrationTests.java | 3 +-- .../web/socket/JettyWebSocketTestServer.java | 11 ++++++---- .../web/socket/TomcatWebSocketTestServer.java | 21 ++++++++++-------- .../web/socket/UndertowTestServer.java | 22 +++++++++---------- .../web/socket/WebSocketTestServer.java | 2 ++ 5 files changed, 33 insertions(+), 26 deletions(-) diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/AbstractWebSocketIntegrationTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/AbstractWebSocketIntegrationTests.java index 887eb900f7..d06f64fd73 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/AbstractWebSocketIntegrationTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/AbstractWebSocketIntegrationTests.java @@ -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(); } diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/JettyWebSocketTestServer.java b/spring-websocket/src/test/java/org/springframework/web/socket/JettyWebSocketTestServer.java index f4b2fd3f91..272a88dc6a 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/JettyWebSocketTestServer.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/JettyWebSocketTestServer.java @@ -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, "/"); diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/TomcatWebSocketTestServer.java b/spring-websocket/src/test/java/org/springframework/web/socket/TomcatWebSocketTestServer.java index 4c49908374..755e92d34a 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/TomcatWebSocketTestServer.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/TomcatWebSocketTestServer.java @@ -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"); diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/UndertowTestServer.java b/spring-websocket/src/test/java/org/springframework/web/socket/UndertowTestServer.java index 7d0cdd77b1..111741237d 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/UndertowTestServer.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/UndertowTestServer.java @@ -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); diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/WebSocketTestServer.java b/spring-websocket/src/test/java/org/springframework/web/socket/WebSocketTestServer.java index aa841e61fe..bf53e9361c 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/WebSocketTestServer.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/WebSocketTestServer.java @@ -29,6 +29,8 @@ public interface WebSocketTestServer { int getPort(); + void setup(); + void deployConfig(WebApplicationContext cxt, Filter... filters); void undeployConfig();