This commit is contained in:
Rossen Stoyanchev
2019-07-29 13:29:11 +01:00
parent dc0c730ee8
commit c76370d7d8
11 changed files with 192 additions and 166 deletions

View File

@@ -24,6 +24,7 @@ import java.util.function.Consumer;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufAllocator;
import io.rsocket.ConnectionSetupPayload;
import io.rsocket.DuplexConnection;
import io.rsocket.RSocketFactory;
import io.rsocket.frame.decoder.PayloadDecoder;
@@ -62,19 +63,21 @@ public class DefaultRSocketRequesterBuilderTests {
private ClientTransport transport;
private final MockConnection connection = new MockConnection();
private final TestRSocketFactoryConfigurer rsocketFactoryConfigurer = new TestRSocketFactoryConfigurer();
@Before
public void setup() {
this.transport = mock(ClientTransport.class);
given(this.transport.connect(anyInt())).willReturn(Mono.just(new MockConnection()));
given(this.transport.connect(anyInt())).willReturn(Mono.just(this.connection));
}
@Test
@SuppressWarnings("unchecked")
public void shouldApplyCustomizationsAtSubscription() {
public void rsocketFactoryConfigurerAppliesAtSubscription() {
Consumer<RSocketStrategies.Builder> strategiesConfigurer = mock(Consumer.class);
RSocketRequester.builder()
.rsocketFactory(this.rsocketFactoryConfigurer)
@@ -87,7 +90,7 @@ public class DefaultRSocketRequesterBuilderTests {
@Test
@SuppressWarnings("unchecked")
public void shouldApplyCustomizations() {
public void rsocketFactoryConfigurer() {
Consumer<RSocketStrategies.Builder> rsocketStrategiesConfigurer = mock(Consumer.class);
RSocketRequester.builder()
.rsocketFactory(this.rsocketFactoryConfigurer)
@@ -109,12 +112,12 @@ public class DefaultRSocketRequesterBuilderTests {
.block();
assertThat(requester.dataMimeType())
.as("Default data MimeType, based on the first configured Decoder")
.as("Default data MimeType, based on the first Decoder")
.isEqualTo(MimeTypeUtils.TEXT_PLAIN);
}
@Test
public void defaultDataMimeTypeWithCustomDecoderRegitered() {
public void defaultDataMimeTypeWithCustomDecoderRegistered() {
RSocketStrategies strategies = RSocketStrategies.builder()
.decoder(new TestJsonDecoder(MimeTypeUtils.APPLICATION_JSON))
.build();
@@ -130,15 +133,45 @@ public class DefaultRSocketRequesterBuilderTests {
}
@Test
public void dataMimeTypeSet() {
public void dataMimeTypeExplicitlySet() {
RSocketRequester requester = RSocketRequester.builder()
.dataMimeType(MimeTypeUtils.APPLICATION_JSON)
.connect(this.transport)
.block();
ConnectionSetupPayload setupPayload = Mono.from(this.connection.sentFrames())
.map(ConnectionSetupPayload::create)
.block();
assertThat(setupPayload.dataMimeType()).isEqualTo("application/json");
assertThat(requester.dataMimeType()).isEqualTo(MimeTypeUtils.APPLICATION_JSON);
}
@Test
public void mimeTypesCannotBeChangedAtRSocketFactoryLevel() {
MimeType dataMimeType = MimeTypeUtils.APPLICATION_JSON;
MimeType metaMimeType = MetadataExtractor.ROUTING;
RSocketRequester requester = RSocketRequester.builder()
.metadataMimeType(metaMimeType)
.dataMimeType(dataMimeType)
.rsocketFactory(factory -> {
factory.metadataMimeType("text/plain");
factory.dataMimeType("application/xml");
})
.connect(this.transport)
.block();
ConnectionSetupPayload setupPayload = Mono.from(this.connection.sentFrames())
.map(ConnectionSetupPayload::create)
.block();
assertThat(setupPayload.dataMimeType()).isEqualTo(dataMimeType.toString());
assertThat(setupPayload.metadataMimeType()).isEqualTo(metaMimeType.toString());
assertThat(requester.dataMimeType()).isEqualTo(dataMimeType);
assertThat(requester.metadataMimeType()).isEqualTo(metaMimeType);
}
@Test
public void frameDecoderMatchesDataBufferFactory() throws Exception {
testFrameDecoder(new NettyDataBufferFactory(ByteBufAllocator.DEFAULT), PayloadDecoder.ZERO_COPY);
@@ -170,8 +203,16 @@ public class DefaultRSocketRequesterBuilderTests {
static class MockConnection implements DuplexConnection {
private Publisher<ByteBuf> sentFrames;
public Publisher<ByteBuf> sentFrames() {
return this.sentFrames;
}
@Override
public Mono<Void> send(Publisher<ByteBuf> frames) {
this.sentFrames = frames;
return Mono.empty();
}
@@ -224,7 +265,7 @@ public class DefaultRSocketRequesterBuilderTests {
@Override
public boolean canDecode(ResolvableType elementType, MimeType mimeType) {
return false;
throw new UnsupportedOperationException();
}
@Override

View File

@@ -48,8 +48,6 @@ import static java.util.concurrent.TimeUnit.MILLISECONDS;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.springframework.messaging.rsocket.DefaultRSocketRequester.COMPOSITE_METADATA;
import static org.springframework.messaging.rsocket.DefaultRSocketRequester.ROUTING;
import static org.springframework.util.MimeTypeUtils.TEXT_PLAIN;
/**
@@ -147,7 +145,7 @@ public class DefaultRSocketRequesterTests {
public void metadataCompositeWithRoute() {
RSocketRequester requester = RSocketRequester.wrap(
this.rsocket, TEXT_PLAIN, COMPOSITE_METADATA, this.strategies);
this.rsocket, TEXT_PLAIN, MetadataExtractor.COMPOSITE_METADATA, this.strategies);
requester.route("toA").data("bodyA").send().block(Duration.ofSeconds(5));
@@ -156,7 +154,7 @@ public class DefaultRSocketRequesterTests {
assertThat(iterator.hasNext()).isTrue();
CompositeMetadata.Entry entry = iterator.next();
assertThat(entry.getMimeType()).isEqualTo(ROUTING.toString());
assertThat(entry.getMimeType()).isEqualTo(MetadataExtractor.ROUTING.toString());
assertThat(entry.getContent().toString(StandardCharsets.UTF_8)).isEqualTo("toA");
assertThat(iterator.hasNext()).isFalse();
@@ -166,7 +164,7 @@ public class DefaultRSocketRequesterTests {
public void metadataCompositeWithRouteAndTextEntry() {
RSocketRequester requester = RSocketRequester.wrap(
this.rsocket, TEXT_PLAIN, COMPOSITE_METADATA, this.strategies);
this.rsocket, TEXT_PLAIN, MetadataExtractor.COMPOSITE_METADATA, this.strategies);
requester.route("toA")
.metadata("My metadata", TEXT_PLAIN).data("bodyA")
@@ -178,7 +176,7 @@ public class DefaultRSocketRequesterTests {
assertThat(iterator.hasNext()).isTrue();
CompositeMetadata.Entry entry = iterator.next();
assertThat(entry.getMimeType()).isEqualTo(ROUTING.toString());
assertThat(entry.getMimeType()).isEqualTo(MetadataExtractor.ROUTING.toString());
assertThat(entry.getContent().toString(StandardCharsets.UTF_8)).isEqualTo("toA");
assertThat(iterator.hasNext()).isTrue();
@@ -206,7 +204,7 @@ public class DefaultRSocketRequesterTests {
@Test
public void metadataMimeTypeMismatch() {
RSocketRequester requester = RSocketRequester.wrap(this.rsocket, TEXT_PLAIN, TEXT_PLAIN, this.strategies);
assertThatThrownBy(() -> requester.metadata("toA", ROUTING).data("bodyA").send().block())
assertThatThrownBy(() -> requester.metadata("toA", MetadataExtractor.ROUTING).data("bodyA").send().block())
.hasMessageStartingWith("Connection configured for metadata mime type");
}
@@ -219,8 +217,8 @@ public class DefaultRSocketRequesterTests {
@Test
public void supportedMetadataMimeTypes() {
RSocketRequester.wrap(this.rsocket, TEXT_PLAIN, COMPOSITE_METADATA, this.strategies);
RSocketRequester.wrap(this.rsocket, TEXT_PLAIN, ROUTING, this.strategies);
RSocketRequester.wrap(this.rsocket, TEXT_PLAIN, MetadataExtractor.COMPOSITE_METADATA, this.strategies);
RSocketRequester.wrap(this.rsocket, TEXT_PLAIN, MetadataExtractor.ROUTING, this.strategies);
}
@Test