Я пытаюсь протестировать свои веб-сокеты в загрузочном приложении Spring, используя JUnit 5. Я могу нормально получать сообщение о моей подписке со своим простым веб-сайтом stati c, но при тестировании через SpringBootTest у меня появляется тайм-аут.
Вот моя конечная точка, настроенная на отправку сообщения в игру topi c с тем же идентификатором sessionId:
@MessageMapping("/connect/{sessionId}")
@SendTo("/topic/game/{sessionId}")
public GameSession create(@DestinationVariable String sessionId) {
return new GameSession(Collections.singletonList(sessionId));
}
Вот моя конфигурация (не говоря уже о allowAllOrigin, это для целей тестирования :
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws").setAllowedOrigins("*").withSockJS();
}
А вот мой контрольный пример, в котором для получения ответа от подписки используется завершаемое будущее:
@Test
public void testCreateGameEndpoint() throws URISyntaxException, InterruptedException, ExecutionException, TimeoutException {
String uuid = UUID.randomUUID().toString();
WebSocketStompClient stompClient = new WebSocketStompClient(new SockJsClient(createTransportClient()));
stompClient.setMessageConverter(new MappingJackson2MessageConverter());
StompSession stompSession = stompClient.connect(URL, new StompSessionHandlerAdapter() {
}).get(1, SECONDS);
stompSession.subscribe(SUBSCRIBE_CREATE_BOARD_ENDPOINT + uuid,
new CreateGameStompFrameHandler());
stompSession.send(SEND_CREATE_BOARD_ENDPOINT + uuid, null);
GameState gameState = completableFuture.get(10, SECONDS);
assertNotNull(gameState);
}