mirror of
https://github.com/Athou/commafeed.git
synced 2026-03-21 21:37:29 +00:00
simplify websocket session retrieval
This commit is contained in:
@@ -3,7 +3,6 @@ package com.commafeed.frontend.ws;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
import com.codahale.metrics.Gauge;
|
import com.codahale.metrics.Gauge;
|
||||||
import com.codahale.metrics.MetricRegistry;
|
import com.codahale.metrics.MetricRegistry;
|
||||||
@@ -38,12 +37,7 @@ public class WebSocketSessions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void sendMessage(User user, String text) {
|
public void sendMessage(User user, String text) {
|
||||||
Set<Session> userSessions = sessions.entrySet()
|
Set<Session> userSessions = sessions.get(user.getId());
|
||||||
.stream()
|
|
||||||
.filter(e -> e.getKey().equals(user.getId()))
|
|
||||||
.flatMap(e -> e.getValue().stream())
|
|
||||||
.collect(Collectors.toSet());
|
|
||||||
|
|
||||||
if (!userSessions.isEmpty()) {
|
if (!userSessions.isEmpty()) {
|
||||||
log.debug("sending '{}' to {} users via websocket", text, userSessions.size());
|
log.debug("sending '{}' to {} users via websocket", text, userSessions.size());
|
||||||
for (Session userSession : userSessions) {
|
for (Session userSession : userSessions) {
|
||||||
|
|||||||
@@ -0,0 +1,82 @@
|
|||||||
|
package com.commafeed.frontend.ws;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
import org.mockito.Answers;
|
||||||
|
import org.mockito.Mock;
|
||||||
|
import org.mockito.Mockito;
|
||||||
|
import org.mockito.junit.jupiter.MockitoExtension;
|
||||||
|
|
||||||
|
import com.codahale.metrics.MetricRegistry;
|
||||||
|
import com.commafeed.backend.model.User;
|
||||||
|
|
||||||
|
import jakarta.websocket.Session;
|
||||||
|
|
||||||
|
@ExtendWith(MockitoExtension.class)
|
||||||
|
class WebSocketSessionsTest {
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private MetricRegistry metrics;
|
||||||
|
|
||||||
|
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
||||||
|
private Session session1;
|
||||||
|
|
||||||
|
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
||||||
|
private Session session2;
|
||||||
|
|
||||||
|
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
||||||
|
private Session session3;
|
||||||
|
|
||||||
|
private WebSocketSessions webSocketSessions;
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
void init() {
|
||||||
|
webSocketSessions = new WebSocketSessions(metrics);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void sendsMessageToUser() {
|
||||||
|
Mockito.when(session1.isOpen()).thenReturn(true);
|
||||||
|
Mockito.when(session2.isOpen()).thenReturn(true);
|
||||||
|
|
||||||
|
User user1 = newUser(1L);
|
||||||
|
webSocketSessions.add(user1.getId(), session1);
|
||||||
|
webSocketSessions.add(user1.getId(), session2);
|
||||||
|
|
||||||
|
User user2 = newUser(2L);
|
||||||
|
webSocketSessions.add(user2.getId(), session3);
|
||||||
|
|
||||||
|
webSocketSessions.sendMessage(user1, "Hello");
|
||||||
|
Mockito.verify(session1).getAsyncRemote();
|
||||||
|
Mockito.verify(session2).getAsyncRemote();
|
||||||
|
Mockito.verifyNoInteractions(session3);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void closedSessionsAreNotNotified() {
|
||||||
|
Mockito.when(session1.isOpen()).thenReturn(false);
|
||||||
|
|
||||||
|
User user1 = newUser(1L);
|
||||||
|
webSocketSessions.add(user1.getId(), session1);
|
||||||
|
|
||||||
|
webSocketSessions.sendMessage(user1, "Hello");
|
||||||
|
Mockito.verify(session1, Mockito.never()).getAsyncRemote();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void removedSessionsAreNotNotified() {
|
||||||
|
User user1 = newUser(1L);
|
||||||
|
webSocketSessions.add(user1.getId(), session1);
|
||||||
|
webSocketSessions.remove(session1);
|
||||||
|
|
||||||
|
webSocketSessions.sendMessage(user1, "Hello");
|
||||||
|
Mockito.verifyNoInteractions(session1);
|
||||||
|
}
|
||||||
|
|
||||||
|
private User newUser(Long userId) {
|
||||||
|
User user = new User();
|
||||||
|
user.setId(userId);
|
||||||
|
return user;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user