X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-binding-broker%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Fsal%2Fbinding%2Fimpl%2Ftest%2FDataTreeChangeListenerTest.java;fp=opendaylight%2Fmd-sal%2Fsal-binding-broker%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Fsal%2Fbinding%2Fimpl%2Ftest%2FDataTreeChangeListenerTest.java;h=0000000000000000000000000000000000000000;hp=bfa7e827251d86944ef77ea573b4330158b4c7f5;hb=2611e6a728e586ea34dd891f30a473bf54d6cbd8;hpb=aaea3e9a92ae9d6fac04c4a065db4b35cbca9ed0 diff --git a/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/md/sal/binding/impl/test/DataTreeChangeListenerTest.java b/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/md/sal/binding/impl/test/DataTreeChangeListenerTest.java deleted file mode 100644 index bfa7e82725..0000000000 --- a/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/md/sal/binding/impl/test/DataTreeChangeListenerTest.java +++ /dev/null @@ -1,205 +0,0 @@ -/* - * Copyright (c) 2014, 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.controller.md.sal.binding.impl.test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.timeout; -import static org.mockito.Mockito.verify; -import static org.opendaylight.controller.md.sal.test.model.util.ListsBindingUtils.TOP_BAR_KEY; -import static org.opendaylight.controller.md.sal.test.model.util.ListsBindingUtils.TOP_FOO_KEY; -import static org.opendaylight.controller.md.sal.test.model.util.ListsBindingUtils.USES_ONE_KEY; -import static org.opendaylight.controller.md.sal.test.model.util.ListsBindingUtils.complexUsesAugment; -import static org.opendaylight.controller.md.sal.test.model.util.ListsBindingUtils.path; -import static org.opendaylight.controller.md.sal.test.model.util.ListsBindingUtils.top; -import static org.opendaylight.controller.md.sal.test.model.util.ListsBindingUtils.topLevelList; - -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Iterables; -import com.google.common.util.concurrent.SettableFuture; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Set; -import java.util.concurrent.TimeUnit; -import org.junit.Before; -import org.junit.Test; -import org.mockito.Matchers; -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.binding.api.DataObjectModification; -import org.opendaylight.controller.md.sal.binding.api.DataObjectModification.ModificationType; -import org.opendaylight.controller.md.sal.binding.api.DataTreeChangeListener; -import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier; -import org.opendaylight.controller.md.sal.binding.api.DataTreeModification; -import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; -import org.opendaylight.controller.md.sal.binding.impl.BindingDOMDataBrokerAdapter; -import org.opendaylight.controller.md.sal.binding.test.AbstractConcurrentDataBrokerTest; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.augment.rev140709.TreeComplexUsesAugment; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.list.rev140701.Top; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.list.rev140701.TopBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.list.rev140701.TwoLevelList; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.list.rev140701.two.level.list.TopLevelList; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.list.rev140701.two.level.list.TopLevelListBuilder; -import org.opendaylight.yangtools.yang.binding.DataObject; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument; -import org.opendaylight.yangtools.yang.binding.YangModuleInfo; - -@Deprecated -public class DataTreeChangeListenerTest extends AbstractConcurrentDataBrokerTest { - - private static final InstanceIdentifier TOP_PATH = InstanceIdentifier.create(Top.class); - private static final PathArgument TOP_ARGUMENT = TOP_PATH.getPathArguments().iterator().next(); - private static final InstanceIdentifier FOO_PATH = path(TOP_FOO_KEY); - private static final PathArgument FOO_ARGUMENT = Iterables.getLast(FOO_PATH.getPathArguments()); - private static final TopLevelList FOO_DATA = topLevelList(TOP_FOO_KEY, complexUsesAugment(USES_ONE_KEY)); - private static final InstanceIdentifier BAR_PATH = path(TOP_BAR_KEY); - private static final PathArgument BAR_ARGUMENT = Iterables.getLast(BAR_PATH.getPathArguments()); - private static final TopLevelList BAR_DATA = topLevelList(TOP_BAR_KEY); - private static final DataTreeIdentifier TOP_IDENTIFIER = - new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL, TOP_PATH); - - private static final Top TOP_INITIAL_DATA = top(FOO_DATA); - - private BindingDOMDataBrokerAdapter dataBrokerImpl; - - private static final class EventCapturingListener implements DataTreeChangeListener { - - private SettableFuture>> changes = SettableFuture.create(); - - @Override - public void onDataTreeChanged(final Collection> modification) { - this.changes.set(modification); - - } - - Collection> nextEvent() throws Exception { - final Collection> result = changes.get(200,TimeUnit.MILLISECONDS); - changes = SettableFuture.create(); - return result; - } - } - - @Override - protected Set getModuleInfos() throws Exception { - return ImmutableSet.of( - BindingReflections.getModuleInfo(TwoLevelList.class), - BindingReflections.getModuleInfo(TreeComplexUsesAugment.class) - ); - } - - @Before - public void setupWithDataBroker() { - dataBrokerImpl = (BindingDOMDataBrokerAdapter) getDataBroker(); - } - - @Test - public void testTopLevelListener() throws Exception { - final EventCapturingListener listener = new EventCapturingListener<>(); - dataBrokerImpl.registerDataTreeChangeListener(TOP_IDENTIFIER, listener); - - createAndVerifyTop(listener); - - putTx(BAR_PATH, BAR_DATA).submit().checkedGet(); - final DataObjectModification afterBarPutEvent = Iterables.getOnlyElement(listener.nextEvent()) - .getRootNode(); - verifyModification(afterBarPutEvent, TOP_ARGUMENT, ModificationType.SUBTREE_MODIFIED); - final DataObjectModification barPutMod = afterBarPutEvent - .getModifiedChildListItem(TopLevelList.class, TOP_BAR_KEY); - assertNotNull(barPutMod); - verifyModification(barPutMod, BAR_ARGUMENT, ModificationType.WRITE); - - deleteTx(BAR_PATH).submit().checkedGet(); - final DataObjectModification afterBarDeleteEvent = Iterables.getOnlyElement(listener.nextEvent()) - .getRootNode(); - verifyModification(afterBarDeleteEvent, TOP_ARGUMENT, ModificationType.SUBTREE_MODIFIED); - final DataObjectModification barDeleteMod = afterBarDeleteEvent - .getModifiedChildListItem(TopLevelList.class, TOP_BAR_KEY); - verifyModification(barDeleteMod, BAR_ARGUMENT, ModificationType.DELETE); - } - - @Test - public void testWildcardedListListener() throws Exception { - final EventCapturingListener listener = new EventCapturingListener<>(); - final DataTreeIdentifier wildcard = new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL, - TOP_PATH.child(TopLevelList.class)); - dataBrokerImpl.registerDataTreeChangeListener(wildcard, listener); - - putTx(TOP_PATH, TOP_INITIAL_DATA).submit().checkedGet(); - - final DataTreeModification fooWriteEvent = Iterables.getOnlyElement(listener.nextEvent()); - assertEquals(FOO_PATH, fooWriteEvent.getRootPath().getRootIdentifier()); - verifyModification(fooWriteEvent.getRootNode(), FOO_ARGUMENT, ModificationType.WRITE); - - putTx(BAR_PATH, BAR_DATA).submit().checkedGet(); - final DataTreeModification barWriteEvent = Iterables.getOnlyElement(listener.nextEvent()); - assertEquals(BAR_PATH, barWriteEvent.getRootPath().getRootIdentifier()); - verifyModification(barWriteEvent.getRootNode(), BAR_ARGUMENT, ModificationType.WRITE); - - deleteTx(BAR_PATH).submit().checkedGet(); - final DataTreeModification barDeleteEvent = Iterables.getOnlyElement(listener.nextEvent()); - assertEquals(BAR_PATH, barDeleteEvent.getRootPath().getRootIdentifier()); - verifyModification(barDeleteEvent.getRootNode(), BAR_ARGUMENT, ModificationType.DELETE); - } - - @SuppressWarnings("unchecked") - @Test - public void testWildcardNotificationOfPreexistingData() { - InstanceIdentifier id = InstanceIdentifier.builder(Top.class).build(); - ArrayList list = new ArrayList<>(); - list.add(new TopLevelListBuilder().setName("name").build()); - TopBuilder builder = new TopBuilder().setTopLevelList(list); - - DataBroker dataBroker = getDataBroker(); - - WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction(); - writeTransaction.put(LogicalDatastoreType.OPERATIONAL, id, builder.build()); - assertCommit(writeTransaction.submit()); - - DataTreeChangeListener listener = mock(DataTreeChangeListener.class); - InstanceIdentifier wildcard = InstanceIdentifier.builder(Top.class).child(TopLevelList.class) - .build(); - dataBroker.registerDataTreeChangeListener(new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL, wildcard), - listener); - - verify(listener, timeout(1000)).onDataTreeChanged(Matchers.anyObject()); - } - - private void createAndVerifyTop(final EventCapturingListener listener) throws Exception { - putTx(TOP_PATH,TOP_INITIAL_DATA).submit().checkedGet(); - final Collection> events = listener.nextEvent(); - - assertFalse("Non empty collection should be received.",events.isEmpty()); - final DataTreeModification initialWrite = Iterables.getOnlyElement(events); - final DataObjectModification initialNode = initialWrite.getRootNode(); - verifyModification(initialNode,TOP_PATH.getPathArguments().iterator().next(),ModificationType.WRITE); - assertEquals(TOP_INITIAL_DATA, initialNode.getDataAfter()); - } - - private static void verifyModification(final DataObjectModification barWrite, - final PathArgument pathArg, final ModificationType eventType) { - assertEquals(pathArg.getType(), barWrite.getDataType()); - assertEquals(eventType,barWrite.getModificationType()); - assertEquals(pathArg, barWrite.getIdentifier()); - } - - private WriteTransaction putTx(final InstanceIdentifier path,final T data) { - final WriteTransaction tx = dataBrokerImpl.newWriteOnlyTransaction(); - tx.put(LogicalDatastoreType.OPERATIONAL, path, data); - return tx; - } - - private WriteTransaction deleteTx(final InstanceIdentifier path) { - final WriteTransaction tx = dataBrokerImpl.newWriteOnlyTransaction(); - tx.delete(LogicalDatastoreType.OPERATIONAL, path); - return tx; - } -}