Fixing WebSocketUpgradeFilter Tests

Signed-off-by: Joakim Erdfelt <joakim.erdfelt@gmail.com>
This commit is contained in:
Joakim Erdfelt 2018-09-14 10:46:06 -05:00
parent c5755f6686
commit 7db1abafbf
4 changed files with 53 additions and 60 deletions

View File

@ -50,7 +50,7 @@ public class LocalServer extends ContainerLifeCycle implements LocalFuzzer.Provi
private Server server; private Server server;
private ServerConnector connector; private ServerConnector connector;
private LocalConnector localConnector; private LocalConnector localConnector;
private ServletContextHandler servletContextHandler; protected ServletContextHandler servletContextHandler;
private URI serverUri; private URI serverUri;
private boolean ssl = false; private boolean ssl = false;
private SslContextFactory sslContextFactory; private SslContextFactory sslContextFactory;

View File

@ -161,6 +161,11 @@ public class WSServer extends LocalServer implements LocalFuzzer.Provider
} }
} }
public ContextHandlerCollection getContexts()
{
return contexts;
}
public Path getWebAppDir() public Path getWebAppDir()
{ {
return this.contextDir; return this.contextDir;

View File

@ -166,6 +166,7 @@ public class WebSocketUpgradeFilterEmbeddedTest
server.stop(); server.stop();
} }
@SuppressWarnings("Duplicates")
@ParameterizedTest(name = "[{index}] {0}") @ParameterizedTest(name = "[{index}] {0}")
@MethodSource("scenarios") @MethodSource("scenarios")
public void testNormalConfiguration(String testId, ContextProvider serverProvider) throws Exception public void testNormalConfiguration(String testId, ContextProvider serverProvider) throws Exception
@ -190,6 +191,7 @@ public class WebSocketUpgradeFilterEmbeddedTest
} }
} }
@SuppressWarnings("Duplicates")
@ParameterizedTest(name = "[{index}] {0}") @ParameterizedTest(name = "[{index}] {0}")
@MethodSource("scenarios") @MethodSource("scenarios")
public void testStopStartOfHandler(String testId, ContextProvider serverProvider) throws Exception public void testStopStartOfHandler(String testId, ContextProvider serverProvider) throws Exception
@ -243,13 +245,15 @@ public class WebSocketUpgradeFilterEmbeddedTest
@Override @Override
protected Handler createRootHandler(Server server) throws Exception protected Handler createRootHandler(Server server) throws Exception
{ {
return contextProvider.configureRootHandler(server); servletContextHandler = contextProvider.newServletContextHandler(server);
return servletContextHandler;
} }
}; };
this.server.start();
} }
interface ContextProvider interface ContextProvider
{ {
Handler configureRootHandler(Server server) throws Exception; ServletContextHandler newServletContextHandler(Server server) throws Exception;
} }
} }

View File

