Integration test status quo for SpEL 'selector' support in messaging

See gh-30550
This commit is contained in:
Sam Brannen
2023-06-04 16:25:21 +02:00
parent cc50af08e4
commit 2f35e7756b
2 changed files with 51 additions and 3 deletions

View File

@@ -35,6 +35,7 @@ import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.messaging.simp.SimpMessageType;
import org.springframework.messaging.simp.annotation.SubscribeMapping;
import org.springframework.messaging.simp.broker.DefaultSubscriptionRegistry;
import org.springframework.messaging.simp.broker.SimpleBrokerMessageHandler;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.messaging.simp.stomp.StompCommand;
@@ -60,6 +61,7 @@ import org.springframework.web.socket.server.support.WebSocketHttpRequestHandler
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.InstanceOfAssertFactories.BOOLEAN;
import static org.assertj.core.api.InstanceOfAssertFactories.type;
import static org.mockito.Mockito.mock;
/**
@@ -67,6 +69,7 @@ import static org.mockito.Mockito.mock;
*
* @author Rossen Stoyanchev
* @author Sebastien Deleuze
* @author Sam Brannen
*/
class WebSocketMessageBrokerConfigurationSupportTests {
@@ -161,6 +164,32 @@ class WebSocketMessageBrokerConfigurationSupportTests {
assertThat(handler.getHeartbeatValue()).containsExactly(15000, 15000);
}
@Test
void selectorHeaderEnabledByDefault() {
ApplicationContext context = createContext(TestChannelConfig.class, TestConfigurer.class);
SimpleBrokerMessageHandler simpleBrokerMessageHandler = simpleBrokerMessageHandler(context);
assertThat(simpleBrokerMessageHandler.getSubscriptionRegistry())
.asInstanceOf(type(DefaultSubscriptionRegistry.class))
.extracting(DefaultSubscriptionRegistry::getSelectorHeaderName)
.isEqualTo("selector");
}
@Test
void selectorHeaderDisabled() {
ApplicationContext context = createContext(TestChannelConfig.class, SelectorHeaderConfigurer.class);
SimpleBrokerMessageHandler simpleBrokerMessageHandler = simpleBrokerMessageHandler(context);
assertThat(simpleBrokerMessageHandler.getSubscriptionRegistry())
.asInstanceOf(type(DefaultSubscriptionRegistry.class))
.extracting(DefaultSubscriptionRegistry::getSelectorHeaderName)
.isNull();
}
private static SimpleBrokerMessageHandler simpleBrokerMessageHandler(ApplicationContext context) {
return context.getBean("simpleBrokerMessageHandler", SimpleBrokerMessageHandler.class);
}
@Test
void webSocketMessageBrokerStats() {
ApplicationContext context = createContext(TestChannelConfig.class, TestConfigurer.class);
@@ -243,6 +272,22 @@ class WebSocketMessageBrokerConfigurationSupportTests {
}
}
@Configuration
static class SelectorHeaderConfigurer implements WebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/simpleBroker");
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
// Explicitly disable selector header support
registry.enableSimpleBroker().setSelectorHeaderName(null);
}
}
@Configuration
static class TestChannelConfig extends DelegatingWebSocketMessageBrokerConfiguration {

View File

@@ -105,12 +105,15 @@ class StompWebSocketIntegrationTests extends AbstractWebSocketIntegrationTests {
}
@ParameterizedWebSocketTest // SPR-10930
void sendMessageToBrokerAndReceiveReplyViaTopic(WebSocketTestServer server, WebSocketClient webSocketClient, TestInfo testInfo) throws Exception {
void sendMessageToBrokerAndReceiveReplyViaTopicWithSelectorHeader(WebSocketTestServer server, WebSocketClient webSocketClient, TestInfo testInfo) throws Exception {
super.setup(server, webSocketClient, testInfo);
String destination = "destination:/topic/foo";
String selector = "selector:headers.foo == 'bar'";
TextMessage m0 = create(StompCommand.CONNECT).headers("accept-version:1.1").build();
TextMessage m1 = create(StompCommand.SUBSCRIBE).headers("id:subs1", "destination:/topic/foo").build();
TextMessage m2 = create(StompCommand.SEND).headers("destination:/topic/foo").body("5").build();
TextMessage m1 = create(StompCommand.SUBSCRIBE).headers("id:subs1", destination, selector).build();
TextMessage m2 = create(StompCommand.SEND).headers(destination, "foo:bar").body("5").build();
TestClientWebSocketHandler clientHandler = new TestClientWebSocketHandler(2, m0, m1, m2);