183d236ebfdfbd940e0d38971418d8a306588ad7
[groupbasedpolicy.git] / renderers / ios-xe / src / test / java / org / opendaylight / groupbasedpolicy / renderer / ios_xe_provider / impl / listener / IosXeCapableNodeListenerImplTest.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. 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
9 package org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.listener;
10
11 import java.util.Collections;
12 import org.junit.After;
13 import org.junit.Before;
14 import org.junit.Test;
15 import org.junit.runner.RunWith;
16 import org.mockito.Matchers;
17 import org.mockito.Mock;
18 import org.mockito.Mockito;
19 import org.mockito.runners.MockitoJUnitRunner;
20 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
21 import org.opendaylight.controller.md.sal.binding.api.DataObjectModification;
22 import org.opendaylight.controller.md.sal.binding.api.DataTreeChangeListener;
23 import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
24 import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
25 import org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.manager.NodeManager;
26 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
27 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
28 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
29 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder;
30 import org.opendaylight.yangtools.concepts.ListenerRegistration;
31
32 /**
33  * Test for {@link IosXeCapableNodeListenerImpl}.
34  */
35 @RunWith(MockitoJUnitRunner.class)
36 public class IosXeCapableNodeListenerImplTest {
37
38     @Mock
39     private DataBroker dataBroker;
40     @Mock
41     private NodeManager nodeManager;
42     @Mock
43     private ListenerRegistration<DataTreeChangeListener<Node>> listenerRegistration;
44     @Mock
45     private DataTreeModification<Node> dataTreeModification;
46     @Mock
47     private DataObjectModification<Node> rootNode;
48
49     private IosXeCapableNodeListenerImpl listener;
50
51     @Before
52     public void setUp() throws Exception {
53         Mockito.when(dataBroker.registerDataTreeChangeListener(
54                 Matchers.<DataTreeIdentifier<Node>>any(),
55                 Matchers.<DataTreeChangeListener<Node>>any()))
56                 .thenReturn(listenerRegistration);
57         listener = new IosXeCapableNodeListenerImpl(dataBroker, nodeManager);
58         Mockito.verify(dataBroker).registerDataTreeChangeListener(
59                 Matchers.<DataTreeIdentifier<NetworkTopology>>any(),
60                 Matchers.<DataTreeChangeListener<NetworkTopology>>any());
61     }
62
63     @After
64     public void tearDown() throws Exception {
65         Mockito.verifyNoMoreInteractions(dataBroker, nodeManager, listenerRegistration);
66     }
67
68     @Test
69     public void testOnDataTreeChanged_add() throws Exception {
70         final Node topologyNode = createNetworkTopologyNode("topology-node-id-1");
71         Mockito.when(dataTreeModification.getRootNode()).thenReturn(rootNode);
72         Mockito.when(rootNode.getDataBefore()).thenReturn(topologyNode);
73         Mockito.when(rootNode.getDataAfter()).thenReturn(null);
74
75         listener.onDataTreeChanged(Collections.singleton(dataTreeModification));
76         Mockito.verify(nodeManager).syncNodes(null, topologyNode);
77     }
78
79
80     @Test
81     public void testOnDataTreeChanged_update() throws Exception {
82         final Node topologyNodeBefore = createNetworkTopologyNode("topology-node-id-1");
83         final Node topologyNodeAfter = createNetworkTopologyNode("topology-node-id-2");
84         Mockito.when(dataTreeModification.getRootNode()).thenReturn(rootNode);
85         Mockito.when(rootNode.getDataBefore()).thenReturn(topologyNodeBefore);
86         Mockito.when(rootNode.getDataAfter()).thenReturn(topologyNodeAfter);
87
88         listener.onDataTreeChanged(Collections.singleton(dataTreeModification));
89         Mockito.verify(nodeManager).syncNodes(topologyNodeAfter, topologyNodeBefore);
90     }
91
92     @Test
93     public void testOnDataTreeChanged_remove() throws Exception {
94         final Node topologyNode = createNetworkTopologyNode("topology-node-id-2");
95         Mockito.when(dataTreeModification.getRootNode()).thenReturn(rootNode);
96         Mockito.when(rootNode.getDataBefore()).thenReturn(null);
97         Mockito.when(rootNode.getDataAfter()).thenReturn(topologyNode);
98
99         listener.onDataTreeChanged(Collections.singleton(dataTreeModification));
100         Mockito.verify(nodeManager).syncNodes(topologyNode, null);
101     }
102
103     private Node createNetworkTopologyNode(final String nodeId) {
104         return new NodeBuilder()
105                 .setNodeId(new NodeId(nodeId))
106                 .build();
107     }
108
109     @Test
110     public void testClose() throws Exception {
111         Mockito.verify(listenerRegistration, Mockito.never()).close();
112         listener.close();
113         Mockito.verify(listenerRegistration).close();
114     }
115 }