@ -52,7 +52,7 @@ public class WebSocketUpgradeFilterWebappTest
private static File getNewTestDir() private static File getNewTestDir()
{ {
File testDir = MavenTestingUtils.getTargetTestingDir("WSUF-webxml-" + uniqTestDirId.getAndIncrement()); File testDir = MavenTestingUtils.getTargetTestingDir("tests/WSUF-webxml-" + uniqTestDirId.getAndIncrement());
FS.ensureDirExists(testDir); FS.ensureDirExists(testDir);
return testDir; return testDir;
} }
@ -66,61 +66,37 @@ public class WebSocketUpgradeFilterWebappTest
{ {
List<Arguments> cases = new ArrayList<>(); List<Arguments> cases = new ArrayList<>();
// WSUF from web.xml, SCI active, apply app-ws configuration via ServletContextListener
cases.add(Arguments.of("wsuf/WebAppContext/web.xml/ServletContextListener", (ServerConfiguration) (server) ->
{
server.copyWebInf("wsuf-config-via-listener.xml");
server.copyClass(InfoSocket.class);
server.copyClass(InfoContextAttributeListener.class);
server.start();
WebAppContext webapp = server.createWebAppContext();
server.deployWebapp(webapp);
}));
// WSUF from web.xml, SCI active, apply app-ws configuration via ServletContextListener with WEB-INF/lib/jetty-http.jar
cases.add(Arguments.of("wsuf/WebAppContext/web.xml/ServletContextListener/jetty-http.jar", (ServerConfiguration) (server) ->
{
server.copyWebInf("wsuf-config-via-listener.xml");
server.copyClass(InfoSocket.class);
server.copyClass(InfoContextAttributeListener.class);
// Add a jetty-http.jar to ensure that the classloader constraints
// and the WebAppClassloader setup is sane and correct
// The odd version string is present to capture bad regex behavior in Jetty
server.copyLib(PathSpec.class, "jetty-http-9.99.999.jar");
server.start();
WebAppContext webapp = server.createWebAppContext();
server.deployWebapp(webapp);
}));
// WSUF from web.xml, SCI active, apply app-ws configuration via Servlet.init // WSUF from web.xml, SCI active, apply app-ws configuration via Servlet.init
cases.add(Arguments.of("wsuf/WebAppContext/web.xml/Servlet.init", (ServerConfiguration) (server) -> cases.add(Arguments.of(
{ "wsuf/WebAppContext/web.xml/Servlet.init",
server.copyWebInf("wsuf-config-via-servlet-init.xml"); (ServerConfiguration) (server) ->
server.copyClass(InfoSocket.class); {
server.copyClass(InfoServlet.class); server.copyWebInf("wsuf-config-via-servlet-init.xml");
server.start(); server.copyClass(InfoSocket.class);
server.copyClass(InfoServlet.class);
server.start();
WebAppContext webapp = server.createWebAppContext(); WebAppContext webapp = server.createWebAppContext();
server.deployWebapp(webapp); server.deployWebapp(webapp);
})); }
));
// xml based, wsuf, on alternate url-pattern and config attribute location // xml based, wsuf, on alternate url-pattern and config attribute location
cases.add(Arguments.of("wsuf/WebAppContext/web.xml/ServletContextListener/alt-config", (ServerConfiguration) (server) -> cases.add(Arguments.of(
{ "wsuf/WebAppContext/web.xml/ServletContextListener/alt-config",
server.copyWebInf("wsuf-alt-config-via-listener.xml"); (ServerConfiguration) (server) ->
server.copyClass(InfoSocket.class); {
server.copyClass(InfoContextAltAttributeListener.class); server.copyWebInf("wsuf-alt-config-via-listener.xml");
server.start(); server.copyClass(InfoSocket.class);
server.copyClass(InfoContextAltAttributeListener.class);
server.start();
WebAppContext webapp = server.createWebAppContext(); WebAppContext webapp = server.createWebAppContext();
server.deployWebapp(webapp); server.deployWebapp(webapp);
})); }
));
// WSUF from web.xml, SCI active, apply app-ws configuration via ServletContextListener // WSUF from web.xml, SCI active, apply app-ws configuration via ServletContextListener
@ -132,6 +108,9 @@ public class WebSocketUpgradeFilterWebappTest
server.copyClass(InfoSocket.class); server.copyClass(InfoSocket.class);
server.copyClass(InfoContextAttributeListener.class); server.copyClass(InfoContextAttributeListener.class);
server.start(); server.start();
WebAppContext webapp = server.createWebAppContext();
server.deployWebapp(webapp);
} }
)); ));
@ -149,6 +128,9 @@ public class WebSocketUpgradeFilterWebappTest
// The odd version string is present to capture bad regex behavior in Jetty // The odd version string is present to capture bad regex behavior in Jetty
server.copyLib(PathSpec.class, "jetty-http-9.99.999.jar"); server.copyLib(PathSpec.class, "jetty-http-9.99.999.jar");
server.start(); server.start();
WebAppContext webapp = server.createWebAppContext();
server.deployWebapp(webapp);
} }
)); ));
@ -157,7 +139,7 @@ public class WebSocketUpgradeFilterWebappTest
private void startServer(ServerConfiguration serverConfiguration) throws Exception private void startServer(ServerConfiguration serverConfiguration) throws Exception
{ {
WSServer server = new WSServer(getNewTestDir(), "/"); server = new WSServer(getNewTestDir(), "app");
serverConfiguration.configure(server); serverConfiguration.configure(server);
} }
@ -169,13 +151,14 @@ public class WebSocketUpgradeFilterWebappTest
server.stop(); server.stop();
} }
@SuppressWarnings("Duplicates")
@ParameterizedTest(name = "[{index}] {0}") @ParameterizedTest(name = "[{index}] {0}")
@MethodSource("scenarios") @MethodSource("scenarios")
public void testNormalConfiguration(String testId, ServerConfiguration serverConfiguration) throws Exception public void testNormalConfiguration(String testId, ServerConfiguration serverConfiguration) throws Exception
{ {
startServer(serverConfiguration); startServer(serverConfiguration);
try (LocalFuzzer session = server.newLocalFuzzer("/info/")) try (LocalFuzzer session = server.newLocalFuzzer("/app/info/"))
{ {
session.sendFrames( session.sendFrames(
new TextFrame().setPayload("hello"), new TextFrame().setPayload("hello"),
@ -193,13 +176,14 @@ public class WebSocketUpgradeFilterWebappTest
} }
} }
@SuppressWarnings("Duplicates")
@ParameterizedTest(name = "[{index}] {0}") @ParameterizedTest(name = "[{index}] {0}")
@MethodSource("scenarios") @MethodSource("scenarios")
public void testStopStartOfHandler(String testId, ServerConfiguration serverConfiguration) throws Exception public void testStopStartOfHandler(String testId, ServerConfiguration serverConfiguration) throws Exception
{ {
startServer(serverConfiguration); startServer(serverConfiguration);
try (LocalFuzzer session = server.newLocalFuzzer("/info/")) try (LocalFuzzer session = server.newLocalFuzzer("/app/info/"))
{ {
session.sendFrames( session.sendFrames(
new TextFrame().setPayload("hello 1"), new TextFrame().setPayload("hello 1"),
@ -216,12 +200,12 @@ public class WebSocketUpgradeFilterWebappTest
assertThat("Frame.text-payload", frame.getPayloadAsUTF8(), containsString("session.maxTextMessageSize=" + (10 * 1024 * 1024))); assertThat("Frame.text-payload", frame.getPayloadAsUTF8(), containsString("session.maxTextMessageSize=" + (10 * 1024 * 1024)));
} }
server.getServletContextHandler().stop(); server.getContexts().stop();
server.getServletContextHandler().start(); server.getContexts().start();
// Make request again (server should have retained websocket configuration) // Make request again (server should have retained websocket configuration)
try (LocalFuzzer session = server.newLocalFuzzer("/info/")) try (LocalFuzzer session = server.newLocalFuzzer("/app/info/"))
{ {
session.sendFrames( session.sendFrames(
new TextFrame().setPayload("hello 2"), new TextFrame().setPayload("hello 2"),