GH-663 Fix how strtategies are used to register additional encoders/decoders

Resolves #663
This commit is contained in:
Oleg Zhurakousky
2021-03-05 08:04:53 +01:00
parent 046aa354da
commit fcd427ca29
8 changed files with 114 additions and 120 deletions

View File

@@ -20,6 +20,7 @@ import java.util.Map;
import java.util.function.Function;
import org.junit.jupiter.api.Test;
import reactor.core.publisher.Flux;
import reactor.test.StepVerifier;
import org.springframework.boot.WebApplicationType;
@@ -226,6 +227,32 @@ public class MessagingTests {
}
}
@Test
public void testPojoToMessageMap() {
int port = SocketUtils.findAvailableTcpPort();
try (
ConfigurableApplicationContext applicationContext =
new SpringApplicationBuilder(MessagingConfiguration.class)
.web(WebApplicationType.NONE)
.run("--logging.level.org.springframework.cloud.function=DEBUG",
"--spring.rsocket.server.port=" + port);
) {
RSocketRequester.Builder rsocketRequesterBuilder =
applicationContext.getBean(RSocketRequester.Builder.class);
Person p = new Person();
p.setName("Ricky");
Message<Map<String, Object>> result = rsocketRequesterBuilder.tcp("localhost", port)
.route("echoMessageMap")
.data(p)
.retrieveMono(new ParameterizedTypeReference<Message<Map<String, Object>>>() {
})
.block();
assertThat(((Map) result.getPayload()).get("name")).isEqualTo("Ricky");
}
}
@EnableAutoConfiguration
@@ -239,6 +266,20 @@ public class MessagingTests {
};
}
@Bean
public Function<Message<Map<String, Object>>, Message<Map<String, Object>>> echoMessageMap() {
return v -> {
return v;
};
}
@Bean
public Function<Flux<Message<Map<String, Object>>>, Flux<Message<Map<String, Object>>>> echoMessageMapReactive() {
return v -> {
return v;
};
}
@Bean
public Function<Message<Person>, Person> pojoMessageToPojo() {
return p -> {

View File

@@ -340,6 +340,22 @@ public class RSocketAutoConfigurationTests {
.expectNext("HELLO")
.expectComplete()
.verify();
rsocketRequesterBuilder.tcp("localhost", port)
.route("uppercaseReactive")
.data("hello")
.retrieveFlux(String.class)
.as(StepVerifier::create)
.expectNext("HELLO")
.expectComplete()
.verify();
rsocketRequesterBuilder.tcp("localhost", port)
.route("uppercaseReactive")
.data("hello")
.retrieveFlux(String.class)
.as(StepVerifier::create)
.expectNext("HELLO")
.expectComplete()
.verify();
}
}