/** * In a situation where the upgrade/connection is successfull, and there is no activity for a * while, the idle timeout triggers on the client side and automatically initiates a close * handshake. */ @Test public void testIdleDetectedByClient() throws Exception { TrackingSocket wsocket = new TrackingSocket(); WebSocketClient client = factory.newWebSocketClient(wsocket); URI wsUri = server.getWsUri(); Future<UpgradeResponse> future = client.connect(wsUri); ServerConnection ssocket = server.accept(); ssocket.upgrade(); // Validate that connect occurred future.get(500, TimeUnit.MILLISECONDS); wsocket.waitForConnected(500, TimeUnit.MILLISECONDS); // Wait for inactivity idle timeout. long start = System.currentTimeMillis(); wsocket.waitForClose(10, TimeUnit.SECONDS); long end = System.currentTimeMillis(); long dur = (end - start); // Make sure idle timeout takes less than 5 total seconds Assert.assertThat("Idle Timeout", dur, lessThanOrEqualTo(5000L)); // Client should see a close event, with status NO_CLOSE wsocket.assertCloseCode(StatusCode.NORMAL); }