GH-958 Add support for default routing

Resolves #958
This commit is contained in:
Oleg Zhurakousky
2022-11-17 11:27:32 +01:00
parent 4273d86f5c
commit 3c87e00d8e
7 changed files with 172 additions and 23 deletions

View File

@@ -29,6 +29,7 @@ import reactor.test.StepVerifier;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.function.context.DefaultMessageRoutingHandler;
import org.springframework.cloud.function.context.FunctionCatalog;
import org.springframework.cloud.function.context.FunctionProperties;
import org.springframework.cloud.function.context.MessageRoutingCallback;
@@ -70,6 +71,31 @@ public class RoutingFunctionTests {
return configureCatalog(RoutingFunctionConfiguration.class);
}
@SuppressWarnings({ "unchecked", "rawtypes" })
@Test
public void testDefaultRouting() {
Message<String> message = MessageBuilder.withPayload("hello")
.setHeader(FunctionProperties.PREFIX + ".definition", "blah").build();
FunctionCatalog functionCatalog = this.configureCatalog(EmptyConfiguration.class);
Function function = functionCatalog.lookup(RoutingFunction.FUNCTION_NAME);
assertThat(function).isNotNull();
try {
function.apply(message);
fail();
}
catch (Exception e) {
// Good
}
//
functionCatalog = this.configureCatalog(ConfigurationWithDefaultMessageRoutingHandler.class);
function = functionCatalog.lookup(RoutingFunction.FUNCTION_NAME);
assertThat(function).isNotNull();
function.apply(message);
ConfigurationWithDefaultMessageRoutingHandler config = this.context.getBean(ConfigurationWithDefaultMessageRoutingHandler.class);
assertThat(config.defaultHandlerInvoked).isTrue();
}
@SuppressWarnings({ "unchecked", "rawtypes" })
@Test
public void testInvocationWithMessageAndHeader() {
@@ -281,4 +307,25 @@ public class RoutingFunctionTests {
return String::toUpperCase;
}
}
@EnableAutoConfiguration
@Configuration
protected static class EmptyConfiguration {
}
@EnableAutoConfiguration
@Configuration
protected static class ConfigurationWithDefaultMessageRoutingHandler {
public boolean defaultHandlerInvoked;
@Bean
public DefaultMessageRoutingHandler defaultRoutingHandler() {
return new DefaultMessageRoutingHandler() {
@Override
public void accept(Message<?> message) {
super.accept(message);
defaultHandlerInvoked = true;
}
};
}
}
}