GH-2065 Add test to validate deserialization issue

The actual fix was on s-c-function side 7403a51464
Resolves #2065
This commit is contained in:
Oleg Zhurakousky
2020-12-10 15:56:35 +01:00
parent 3a048f7836
commit 720dce0b18
3 changed files with 42 additions and 2 deletions

View File

@@ -25,7 +25,7 @@
<java.version>1.8</java.version>
<reactor.version>2020.0.0-RC2</reactor.version>
<objenesis.version>2.1</objenesis.version>
<spring-cloud-function.version>3.1.0-M5</spring-cloud-function.version>
<spring-cloud-function.version>3.1.0-SNAPSHOT</spring-cloud-function.version>
<maven-checkstyle-plugin.failsOnError>true</maven-checkstyle-plugin.failsOnError>
<maven-checkstyle-plugin.failsOnViolation>true</maven-checkstyle-plugin.failsOnViolation>
<maven-checkstyle-plugin.includeTestSourceDirectory>true</maven-checkstyle-plugin.includeTestSourceDirectory>

View File

@@ -1361,7 +1361,10 @@ public class ImplicitFunctionBindingTests {
@Bean
public Function<Message<List<Map<String, String>>>, Message<List<Map<String, String>>>> funcB() {
return v -> v;
return v -> {
System.out.println(v);
return v;
};
}
}

View File

@@ -151,6 +151,31 @@ public class MultipleInputOutputFunctionTests {
}
}
@Test
public void testMultiInputMessageSingleOutput() {
try (ConfigurableApplicationContext context = new SpringApplicationBuilder(
TestChannelBinderConfiguration.getCompleteConfiguration(
ReactiveFunctionConfiguration.class))
.web(WebApplicationType.NONE)
.run("--spring.jmx.enabled=false",
"--spring.cloud.function.definition=multiInputSingleOutputMessage")) {
context.getBean(InputDestination.class);
InputDestination inputDestination = context.getBean(InputDestination.class);
OutputDestination outputDestination = context.getBean(OutputDestination.class);
Message<byte[]> stringInputMessage = MessageBuilder.withPayload("one".getBytes()).build();
Message<byte[]> integerInputMessage = MessageBuilder.withPayload("1".getBytes()).build();
inputDestination.send(stringInputMessage, "multiInputSingleOutputMessage-in-0");
inputDestination.send(integerInputMessage, "multiInputSingleOutputMessage-in-1");
Message<byte[]> outputMessage = outputDestination.receive();
assertThat(outputMessage.getPayload()).isEqualTo("one".getBytes());
outputMessage = outputDestination.receive(0, "multiInputSingleOutputMessage-out-0");
assertThat(outputMessage.getPayload()).isEqualTo("1".getBytes());
}
}
@Test
public void testSingleInputMultiOutput() {
try (ConfigurableApplicationContext context = new SpringApplicationBuilder(
@@ -336,6 +361,18 @@ public class MultipleInputOutputFunctionTests {
};
}
@Bean
public Function<Tuple2<Flux<Message<String>>, Flux<Message<Integer>>>, Flux<String>> multiInputSingleOutputMessage() {
return tuple -> {
Flux<String> stringStream = tuple.getT1().map(m -> m.getPayload());
Flux<String> intStream = tuple.getT2().map(i -> {
int v = i.getPayload();
return String.valueOf(v);
});
return Flux.merge(stringStream, intStream);
};
}
@Bean
@SuppressWarnings({ "unchecked", "rawtypes" })
public static Function<Flux<Integer>, Tuple2<Flux<String>, Flux<String>>> singleInputMultipleOutputs() {