/*
* Copyright (c) 2015 Brocade Communications 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.datastore.shardmanager;
import static org.junit.Assert.assertEquals;
import akka.actor.Address;
import com.google.common.collect.Sets;
import java.util.Collection;
import org.junit.Test;
import org.opendaylight.controller.cluster.access.concepts.MemberName;
import org.opendaylight.controller.cluster.datastore.identifiers.ShardIdentifier;
/**
* Unit tests for ShardPeerAddressResolver.
*
* @author Thomas Pantelis
*/
public class ShardPeerAddressResolverTest {
private static final MemberName MEMBER_1 = MemberName.forName("member-1");
private static final MemberName MEMBER_2 = MemberName.forName("member-2");
private static final MemberName MEMBER_3 = MemberName.forName("member-3");
@Test
public void testGetShardActorAddress() {
ShardPeerAddressResolver resolver = new ShardPeerAddressResolver("config", MEMBER_1);
assertEquals("getShardActorAddress", null, resolver.getShardActorAddress("default", MEMBER_2));
Address address2 = new Address("tcp", "system2");
resolver.addPeerAddress(MEMBER_2, address2);
assertEquals("getPeerAddress", address2, resolver.getPeerAddress(MEMBER_2));
Address address3 = new Address("tcp", "system3");
resolver.addPeerAddress(MEMBER_3, address3);
assertEquals("getPeerAddress", address3, resolver.getPeerAddress(MEMBER_3));
assertEquals("getShardActorAddress",
address2.toString() + "/user/shardmanager-config/member-2-shard-default-config",
resolver.getShardActorAddress("default", MEMBER_2));
assertEquals("getShardActorAddress",
address3.toString() + "/user/shardmanager-config/member-3-shard-default-config",
resolver.getShardActorAddress("default", MEMBER_3));
assertEquals("getShardActorAddress",
address2.toString() + "/user/shardmanager-config/member-2-shard-topology-config",
resolver.getShardActorAddress("topology", MEMBER_2));
resolver.removePeerAddress(MEMBER_2);
assertEquals("getShardActorAddress", null, resolver.getShardActorAddress("default", MEMBER_2));
assertEquals("getShardActorAddress", null, resolver.getShardActorAddress("topology", MEMBER_2));
assertEquals("getShardActorAddress",
address3.toString() + "/user/shardmanager-config/member-3-shard-default-config",
resolver.getShardActorAddress("default", MEMBER_3));
}
@Test
public void testResolve() {
String type = "config";
ShardPeerAddressResolver resolver = new ShardPeerAddressResolver(type, MEMBER_1);
MemberName memberName = MEMBER_2;
String peerId = ShardIdentifier.create("default", memberName, type).toString();
assertEquals("resolve", null, resolver.resolve(peerId));
Address address = new Address("tcp", "system");
resolver.addPeerAddress(memberName, address);
String shardAddress = resolver.getShardActorAddress("default", memberName);
assertEquals("getShardActorAddress", address.toString() + "/user/shardmanager-" + type + "/"
+ memberName.getName() + "-shard-default-" + type, shardAddress);
assertEquals("resolve", shardAddress, resolver.resolve(peerId));
}
@Test
public void testGetShardManagerPeerActorAddresses() {
ShardPeerAddressResolver resolver = new ShardPeerAddressResolver("config", MEMBER_1);
resolver.addPeerAddress(MEMBER_1, new Address("tcp", "system1"));
Address address2 = new Address("tcp", "system2");
resolver.addPeerAddress(MEMBER_2, address2);
Address address3 = new Address("tcp", "system3");
resolver.addPeerAddress(MEMBER_3, address3);
Collection<String> peerAddresses = resolver.getShardManagerPeerActorAddresses();
assertEquals("getShardManagerPeerActorAddresses", Sets.newHashSet(
address2.toString() + "/user/shardmanager-config",
address3.toString() + "/user/shardmanager-config"), Sets.newHashSet(peerAddresses));
}
}