2 * Copyright (c) 2023 PANTHEON.tech, s.r.o. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.mdsal.binding.dom.adapter;
10 import static org.junit.Assert.assertThrows;
11 import static org.junit.Assert.assertTrue;
12 import static org.mockito.Mockito.mock;
13 import static org.mockito.Mockito.timeout;
14 import static org.mockito.Mockito.verify;
16 import org.junit.Before;
17 import org.junit.Test;
18 import org.opendaylight.mdsal.binding.api.DataBroker;
19 import org.opendaylight.mdsal.binding.api.DataChangeListener;
20 import org.opendaylight.mdsal.binding.api.DataListener;
21 import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
22 import org.opendaylight.mdsal.binding.api.WriteTransaction;
23 import org.opendaylight.mdsal.binding.dom.adapter.test.AbstractDataBrokerTest;
24 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
25 import org.opendaylight.yang.gen.v1.mdsal813.norev.RegisterListenerTest;
26 import org.opendaylight.yang.gen.v1.mdsal813.norev.RegisterListenerTestBuilder;
27 import org.opendaylight.yang.gen.v1.mdsal813.norev.register.listener.test.Item;
28 import org.opendaylight.yang.gen.v1.mdsal813.norev.register.listener.test.ItemBuilder;
29 import org.opendaylight.yang.gen.v1.mdsal813.norev.register.listener.test.ItemKey;
30 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
31 import org.opendaylight.yangtools.yang.binding.util.BindingMap;
32 import org.opendaylight.yangtools.yang.common.Uint32;
34 public class DataListenerTest extends AbstractDataBrokerTest {
35 DataBroker dataBroker;
37 DataListener<Item> listener;
39 DataChangeListener<Item> changeListener;
43 dataBroker = getDataBroker();
44 listener = mock(DataListener.class);
45 changeListener = mock(DataChangeListener.class);
49 public void testThrowExceptionOnRegister() {
50 final InstanceIdentifier<Item> instanceIdentifier = InstanceIdentifier.builder(RegisterListenerTest.class)
51 .child(Item.class).build();
52 final DataTreeIdentifier<Item> itemsDataTreeIdentifier = DataTreeIdentifier.create(
53 LogicalDatastoreType.OPERATIONAL,
56 final Throwable dataListenerException = assertThrows(IllegalArgumentException.class,
57 () -> dataBroker.registerDataListener(itemsDataTreeIdentifier, listener));
58 assertTrue(dataListenerException.getMessage().contains("Cannot register listener for wildcard"));
60 final Throwable dataListenerChangeException = assertThrows(IllegalArgumentException.class,
61 () -> dataBroker.registerDataChangeListener(itemsDataTreeIdentifier, changeListener));
62 assertTrue(dataListenerChangeException.getMessage().contains("Cannot register listener for wildcard"));
66 public void testRegisterDataListener() {
67 final Item item = writeItems();
68 final InstanceIdentifier<Item> instanceIdentifier = InstanceIdentifier.builder(RegisterListenerTest.class)
69 .child(Item.class, new ItemKey(item.key())).build();
71 dataBroker.registerDataListener(
72 DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION, instanceIdentifier), listener);
74 verify(listener, timeout(100)).dataChangedTo(item);
78 public void testRegisterDataChangeListener() {
79 final Item item = writeItems();
80 final InstanceIdentifier<Item> instanceIdentifier = InstanceIdentifier.builder(RegisterListenerTest.class)
81 .child(Item.class, new ItemKey(item.key())).build();
83 dataBroker.registerDataChangeListener(
84 DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION, instanceIdentifier), changeListener);
86 verify(changeListener, timeout(100)).dataChanged(null, item);
89 private Item writeItems() {
90 final WriteTransaction writeTransaction = getDataBroker().newWriteOnlyTransaction();
91 final Item wildcardItem = new ItemBuilder().setText("name").setNumber(Uint32.valueOf(43)).build();
92 final RegisterListenerTestBuilder builder = new RegisterListenerTestBuilder().setItem(
93 BindingMap.of(wildcardItem));
94 writeTransaction.put(LogicalDatastoreType.CONFIGURATION, InstanceIdentifier.builder(
95 RegisterListenerTest.class).build(), builder.build());
96 assertCommit(writeTransaction.commit());