Skip to content

Commit 2f35e77

Browse files
committed
Integration test status quo for SpEL 'selector' support in messaging
See gh-30550
1 parent cc50af0 commit 2f35e77

File tree

2 files changed

+51
-3
lines changed

2 files changed

+51
-3
lines changed

spring-websocket/src/test/java/org/springframework/web/socket/config/annotation/WebSocketMessageBrokerConfigurationSupportTests.java

+45
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import org.springframework.messaging.handler.annotation.SendTo;
3636
import org.springframework.messaging.simp.SimpMessageType;
3737
import org.springframework.messaging.simp.annotation.SubscribeMapping;
38+
import org.springframework.messaging.simp.broker.DefaultSubscriptionRegistry;
3839
import org.springframework.messaging.simp.broker.SimpleBrokerMessageHandler;
3940
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
4041
import org.springframework.messaging.simp.stomp.StompCommand;
@@ -60,13 +61,15 @@
6061

6162
import static org.assertj.core.api.Assertions.assertThat;
6263
import static org.assertj.core.api.InstanceOfAssertFactories.BOOLEAN;
64+
import static org.assertj.core.api.InstanceOfAssertFactories.type;
6365
import static org.mockito.Mockito.mock;
6466

6567
/**
6668
* Tests for {@link WebSocketMessageBrokerConfigurationSupport}.
6769
*
6870
* @author Rossen Stoyanchev
6971
* @author Sebastien Deleuze
72+
* @author Sam Brannen
7073
*/
7174
class WebSocketMessageBrokerConfigurationSupportTests {
7275

@@ -161,6 +164,32 @@ void taskScheduler() {
161164
assertThat(handler.getHeartbeatValue()).containsExactly(15000, 15000);
162165
}
163166

167+
@Test
168+
void selectorHeaderEnabledByDefault() {
169+
ApplicationContext context = createContext(TestChannelConfig.class, TestConfigurer.class);
170+
SimpleBrokerMessageHandler simpleBrokerMessageHandler = simpleBrokerMessageHandler(context);
171+
172+
assertThat(simpleBrokerMessageHandler.getSubscriptionRegistry())
173+
.asInstanceOf(type(DefaultSubscriptionRegistry.class))
174+
.extracting(DefaultSubscriptionRegistry::getSelectorHeaderName)
175+
.isEqualTo("selector");
176+
}
177+
178+
@Test
179+
void selectorHeaderDisabled() {
180+
ApplicationContext context = createContext(TestChannelConfig.class, SelectorHeaderConfigurer.class);
181+
SimpleBrokerMessageHandler simpleBrokerMessageHandler = simpleBrokerMessageHandler(context);
182+
183+
assertThat(simpleBrokerMessageHandler.getSubscriptionRegistry())
184+
.asInstanceOf(type(DefaultSubscriptionRegistry.class))
185+
.extracting(DefaultSubscriptionRegistry::getSelectorHeaderName)
186+
.isNull();
187+
}
188+
189+
private static SimpleBrokerMessageHandler simpleBrokerMessageHandler(ApplicationContext context) {
190+
return context.getBean("simpleBrokerMessageHandler", SimpleBrokerMessageHandler.class);
191+
}
192+
164193
@Test
165194
void webSocketMessageBrokerStats() {
166195
ApplicationContext context = createContext(TestChannelConfig.class, TestConfigurer.class);
@@ -243,6 +272,22 @@ public void configureMessageBroker(MessageBrokerRegistry registry) {
243272
}
244273
}
245274

275+
@Configuration
276+
static class SelectorHeaderConfigurer implements WebSocketMessageBrokerConfigurer {
277+
278+
@Override
279+
public void registerStompEndpoints(StompEndpointRegistry registry) {
280+
registry.addEndpoint("/simpleBroker");
281+
}
282+
283+
@Override
284+
public void configureMessageBroker(MessageBrokerRegistry registry) {
285+
// Explicitly disable selector header support
286+
registry.enableSimpleBroker().setSelectorHeaderName(null);
287+
}
288+
289+
}
290+
246291
@Configuration
247292
static class TestChannelConfig extends DelegatingWebSocketMessageBrokerConfiguration {
248293

spring-websocket/src/test/java/org/springframework/web/socket/messaging/StompWebSocketIntegrationTests.java

+6-3
Original file line numberDiff line numberDiff line change
@@ -105,12 +105,15 @@ void sendMessageToControllerAndReceiveReplyViaTopic(WebSocketTestServer server,
105105
}
106106

107107
@ParameterizedWebSocketTest // SPR-10930
108-
void sendMessageToBrokerAndReceiveReplyViaTopic(WebSocketTestServer server, WebSocketClient webSocketClient, TestInfo testInfo) throws Exception {
108+
void sendMessageToBrokerAndReceiveReplyViaTopicWithSelectorHeader(WebSocketTestServer server, WebSocketClient webSocketClient, TestInfo testInfo) throws Exception {
109109
super.setup(server, webSocketClient, testInfo);
110110

111+
String destination = "destination:/topic/foo";
112+
String selector = "selector:headers.foo == 'bar'";
113+
111114
TextMessage m0 = create(StompCommand.CONNECT).headers("accept-version:1.1").build();
112-
TextMessage m1 = create(StompCommand.SUBSCRIBE).headers("id:subs1", "destination:/topic/foo").build();
113-
TextMessage m2 = create(StompCommand.SEND).headers("destination:/topic/foo").body("5").build();
115+
TextMessage m1 = create(StompCommand.SUBSCRIBE).headers("id:subs1", destination, selector).build();
116+
TextMessage m2 = create(StompCommand.SEND).headers(destination, "foo:bar").body("5").build();
114117

115118
TestClientWebSocketHandler clientHandler = new TestClientWebSocketHandler(2, m0, m1, m2);
116119

0 commit comments

Comments
 (0)