From: Valentin Mayamsin Date: Wed, 21 Oct 2015 22:55:51 +0000 (-0700) Subject: BUG-4513 UT for Change event is empty when homogenious composite key is used X-Git-Tag: release/nitrogen~60 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=a7e7fbdd3cc51a384778b557854849c9e0470eaf BUG-4513 UT for Change event is empty when homogenious composite key is used The original DCL test passes now so whatever the issue was before has been fixed. I also added a DTCL test. Change-Id: I5c5037f49a77835dbfea1ce9db8b22d03b6191ec Signed-off-by: Valentin Mayamsin --- diff --git a/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/md/sal/binding/impl/test/Bug4513Test.java b/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/md/sal/binding/impl/test/Bug4513Test.java new file mode 100644 index 0000000000..82da42786d --- /dev/null +++ b/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/md/sal/binding/impl/test/Bug4513Test.java @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2015 Cisco Systems, Inc., Inocybe Technologies 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.mockito.Mockito.mock; +import static org.mockito.Mockito.timeout; +import static org.mockito.Mockito.verify; + +import java.util.Arrays; +import java.util.Collection; +import org.junit.Test; +import org.mockito.ArgumentCaptor; +import org.opendaylight.controller.md.sal.binding.api.DataBroker; +import org.opendaylight.controller.md.sal.binding.api.DataChangeListener; +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.test.AbstractDataBrokerTest; +import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker; +import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.listener.rev150825.ListenerTest; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.listener.rev150825.ListenerTestBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.listener.rev150825.listener.test.ListItem; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.listener.rev150825.listener.test.ListItemBuilder; +import org.opendaylight.yangtools.concepts.ListenerRegistration; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; + +/** + * Regression test suite for https://bugs.opendaylight.org/show_bug.cgi?id=4513 - Change event is empty when + * Homogeneous composite key is used homogeneous composite key is used. + */ +public class Bug4513Test extends AbstractDataBrokerTest { + @SuppressWarnings({ "rawtypes", "unchecked" }) + @Test + public void testDataChangeListener() throws Exception { + DataChangeListener listener = mock(DataChangeListener.class); + InstanceIdentifier wildCard = InstanceIdentifier.builder(ListenerTest.class) + .child(ListItem.class).build(); + ListenerRegistration reg = getDataBroker().registerDataChangeListener( + LogicalDatastoreType.OPERATIONAL, wildCard, listener, AsyncDataBroker.DataChangeScope.SUBTREE); + + final ListItem item = writeListItem(); + + ArgumentCaptor captor = ArgumentCaptor.forClass(AsyncDataChangeEvent.class); + + verify(listener, timeout(100)).onDataChanged(captor.capture()); + + AsyncDataChangeEvent event = captor.getValue(); + assertEquals("createdData", 1, event.getCreatedData().size()); + assertEquals("ListItem", item, event.getCreatedData().values().iterator().next()); + } + + @SuppressWarnings({ "rawtypes", "unchecked" }) + @Test + public void testDataTreeChangeListener() throws Exception { + DataBroker dataBroker = getDataBroker(); + + DataTreeChangeListener listener = mock(DataTreeChangeListener.class); + InstanceIdentifier wildCard = InstanceIdentifier.builder(ListenerTest.class) + .child(ListItem.class).build(); + ListenerRegistration> reg = dataBroker.registerDataTreeChangeListener( + new DataTreeIdentifier(LogicalDatastoreType.OPERATIONAL, wildCard), listener); + + final ListItem item = writeListItem(); + + ArgumentCaptor captor = ArgumentCaptor.forClass(Collection.class); + + verify(listener, timeout(100)).onDataTreeChanged(captor.capture()); + + Collection> mods = captor.getValue(); + assertEquals("ListItem", item, mods.iterator().next().getRootNode().getDataAfter()); + } + + private ListItem writeListItem() { + WriteTransaction writeTransaction = getDataBroker().newWriteOnlyTransaction(); + final ListItem item = new ListItemBuilder().setSip("name").setOp(43L).build(); + ListenerTestBuilder builder = new ListenerTestBuilder().setListItem(Arrays.asList(item)); + writeTransaction.put(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.builder( + ListenerTest.class).build(), builder.build()); + assertCommit(writeTransaction.submit()); + return item; + } +} diff --git a/opendaylight/md-sal/sal-test-model/src/main/yang/opendaylight-listener-test.yang b/opendaylight/md-sal/sal-test-model/src/main/yang/opendaylight-listener-test.yang new file mode 100644 index 0000000000..3cad60e408 --- /dev/null +++ b/opendaylight/md-sal/sal-test-model/src/main/yang/opendaylight-listener-test.yang @@ -0,0 +1,22 @@ +module listener-container { + yang-version 1; + namespace "urn:opendaylight:params:xml:ns:yang:controller:md:sal:test:listener"; + prefix "test"; + + revision "2015-08-25" { + description + "Initial revision."; + } + + container listener-test { + list list-item { + key "sip op"; + leaf sip { + type string; + } + leaf op { + type uint32; + } + } + } +}