From ff8bbc93f374e23d2c938d8945cb2d97749e68aa Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Wed, 2 Dec 2015 15:07:52 -0500 Subject: [PATCH] lastSessionCheckTime updated after session check Issue: SPR-13745 --- .../SubProtocolWebSocketHandler.java | 1 + .../SubProtocolWebSocketHandlerTests.java | 23 ++++++++++++------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/messaging/SubProtocolWebSocketHandler.java b/spring-websocket/src/main/java/org/springframework/web/socket/messaging/SubProtocolWebSocketHandler.java index dd88ecc36e9..51c7fb899a1 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/messaging/SubProtocolWebSocketHandler.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/messaging/SubProtocolWebSocketHandler.java @@ -429,6 +429,7 @@ public class SubProtocolWebSocketHandler } } finally { + this.lastSessionCheckTime = currentTime; this.sessionCheckLock.unlock(); } } diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/messaging/SubProtocolWebSocketHandlerTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/messaging/SubProtocolWebSocketHandlerTests.java index fa6f3f68d48..4664247f31f 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/messaging/SubProtocolWebSocketHandlerTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/messaging/SubProtocolWebSocketHandlerTests.java @@ -148,29 +148,36 @@ public class SubProtocolWebSocketHandlerTests { public void checkSession() throws Exception { TestWebSocketSession session1 = new TestWebSocketSession("id1"); TestWebSocketSession session2 = new TestWebSocketSession("id2"); + session1.setOpen(true); + session2.setOpen(true); session1.setAcceptedProtocol("v12.stomp"); session2.setAcceptedProtocol("v12.stomp"); this.webSocketHandler.setProtocolHandlers(Arrays.asList(this.stompHandler)); this.webSocketHandler.afterConnectionEstablished(session1); this.webSocketHandler.afterConnectionEstablished(session2); - session1.setOpen(true); - session2.setOpen(true); + + DirectFieldAccessor handlerAccessor = new DirectFieldAccessor(this.webSocketHandler); + Map map = (Map) handlerAccessor.getPropertyValue("sessions"); + DirectFieldAccessor session1Accessor = new DirectFieldAccessor(map.get("id1")); + DirectFieldAccessor session2Accessor = new DirectFieldAccessor(map.get("id2")); long sixtyOneSecondsAgo = System.currentTimeMillis() - 61 * 1000; - new DirectFieldAccessor(this.webSocketHandler).setPropertyValue("lastSessionCheckTime", sixtyOneSecondsAgo); - Map sessions = (Map) new DirectFieldAccessor(this.webSocketHandler).getPropertyValue("sessions"); - new DirectFieldAccessor(sessions.get("id1")).setPropertyValue("createTime", sixtyOneSecondsAgo); - new DirectFieldAccessor(sessions.get("id2")).setPropertyValue("createTime", sixtyOneSecondsAgo); + handlerAccessor.setPropertyValue("lastSessionCheckTime", sixtyOneSecondsAgo); + session1Accessor.setPropertyValue("createTime", sixtyOneSecondsAgo); + session2Accessor.setPropertyValue("createTime", sixtyOneSecondsAgo); this.webSocketHandler.start(); this.webSocketHandler.handleMessage(session1, new TextMessage("foo")); assertTrue(session1.isOpen()); - assertFalse(session2.isOpen()); assertNull(session1.getCloseStatus()); + + assertFalse(session2.isOpen()); assertEquals(CloseStatus.SESSION_NOT_RELIABLE, session2.getCloseStatus()); - } + assertNotEquals("lastSessionCheckTime not updated", sixtyOneSecondsAgo, + handlerAccessor.getPropertyValue("lastSessionCheckTime")); + } }