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%2FRaftActorContextImplTest.java;h=874a17c432c6dd0ddc6fb641f29d91906d1a7525;hp=26fdf8f25d34434477831f0fdc4489bf2794742a;hb=e1eca73a5ae2ffae8dd78c6fe5281cd2f45d5ef3;hpb=a3a813594e819c9de33fe69b7b35458f5d12b51d diff --git a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/RaftActorContextImplTest.java b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/RaftActorContextImplTest.java index 26fdf8f25d..874a17c432 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/RaftActorContextImplTest.java +++ b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/RaftActorContextImplTest.java @@ -8,19 +8,27 @@ package org.opendaylight.controller.cluster.raft; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.verify; + import akka.actor.Props; import akka.testkit.TestActorRef; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; import org.junit.After; import org.junit.Test; import org.opendaylight.controller.cluster.NonPersistentDataProvider; +import org.opendaylight.controller.cluster.raft.persisted.ServerConfigurationPayload; +import org.opendaylight.controller.cluster.raft.persisted.ServerInfo; import org.opendaylight.controller.cluster.raft.utils.DoNothingActor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -45,24 +53,81 @@ public class RaftActorContextImplTest extends AbstractActorTest { @Test public void testGetPeerAddress() { + Map peerMap = new HashMap<>(); + peerMap.put("peer1", "peerAddress1"); + peerMap.put("peer2", null); DefaultConfigParamsImpl configParams = new DefaultConfigParamsImpl(); RaftActorContextImpl context = new RaftActorContextImpl(actor, actor.underlyingActor().getContext(), "test", new ElectionTermImpl(new NonPersistentDataProvider(), "test", log), -1, -1, - Maps.newHashMap(ImmutableMap.of("peer1", "peerAddress1")), configParams, - new NonPersistentDataProvider(), log); + peerMap, configParams, new NonPersistentDataProvider(), log); assertEquals("getPeerAddress", "peerAddress1", context.getPeerAddress("peer1")); assertEquals("getPeerAddress", null, context.getPeerAddress("peer2")); PeerAddressResolver mockResolver = mock(PeerAddressResolver.class); doReturn("peerAddress2").when(mockResolver).resolve("peer2"); + doReturn("peerAddress3").when(mockResolver).resolve("peer3"); configParams.setPeerAddressResolver(mockResolver); assertEquals("getPeerAddress", "peerAddress2", context.getPeerAddress("peer2")); + assertEquals("getPeerAddress", "peerAddress3", context.getPeerAddress("peer3")); reset(mockResolver); - assertEquals("getPeerAddress", "peerAddress2", context.getPeerAddress("peer2")); assertEquals("getPeerAddress", "peerAddress1", context.getPeerAddress("peer1")); + assertEquals("getPeerAddress", "peerAddress2", context.getPeerAddress("peer2")); verify(mockResolver, never()).resolve(anyString()); } + + @Test + public void testSetPeerAddress() { + DefaultConfigParamsImpl configParams = new DefaultConfigParamsImpl(); + RaftActorContextImpl context = new RaftActorContextImpl(actor, actor.underlyingActor().getContext(), + "test", new ElectionTermImpl(new NonPersistentDataProvider(), "test", log), -1, -1, + Maps.newHashMap(ImmutableMap.of("peer1", "peerAddress1")), configParams, + new NonPersistentDataProvider(), log); + + context.setPeerAddress("peer1", "peerAddress1_1"); + assertEquals("getPeerAddress", "peerAddress1_1", context.getPeerAddress("peer1")); + + context.setPeerAddress("peer2", "peerAddress2"); + assertEquals("getPeerAddress", null, context.getPeerAddress("peer2")); + } + + @Test + public void testUpdatePeerIds() { + RaftActorContextImpl context = new RaftActorContextImpl(actor, actor.underlyingActor().getContext(), + "self", new ElectionTermImpl(new NonPersistentDataProvider(), "test", log), -1, -1, + Maps.newHashMap(ImmutableMap.of("peer1", "peerAddress1")), + new DefaultConfigParamsImpl(), new NonPersistentDataProvider(), log); + + context.updatePeerIds(new ServerConfigurationPayload(Arrays.asList(new ServerInfo("self", false), + new ServerInfo("peer2", true), new ServerInfo("peer3", false)))); + verifyPeerInfo(context, "peer1", null); + verifyPeerInfo(context, "peer2", true); + verifyPeerInfo(context, "peer3", false); + assertEquals("isVotingMember", false, context.isVotingMember()); + + context.updatePeerIds(new ServerConfigurationPayload(Arrays.asList(new ServerInfo("self", true), + new ServerInfo("peer2", true), new ServerInfo("peer3", true)))); + verifyPeerInfo(context, "peer2", true); + verifyPeerInfo(context, "peer3", true); + assertEquals("isVotingMember", true, context.isVotingMember()); + + context.updatePeerIds(new ServerConfigurationPayload(Arrays.asList(new ServerInfo("peer2", true), + new ServerInfo("peer3", true)))); + verifyPeerInfo(context, "peer2", true); + verifyPeerInfo(context, "peer3", true); + assertEquals("isVotingMember", false, context.isVotingMember()); + } + + private static void verifyPeerInfo(RaftActorContextImpl context, String peerId, Boolean voting) { + PeerInfo peerInfo = context.getPeerInfo(peerId); + if (voting != null) { + assertNotNull("Expected peer " + peerId, peerInfo); + assertEquals("getVotingState for " + peerId, voting.booleanValue() + ? VotingState.VOTING : VotingState.NON_VOTING, peerInfo.getVotingState()); + } else { + assertNull("Unexpected peer " + peerId, peerInfo); + } + } }