X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2Fentityownership%2FEntityOwnershipListenerSupportTest.java;h=c4e789e729e46dcc472e1c7dd965d329b833d77d;hb=6b31b94c7c06711efd69f7fd456167026f34dc2e;hp=00448751da91155514e424375612d3b11029251b;hpb=a4d9810d7211097f2803174d0c23a27b53dbc9d2;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnershipListenerSupportTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnershipListenerSupportTest.java index 00448751da..c4e789e729 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnershipListenerSupportTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnershipListenerSupportTest.java @@ -8,8 +8,7 @@ package org.opendaylight.controller.cluster.datastore.entityownership; import static org.junit.Assert.assertEquals; -import static org.mockito.Matchers.anyBoolean; -import static org.mockito.Matchers.eq; +import static org.mockito.Matchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; @@ -27,12 +26,11 @@ import java.util.concurrent.TimeUnit; import org.junit.After; import org.junit.Before; import org.junit.Test; -import org.opendaylight.controller.cluster.datastore.AbstractActorTest; import org.opendaylight.controller.cluster.raft.TestActorFactory; import org.opendaylight.controller.cluster.raft.utils.DoNothingActor; -import org.opendaylight.controller.md.sal.common.api.clustering.Entity; -import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipCandidate; -import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipListener; +import org.opendaylight.mdsal.eos.dom.api.DOMEntity; +import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipChange; +import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipListener; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import scala.collection.Iterator; @@ -43,7 +41,7 @@ import scala.collection.immutable.Iterable; * * @author Thomas Pantelis */ -public class EntityOwnershipListenerSupportTest extends AbstractActorTest { +public class EntityOwnershipListenerSupportTest extends AbstractEntityOwnershipTest { private final TestActorFactory actorFactory = new TestActorFactory(getSystem()); private ActorContext actorContext; @@ -64,97 +62,68 @@ public class EntityOwnershipListenerSupportTest extends AbstractActorTest { public void testNotifyEntityOwnershipListeners() { EntityOwnershipListenerSupport support = new EntityOwnershipListenerSupport(actorContext, "test"); - EntityOwnershipListener mockListener1 = mock(EntityOwnershipListener.class, "EntityOwnershipListener1"); - EntityOwnershipListener mockListener2 = mock(EntityOwnershipListener.class, "EntityOwnershipListener2"); - EntityOwnershipListener mockListener3 = mock(EntityOwnershipListener.class, "EntityOwnershipListener3"); - Entity entity1 = new Entity("type1", YangInstanceIdentifier.of(QName.create("test", "id1"))); - Entity entity2 = new Entity("type1", YangInstanceIdentifier.of(QName.create("test", "id2"))); - Entity entity3 = new Entity("type1", YangInstanceIdentifier.of(QName.create("test", "id3"))); - Entity entity4 = new Entity("type2", YangInstanceIdentifier.of(QName.create("test", "id4"))); - Entity entity5 = new Entity("noListener", YangInstanceIdentifier.of(QName.create("test", "id5"))); + DOMEntityOwnershipListener mockListener1 = mock(DOMEntityOwnershipListener.class, "EntityOwnershipListener1"); + DOMEntityOwnershipListener mockListener2 = mock(DOMEntityOwnershipListener.class, "EntityOwnershipListener2"); + DOMEntityOwnershipListener mockListener1_2 = mock(DOMEntityOwnershipListener.class, "EntityOwnershipListener1_2"); + String entityType1 = "type1"; + String entityType2 = "type2"; + DOMEntity entity1 = new DOMEntity(entityType1, YangInstanceIdentifier.of(QName.create("test", "id1"))); + DOMEntity entity2 = new DOMEntity(entityType2, YangInstanceIdentifier.of(QName.create("test", "id2"))); + DOMEntity entity3 = new DOMEntity("noListener", YangInstanceIdentifier.of(QName.create("test", "id5"))); // Add EntityOwnershipListener registrations. - support.addEntityOwnershipListener(entity1, mockListener1); - support.addEntityOwnershipListener(entity1, mockListener1); // register again - should be noop - support.addEntityOwnershipListener(entity2, mockListener1); - support.addEntityOwnershipListener(entity1, mockListener2); - support.addEntityOwnershipListener(entity1.getType(), mockListener3); + support.addEntityOwnershipListener(entityType1, mockListener1); + support.addEntityOwnershipListener(entityType1, mockListener1); // register again - should be noop + support.addEntityOwnershipListener(entityType1, mockListener1_2); + support.addEntityOwnershipListener(entityType2, mockListener2); - // Notify entity1 changed and verify listeners are notified. + // Notify entity1 changed and verify appropriate listeners are notified. - support.notifyEntityOwnershipListeners(entity1, false, true); - - verify(mockListener1, timeout(5000)).ownershipChanged(entity1, false, true); - verify(mockListener2, timeout(5000)).ownershipChanged(entity1, false, true); - verify(mockListener3, timeout(5000)).ownershipChanged(entity1, false, true); - assertEquals("# of listener actors", 3, actorContext.children().size()); - - // Notify entity2 changed and verify only mockListener1 and mockListener3 are notified. - - support.notifyEntityOwnershipListeners(entity2, false, true); - - verify(mockListener1, timeout(5000)).ownershipChanged(entity2, false, true); - verify(mockListener3, timeout(5000)).ownershipChanged(entity2, false, true); - Uninterruptibles.sleepUninterruptibly(300, TimeUnit.MILLISECONDS); - verify(mockListener2, never()).ownershipChanged(eq(entity2), anyBoolean(), anyBoolean()); - assertEquals("# of listener actors", 3, actorContext.children().size()); - - // Notify entity3 changed and verify only mockListener3 is notified. - - support.notifyEntityOwnershipListeners(entity3, false, true); - - verify(mockListener3, timeout(5000)).ownershipChanged(entity3, false, true); - Uninterruptibles.sleepUninterruptibly(300, TimeUnit.MILLISECONDS); - verify(mockListener1, never()).ownershipChanged(eq(entity3), anyBoolean(), anyBoolean()); - verify(mockListener2, never()).ownershipChanged(eq(entity3), anyBoolean(), anyBoolean()); - - // Notify entity4 changed and verify no listeners are notified. - - support.notifyEntityOwnershipListeners(entity4, false, true); + support.notifyEntityOwnershipListeners(entity1, false, true, true); + verify(mockListener1, timeout(5000)).ownershipChanged(ownershipChange(entity1, false, true, true)); + verify(mockListener1_2, timeout(5000)).ownershipChanged(ownershipChange(entity1, false, true, true)); Uninterruptibles.sleepUninterruptibly(300, TimeUnit.MILLISECONDS); - verify(mockListener1, never()).ownershipChanged(eq(entity4), anyBoolean(), anyBoolean()); - verify(mockListener2, never()).ownershipChanged(eq(entity4), anyBoolean(), anyBoolean()); - verify(mockListener3, never()).ownershipChanged(eq(entity4), anyBoolean(), anyBoolean()); + verify(mockListener2, never()).ownershipChanged(any(DOMEntityOwnershipChange.class)); + assertEquals("# of listener actors", 2, actorContext.children().size()); + reset(mockListener1, mockListener2, mockListener1_2); - // Notify entity5 changed and verify no listener is notified. + // Notify entity2 changed and verify appropriate listeners are notified. - support.notifyEntityOwnershipListeners(entity5, false, true); + support.notifyEntityOwnershipListeners(entity2, false, true, true); + verify(mockListener2, timeout(5000)).ownershipChanged(ownershipChange(entity2, false, true, true)); Uninterruptibles.sleepUninterruptibly(300, TimeUnit.MILLISECONDS); - verify(mockListener1, never()).ownershipChanged(eq(entity4), anyBoolean(), anyBoolean()); - verify(mockListener2, never()).ownershipChanged(eq(entity4), anyBoolean(), anyBoolean()); - verify(mockListener3, never()).ownershipChanged(eq(entity4), anyBoolean(), anyBoolean()); - - reset(mockListener1, mockListener2, mockListener3); + verify(mockListener1, never()).ownershipChanged(any(DOMEntityOwnershipChange.class)); + verify(mockListener1_2, never()).ownershipChanged(any(DOMEntityOwnershipChange.class)); + assertEquals("# of listener actors", 3, actorContext.children().size()); + reset(mockListener1, mockListener2, mockListener1_2); - // Unregister mockListener1 for entity1, issue a change and verify only mockListeners 2 & 3 are notified. + // Notify entity3 changed and verify no listeners are notified. - support.removeEntityOwnershipListener(entity1, mockListener1); - support.notifyEntityOwnershipListeners(entity1, false, true); + support.notifyEntityOwnershipListeners(entity3, true, false, true); - verify(mockListener2, timeout(5000)).ownershipChanged(entity1, false, true); - verify(mockListener3, timeout(5000)).ownershipChanged(entity1, false, true); Uninterruptibles.sleepUninterruptibly(300, TimeUnit.MILLISECONDS); - verify(mockListener1, never()).ownershipChanged(eq(entity1), anyBoolean(), anyBoolean()); + verify(mockListener1, never()).ownershipChanged(any(DOMEntityOwnershipChange.class)); + verify(mockListener2, never()).ownershipChanged(any(DOMEntityOwnershipChange.class)); + verify(mockListener1_2, never()).ownershipChanged(any(DOMEntityOwnershipChange.class)); + reset(mockListener1, mockListener2, mockListener1_2); - // Unregister mockListener3, issue a change for entity1 and verify only mockListeners2 is notified. + Iterable listenerActors = actorContext.children(); + assertEquals("# of listener actors", 3, listenerActors.size()); - reset(mockListener1, mockListener2, mockListener3); + // Unregister mockListener1, issue a change for entity1 and verify only remaining listeners are notified. - support.removeEntityOwnershipListener(entity1.getType(), mockListener3); - support.notifyEntityOwnershipListeners(entity1, false, true); + support.removeEntityOwnershipListener(entityType1, mockListener1); + support.notifyEntityOwnershipListeners(entity1, true, false, true); - verify(mockListener2, timeout(5000)).ownershipChanged(entity1, false, true); + verify(mockListener1_2, timeout(5000)).ownershipChanged(ownershipChange(entity1, true, false, true)); Uninterruptibles.sleepUninterruptibly(300, TimeUnit.MILLISECONDS); - verify(mockListener1, never()).ownershipChanged(eq(entity1), anyBoolean(), anyBoolean()); - verify(mockListener3, never()).ownershipChanged(eq(entity1), anyBoolean(), anyBoolean()); + verify(mockListener1, never()).ownershipChanged(any(DOMEntityOwnershipChange.class)); + reset(mockListener1, mockListener2, mockListener1_2); - // Completely unregister all listeners and verify their listener actors are destroyed. - - Iterable listenerActors = actorContext.children(); - assertEquals("# of listener actors", 2, listenerActors.size()); + // Unregister all listeners and verify their listener actors are destroyed. List watchers = new ArrayList<>(); for(Iterator iter = listenerActors.iterator(); iter.hasNext();) { @@ -163,9 +132,9 @@ public class EntityOwnershipListenerSupportTest extends AbstractActorTest { watchers.add(kit); } - support.removeEntityOwnershipListener(entity2, mockListener1); - support.removeEntityOwnershipListener(entity2, mockListener1); // un-register again - shoild be noop - support.removeEntityOwnershipListener(entity1, mockListener2); + support.removeEntityOwnershipListener(entityType1, mockListener1_2); + support.removeEntityOwnershipListener(entityType1, mockListener1_2); // un-register again - should be noop + support.removeEntityOwnershipListener(entityType2, mockListener2); Iterator iter = listenerActors.iterator(); for(JavaTestKit kit: watchers) { @@ -174,39 +143,41 @@ public class EntityOwnershipListenerSupportTest extends AbstractActorTest { assertEquals("# of listener actors", 0, actorContext.children().size()); - // Re-register mockListener1 for entity1 and verify it is notified. + // Re-register mockListener1 and verify it is notified. reset(mockListener1, mockListener2); - support.addEntityOwnershipListener(entity1, mockListener1); - - support.notifyEntityOwnershipListeners(entity1, false, true); + support.addEntityOwnershipListener(entityType1, mockListener1); + support.notifyEntityOwnershipListeners(entity1, false, false, true); - verify(mockListener1, timeout(5000)).ownershipChanged(entity1, false, true); - verify(mockListener2, never()).ownershipChanged(eq(entity1), anyBoolean(), anyBoolean()); - verify(mockListener3, never()).ownershipChanged(eq(entity1), anyBoolean(), anyBoolean()); + verify(mockListener1, timeout(5000)).ownershipChanged(ownershipChange(entity1, false, false, true)); + verify(mockListener1_2, never()).ownershipChanged(any(DOMEntityOwnershipChange.class)); + verify(mockListener2, never()).ownershipChanged(any(DOMEntityOwnershipChange.class)); // Quickly register and unregister mockListener2 - expecting no exceptions. - support.addEntityOwnershipListener(entity1, mockListener2); - support.removeEntityOwnershipListener(entity1, mockListener2); + support.addEntityOwnershipListener(entityType1, mockListener2); + support.removeEntityOwnershipListener(entityType1, mockListener2); } @Test public void testHasCandidateForEntity() { EntityOwnershipListenerSupport support = new EntityOwnershipListenerSupport(actorContext, "test"); - Entity entity = new Entity("type", YangInstanceIdentifier.of(QName.create("test", "id"))); + DOMEntity entity = new DOMEntity("type", YangInstanceIdentifier.of(QName.create("test", "id"))); assertEquals("hasCandidateForEntity", false, support.hasCandidateForEntity(entity)); - support.addEntityOwnershipListener(entity, mock(EntityOwnershipListener.class)); - assertEquals("hasCandidateForEntity", false, support.hasCandidateForEntity(entity)); - - EntityOwnershipCandidate candidate = mock(EntityOwnershipCandidate.class); - support.addEntityOwnershipListener(entity, candidate); + support.setHasCandidateForEntity(entity); + support.setHasCandidateForEntity(entity); // set again - should be noop assertEquals("hasCandidateForEntity", true, support.hasCandidateForEntity(entity)); - support.removeEntityOwnershipListener(entity, candidate); + support.unsetHasCandidateForEntity(entity); + assertEquals("hasCandidateForEntity", false, support.hasCandidateForEntity(entity)); + + support.unsetHasCandidateForEntity(entity); // unset again - should be noop assertEquals("hasCandidateForEntity", false, support.hasCandidateForEntity(entity)); + + support.setHasCandidateForEntity(entity); + assertEquals("hasCandidateForEntity", true, support.hasCandidateForEntity(entity)); } }