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%2FDataChangeListenerTest.java;h=26ec583b3e058108f9cc18517f5f6909847f5cd6;hb=c911a187bdcd6160c1929e53466cd9de681c2098;hp=6f0816be5c8a19968c0c3811adf68f713497a033;hpb=eee61ea351b6179d2862dce6875bdc25dd0fb272;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DataChangeListenerTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DataChangeListenerTest.java index 6f0816be5c..26ec583b3e 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DataChangeListenerTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DataChangeListenerTest.java @@ -6,82 +6,110 @@ import akka.testkit.JavaTestKit; import org.junit.Test; import org.opendaylight.controller.cluster.datastore.messages.DataChanged; import org.opendaylight.controller.cluster.datastore.messages.DataChangedReply; +import org.opendaylight.controller.cluster.datastore.messages.EnableNotification; +import org.opendaylight.controller.md.cluster.datastore.model.CompositeModel; import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent; import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeListener; -import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import java.util.HashMap; +import java.util.HashSet; import java.util.Map; import java.util.Set; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; public class DataChangeListenerTest extends AbstractActorTest { - private static class MockDataChangedEvent implements AsyncDataChangeEvent> { + private static class MockDataChangedEvent implements AsyncDataChangeEvent> { + Map> createdData = new HashMap(); + Map> updatedData = new HashMap(); + Map> originalData = new HashMap(); + + @Override - public Map> getCreatedData() { - throw new UnsupportedOperationException("getCreatedData"); + public Map> getCreatedData() { + createdData.put(CompositeModel.FAMILY_PATH, CompositeModel.createFamily()); + return createdData; } @Override - public Map> getUpdatedData() { - throw new UnsupportedOperationException("getUpdatedData"); + public Map> getUpdatedData() { + updatedData.put(CompositeModel.FAMILY_PATH, CompositeModel.createFamily()); + return updatedData; + } - @Override public Set getRemovedPaths() { - throw new UnsupportedOperationException("getRemovedPaths"); + @Override + public Set getRemovedPaths() { + Setids = new HashSet(); + ids.add( CompositeModel.TEST_PATH); + return ids; } @Override - public Map> getOriginalData() { - throw new UnsupportedOperationException("getOriginalData"); + public Map> getOriginalData() { + originalData.put(CompositeModel.FAMILY_PATH, CompositeModel.createFamily()); + return originalData; } @Override public NormalizedNode getOriginalSubtree() { - throw new UnsupportedOperationException("getOriginalSubtree"); + + + return originalData.put(CompositeModel.FAMILY_PATH, CompositeModel.createFamily()); } @Override public NormalizedNode getUpdatedSubtree() { - throw new UnsupportedOperationException("getUpdatedSubtree"); + + //fixme: need to have some valid data here + return originalData.put(CompositeModel.FAMILY_PATH, CompositeModel.createFamily()); } } - private class MockDataChangeListener implements AsyncDataChangeListener> { + private class MockDataChangeListener implements AsyncDataChangeListener> { private boolean gotIt = false; + private AsyncDataChangeEvent> change; @Override public void onDataChanged( - AsyncDataChangeEvent> change) { - gotIt = true; + AsyncDataChangeEvent> change) { + gotIt = true;this.change=change; } public boolean gotIt() { return gotIt; } + public AsyncDataChangeEvent> getChange(){ + return change; + } } @Test - public void testDataChanged(){ + public void testDataChangedWhenNotificationsAreEnabled(){ new JavaTestKit(getSystem()) {{ final MockDataChangeListener listener = new MockDataChangeListener(); - final Props props = DataChangeListener.props(listener); + final Props props = DataChangeListener.props(CompositeModel.createTestContext(),listener,CompositeModel.FAMILY_PATH ); final ActorRef subject = - getSystem().actorOf(props, "testDataChanged"); + getSystem().actorOf(props, "testDataChangedNotificationsEnabled"); new Within(duration("1 seconds")) { protected void run() { + // Let the DataChangeListener know that notifications should + // be enabled + subject.tell(new EnableNotification(true), getRef()); + subject.tell( - new DataChanged(new MockDataChangedEvent()), + new DataChanged(CompositeModel.createTestContext(),new MockDataChangedEvent()), getRef()); - final Boolean out = new ExpectMsg("dataChanged") { + final Boolean out = new ExpectMsg(duration("800 millis"), "dataChanged") { // do not put code outside this method, will run afterwards protected Boolean match(Object in) { - if (in instanceof DataChangedReply) { - DataChangedReply reply = - (DataChangedReply) in; + if (in != null && in.getClass().equals(DataChangedReply.class)) { + return true; } else { throw noMatch(); @@ -91,7 +119,31 @@ public class DataChangeListenerTest extends AbstractActorTest { assertTrue(out); assertTrue(listener.gotIt()); - // Will wait for the rest of the 3 seconds + assertNotNull(listener.getChange().getCreatedData()); + + expectNoMsg(); + } + + + }; + }}; + } + + @Test + public void testDataChangedWhenNotificationsAreDisabled(){ + new JavaTestKit(getSystem()) {{ + final MockDataChangeListener listener = new MockDataChangeListener(); + final Props props = DataChangeListener.props(CompositeModel.createTestContext(),listener,CompositeModel.FAMILY_PATH ); + final ActorRef subject = + getSystem().actorOf(props, "testDataChangedNotificationsDisabled"); + + new Within(duration("1 seconds")) { + protected void run() { + + subject.tell( + new DataChanged(CompositeModel.createTestContext(),new MockDataChangedEvent()), + getRef()); + expectNoMsg(); }