Author: adulceanu
Date: Thu Sep 14 07:47:00 2017
New Revision: 1808320
URL: http://svn.apache.org/viewvc?rev=1808320&view=rev
Log:
OAK-6661 - ResponseDecoder should check that the length of the received blob
matches the length of the sent blob
Updated unit tests to account for full blob length
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/StandbyTestUtils.java
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/codec/GetBlobResponseEncoderTest.java
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/codec/ResponseDecoderTest.java
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/StandbyTestUtils.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/StandbyTestUtils.java?rev=1808320&r1=1808319&r2=1808320&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/StandbyTestUtils.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/StandbyTestUtils.java
Thu Sep 14 07:47:00 2017
@@ -58,8 +58,8 @@ public class StandbyTestUtils {
return
Hashing.murmur3_32().newHasher().putBytes(data).hash().padToLong();
}
- public static long hash(byte mask, byte[] data) {
- return
Hashing.murmur3_32().newHasher().putByte(mask).putBytes(data).hash().padToLong();
+ public static long hash(byte mask, long blobLength, byte[] data) {
+ return
Hashing.murmur3_32().newHasher().putByte(mask).putLong(blobLength).putBytes(data).hash().padToLong();
}
public static byte createMask(int currentChunk, int totalChunks) {
@@ -75,16 +75,17 @@ public class StandbyTestUtils {
return mask;
}
- public static ByteBuf createBlobChunkBuffer(byte header,String blobId,
byte[] data, byte mask) {
+ public static ByteBuf createBlobChunkBuffer(byte header, long blobLength,
String blobId, byte[] data, byte mask) {
byte[] blobIdBytes = blobId.getBytes(Charsets.UTF_8);
ByteBuf buf = Unpooled.buffer();
- buf.writeInt(1 + 1 + 4 + blobIdBytes.length + 8 + data.length);
+ buf.writeInt(1 + 1 + 8 + 4 + blobIdBytes.length + 8 + data.length);
buf.writeByte(header);
buf.writeByte(mask);
+ buf.writeLong(blobLength);
buf.writeInt(blobIdBytes.length);
buf.writeBytes(blobIdBytes);
- buf.writeLong(hash(mask, data));
+ buf.writeLong(hash(mask, blobLength, data));
buf.writeBytes(data);
return buf;
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/codec/GetBlobResponseEncoderTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/codec/GetBlobResponseEncoderTest.java?rev=1808320&r1=1808319&r2=1808320&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/codec/GetBlobResponseEncoderTest.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/codec/GetBlobResponseEncoderTest.java
Thu Sep 14 07:47:00 2017
@@ -40,7 +40,7 @@ public class GetBlobResponseEncoderTest
EmbeddedChannel channel = new EmbeddedChannel(new
ChunkedWriteHandler(), new GetBlobResponseEncoder(3));
channel.writeOutbound(new GetBlobResponse("clientId", blobId,new
ByteArrayInputStream(blobData), blobData.length));
ByteBuf buffer = (ByteBuf) channel.readOutbound();
- ByteBuf expected = createBlobChunkBuffer(Messages.HEADER_BLOB, blobId,
blobData, mask);
+ ByteBuf expected = createBlobChunkBuffer(Messages.HEADER_BLOB, 3L,
blobId, blobData, mask);
assertEquals(expected, buffer);
}
@@ -58,13 +58,13 @@ public class GetBlobResponseEncoderTest
ByteBuf firstBuffer = (ByteBuf) channel.readOutbound();
byte firstMask = createMask(1, 2);
- ByteBuf firstExpected = createBlobChunkBuffer(Messages.HEADER_BLOB,
blobId, firstChunkData, firstMask);
+ ByteBuf firstExpected = createBlobChunkBuffer(Messages.HEADER_BLOB,
4L, blobId, firstChunkData, firstMask);
assertEquals(firstExpected, firstBuffer);
ByteBuf secondBuffer = (ByteBuf) channel.readOutbound();
byte secondMask = createMask(2, 2);
- ByteBuf secondExpected = createBlobChunkBuffer(Messages.HEADER_BLOB,
blobId, secondChunkbData, secondMask);
+ ByteBuf secondExpected = createBlobChunkBuffer(Messages.HEADER_BLOB,
4L, blobId, secondChunkbData, secondMask);
assertEquals(secondExpected, secondBuffer);
}
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/codec/ResponseDecoderTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/codec/ResponseDecoderTest.java?rev=1808320&r1=1808319&r2=1808320&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/codec/ResponseDecoderTest.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/codec/ResponseDecoderTest.java
Thu Sep 14 07:47:00 2017
@@ -58,7 +58,7 @@ public class ResponseDecoderTest {
String blobId = "blobId";
byte mask = createMask(1, 1);
- ByteBuf buf = createBlobChunkBuffer(Messages.HEADER_BLOB, blobId,
blobData, mask);
+ ByteBuf buf = createBlobChunkBuffer(Messages.HEADER_BLOB, 3L, blobId,
blobData, mask);
EmbeddedChannel channel = new EmbeddedChannel(new ResponseDecoder());
channel.writeInbound(buf);
@@ -80,10 +80,10 @@ public class ResponseDecoderTest {
String blobId = "blobId";
byte firstMask = createMask(1, 2);
- ByteBuf firstBuf = createBlobChunkBuffer(Messages.HEADER_BLOB, blobId,
firstChunkData, firstMask);
+ ByteBuf firstBuf = createBlobChunkBuffer(Messages.HEADER_BLOB, 4L,
blobId, firstChunkData, firstMask);
byte secondMask = createMask(2, 2);
- ByteBuf secondBuf = createBlobChunkBuffer(Messages.HEADER_BLOB,
blobId, secondChunkbData, secondMask);
+ ByteBuf secondBuf = createBlobChunkBuffer(Messages.HEADER_BLOB, 4L,
blobId, secondChunkbData, secondMask);
EmbeddedChannel channel = new EmbeddedChannel(new ResponseDecoder());
channel.writeInbound(firstBuf);
@@ -105,12 +105,13 @@ public class ResponseDecoderTest {
byte mask = createMask(1, 1);
ByteBuf buf = Unpooled.buffer();
- buf.writeInt(1 + 1 + 4 + blobIdBytes.length + 8 + blobData.length);
+ buf.writeInt(1 + 1 + 8 + 4 + blobIdBytes.length + 8 + blobData.length);
buf.writeByte(Messages.HEADER_BLOB);
buf.writeByte(mask);
+ buf.writeLong(3L);
buf.writeInt(blobIdBytes.length);
buf.writeBytes(blobIdBytes);
- buf.writeLong(hash(mask, blobData) + 1);
+ buf.writeLong(hash(mask, 3L, blobData) + 1);
buf.writeBytes(blobData);
EmbeddedChannel channel = new EmbeddedChannel(new ResponseDecoder());