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.of(LogicalDatastoreType.OPERATIONAL,
55 final Throwable dataListenerException = assertThrows(IllegalArgumentException.class,
56 () -> dataBroker.registerDataListener(itemsDataTreeIdentifier, listener));
57 assertTrue(dataListenerException.getMessage().contains("Cannot register listener for wildcard"));
59 final Throwable dataListenerChangeException = assertThrows(IllegalArgumentException.class,
60 () -> dataBroker.registerDataChangeListener(itemsDataTreeIdentifier, changeListener));
61 assertTrue(dataListenerChangeException.getMessage().contains("Cannot register listener for wildcard"));
65 public void testRegisterDataListener() {
66 final Item item = writeItems();
67 final InstanceIdentifier<Item> instanceIdentifier = InstanceIdentifier.builder(RegisterListenerTest.class)
68 .child(Item.class, new ItemKey(item.key())).build();
70 dataBroker.registerDataListener(
71 DataTreeIdentifier.of(LogicalDatastoreType.CONFIGURATION, instanceIdentifier), listener);
73 verify(listener, timeout(100)).dataChangedTo(item);
77 public void testRegisterDataChangeListener() {
78 final Item item = writeItems();
79 final InstanceIdentifier<Item> instanceIdentifier = InstanceIdentifier.builder(RegisterListenerTest.class)
80 .child(Item.class, new ItemKey(item.key())).build();
82 dataBroker.registerDataChangeListener(
83 DataTreeIdentifier.of(LogicalDatastoreType.CONFIGURATION, instanceIdentifier), changeListener);
85 verify(changeListener, timeout(100)).dataChanged(null, item);
88 private Item writeItems() {
89 final WriteTransaction writeTransaction = getDataBroker().newWriteOnlyTransaction();
90 final Item wildcardItem = new ItemBuilder().setText("name").setNumber(Uint32.valueOf(43)).build();
91 final RegisterListenerTestBuilder builder = new RegisterListenerTestBuilder().setItem(
92 BindingMap.of(wildcardItem));
93 writeTransaction.put(LogicalDatastoreType.CONFIGURATION, InstanceIdentifier.builder(
94 RegisterListenerTest.class).build(), builder.build());
95 assertCommit(writeTransaction.commit());