From ac0bc4595a85fab5404cce25ffbb92df3c8c433d Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Wed, 25 Nov 2020 09:11:12 +0100 Subject: [PATCH] GH-2054 Add test to validate regression with reactive functions Resolves #2054 --- .../ImplicitFunctionBindingTests.java | 33 ++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) 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 f0a951446..90e0162e6 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 @@ -382,7 +382,8 @@ public class ImplicitFunctionBindingTests { System.clearProperty("spring.cloud.function.definition"); try (ConfigurableApplicationContext context = new SpringApplicationBuilder( TestChannelBinderConfiguration.getCompleteConfiguration(ReactiveFunctionConfiguration.class)) - .web(WebApplicationType.NONE).run("--spring.jmx.enabled=false")) { + .web(WebApplicationType.NONE).run("--spring.jmx.enabled=false", + "--spring.cloud.function.definition=echo")) { InputDestination inputDestination = context.getBean(InputDestination.class); OutputDestination outputDestination = context.getBean(OutputDestination.class); @@ -869,6 +870,27 @@ public class ImplicitFunctionBindingTests { } } + @Test + public void testGh2054() { + System.clearProperty("spring.cloud.function.definition"); + try (ConfigurableApplicationContext context = new SpringApplicationBuilder( + TestChannelBinderConfiguration.getCompleteConfiguration(ReactiveFunctionConfiguration.class)) + .web(WebApplicationType.NONE).run("--spring.jmx.enabled=false", + "--spring.cloud.function.definition=reactivePojoMessage")) { + InputDestination inputDestination = context.getBean(InputDestination.class); + OutputDestination outputDestination = context.getBean(OutputDestination.class); + + String jsonPerson = "{\"name\":\"Ricky\",\"id\":1}"; + + inputDestination.send(MessageBuilder.withPayload(jsonPerson.getBytes()).build()); + + Message result = outputDestination.receive(2000); + assertThat(new String(result.getPayload())).isEqualTo("{\"name\":\"RICKY\",\"id\":1}"); + } + } + + + @SuppressWarnings("rawtypes") @Test public void testWithNativeEncodingImperative() { @@ -1143,6 +1165,15 @@ public class ImplicitFunctionBindingTests { return value; }); } + + @Bean + public Function>, Flux>> reactivePojoMessage() { + return flux -> flux.map(message -> { + Person p = message.getPayload(); + p.setName(p.getName().toUpperCase()); + return MessageBuilder.withPayload(p).copyHeaders(message.getHeaders()).build(); + }); + } } @EnableAutoConfiguration