X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2Factors%2FShardSnapshotActorTest.java;h=b69c6c86627b1218599fadf2bc1b50ea8107f3fa;hb=e84f63ee098fff5b02cbce1281ca0d1208f966fa;hp=65a8ac9ce8605c1c19493fab000c865696ec8725;hpb=5464f50be733df1bbbe31cf05665d542d3b7c5e7;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/actors/ShardSnapshotActorTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/actors/ShardSnapshotActorTest.java index 65a8ac9ce8..b69c6c8662 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/actors/ShardSnapshotActorTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/actors/ShardSnapshotActorTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * Copyright (c) 2016, 2017 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, @@ -12,56 +12,65 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import akka.actor.ActorRef; -import akka.testkit.JavaTestKit; +import akka.testkit.javadsl.TestKit; +import com.google.common.io.ByteSource; +import java.io.ByteArrayOutputStream; +import java.io.ObjectInputStream; +import java.time.Duration; import java.util.Optional; import org.junit.Test; import org.opendaylight.controller.cluster.datastore.AbstractActorTest; import org.opendaylight.controller.cluster.datastore.persisted.MetadataShardDataTreeSnapshot; -import org.opendaylight.controller.cluster.datastore.persisted.PreBoronShardDataTreeSnapshot; import org.opendaylight.controller.cluster.datastore.persisted.ShardDataTreeSnapshot; +import org.opendaylight.controller.cluster.datastore.persisted.ShardSnapshotState; +import org.opendaylight.controller.cluster.io.InputOutputStreamFactory; import org.opendaylight.controller.cluster.raft.base.messages.CaptureSnapshotReply; import org.opendaylight.controller.md.cluster.datastore.model.TestModel; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; public class ShardSnapshotActorTest extends AbstractActorTest { - private static final NormalizedNode DATA = ImmutableNodes.containerNode(TestModel.TEST_QNAME); + private static final InputOutputStreamFactory STREAM_FACTORY = InputOutputStreamFactory.simple(); - private static void testSerializeSnapshot(final String testName, final ShardDataTreeSnapshot snapshot) - throws Exception { - new JavaTestKit(getSystem()) { - { + private static final NormalizedNode DATA = ImmutableNodes.containerNode(TestModel.TEST_QNAME); - final ActorRef snapshotActor = getSystem().actorOf(ShardSnapshotActor.props(), testName); - watch(snapshotActor); + private static void testSerializeSnapshot(final String testName, final ShardDataTreeSnapshot snapshot, + final boolean withInstallSnapshot) throws Exception { + final TestKit kit = new TestKit(getSystem()); + final ActorRef snapshotActor = getSystem().actorOf(ShardSnapshotActor.props(STREAM_FACTORY), testName); + kit.watch(snapshotActor); - final NormalizedNode expectedRoot = snapshot.getRootNode().get(); + final NormalizedNode expectedRoot = snapshot.getRootNode().get(); - ShardSnapshotActor.requestSnapshot(snapshotActor, snapshot, getRef()); + ByteArrayOutputStream installSnapshotStream = withInstallSnapshot ? new ByteArrayOutputStream() : null; + ShardSnapshotActor.requestSnapshot(snapshotActor, snapshot, + Optional.ofNullable(installSnapshotStream), kit.getRef()); - final CaptureSnapshotReply reply = expectMsgClass(duration("3 seconds"), CaptureSnapshotReply.class); - assertNotNull("getSnapshot is null", reply.getSnapshot()); + final CaptureSnapshotReply reply = kit.expectMsgClass(Duration.ofSeconds(3), CaptureSnapshotReply.class); + assertNotNull("getSnapshotState is null", reply.getSnapshotState()); + assertEquals("SnapshotState type", ShardSnapshotState.class, reply.getSnapshotState().getClass()); + assertEquals("Snapshot", snapshot, ((ShardSnapshotState)reply.getSnapshotState()).getSnapshot()); - final ShardDataTreeSnapshot actual = ShardDataTreeSnapshot.deserialize(reply.getSnapshot()); - assertNotNull(actual); - assertEquals(snapshot.getClass(), actual.getClass()); + if (installSnapshotStream != null) { + final ShardDataTreeSnapshot deserialized; + try (ObjectInputStream in = new ObjectInputStream(STREAM_FACTORY.createInputStream( + ByteSource.wrap(installSnapshotStream.toByteArray())))) { + deserialized = ShardDataTreeSnapshot.deserialize(in).getSnapshot(); + } - final Optional> maybeNode = actual.getRootNode(); - assertTrue(maybeNode.isPresent()); + assertEquals("Deserialized snapshot type", snapshot.getClass(), deserialized.getClass()); - assertEquals("Root node", expectedRoot, maybeNode.get()); - } - }; + final Optional maybeNode = deserialized.getRootNode(); + assertTrue("isPresent", maybeNode.isPresent()); + assertEquals("Root node", expectedRoot, maybeNode.get()); + } } @Test public void testSerializeBoronSnapshot() throws Exception { - testSerializeSnapshot("testSerializeBoronSnapshot", new MetadataShardDataTreeSnapshot(DATA)); - } - - @Deprecated - @Test - public void testSerializeLegacySnapshot() throws Exception { - testSerializeSnapshot("testSerializeLegacySnapshot", new PreBoronShardDataTreeSnapshot(DATA)); + testSerializeSnapshot("testSerializeBoronSnapshotWithInstallSnapshot", + new MetadataShardDataTreeSnapshot(DATA), true); + testSerializeSnapshot("testSerializeBoronSnapshotWithoutInstallSnapshot", + new MetadataShardDataTreeSnapshot(DATA), false); } }