Search in sources :

Example 1 with SleepingText

use of org.apache.tomcat.websocket.TesterMessageCountClient.SleepingText in project tomcat by apache.

the class TestWebSocketFrameClientSSL method testBug56032.

@Test
public void testBug56032() throws Exception {
    Tomcat tomcat = getTomcatInstance();
    // No file system docBase required
    Context ctx = tomcat.addContext("", null);
    ctx.addApplicationListener(TesterFirehoseServer.Config.class.getName());
    Tomcat.addServlet(ctx, "default", new DefaultServlet());
    ctx.addServletMappingDecoded("/", "default");
    TesterSupport.initSsl(tomcat);
    tomcat.start();
    WebSocketContainer wsContainer = ContainerProvider.getWebSocketContainer();
    ClientEndpointConfig clientEndpointConfig = ClientEndpointConfig.Builder.create().build();
    clientEndpointConfig.getUserProperties().put(Constants.SSL_TRUSTSTORE_PROPERTY, "test/org/apache/tomcat/util/net/ca.jks");
    Session wsSession = wsContainer.connectToServer(TesterProgrammaticEndpoint.class, clientEndpointConfig, new URI("wss://localhost:" + getPort() + TesterFirehoseServer.Config.PATH));
    // Process incoming messages very slowly
    MessageHandler handler = new SleepingText(5000);
    wsSession.addMessageHandler(handler);
    wsSession.getBasicRemote().sendText("Hello");
    // Wait long enough for the buffers to fill and the send to timeout
    int count = 0;
    int limit = TesterFirehoseServer.WAIT_TIME_MILLIS / 100;
    System.out.println("Waiting for server to report an error");
    while (TesterFirehoseServer.Endpoint.getErrorCount() == 0 && count < limit) {
        Thread.sleep(100);
        count++;
    }
    if (TesterFirehoseServer.Endpoint.getErrorCount() == 0) {
        Assert.fail("No error reported by Endpoint when timeout was expected");
    }
    // Wait up to another 10 seconds for the connection to be closed -
    // should be a lot faster.
    System.out.println("Waiting for connection to be closed");
    count = 0;
    limit = (TesterFirehoseServer.SEND_TIME_OUT_MILLIS * 2) / 100;
    while (TesterFirehoseServer.Endpoint.getOpenConnectionCount() != 0 && count < limit) {
        Thread.sleep(100);
        count++;
    }
    int openConnectionCount = TesterFirehoseServer.Endpoint.getOpenConnectionCount();
    if (openConnectionCount != 0) {
        Assert.fail("There are [" + openConnectionCount + "] connections still open");
    }
    // Close the client session.
    wsSession.close();
}
Also used : Context(org.apache.catalina.Context) Tomcat(org.apache.catalina.startup.Tomcat) WebSocketContainer(javax.websocket.WebSocketContainer) MessageHandler(javax.websocket.MessageHandler) ClientEndpointConfig(javax.websocket.ClientEndpointConfig) DefaultServlet(org.apache.catalina.servlets.DefaultServlet) ClientEndpointConfig(javax.websocket.ClientEndpointConfig) URI(java.net.URI) TesterProgrammaticEndpoint(org.apache.tomcat.websocket.TesterMessageCountClient.TesterProgrammaticEndpoint) Session(javax.websocket.Session) SleepingText(org.apache.tomcat.websocket.TesterMessageCountClient.SleepingText) Test(org.junit.Test)

Aggregations

URI (java.net.URI)1 ClientEndpointConfig (javax.websocket.ClientEndpointConfig)1 MessageHandler (javax.websocket.MessageHandler)1 Session (javax.websocket.Session)1 WebSocketContainer (javax.websocket.WebSocketContainer)1 Context (org.apache.catalina.Context)1 DefaultServlet (org.apache.catalina.servlets.DefaultServlet)1 Tomcat (org.apache.catalina.startup.Tomcat)1 SleepingText (org.apache.tomcat.websocket.TesterMessageCountClient.SleepingText)1 TesterProgrammaticEndpoint (org.apache.tomcat.websocket.TesterMessageCountClient.TesterProgrammaticEndpoint)1 Test (org.junit.Test)1