Rename DOMDataTreeChangeService
[mdsal.git] / binding / mdsal-binding-dom-adapter / src / test / java / org / opendaylight / mdsal / binding / dom / adapter / DataListenerTest.java
1 /*
2  * Copyright (c) 2023 PANTHEON.tech, s.r.o. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.mdsal.binding.dom.adapter;
9
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;
15
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;
33
34 public class DataListenerTest extends AbstractDataBrokerTest {
35     DataBroker dataBroker;
36
37     DataListener<Item> listener;
38
39     DataChangeListener<Item> changeListener;
40
41     @Before
42     public void setUp() {
43         dataBroker = getDataBroker();
44         listener = mock(DataListener.class);
45         changeListener = mock(DataChangeListener.class);
46     }
47
48     @Test
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,
53             instanceIdentifier);
54
55         final Throwable dataListenerException = assertThrows(IllegalArgumentException.class,
56             () -> dataBroker.registerDataListener(itemsDataTreeIdentifier, listener));
57         assertTrue(dataListenerException.getMessage().contains("Cannot register listener for wildcard"));
58
59         final Throwable dataListenerChangeException = assertThrows(IllegalArgumentException.class,
60             () -> dataBroker.registerDataChangeListener(itemsDataTreeIdentifier, changeListener));
61         assertTrue(dataListenerChangeException.getMessage().contains("Cannot register listener for wildcard"));
62     }
63
64     @Test
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();
69
70         dataBroker.registerDataListener(
71             DataTreeIdentifier.of(LogicalDatastoreType.CONFIGURATION, instanceIdentifier), listener);
72
73         verify(listener, timeout(100)).dataChangedTo(item);
74     }
75
76     @Test
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();
81
82         dataBroker.registerDataChangeListener(
83             DataTreeIdentifier.of(LogicalDatastoreType.CONFIGURATION, instanceIdentifier), changeListener);
84
85         verify(changeListener, timeout(100)).dataChanged(null, item);
86     }
87
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());
96         return wildcardItem;
97     }
98 }