package org.opendaylight.controller.cluster.datastore.entityownership;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import akka.actor.Props;
import com.google.common.base.Function;
import com.google.common.base.Optional;
+import com.google.common.collect.Sets;
import com.google.common.util.concurrent.Uninterruptibles;
-import java.util.Collections;
-import java.util.Map;
+import java.util.Collection;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference;
import org.opendaylight.controller.cluster.datastore.ShardDataTree;
import org.opendaylight.controller.cluster.datastore.config.Configuration;
import org.opendaylight.controller.cluster.datastore.config.ConfigurationImpl;
-import org.opendaylight.controller.cluster.datastore.config.ModuleConfig;
-import org.opendaylight.controller.cluster.datastore.config.ModuleShardConfigProvider;
+import org.opendaylight.controller.cluster.datastore.config.EmptyModuleShardConfigProvider;
import org.opendaylight.controller.cluster.datastore.entityownership.messages.RegisterCandidateLocal;
import org.opendaylight.controller.cluster.datastore.entityownership.messages.RegisterListenerLocal;
import org.opendaylight.controller.cluster.datastore.entityownership.messages.UnregisterCandidateLocal;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTree;
+import org.opendaylight.yangtools.yang.data.api.schema.tree.TreeType;
import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
import scala.concurrent.Await;
import scala.concurrent.Future;
DatastoreContext datastoreContext = DatastoreContext.newBuilder().dataStoreType(dataStoreType).
shardInitializationTimeout(10, TimeUnit.SECONDS).build();
- Configuration configuration = new ConfigurationImpl(new ModuleShardConfigProvider() {
+ Configuration configuration = new ConfigurationImpl(new EmptyModuleShardConfigProvider()) {
@Override
- public Map<String, ModuleConfig> retrieveModuleConfigs(Configuration configuration) {
- return Collections.emptyMap();
+ public Collection<String> getUniqueMemberNamesForAllShards() {
+ return Sets.newHashSet("member-1");
}
- });
+ };
DatastoreContextFactory mockContextFactory = Mockito.mock(DatastoreContextFactory.class);
Mockito.doReturn(datastoreContext).when(mockContextFactory).getBaseDatastoreContext();
Mockito.doReturn(datastoreContext).when(mockContextFactory).getShardDatastoreContext(Mockito.anyString());
- dataStore = new DistributedDataStore(getSystem(), new MockClusterWrapper(), configuration, mockContextFactory);
+ dataStore = new DistributedDataStore(getSystem(), new MockClusterWrapper(), configuration, mockContextFactory, null);
dataStore.onGlobalContextUpdated(SchemaContextHelper.entityOwners());
}
@Test
public void testEntityOwnershipShardCreated() throws Exception {
- DistributedEntityOwnershipService service = new DistributedEntityOwnershipService(dataStore);
+ DistributedEntityOwnershipService service = new DistributedEntityOwnershipService(dataStore,
+ EntityOwnerSelectionStrategyConfig.newBuilder().build());
service.start();
Future<ActorRef> future = dataStore.getActorContext().findLocalShardAsync(
@Test
public void testRegisterCandidate() throws Exception {
final TestShardBuilder shardBuilder = new TestShardBuilder();
- DistributedEntityOwnershipService service = new DistributedEntityOwnershipService(dataStore) {
+ DistributedEntityOwnershipService service = new DistributedEntityOwnershipService(dataStore,
+ EntityOwnerSelectionStrategyConfig.newBuilder().build()) {
@Override
protected EntityOwnershipShard.Builder newShardBuilder() {
return shardBuilder;
@Test
public void testCloseCandidateRegistration() throws Exception {
final TestShardBuilder shardBuilder = new TestShardBuilder();
- DistributedEntityOwnershipService service = new DistributedEntityOwnershipService(dataStore) {
+ DistributedEntityOwnershipService service = new DistributedEntityOwnershipService(dataStore,
+ EntityOwnerSelectionStrategyConfig.newBuilder().build()) {
@Override
protected EntityOwnershipShard.Builder newShardBuilder() {
return shardBuilder;
@Test
public void testListenerRegistration() {
final TestShardBuilder shardBuilder = new TestShardBuilder();
- DistributedEntityOwnershipService service = new DistributedEntityOwnershipService(dataStore) {
+ DistributedEntityOwnershipService service = new DistributedEntityOwnershipService(dataStore,
+ EntityOwnerSelectionStrategyConfig.newBuilder().build()) {
@Override
protected EntityOwnershipShard.Builder newShardBuilder() {
return shardBuilder;
@Test
public void testGetOwnershipState() throws Exception {
final TestShardBuilder shardBuilder = new TestShardBuilder();
- DistributedEntityOwnershipService service = new DistributedEntityOwnershipService(dataStore) {
+ DistributedEntityOwnershipService service = new DistributedEntityOwnershipService(dataStore,
+ EntityOwnerSelectionStrategyConfig.newBuilder().build()) {
@Override
protected EntityOwnershipShard.Builder newShardBuilder() {
return shardBuilder;
service.start();
- ShardDataTree shardDataTree = new ShardDataTree(SchemaContextHelper.entityOwners());
+ ShardDataTree shardDataTree = new ShardDataTree(SchemaContextHelper.entityOwners(), TreeType.OPERATIONAL);
shardBuilder.setDataTree(shardDataTree.getDataTree());
Entity entity1 = new Entity(ENTITY_TYPE, "one");
service.close();
}
+ @Test
+ public void testIsCandidateRegistered() throws CandidateAlreadyRegisteredException {
+ final TestShardBuilder shardBuilder = new TestShardBuilder();
+ DistributedEntityOwnershipService service = new DistributedEntityOwnershipService(dataStore,
+ EntityOwnerSelectionStrategyConfig.newBuilder().build()) {
+ @Override
+ protected EntityOwnershipShard.Builder newShardBuilder() {
+ return shardBuilder;
+ }
+ };
+
+ service.start();
+
+ final Entity test = new Entity("test-type", "test");
+
+ assertFalse(service.isCandidateRegistered(test));
+
+ service.registerCandidate(test);
+
+ assertTrue(service.isCandidateRegistered(test));
+
+ service.close();
+ }
+
private static void verifyGetOwnershipState(DistributedEntityOwnershipService service, Entity entity,
boolean isOwner, boolean hasOwner) {
Optional<EntityOwnershipState> state = service.getOwnershipState(entity);