Bug 2210: Fixed initial DCL notification on registration
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / test / java / org / opendaylight / controller / cluster / datastore / DistributedDataStoreIntegrationTest.java
index d35c36fb0a2c883649ec7fcccc42ac981f20e256..1cc7ae8ad02f93dd9f80135a47c1b5dfdfc2b58c 100644 (file)
@@ -4,21 +4,18 @@ import akka.actor.ActorRef;
 import akka.actor.ActorSystem;
 import akka.actor.PoisonPill;
 import com.google.common.base.Optional;
-import com.google.common.collect.Lists;
 import com.google.common.util.concurrent.Uninterruptibles;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
 import org.junit.Test;
 import org.opendaylight.controller.cluster.datastore.shardstrategy.ShardStrategyFactory;
 import org.opendaylight.controller.cluster.datastore.utils.MockClusterWrapper;
+import org.opendaylight.controller.cluster.datastore.utils.MockDataChangeListener;
 import org.opendaylight.controller.md.cluster.datastore.model.CarsModel;
 import org.opendaylight.controller.md.cluster.datastore.model.PeopleModel;
 import org.opendaylight.controller.md.cluster.datastore.model.SchemaContextHelper;
 import org.opendaylight.controller.md.cluster.datastore.model.TestModel;
 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope;
-import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
-import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeListener;
 import org.opendaylight.controller.sal.core.spi.data.DOMStoreReadTransaction;
 import org.opendaylight.controller.sal.core.spi.data.DOMStoreReadWriteTransaction;
 import org.opendaylight.controller.sal.core.spi.data.DOMStoreThreePhaseCommitCohort;
@@ -29,8 +26,6 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
-import java.util.List;
-import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
 public class DistributedDataStoreIntegrationTest extends AbstractActorTest {
@@ -218,20 +213,9 @@ public class DistributedDataStoreIntegrationTest extends AbstractActorTest {
             DistributedDataStore dataStore =
                     setupDistributedDataStore("testChangeListenerRegistration", "test-1");
 
-            final List<AsyncDataChangeEvent<YangInstanceIdentifier, NormalizedNode<?, ?>>>
-                                                                changeList = Lists.newArrayList();
-            final CountDownLatch changeLatch = new CountDownLatch(3);
-            AsyncDataChangeListener<YangInstanceIdentifier, NormalizedNode<?, ?>> listener =
-                    new AsyncDataChangeListener<YangInstanceIdentifier, NormalizedNode<?, ?>>() {
-                @Override
-                public void onDataChanged(AsyncDataChangeEvent<YangInstanceIdentifier,
-                                                               NormalizedNode<?, ?>> change) {
-                    changeList.add(change);
-                    changeLatch.countDown();
-                }
-            };
+            MockDataChangeListener listener = new MockDataChangeListener(3);
 
-            ListenerRegistration<AsyncDataChangeListener<YangInstanceIdentifier, NormalizedNode<?, ?>>>
+            ListenerRegistration<MockDataChangeListener>
                     listenerReg = dataStore.registerChangeListener(TestModel.TEST_PATH, listener,
                             DataChangeScope.SUBTREE);
 
@@ -248,17 +232,7 @@ public class DistributedDataStoreIntegrationTest extends AbstractActorTest {
             testWriteTransaction(dataStore, listPath,
                     ImmutableNodes.mapEntry(TestModel.OUTER_LIST_QNAME, TestModel.ID_QNAME, 1));
 
-            assertEquals("Change notifications complete", true,
-                    Uninterruptibles.awaitUninterruptibly(changeLatch, 5, TimeUnit.SECONDS));
-
-            assertTrue("Change 1 does not contain " + TestModel.TEST_PATH,
-                    changeList.get(0).getCreatedData().containsKey(TestModel.TEST_PATH));
-
-            assertTrue("Change 2 does not contain " + TestModel.OUTER_LIST_PATH,
-                    changeList.get(1).getCreatedData().containsKey(TestModel.OUTER_LIST_PATH));
-
-            assertTrue("Change 3 does not contain " + listPath,
-                    changeList.get(2).getCreatedData().containsKey(listPath));
+            listener.waitForChangeEvents(TestModel.TEST_PATH, TestModel.OUTER_LIST_PATH, listPath );
 
             listenerReg.close();
 
@@ -266,9 +240,7 @@ public class DistributedDataStoreIntegrationTest extends AbstractActorTest {
                     nodeWithKey(TestModel.OUTER_LIST_QNAME, TestModel.ID_QNAME, 2).build(),
                     ImmutableNodes.mapEntry(TestModel.OUTER_LIST_QNAME, TestModel.ID_QNAME, 2));
 
-            Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS);
-
-            assertEquals("Received unexpected change after close", 3, changeList.size());
+            listener.expectNoMoreChanges("Received unexpected change after close");
 
             cleanup(dataStore);
         }};