diff --git a/spring-cloud-stream/src/test/java/org/springframework/cloud/stream/function/ImplicitFunctionBindingTests.java b/spring-cloud-stream/src/test/java/org/springframework/cloud/stream/function/ImplicitFunctionBindingTests.java index 74fda4ce5..8e735c7d9 100644 --- a/spring-cloud-stream/src/test/java/org/springframework/cloud/stream/function/ImplicitFunctionBindingTests.java +++ b/spring-cloud-stream/src/test/java/org/springframework/cloud/stream/function/ImplicitFunctionBindingTests.java @@ -42,6 +42,8 @@ import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.cloud.function.context.FunctionRegistration; import org.springframework.cloud.function.context.FunctionType; +import org.springframework.cloud.function.context.catalog.FunctionAroundWrapper; +import org.springframework.cloud.function.context.catalog.SimpleFunctionRegistry.FunctionInvocationWrapper; import org.springframework.cloud.function.context.config.ContextFunctionCatalogAutoConfiguration; import org.springframework.cloud.stream.annotation.EnableBinding; import org.springframework.cloud.stream.annotation.StreamListener; @@ -765,13 +767,13 @@ public class ImplicitFunctionBindingTests { } @Test - public void partitionOnOutputPayloadAsListTest() { + public void partitionOnOutputPayloadAsListAndFunctionAroundWrapperTest() { System.clearProperty("spring.cloud.function.definition"); try (ConfigurableApplicationContext context = new SpringApplicationBuilder(TestChannelBinderConfiguration .getCompleteConfiguration(PojoFunctionConfiguration.class)) - .web(WebApplicationType.NONE).run("--spring.cloud.function.definition=persons", - "--spring.cloud.stream.bindings.persons-out-0.producer.partitionKeyExpression=payload.id", - "--spring.cloud.stream.bindings.persons-out-0.producer.partitionCount=5", + .web(WebApplicationType.NONE).run("--spring.cloud.function.definition=uppercase|persons", + "--spring.cloud.stream.bindings.uppercase|persons-out-0.producer.partitionKeyExpression=payload.id", + "--spring.cloud.stream.bindings.uppercase|persons-out-0.producer.partitionCount=5", "--spring.jmx.enabled=false")) { InputDestination inputDestination = context.getBean(InputDestination.class); @@ -779,9 +781,9 @@ public class ImplicitFunctionBindingTests { Message inputMessage = MessageBuilder.withPayload("Jim Lahey".getBytes()).build(); - inputDestination.send(inputMessage, "persons-in-0"); + inputDestination.send(inputMessage, "uppercasepersons-in-0"); - assertThat(outputDestination.receive(100, "persons-out-0").getHeaders().get("scst_partition")).isEqualTo(3); + assertThat(outputDestination.receive(100, "uppercasepersons-out-0").getHeaders().get("scst_partition")).isEqualTo(3); assertThat(outputDestination.receive(100)).isNull(); } @@ -955,7 +957,7 @@ public class ImplicitFunctionBindingTests { "--spring.cloud.function.definition=supplier")) { OutputDestination outputDestination = context.getBean(OutputDestination.class); - Message result = outputDestination.receive(2000); + Message result = outputDestination.receive(1000, "supplier-out-0"); assertThat(new String(result.getPayload())).isEqualTo("[{\"name\":\"Ricky\",\"id\":1},{\"name\":\"Julien\",\"id\":2}]"); } } @@ -1486,6 +1488,18 @@ public class ImplicitFunctionBindingTests { return x -> x; } + @Bean + public FunctionAroundWrapper faw() { + return new FunctionAroundWrapper() { + + @Override + protected Object doApply(Message input, + FunctionInvocationWrapper targetFunction) { + return targetFunction.apply(input); + } + }; + } + @Bean public Supplier personSupplier() { Person p = new Person(); @@ -1514,6 +1528,11 @@ public class ImplicitFunctionBindingTests { }; } + @Bean + public Function uppercase() { + return v -> v.toUpperCase(); + } + @Bean public Function>> persons() { return x -> {