Не могу получить запрос STOMP в SpringBootTest, но работает в сети - PullRequest
0 голосов
/ 17 февраля 2020

Я пытаюсь протестировать свои веб-сокеты в загрузочном приложении 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);
}
...