X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-akka-raft%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fraft%2Fbehaviors%2FSnapshotTrackerTest.java;h=6816c9505ede73e9959a38254d95489920eff5a8;hp=4492dc2e7ba3012e950af4ae3fff984aea4fb26d;hb=d3e310b940b60f6590f0e94a576aece95a055942;hpb=22b54aa128163a52eb89743ce8d0d75615f6a04e diff --git a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/behaviors/SnapshotTrackerTest.java b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/behaviors/SnapshotTrackerTest.java index 4492dc2e7b..6816c9505e 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/behaviors/SnapshotTrackerTest.java +++ b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/behaviors/SnapshotTrackerTest.java @@ -14,6 +14,7 @@ import com.google.protobuf.ByteString; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; +import java.util.Arrays; import java.util.HashMap; import java.util.Map; import org.junit.Assert; @@ -28,9 +29,9 @@ public class SnapshotTrackerTest { Map data; ByteString byteString; - ByteString chunk1; - ByteString chunk2; - ByteString chunk3; + byte[] chunk1; + byte[] chunk2; + byte[] chunk3; @Before public void setup(){ @@ -47,14 +48,14 @@ public class SnapshotTrackerTest { @Test public void testAddChunk() throws SnapshotTracker.InvalidChunkException { - SnapshotTracker tracker1 = new SnapshotTracker(logger, 5); + SnapshotTracker tracker1 = new SnapshotTracker(logger, 5, "leader"); tracker1.addChunk(1, chunk1, Optional.absent()); tracker1.addChunk(2, chunk2, Optional.absent()); tracker1.addChunk(3, chunk3, Optional.absent()); // Verify that an InvalidChunkException is thrown when we try to add a chunk to a sealed tracker - SnapshotTracker tracker2 = new SnapshotTracker(logger, 2); + SnapshotTracker tracker2 = new SnapshotTracker(logger, 2, "leader"); tracker2.addChunk(1, chunk1, Optional.absent()); tracker2.addChunk(2, chunk2, Optional.absent()); @@ -67,22 +68,22 @@ public class SnapshotTrackerTest { } // The first chunk's index must at least be FIRST_CHUNK_INDEX - SnapshotTracker tracker3 = new SnapshotTracker(logger, 2); + SnapshotTracker tracker3 = new SnapshotTracker(logger, 2, "leader"); try { - tracker3.addChunk(AbstractLeader.FIRST_CHUNK_INDEX - 1, chunk1, Optional.absent()); + tracker3.addChunk(LeaderInstallSnapshotState.FIRST_CHUNK_INDEX - 1, chunk1, Optional.absent()); Assert.fail(); } catch(SnapshotTracker.InvalidChunkException e){ } // Out of sequence chunk indexes won't work - SnapshotTracker tracker4 = new SnapshotTracker(logger, 2); + SnapshotTracker tracker4 = new SnapshotTracker(logger, 2, "leader"); - tracker4.addChunk(AbstractLeader.FIRST_CHUNK_INDEX, chunk1, Optional.absent()); + tracker4.addChunk(LeaderInstallSnapshotState.FIRST_CHUNK_INDEX, chunk1, Optional.absent()); try { - tracker4.addChunk(AbstractLeader.FIRST_CHUNK_INDEX+2, chunk2, Optional.absent()); + tracker4.addChunk(LeaderInstallSnapshotState.FIRST_CHUNK_INDEX+2, chunk2, Optional.absent()); Assert.fail(); } catch(SnapshotTracker.InvalidChunkException e){ @@ -90,21 +91,21 @@ public class SnapshotTrackerTest { // No exceptions will be thrown when invalid chunk is added with the right sequence // If the lastChunkHashCode is missing - SnapshotTracker tracker5 = new SnapshotTracker(logger, 2); + SnapshotTracker tracker5 = new SnapshotTracker(logger, 2, "leader"); - tracker5.addChunk(AbstractLeader.FIRST_CHUNK_INDEX, chunk1, Optional.absent()); + tracker5.addChunk(LeaderInstallSnapshotState.FIRST_CHUNK_INDEX, chunk1, Optional.absent()); // Look I can add the same chunk again - tracker5.addChunk(AbstractLeader.FIRST_CHUNK_INDEX + 1, chunk1, Optional.absent()); + tracker5.addChunk(LeaderInstallSnapshotState.FIRST_CHUNK_INDEX + 1, chunk1, Optional.absent()); // An exception will be thrown when an invalid chunk is addedd with the right sequence // when the lastChunkHashCode is present - SnapshotTracker tracker6 = new SnapshotTracker(logger, 2); + SnapshotTracker tracker6 = new SnapshotTracker(logger, 2, "leader"); - tracker6.addChunk(AbstractLeader.FIRST_CHUNK_INDEX, chunk1, Optional.of(-1)); + tracker6.addChunk(LeaderInstallSnapshotState.FIRST_CHUNK_INDEX, chunk1, Optional.of(-1)); try { // Here we add a second chunk and tell addChunk that the previous chunk had a hash code 777 - tracker6.addChunk(AbstractLeader.FIRST_CHUNK_INDEX + 1, chunk2, Optional.of(777)); + tracker6.addChunk(LeaderInstallSnapshotState.FIRST_CHUNK_INDEX + 1, chunk2, Optional.of(777)); Assert.fail(); }catch(SnapshotTracker.InvalidChunkException e){ @@ -116,7 +117,7 @@ public class SnapshotTrackerTest { public void testGetSnapShot() throws SnapshotTracker.InvalidChunkException { // Trying to get a snapshot before all chunks have been received will throw an exception - SnapshotTracker tracker1 = new SnapshotTracker(logger, 5); + SnapshotTracker tracker1 = new SnapshotTracker(logger, 5, "leader"); tracker1.addChunk(1, chunk1, Optional.absent()); try { @@ -126,11 +127,11 @@ public class SnapshotTrackerTest { } - SnapshotTracker tracker2 = new SnapshotTracker(logger, 3); + SnapshotTracker tracker2 = new SnapshotTracker(logger, 3, "leader"); - tracker2.addChunk(1, chunk1, Optional.absent()); - tracker2.addChunk(2, chunk2, Optional.absent()); - tracker2.addChunk(3, chunk3, Optional.absent()); + tracker2.addChunk(1, chunk1, Optional.of(LeaderInstallSnapshotState.INITIAL_LAST_CHUNK_HASH_CODE)); + tracker2.addChunk(2, chunk2, Optional.of(Arrays.hashCode(chunk1))); + tracker2.addChunk(3, chunk3, Optional.of(Arrays.hashCode(chunk2))); byte[] snapshot = tracker2.getSnapshot(); @@ -139,30 +140,33 @@ public class SnapshotTrackerTest { @Test public void testGetCollectedChunks() throws SnapshotTracker.InvalidChunkException { - SnapshotTracker tracker1 = new SnapshotTracker(logger, 5); + SnapshotTracker tracker1 = new SnapshotTracker(logger, 5, "leader"); - ByteString chunks = chunk1.concat(chunk2); + ByteString chunks = ByteString.copyFrom(chunk1).concat(ByteString.copyFrom(chunk2)); - tracker1.addChunk(1, chunk1, Optional.absent()); - tracker1.addChunk(2, chunk2, Optional.absent()); + tracker1.addChunk(1, chunk1, Optional.of(LeaderInstallSnapshotState.INITIAL_LAST_CHUNK_HASH_CODE)); + tracker1.addChunk(2, chunk2, Optional.of(Arrays.hashCode(chunk1))); assertEquals(chunks, tracker1.getCollectedChunks()); } - public ByteString getNextChunk (ByteString bs, int offset, int size){ + public byte[] getNextChunk (ByteString bs, int offset, int size){ int snapshotLength = bs.size(); int start = offset; if (size > snapshotLength) { size = snapshotLength; } else { - if ((start + size) > snapshotLength) { + if (start + size > snapshotLength) { size = snapshotLength - start; } } - return bs.substring(start, start + size); + + byte[] nextChunk = new byte[size]; + bs.copyTo(nextChunk, start, 0, size); + return nextChunk; } - private ByteString toByteString(Map state) { + private static ByteString toByteString(Map state) { ByteArrayOutputStream b = null; ObjectOutputStream o = null; try { @@ -188,4 +192,4 @@ public class SnapshotTrackerTest { } -} \ No newline at end of file +}