@Test public void tryCloseWithWebSocketHandlerExceptions() throws Exception { this.session.delegateConnectionEstablished(); this.session.setActive(true); this.session.tryCloseWithSockJsTransportError(new Exception(), CloseStatus.BAD_DATA); assertEquals(CloseStatus.BAD_DATA, this.session.getCloseStatus()); assertClosed(); }
@Test public void closeWhenNotActive() throws Exception { this.session.delegateConnectionEstablished(); assertOpen(); this.session.setActive(false); this.session.close(); assertEquals(Collections.emptyList(), this.session.getSockJsFramesWritten()); }
@Test public void delegateConnectionEstablished() throws Exception { assertNew(); this.session.delegateConnectionEstablished(); assertOpen(); verify(this.webSocketHandler).afterConnectionEstablished(this.session); }
@Test public void getTimeSinceLastActive() throws Exception { Thread.sleep(1); long time1 = this.session.getTimeSinceLastActive(); assertTrue(time1 > 0); Thread.sleep(1); long time2 = this.session.getTimeSinceLastActive(); assertTrue(time2 > time1); this.session.delegateConnectionEstablished(); Thread.sleep(1); this.session.setActive(false); assertTrue(this.session.getTimeSinceLastActive() > 0); this.session.setActive(true); assertEquals(0, this.session.getTimeSinceLastActive()); }
@Test public void closeWithWriteFrameExceptions() throws Exception { this.session.setExceptionOnWrite(new IOException()); this.session.delegateConnectionEstablished(); this.session.setActive(true); this.session.close(); assertEquals(new CloseStatus(3000, "Go away!"), this.session.getCloseStatus()); assertClosed(); }
@Test public void writeFrameIoException() throws Exception { this.session.setExceptionOnWrite(new IOException()); this.session.delegateConnectionEstablished(); try { this.session.writeFrame(SockJsFrame.openFrame()); fail("expected exception"); } catch (SockJsTransportFailureException ex) { assertEquals(CloseStatus.SERVER_ERROR, this.session.getCloseStatus()); verify(this.webSocketHandler).afterConnectionClosed(this.session, CloseStatus.SERVER_ERROR); } }
@Test public void closeWithWebSocketHandlerExceptions() throws Exception { willThrow(new Exception()).given(this.webSocketHandler).afterConnectionClosed(this.session, CloseStatus.NORMAL); this.session.delegateConnectionEstablished(); this.session.setActive(true); this.session.close(CloseStatus.NORMAL); assertEquals(CloseStatus.NORMAL, this.session.getCloseStatus()); assertClosed(); }
@Test public void delegateConnectionClosed() throws Exception { this.session.delegateConnectionEstablished(); this.session.delegateConnectionClosed(CloseStatus.GOING_AWAY); assertClosed(); assertEquals(1, this.session.getNumberOfLastActiveTimeUpdates()); verify(this.webSocketHandler).afterConnectionClosed(this.session, CloseStatus.GOING_AWAY); }
@Test public void close() throws Exception { this.session.delegateConnectionEstablished(); assertOpen(); this.session.setActive(true); this.session.close(); assertEquals(1, this.session.getSockJsFramesWritten().size()); assertEquals(SockJsFrame.closeFrameGoAway(), this.session.getSockJsFramesWritten().get(0)); assertEquals(1, this.session.getNumberOfLastActiveTimeUpdates()); assertTrue(this.session.didCancelHeartbeat()); assertEquals(new CloseStatus(3000, "Go away!"), this.session.getCloseStatus()); assertClosed(); verify(this.webSocketHandler).afterConnectionClosed(this.session, new CloseStatus(3000, "Go away!")); }
@Test public void delegateMessagesWithErrorAndConnectionClosing() throws Exception { WebSocketHandler wsHandler = new ExceptionWebSocketHandlerDecorator(this.webSocketHandler); TestSockJsSession sockJsSession = new TestSockJsSession( "1", this.sockJsConfig, wsHandler, Collections.<String, Object>emptyMap()); String msg1 = "message 1"; String msg2 = "message 2"; String msg3 = "message 3"; willThrow(new IOException()).given(this.webSocketHandler).handleMessage(sockJsSession, new TextMessage(msg2)); sockJsSession.delegateConnectionEstablished(); try { sockJsSession.delegateMessages(msg1, msg2, msg3); fail("expected exception"); } catch (SockJsMessageDeliveryException ex) { assertEquals(Collections.singletonList(msg3), ex.getUndeliveredMessages()); verify(this.webSocketHandler).afterConnectionEstablished(sockJsSession); verify(this.webSocketHandler).handleMessage(sockJsSession, new TextMessage(msg1)); verify(this.webSocketHandler).handleMessage(sockJsSession, new TextMessage(msg2)); verify(this.webSocketHandler).afterConnectionClosed(sockJsSession, CloseStatus.SERVER_ERROR); verifyNoMoreInteractions(this.webSocketHandler); } }
@Test public void closeWhenNotOpen() throws Exception { assertNew(); this.session.close(); assertNull("Close not ignored for a new session", this.session.getCloseStatus()); this.session.delegateConnectionEstablished(); assertOpen(); this.session.close(); assertClosed(); assertEquals(3000, this.session.getCloseStatus().getCode()); this.session.close(CloseStatus.SERVER_ERROR); assertEquals("Close should be ignored if already closed", 3000, this.session.getCloseStatus().getCode()); }