Issue #3835 - fix SessionTracker dump, add test assertions
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
This commit is contained in:
parent
2383bf4974
commit
196833d15e
|
@ -27,10 +27,12 @@ import java.util.concurrent.TimeUnit;
|
||||||
import org.eclipse.jetty.server.Server;
|
import org.eclipse.jetty.server.Server;
|
||||||
import org.eclipse.jetty.server.ServerConnector;
|
import org.eclipse.jetty.server.ServerConnector;
|
||||||
import org.eclipse.jetty.servlet.ServletContextHandler;
|
import org.eclipse.jetty.servlet.ServletContextHandler;
|
||||||
|
import org.eclipse.jetty.servlet.ServletHolder;
|
||||||
import org.eclipse.jetty.websocket.api.StatusCode;
|
import org.eclipse.jetty.websocket.api.StatusCode;
|
||||||
import org.eclipse.jetty.websocket.client.WebSocketClient;
|
import org.eclipse.jetty.websocket.client.WebSocketClient;
|
||||||
import org.eclipse.jetty.websocket.common.WebSocketSession;
|
import org.eclipse.jetty.websocket.common.WebSocketSession;
|
||||||
import org.eclipse.jetty.websocket.common.WebSocketSessionListener;
|
import org.eclipse.jetty.websocket.common.WebSocketSessionListener;
|
||||||
|
import org.eclipse.jetty.websocket.server.WebSocketServerFactory;
|
||||||
import org.eclipse.jetty.websocket.servlet.WebSocketServlet;
|
import org.eclipse.jetty.websocket.servlet.WebSocketServlet;
|
||||||
import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory;
|
import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory;
|
||||||
import org.junit.jupiter.api.AfterEach;
|
import org.junit.jupiter.api.AfterEach;
|
||||||
|
@ -48,6 +50,7 @@ public class ConcurrentConnectTest
|
||||||
private Server server;
|
private Server server;
|
||||||
private WebSocketClient client;
|
private WebSocketClient client;
|
||||||
private URI uri;
|
private URI uri;
|
||||||
|
private WebSocketServerFactory serverFactory;
|
||||||
|
|
||||||
@BeforeEach
|
@BeforeEach
|
||||||
public void start() throws Exception
|
public void start() throws Exception
|
||||||
|
@ -59,7 +62,17 @@ public class ConcurrentConnectTest
|
||||||
|
|
||||||
ServletContextHandler context = new ServletContextHandler();
|
ServletContextHandler context = new ServletContextHandler();
|
||||||
context.setContextPath("/");
|
context.setContextPath("/");
|
||||||
context.addServlet(MyWebSocketServlet.class, "/");
|
|
||||||
|
WebSocketServlet servlet = new WebSocketServlet() {
|
||||||
|
@Override
|
||||||
|
public void configure(WebSocketServletFactory factory)
|
||||||
|
{
|
||||||
|
factory.register(EventSocket.EchoSocket.class);
|
||||||
|
serverFactory = (WebSocketServerFactory)factory;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
context.addServlet(new ServletHolder(servlet), "/");
|
||||||
server.setHandler(context);
|
server.setHandler(context);
|
||||||
|
|
||||||
server.start();
|
server.start();
|
||||||
|
@ -124,6 +137,10 @@ public class ConcurrentConnectTest
|
||||||
{
|
{
|
||||||
assertTrue(((WebSocketSession)l.session).isStopped());
|
assertTrue(((WebSocketSession)l.session).isStopped());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
assertTrue(client.getOpenSessions().isEmpty());
|
||||||
|
assertTrue(client.getContainedBeans(WebSocketSession.class).isEmpty());
|
||||||
|
assertTrue(serverFactory.getContainedBeans(WebSocketSession.class).isEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class CloseListener implements WebSocketSessionListener
|
public static class CloseListener implements WebSocketSessionListener
|
||||||
|
@ -146,13 +163,4 @@ public class ConcurrentConnectTest
|
||||||
closeLatch.countDown();
|
closeLatch.countDown();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class MyWebSocketServlet extends WebSocketServlet
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public void configure(WebSocketServletFactory factory)
|
|
||||||
{
|
|
||||||
factory.register(EventSocket.EchoSocket.class);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,14 +18,16 @@
|
||||||
|
|
||||||
package org.eclipse.jetty.websocket.common;
|
package org.eclipse.jetty.websocket.common;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.CopyOnWriteArraySet;
|
import java.util.concurrent.CopyOnWriteArraySet;
|
||||||
|
|
||||||
import org.eclipse.jetty.util.component.AbstractLifeCycle;
|
import org.eclipse.jetty.util.component.AbstractLifeCycle;
|
||||||
|
import org.eclipse.jetty.util.component.Dumpable;
|
||||||
import org.eclipse.jetty.util.component.LifeCycle;
|
import org.eclipse.jetty.util.component.LifeCycle;
|
||||||
|
|
||||||
public class SessionTracker extends AbstractLifeCycle implements WebSocketSessionListener
|
public class SessionTracker extends AbstractLifeCycle implements WebSocketSessionListener, Dumpable
|
||||||
{
|
{
|
||||||
private CopyOnWriteArraySet<WebSocketSession> sessions = new CopyOnWriteArraySet<>();
|
private CopyOnWriteArraySet<WebSocketSession> sessions = new CopyOnWriteArraySet<>();
|
||||||
|
|
||||||
|
@ -63,4 +65,10 @@ public class SessionTracker extends AbstractLifeCycle implements WebSocketSessio
|
||||||
}
|
}
|
||||||
super.doStop();
|
super.doStop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void dump(Appendable out, String indent) throws IOException
|
||||||
|
{
|
||||||
|
Dumpable.dumpObjects(out, indent, this, sessions);
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue