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=c1bc215b6baa68ae4bdc9fbb95742f37d509f0e8;hp=f103abcf8409d7d69abd51baee8bbb29198e943c;hb=95d7b8820236d16cb7e37c4a95fcae6f6d55581e;hpb=c31509c7a6630e54a9f9749a643fed5e1a1ad380 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 f103abcf84..c1bc215b6b 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 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2014, 2015 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + package org.opendaylight.controller.cluster.raft.behaviors; import static org.junit.Assert.assertEquals; @@ -6,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; @@ -20,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(){ @@ -39,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()); @@ -59,7 +68,7 @@ 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()); @@ -69,7 +78,7 @@ public class SnapshotTrackerTest { } // 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()); @@ -82,7 +91,7 @@ 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()); // Look I can add the same chunk again @@ -90,7 +99,7 @@ public class SnapshotTrackerTest { // 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)); @@ -108,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 { @@ -118,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(AbstractLeader.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(); @@ -131,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(AbstractLeader.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 { @@ -180,4 +192,4 @@ public class SnapshotTrackerTest { } -} \ No newline at end of file +}