diff --git a/src/main/java/com/ibm/watson/modelmesh/payload/RemotePayloadProcessor.java b/src/main/java/com/ibm/watson/modelmesh/payload/RemotePayloadProcessor.java index 401fba2d..2cf38bca 100644 --- a/src/main/java/com/ibm/watson/modelmesh/payload/RemotePayloadProcessor.java +++ b/src/main/java/com/ibm/watson/modelmesh/payload/RemotePayloadProcessor.java @@ -82,7 +82,8 @@ private static PayloadContent prepareContentBody(Payload payload) { return new PayloadContent(id, modelId, data, kind, status, metadataMap); } - private static String encodeBinaryToString(ByteBuf byteBuf) { + static String encodeBinaryToString(ByteBuf byteBuf) { + byteBuf = byteBuf.readerIndex(0); ByteBuf encodedBinary = Base64.encode(byteBuf, byteBuf.readerIndex(), byteBuf.readableBytes(), false); //TODO custom jackson serialization for this field to avoid round-tripping to string return encodedBinary.toString(StandardCharsets.US_ASCII); diff --git a/src/test/java/com/ibm/watson/modelmesh/payload/RemotePayloadProcessorTest.java b/src/test/java/com/ibm/watson/modelmesh/payload/RemotePayloadProcessorTest.java index ec08ea0a..9787a52b 100644 --- a/src/test/java/com/ibm/watson/modelmesh/payload/RemotePayloadProcessorTest.java +++ b/src/test/java/com/ibm/watson/modelmesh/payload/RemotePayloadProcessorTest.java @@ -42,4 +42,20 @@ void testDestinationUnreachable() { Payload payload = new Payload(id, modelId, method, metadata, data, kind); assertFalse(remotePayloadProcessor.process(payload)); } + + @Test + void testByteBufReaderIndexReset() { + ByteBuf byteBuf = Unpooled.wrappedBuffer("{[0, 0.1, 2.3, 4, 5.6]}".getBytes()); + // mock the payload getting read too early + byteBuf.readerIndex(byteBuf.capacity()); // force set reader index to the end of the ByteBuf + String encodedString = RemotePayloadProcessor.encodeBinaryToString(byteBuf); + assertFalse(encodedString.isEmpty()); + } + + @Test + void testByteBufReaderIndexUntouched() { + ByteBuf byteBuf = Unpooled.wrappedBuffer("{[0, 0.1, 2.3, 4, 5.6]}".getBytes()); + String encodedString = RemotePayloadProcessor.encodeBinaryToString(byteBuf); + assertFalse(encodedString.isEmpty()); + } } \ No newline at end of file