|
16 | 16 | package io.servicetalk.data.protobuf; |
17 | 17 |
|
18 | 18 | import io.servicetalk.buffer.api.Buffer; |
| 19 | +import io.servicetalk.buffer.api.BufferAllocator; |
19 | 20 | import io.servicetalk.data.protobuf.test.TestProtos.DummyMessage; |
| 21 | +import io.servicetalk.data.protobuf.test.TestProtos.MapMessage; |
20 | 22 | import io.servicetalk.serializer.api.SerializerDeserializer; |
21 | 23 | import io.servicetalk.serializer.api.StreamingSerializerDeserializer; |
22 | 24 |
|
| 25 | +import com.google.protobuf.InvalidProtocolBufferException; |
23 | 26 | import com.google.protobuf.Parser; |
24 | 27 | import org.junit.jupiter.api.Test; |
25 | 28 | import org.junit.jupiter.params.ParameterizedTest; |
@@ -69,6 +72,20 @@ void serializeDeserializeClass() { |
69 | 72 | serializeDeserialize(testMessage, PROTOBUF.serializerDeserializer(DummyMessage.class)); |
70 | 73 | } |
71 | 74 |
|
| 75 | + @Test |
| 76 | + void serializeEmptyMap() throws InvalidProtocolBufferException { |
| 77 | + // These bytes were serialized from scala protobuf and don't include the trailing empty map value. |
| 78 | + final byte[] emptyMessageMapEmptyValueBytes = {0xa, 0x5, 0xa, 0x3, 0x66, 0x6f, 0x6f}; |
| 79 | + final BufferAllocator allocator = DEFAULT_ALLOCATOR; |
| 80 | + final Buffer buffer = allocator.wrap(emptyMessageMapEmptyValueBytes); |
| 81 | + final MapMessage mapMessage = MapMessage.parseFrom(emptyMessageMapEmptyValueBytes); |
| 82 | + SerializerDeserializer<MapMessage> serializer = PROTOBUF.serializerDeserializer(MapMessage.class); |
| 83 | + assertThat(serializer.deserialize(buffer, allocator), equalTo(mapMessage)); |
| 84 | + // Serializing in java currently writes "0x12, 0x0" for "map value tag, empty string" so we can't compare number |
| 85 | + // of bytes directly, but we can ensure it deserializes back to an equal object. |
| 86 | + assertThat(serializer.deserialize(serializer.serialize(mapMessage, allocator), allocator), equalTo(mapMessage)); |
| 87 | + } |
| 88 | + |
72 | 89 | private static void serializeDeserialize(final DummyMessage testMessage, |
73 | 90 | final SerializerDeserializer<DummyMessage> serializer) { |
74 | 91 | final byte[] testMessageBytes = testMessage.toByteArray(); |
|
0 commit comments