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());


Reply via email to