@Test
 public void fallbackAfterTransportFailure() throws Exception {
   this.testFilter.sendErrorMap.put("/websocket", 200);
   this.testFilter.sendErrorMap.put("/xhr_streaming", 500);
   TestClientHandler handler = new TestClientHandler();
   initSockJsClient(createWebSocketTransport(), createXhrTransport());
   WebSocketSession session = this.sockJsClient.doHandshake(handler, this.baseUrl + "/echo").get();
   assertEquals("Fallback didn't occur", XhrClientSockJsSession.class, session.getClass());
   TextMessage message = new TextMessage("message1");
   session.sendMessage(message);
   handler.awaitMessage(message, 5000);
 }
  private void testReceiveOneMessage(Transport transport, WebSocketHttpHeaders headers)
      throws Exception {

    TestClientHandler clientHandler = new TestClientHandler();
    initSockJsClient(transport);
    this.sockJsClient.doHandshake(clientHandler, headers, new URI(this.baseUrl + "/test")).get();
    TestServerHandler serverHandler = this.wac.getBean(TestServerHandler.class);

    assertNotNull("afterConnectionEstablished should have been called", clientHandler.session);
    serverHandler.awaitSession(5000);

    TextMessage message = new TextMessage("message1");
    serverHandler.session.sendMessage(message);
    clientHandler.awaitMessage(message, 5000);
  }
 @Test(timeout = 5000)
 public void fallbackAfterConnectTimeout() throws Exception {
   TestClientHandler clientHandler = new TestClientHandler();
   this.testFilter.sleepDelayMap.put("/xhr_streaming", 10000L);
   this.testFilter.sendErrorMap.put("/xhr_streaming", 503);
   initSockJsClient(createXhrTransport());
   this.sockJsClient.setConnectTimeoutScheduler(this.wac.getBean(ThreadPoolTaskScheduler.class));
   WebSocketSession clientSession =
       sockJsClient.doHandshake(clientHandler, this.baseUrl + "/echo").get();
   assertEquals("Fallback didn't occur", XhrClientSockJsSession.class, clientSession.getClass());
   TextMessage message = new TextMessage("message1");
   clientSession.sendMessage(message);
   clientHandler.awaitMessage(message, 5000);
   clientSession.close();
 }
 private void testEcho(int messageCount, Transport transport, WebSocketHttpHeaders headers)
     throws Exception {
   List<TextMessage> messages = new ArrayList<>();
   for (int i = 0; i < messageCount; i++) {
     messages.add(new TextMessage("m" + i));
   }
   TestClientHandler handler = new TestClientHandler();
   initSockJsClient(transport);
   URI url = new URI(this.baseUrl + "/echo");
   WebSocketSession session = this.sockJsClient.doHandshake(handler, headers, url).get();
   for (TextMessage message : messages) {
     session.sendMessage(message);
   }
   handler.awaitMessageCount(messageCount, 5000);
   for (TextMessage message : messages) {
     assertTrue("Message not received: " + message, handler.receivedMessages.remove(message));
   }
   assertEquals(
       "Remaining messages: " + handler.receivedMessages, 0, handler.receivedMessages.size());
   session.close();
 }