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.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import com.codahale.metrics.Gauge;
|
||||
import com.codahale.metrics.MetricRegistry;
|
||||
@@ -38,12 +37,7 @@ public class WebSocketSessions {
|
||||
}
|
||||
|
||||
public void sendMessage(User user, String text) {
|
||||
Set<Session> userSessions = sessions.entrySet()
|
||||
.stream()
|
||||
.filter(e -> e.getKey().equals(user.getId()))
|
||||
.flatMap(e -> e.getValue().stream())
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
Set<Session> userSessions = sessions.get(user.getId());
|
||||
if (!userSessions.isEmpty()) {
|
||||
log.debug("sending '{}' to {} users via websocket", text, userSessions.size());
|
||||
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