package org.projectodd.sockjs;
import io.undertow.Undertow;
import io.undertow.server.HttpHandler;
import io.undertow.server.handlers.PathHandler;
import io.undertow.servlet.Servlets;
import io.undertow.servlet.api.DeploymentInfo;
import io.undertow.servlet.api.DeploymentManager;
import io.undertow.servlet.api.ServletInfo;
import io.undertow.servlet.util.ImmediateInstanceFactory;
import io.undertow.websockets.jsr.WebSocketDeploymentInfo;
import org.projectodd.sockjs.servlet.SockJsServlet;
import javax.servlet.Servlet;
public class AbstractSockJsTest {
protected DeploymentManager createDeploymentManager(SockJsServer server, String context, String mapping) throws Exception {
Servlet servlet = new SockJsServlet(server);
Class<? extends Servlet> servletClass = servlet.getClass();
final ServletInfo servletInfo = Servlets.servlet(servletClass.getSimpleName(),
servletClass,
new ImmediateInstanceFactory<>(servlet));
servletInfo.addMapping(mapping);
// LoadOnStartup is required for our websocket Endpoint to work
servletInfo.setLoadOnStartup(0);
// AsyncSupported is required
servletInfo.setAsyncSupported(true);
final DeploymentInfo servletBuilder = Servlets.deployment()
.setClassLoader(AbstractSockJsTest.class.getClassLoader())
.setContextPath(context)
.setDeploymentName(context)
// Because Undertow tries to be too smart and ignore our flushes
.setIgnoreFlush(false)
.addServlet(servletInfo);
// Required for any websocket support in undertow
final WebSocketDeploymentInfo wsInfo = new WebSocketDeploymentInfo();
servletBuilder.addServletContextAttribute(WebSocketDeploymentInfo.ATTRIBUTE_NAME, wsInfo);
return Servlets.defaultContainer().addDeployment(servletBuilder);
}
protected void installHandler(PathHandler pathHandler, SockJsServer server, String context) throws Exception {
final DeploymentManager manager = createDeploymentManager(server, context, "/*");
manager.deploy();
final HttpHandler servletHandler = manager.start();
pathHandler.addPrefixPath(context, servletHandler);
}
protected Undertow createUndertow(HttpHandler handler, String host, int port) throws Exception {
return Undertow.builder()
.addHttpListener(port, host)
.setHandler(handler)
.build();
}
}