Polish contribution and related code

This commit is contained in:
Sam Brannen
2023-01-11 13:50:46 +01:00
parent afb8a0d1b1
commit 0415975dd1
13 changed files with 240 additions and 330 deletions

View File

@@ -16,12 +16,11 @@
package org.springframework.messaging.converter;
import java.util.HashMap;
import java.util.Map;
import com.google.protobuf.ExtensionRegistry;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.skyscreamer.jsonassert.JSONAssert;
import org.springframework.messaging.Message;
import org.springframework.messaging.MessageHeaders;
@@ -35,113 +34,90 @@ import static org.springframework.messaging.MessageHeaders.CONTENT_TYPE;
import static org.springframework.util.MimeTypeUtils.APPLICATION_JSON;
/**
* Test suite for {@link ProtobufMessageConverter}.
* Tests for {@link ProtobufMessageConverter}.
*
* @author Parviz Rozikov
* @author Sam Brannen
*/
public class ProtobufMessageConverterTests {
class ProtobufMessageConverterTests {
private ProtobufMessageConverter converter;
private final ProtobufMessageConverter converter = new ProtobufMessageConverter();
private ExtensionRegistry extensionRegistry;
private Msg testMsg = Msg.newBuilder().setFoo("Foo").setBlah(SecondMsg.newBuilder().setBlah(123).build()).build();
private Msg testMsg;
private Message<byte[]> message = MessageBuilder.withPayload(this.testMsg.toByteArray())
.setHeader(CONTENT_TYPE, ProtobufMessageConverter.PROTOBUF).build();
private Message<byte[]> message;
private Message<byte[]> messageWithoutContentType = MessageBuilder.withPayload(this.testMsg.toByteArray()).build();
private Message<byte[]> messageWithoutContentType;
private Message<String> messageJson;
@BeforeEach
public void setup() {
this.extensionRegistry = mock(ExtensionRegistry.class);
this.converter = new ProtobufMessageConverter();
this.testMsg = Msg.newBuilder().setFoo("Foo").setBlah(SecondMsg.newBuilder().setBlah(123).build()).build();
this.message = MessageBuilder.withPayload(this.testMsg.toByteArray())
.setHeader(CONTENT_TYPE, ProtobufMessageConverter.PROTOBUF).build();
this.messageWithoutContentType = MessageBuilder.withPayload(this.testMsg.toByteArray()).build();
this.messageJson = MessageBuilder.withPayload("""
{
"foo": "Foo",
"blah": {
"blah": 123
}
}""".replace("\t", " "))
.setHeader(CONTENT_TYPE, APPLICATION_JSON)
.build();
}
private final Message<String> messageJson = MessageBuilder.withPayload("""
{
"foo": "Foo",
"blah": {
"blah": 123
}
}
""")
.setHeader(CONTENT_TYPE, APPLICATION_JSON)
.build();
@Test
public void extensionRegistryNull() {
void extensionRegistryNull() {
ProtobufMessageConverter converter = new ProtobufMessageConverter(null);
assertThat(converter.extensionRegistry).isNotNull();
}
@Test
void defaultContentType() {
assertThat(converter.getDefaultContentType(testMsg)).isEqualTo(ProtobufMessageConverter.PROTOBUF);
}
@Test
public void canConvertFrom() {
void canConvertFrom() {
assertThat(converter.canConvertFrom(message, Msg.class)).isTrue();
assertThat(converter.canConvertFrom(messageWithoutContentType, Msg.class)).isTrue();
assertThat(converter.canConvertFrom(messageJson, Msg.class)).isTrue();
}
@Test
public void canConvertTo() {
void canConvertTo() {
assertThat(converter.canConvertTo(testMsg, message.getHeaders())).isTrue();
assertThat(converter.canConvertTo(testMsg, messageWithoutContentType.getHeaders())).isTrue();
assertThat(converter.canConvertTo(testMsg, messageJson.getHeaders())).isTrue();
}
@Test
public void convertFrom() {
final Msg msg = (Msg) converter.fromMessage(message, Msg.class);
assertThat(msg).isEqualTo(testMsg);
void convertFrom() {
assertThat(converter.fromMessage(message, Msg.class)).isEqualTo(testMsg);
}
@Test
public void convertTo() {
final Message<?> message = converter.toMessage(this.testMsg, this.message.getHeaders());
void convertFromNoContentType(){
assertThat(converter.fromMessage(messageWithoutContentType, Msg.class)).isEqualTo(testMsg);
}
@Test
void convertTo() {
Message<?> message = converter.toMessage(testMsg, this.message.getHeaders());
assertThat(message).isNotNull();
assertThat(message.getPayload()).isEqualTo(this.message.getPayload());
}
@Test
public void convertFromNoContentType(){
Msg result = (Msg) converter.fromMessage(messageWithoutContentType, Msg.class);
assertThat(result).isEqualTo(testMsg);
}
@Test
public void defaultContentType() {
assertThat(converter.getDefaultContentType(testMsg)).isEqualTo(ProtobufMessageConverter.PROTOBUF);
}
@Test
public void testJsonWithGoogleProtobuf() {
this.converter = new ProtobufMessageConverter(
void jsonWithGoogleProtobuf() throws Exception {
ProtobufMessageConverter converter = new ProtobufMessageConverter(
new ProtobufMessageConverter.ProtobufJavaUtilSupport(null, null),
extensionRegistry);
final Map<String, Object> headers = new HashMap<>();
headers.put(CONTENT_TYPE, APPLICATION_JSON);
mock(ExtensionRegistry.class));
//convertTo
final Message<?> message = this.converter.toMessage(this.testMsg, new MessageHeaders(headers));
Message<?> message = converter.toMessage(testMsg, new MessageHeaders(Map.of(CONTENT_TYPE, APPLICATION_JSON)));
assertThat(message).isNotNull();
assertThat(message.getHeaders().get(CONTENT_TYPE)).isEqualTo(APPLICATION_JSON);
assertThat(((String) message.getPayload()).length() > 0).isTrue();
assertThat(((String) message.getPayload()).isEmpty()).as("Body is empty").isFalse();
assertThat(((String) message.getPayload())).isEqualTo(this.messageJson.getPayload());
JSONAssert.assertEquals(messageJson.getPayload(), message.getPayload().toString(), true);
//convertFrom
final Msg msg = (Msg) converter.fromMessage(message, Msg.class);
assertThat(msg).isEqualTo(this.testMsg);
assertThat(converter.fromMessage(message, Msg.class)).isEqualTo(testMsg);
}
}