DefaultMetadataExtractor refactoring

This commit is contained in:
Rossen Stoyanchev
2019-07-29 10:15:46 +01:00
parent 2aa3363ba2
commit dc0c730ee8
5 changed files with 68 additions and 156 deletions

View File

@@ -37,7 +37,6 @@ import org.springframework.util.MimeType;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
import static org.springframework.messaging.rsocket.MetadataExtractor.COMPOSITE_METADATA;
import static org.springframework.messaging.rsocket.MetadataExtractor.ROUTE_KEY;
import static org.springframework.messaging.rsocket.MetadataExtractor.ROUTING;
@@ -71,8 +70,7 @@ public class DefaultMetadataExtractorTests {
this.captor = ArgumentCaptor.forClass(Payload.class);
BDDMockito.when(this.rsocket.fireAndForget(captor.capture())).thenReturn(Mono.empty());
this.extractor = new DefaultMetadataExtractor();
this.extractor.setDecoders(Collections.singletonList(StringDecoder.allMimeTypes()));
this.extractor = new DefaultMetadataExtractor(StringDecoder.allMimeTypes());
}
@After
@@ -165,56 +163,14 @@ public class DefaultMetadataExtractorTests {
}
@Test
public void addMetadataToExtractBeforeDecoders() {
DefaultMetadataExtractor extractor = new DefaultMetadataExtractor();
extractor.metadataToExtract(TEXT_PLAIN, String.class, "key");
extractor.setDecoders(Collections.singletonList(StringDecoder.allMimeTypes()));
requester(TEXT_PLAIN).metadata("meta entry", null).data("data").send().block();
Payload payload = this.captor.getValue();
Map<String, Object> result = extractor.extract(payload, TEXT_PLAIN);
payload.release();
assertThat(result).hasSize(1).containsEntry("key", "meta entry");
}
@Test
public void noDecoderExceptionWhenSettingDecoders() {
DefaultMetadataExtractor extractor = new DefaultMetadataExtractor();
extractor.metadataToExtract(TEXT_PLAIN, String.class, "key");
assertThatIllegalArgumentException()
.isThrownBy(() -> extractor.setDecoders(Collections.singletonList(new ByteArrayDecoder())))
.withMessage("No decoder for MetadataProcessor mimeType=text/plain, targetType=java.lang.String");
}
@Test
public void noDecoderExceptionWhenRegisteringMetadataToExtract() {
DefaultMetadataExtractor extractor = new DefaultMetadataExtractor();
extractor.setDecoders(Collections.singletonList(new ByteArrayDecoder()));
public void noDecoder() {
DefaultMetadataExtractor extractor =
new DefaultMetadataExtractor(Collections.singletonList(new ByteArrayDecoder())
);
assertThatIllegalArgumentException()
.isThrownBy(() -> extractor.metadataToExtract(TEXT_PLAIN, String.class, "key"))
.withMessage("No decoder for text/plain");
}
@Test
public void decodersNotSet() {
DefaultMetadataExtractor extractor = new DefaultMetadataExtractor();
extractor.metadataToExtract(TEXT_PLAIN, String.class, "key");
assertThatIllegalStateException()
.isThrownBy(() -> {
requester(TEXT_PLAIN).metadata("meta entry", null).data("data").send().block();
Payload payload = this.captor.getValue();
try {
extractor.extract(payload, TEXT_PLAIN);
}
finally {
payload.release();
}
})
.withMessage("No decoder for MetadataProcessor mimeType=text/plain, targetType=java.lang.String");
.withMessage("No decoder for text/plain and java.lang.String");
}

View File

@@ -17,7 +17,6 @@
package org.springframework.messaging.rsocket;
import java.time.Duration;
import java.util.Collections;
import io.rsocket.RSocketFactory;
import io.rsocket.SocketAcceptor;
@@ -267,8 +266,7 @@ public class RSocketServerToClientIntegrationTests {
@Bean
public RSocketStrategies rsocketStrategies() {
DefaultMetadataExtractor extractor = new DefaultMetadataExtractor();
extractor.setDecoders(Collections.singletonList(StringDecoder.allMimeTypes()));
DefaultMetadataExtractor extractor = new DefaultMetadataExtractor(StringDecoder.allMimeTypes());
extractor.metadataToExtract(MimeTypeUtils.TEXT_PLAIN, String.class, MetadataExtractor.ROUTE_KEY);
return RSocketStrategies.builder().metadataExtractor(extractor).build();
}

View File

@@ -129,8 +129,7 @@ public class RSocketMessageHandlerTests {
@Test
public void metadataExtractorWithExplicitlySetDecoders() {
DefaultMetadataExtractor extractor = new DefaultMetadataExtractor();
extractor.setDecoders(Collections.singletonList(StringDecoder.allMimeTypes()));
DefaultMetadataExtractor extractor = new DefaultMetadataExtractor(StringDecoder.allMimeTypes());
RSocketMessageHandler handler = new RSocketMessageHandler();
handler.setDecoders(Arrays.asList(new ByteArrayDecoder(), new ByteBufferDecoder()));