diff --git a/core/src/test/java/io/grpc/internal/TransportFrameUtilTest.java b/core/src/test/java/io/grpc/internal/TransportFrameUtilTest.java index 8b4bc170d52..5bb64aa30cd 100644 --- a/core/src/test/java/io/grpc/internal/TransportFrameUtilTest.java +++ b/core/src/test/java/io/grpc/internal/TransportFrameUtilTest.java @@ -91,6 +91,15 @@ public void binaryHeaderWithoutSuffix() { Metadata.Key.of("plainstring", UTF8_STRING_MARSHALLER); } + @Test + public void binaryHeaderEncodedWithoutPadding() { + Metadata headers = new Metadata(); + headers.put(BINARY_BYTES, new byte[] {1, 2, 3, 4, 5}); + byte[][] http2Headers = TransportFrameUtil.toHttp2Headers(headers); + assertContains( + http2Headers, BINARY_BYTES.name().getBytes(US_ASCII), "AQIDBAU".getBytes(US_ASCII)); + } + @Test public void testToAndFromHttp2Headers() { Metadata headers = new Metadata(); @@ -130,6 +139,24 @@ public void dupBinHeadersWithComma() { values)); } + @Test + public void binaryHeaderDecodesPaddedBase64() { + byte[][] http2Headers = new byte[][] { + BINARY_BYTES.name().getBytes(US_ASCII), "AQIDBAU=".getBytes(US_ASCII)}; + byte[][] rawSerialized = TransportFrameUtil.toRawSerializedHeaders(http2Headers); + Metadata recoveredHeaders = InternalMetadata.newMetadata(rawSerialized); + assertArrayEquals(new byte[] {1, 2, 3, 4, 5}, recoveredHeaders.get(BINARY_BYTES)); + } + + @Test + public void binaryHeaderDecodesUnpaddedBase64() { + byte[][] http2Headers = new byte[][] { + BINARY_BYTES.name().getBytes(US_ASCII), "AQIDBAU".getBytes(US_ASCII)}; + byte[][] rawSerialized = TransportFrameUtil.toRawSerializedHeaders(http2Headers); + Metadata recoveredHeaders = InternalMetadata.newMetadata(rawSerialized); + assertArrayEquals(new byte[] {1, 2, 3, 4, 5}, recoveredHeaders.get(BINARY_BYTES)); + } + private static void assertContains(byte[][] headers, byte[] key, byte[] value) { String keyString = new String(key, US_ASCII); for (int i = 0; i < headers.length; i += 2) {