Skip to content

Commit ff8bbc9

Browse files
committed
lastSessionCheckTime updated after session check
Issue: SPR-13745
1 parent 6f11d4f commit ff8bbc9

File tree

2 files changed

+16
-8
lines changed

2 files changed

+16
-8
lines changed

spring-websocket/src/main/java/org/springframework/web/socket/messaging/SubProtocolWebSocketHandler.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,7 @@ private void checkSessions() throws IOException {
429429
}
430430
}
431431
finally {
432+
this.lastSessionCheckTime = currentTime;
432433
this.sessionCheckLock.unlock();
433434
}
434435
}

spring-websocket/src/test/java/org/springframework/web/socket/messaging/SubProtocolWebSocketHandlerTests.java

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -148,29 +148,36 @@ public void noSubProtocolNoDefaultHandler() throws Exception {
148148
public void checkSession() throws Exception {
149149
TestWebSocketSession session1 = new TestWebSocketSession("id1");
150150
TestWebSocketSession session2 = new TestWebSocketSession("id2");
151+
session1.setOpen(true);
152+
session2.setOpen(true);
151153
session1.setAcceptedProtocol("v12.stomp");
152154
session2.setAcceptedProtocol("v12.stomp");
153155

154156
this.webSocketHandler.setProtocolHandlers(Arrays.asList(this.stompHandler));
155157
this.webSocketHandler.afterConnectionEstablished(session1);
156158
this.webSocketHandler.afterConnectionEstablished(session2);
157-
session1.setOpen(true);
158-
session2.setOpen(true);
159+
160+
DirectFieldAccessor handlerAccessor = new DirectFieldAccessor(this.webSocketHandler);
161+
Map<String, ?> map = (Map<String, ?>) handlerAccessor.getPropertyValue("sessions");
162+
DirectFieldAccessor session1Accessor = new DirectFieldAccessor(map.get("id1"));
163+
DirectFieldAccessor session2Accessor = new DirectFieldAccessor(map.get("id2"));
159164

160165
long sixtyOneSecondsAgo = System.currentTimeMillis() - 61 * 1000;
161-
new DirectFieldAccessor(this.webSocketHandler).setPropertyValue("lastSessionCheckTime", sixtyOneSecondsAgo);
162-
Map<String, ?> sessions = (Map<String, ?>) new DirectFieldAccessor(this.webSocketHandler).getPropertyValue("sessions");
163-
new DirectFieldAccessor(sessions.get("id1")).setPropertyValue("createTime", sixtyOneSecondsAgo);
164-
new DirectFieldAccessor(sessions.get("id2")).setPropertyValue("createTime", sixtyOneSecondsAgo);
166+
handlerAccessor.setPropertyValue("lastSessionCheckTime", sixtyOneSecondsAgo);
167+
session1Accessor.setPropertyValue("createTime", sixtyOneSecondsAgo);
168+
session2Accessor.setPropertyValue("createTime", sixtyOneSecondsAgo);
165169

166170
this.webSocketHandler.start();
167171
this.webSocketHandler.handleMessage(session1, new TextMessage("foo"));
168172

169173
assertTrue(session1.isOpen());
170-
assertFalse(session2.isOpen());
171174
assertNull(session1.getCloseStatus());
175+
176+
assertFalse(session2.isOpen());
172177
assertEquals(CloseStatus.SESSION_NOT_RELIABLE, session2.getCloseStatus());
173-
}
174178

179+
assertNotEquals("lastSessionCheckTime not updated", sixtyOneSecondsAgo,
180+
handlerAccessor.getPropertyValue("lastSessionCheckTime"));
181+
}
175182

176183
}

0 commit comments

Comments
 (0)