Browse Source

lastSessionCheckTime updated after session check

Issue: SPR-13745
pull/931/head
Rossen Stoyanchev 10 years ago
parent
commit
ff8bbc93f3
  1. 1
      spring-websocket/src/main/java/org/springframework/web/socket/messaging/SubProtocolWebSocketHandler.java
  2. 23
      spring-websocket/src/test/java/org/springframework/web/socket/messaging/SubProtocolWebSocketHandlerTests.java

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

@ -429,6 +429,7 @@ public class SubProtocolWebSocketHandler @@ -429,6 +429,7 @@ public class SubProtocolWebSocketHandler
}
}
finally {
this.lastSessionCheckTime = currentTime;
this.sessionCheckLock.unlock();
}
}

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

@ -148,29 +148,36 @@ public class SubProtocolWebSocketHandlerTests { @@ -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<String, ?> map = (Map<String, ?>) 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<String, ?> sessions = (Map<String, ?>) 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"));
}
}

Loading…
Cancel
Save