Java Stomp WebSocket TimeoutException - PullRequest
0 голосов
/ 27 июня 2018

У меня проблемы с интеграционными тестами с WebSockets и SpringBoot. Если я пытаюсь подключиться к StomJS с веб-страницы, клиент получает уведомление. Но в интеграционном тесте с клиентом Java я получаю исключение. Как правильно написать эти тесты? Мой класс Config выглядит так:

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends 
AbstractWebSocketMessageBrokerConfigurer  {
@Autowired
private ConnectionInterceptor connectionInterceptor;

@Override
public void configureClientInboundChannel(ChannelRegistration registration) {
    registration.interceptors(connectionInterceptor);
}

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
    registry
        .addEndpoint(ApiConstants.SOCKET_BASE_URL)
        .setAllowedOrigins("*")
        .withSockJS();

}

@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
    registry.enableSimpleBroker( "/topic", "/queue" );
    registry.setApplicationDestinationPrefixes("/app");
    registry.setUserDestinationPrefix("/user");
}

}

Мой тест:

 @Test
 @WithMockUser(authorities = "ADMIN")
 public void ShouldLogoutGroupOfUsers() throws Exception {
    String url = "ws://127.0.0.1:" + port+ "/socket";
    StompSessionHandler sessionHandler = new MyStompSessionHandler();
    CompletableFuture<SocketMessage> completable = new 
    CompletableFuture<>();

    val stompHeaders = new StompHeaders();
    //add authorization headers
    stompHeaders.add(
            tokenHeaderKey,
    getUserHeaders().getValuesAsList(tokenHeaderKey).get(0)
    );

    val session = getStompClient().connect(
            url,
            new WebSocketHttpHeaders(),
            stompHeaders,
            new StompSessionHandlerAdapter() {
            }
    ).get(1, SECONDS);

    assertTrue(session.isConnected());
    stompHeaders.setDestination("/user/queue/action/logout");

    val subscription = session.subscribe(
            stompHeaders,
            new StompMessageHandler<>(completable, 
            SocketMessage.class)
    );

Теперь я вызываю метод контроллера, который вызовет:

sender.convertAndSendToUser(registeredUser, DEVICE_LOGOUT_PATH,new 
SocketMessage("hello socket"));

И тест не пройден в этой строке:

SocketMessage message = completable.get(30, SECONDS);

1 Ответ

0 голосов
/ 28 июня 2018

Я решил проблему самостоятельно, проблема была в неправильном пути к конечной точке, Буду обновлять https://github.com/MajidHajric/stomp-test позже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...