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%2Futils%2FMockDataTreeChangeListener.java;h=326313eb3b29fb7d4894db45785fa541672557e0;hb=24ee386f244cafa9bd3126ddbba1435969aa76c2;hp=a441ccad633c8884ec4d7383a3398ab1eeb99264;hpb=f41c5e6e6f6e10b36b1e4b1992877e38e718c8fb;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/utils/MockDataTreeChangeListener.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/utils/MockDataTreeChangeListener.java index a441ccad63..326313eb3b 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/utils/MockDataTreeChangeListener.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/utils/MockDataTreeChangeListener.java @@ -9,6 +9,7 @@ package org.opendaylight.controller.cluster.datastore.utils; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import com.google.common.util.concurrent.Uninterruptibles; @@ -21,18 +22,21 @@ import java.util.Optional; import java.util.Set; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; -import javax.annotation.Nonnull; +import java.util.concurrent.atomic.AtomicInteger; import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; +import org.opendaylight.yangtools.yang.data.api.schema.DistinctNodeContainer; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodeContainer; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate; public class MockDataTreeChangeListener implements DOMDataTreeChangeListener { private final List changeList = new ArrayList<>(); + private final CountDownLatch onInitialDataLatch = new CountDownLatch(1); + private final AtomicInteger onInitialDataEventCount = new AtomicInteger(); + private volatile CountDownLatch changeLatch; private int expChangeEventCount; @@ -49,7 +53,7 @@ public class MockDataTreeChangeListener implements DOMDataTreeChangeListener { } @Override - public void onDataTreeChanged(@Nonnull final Collection changes) { + public void onDataTreeChanged(final Collection changes) { if (changeLatch.getCount() > 0) { synchronized (changeList) { changeList.addAll(changes); @@ -58,6 +62,23 @@ public class MockDataTreeChangeListener implements DOMDataTreeChangeListener { } } + @Override + public void onInitialData() { + onInitialDataEventCount.incrementAndGet(); + onInitialDataLatch.countDown(); + } + + public void verifyOnInitialDataEvent() { + assertTrue("onInitialData was not triggered", + Uninterruptibles.awaitUninterruptibly(onInitialDataLatch, 5, TimeUnit.SECONDS)); + assertEquals("onInitialDataEventCount", 1, onInitialDataEventCount.get()); + } + + public void verifyNoOnInitialDataEvent() { + assertFalse("onInitialData was triggered unexpectedly", + Uninterruptibles.awaitUninterruptibly(onInitialDataLatch, 500, TimeUnit.MILLISECONDS)); + } + @SuppressWarnings({ "unchecked", "rawtypes" }) public void waitForChangeEvents(final YangInstanceIdentifier... expPaths) { boolean done = Uninterruptibles.awaitUninterruptibly(changeLatch, 5, TimeUnit.SECONDS); @@ -68,24 +89,24 @@ public class MockDataTreeChangeListener implements DOMDataTreeChangeListener { for (int i = 0; i < expPaths.length; i++) { final DataTreeCandidate candidate = changeList.get(i); - final Optional> maybeDataAfter = candidate.getRootNode().getDataAfter(); + final Optional maybeDataAfter = candidate.getRootNode().getDataAfter(); if (!maybeDataAfter.isPresent()) { fail(String.format("Change %d does not contain data after. Actual: %s", i + 1, candidate.getRootNode())); } - final NormalizedNode dataAfter = maybeDataAfter.get(); + final NormalizedNode dataAfter = maybeDataAfter.get(); final Optional relativePath = expPaths[i].relativeTo(candidate.getRootPath()); if (!relativePath.isPresent()) { assertEquals(String.format("Change %d does not contain %s. Actual: %s", i + 1, expPaths[i], dataAfter), expPaths[i].getLastPathArgument(), dataAfter.getIdentifier()); } else { - NormalizedNode nextChild = dataAfter; + NormalizedNode nextChild = dataAfter; for (PathArgument pathArg: relativePath.get().getPathArguments()) { boolean found = false; - if (nextChild instanceof NormalizedNodeContainer) { - Optional> maybeChild = ((NormalizedNodeContainer)nextChild) - .getChild(pathArg); + if (nextChild instanceof DistinctNodeContainer) { + Optional maybeChild = ((DistinctNodeContainer)nextChild) + .findChildByArg(pathArg); if (maybeChild.isPresent()) { found = true; nextChild = maybeChild.get();