a347b047c5737776d916f31dc50293274533c46b
[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.create(
53             LogicalDatastoreType.OPERATIONAL,
54             instanceIdentifier);
55
56         final Throwable dataListenerException = assertThrows(IllegalArgumentException.class,
57             () -> dataBroker.registerDataListener(itemsDataTreeIdentifier, listener));
58         assertTrue(dataListenerException.getMessage().contains("Cannot register listener for wildcard"));
59
60         final Throwable dataListenerChangeException = assertThrows(IllegalArgumentException.class,
61             () -> dataBroker.registerDataChangeListener(itemsDataTreeIdentifier, changeListener));
62         assertTrue(dataListenerChangeException.getMessage().contains("Cannot register listener for wildcard"));
63     }
64
65     @Test
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();
70
71         dataBroker.registerDataListener(
72             DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION, instanceIdentifier), listener);
73
74         verify(listener, timeout(100)).dataChangedTo(item);
75     }
76
77     @Test
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();
82
83         dataBroker.registerDataChangeListener(
84             DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION, instanceIdentifier), changeListener);
85
86         verify(changeListener, timeout(100)).dataChanged(null, item);
87     }
88
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());
97         return wildcardItem;
98     }
99 }