Merge "Add UT for SouthboundMapper and SouthboundProvider"
[netvirt.git] / openstack / net-virt / src / test / java / org / opendaylight / ovsdb / openstack / netvirt / impl / NodeCacheManagerImplTest.java
1 /*
2  * Copyright (c) 2015 Inocybe 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.ovsdb.openstack.netvirt.impl;
10 import static org.junit.Assert.assertEquals;
11 import static org.mockito.Matchers.any;
12 import static org.mockito.Mockito.mock;
13 import static org.mockito.Mockito.when;
14
15 import java.lang.reflect.Field;
16 import java.util.Map;
17
18 import org.junit.Test;
19 import org.junit.runner.RunWith;
20 import org.mockito.InjectMocks;
21 import org.mockito.Mock;
22 import org.mockito.Spy;
23 import org.opendaylight.ovsdb.openstack.netvirt.NodeCacheManagerEvent;
24 import org.opendaylight.ovsdb.openstack.netvirt.api.Action;
25 import org.opendaylight.ovsdb.openstack.netvirt.api.EventDispatcher;
26 import org.opendaylight.ovsdb.openstack.netvirt.api.NodeCacheListener;
27 import org.opendaylight.ovsdb.openstack.netvirt.api.Southbound;
28 import org.opendaylight.ovsdb.utils.servicehelper.ServiceHelper;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation;
31 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
32 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
33
34 import org.osgi.framework.ServiceReference;
35 import org.powermock.api.mockito.PowerMockito;
36 import org.powermock.core.classloader.annotations.PrepareForTest;
37 import org.powermock.modules.junit4.PowerMockRunner;
38
39 import com.google.common.collect.Maps;
40
41 /**
42  * Unit test for {@link NodeCacheManagerImpl}
43  */
44 @RunWith(PowerMockRunner.class)
45 @PrepareForTest(ServiceHelper.class)
46 public class NodeCacheManagerImplTest {
47
48     @InjectMocks private NodeCacheManagerImpl nodeCacheManagerImpl;
49     @Spy private Map<Long, NodeCacheListener> handlers = Maps.newHashMap();
50
51     @Mock private Southbound southbound;
52
53     @Test
54     public void testProcessEvent() {
55         NodeCacheManagerEvent ev = mock(NodeCacheManagerEvent.class);
56         Node node = mock(Node.class);
57         when(node.getNodeId()).thenReturn(mock(NodeId.class));
58         when(ev.getNode()).thenReturn(node);
59
60         when(ev.getAction()).thenReturn(Action.UPDATE);
61         nodeCacheManagerImpl.processEvent(ev);
62         assertEquals("Error, did not delete the event", 1, nodeCacheManagerImpl.getNodes().size());
63
64         when(ev.getAction()).thenReturn(Action.DELETE);
65         nodeCacheManagerImpl.processEvent(ev);
66         assertEquals("Error, did not delete the event", 0, nodeCacheManagerImpl.getNodes().size());
67     }
68
69     @Test
70     public void testCacheListenerAddedAndRemoved() {
71         ServiceReference ref = mock(ServiceReference.class);
72         when(ref.getProperty(org.osgi.framework.Constants.SERVICE_ID)).thenReturn(Long.valueOf(1));
73
74         // add
75         nodeCacheManagerImpl.cacheListenerAdded(ref, mock(NodeCacheListener.class));
76         assertEquals("Error, cacheListenerAdded() did not add any listener", 1, handlers.size());
77         // remove
78         nodeCacheManagerImpl.cacheListenerRemoved(ref);
79         assertEquals("Error, cacheListenerAdded() did not remove any listener", 0, handlers.size());
80     }
81
82     @Test
83     public void testGetOvsdbNodes() {
84         addItem();
85
86         when(southbound.extractOvsdbNode(any(Node.class))).thenReturn(mock(OvsdbNodeAugmentation.class));
87
88         assertEquals("Error, getOvsdbNodes() did not return the correct value", 1, nodeCacheManagerImpl.getOvsdbNodes().size());
89     }
90
91     @Test
92     public void testGetBridgeNodes() {
93         addItem();
94
95         when(southbound.getBridge(any(Node.class))).thenReturn(mock(OvsdbBridgeAugmentation.class));
96
97         assertEquals("Error, getBridgeNodes() did not return the correct value", 1, nodeCacheManagerImpl.getBridgeNodes().size());
98     }
99
100     @Test
101     public void testGetNodes() {
102         addItem();
103
104         assertEquals("Error, getNodes() did not return the correct value", 1, nodeCacheManagerImpl.getNodes().size());
105     }
106
107     private void addItem() {
108         NodeCacheManagerEvent ev = mock(NodeCacheManagerEvent.class);
109         Node node = mock(Node.class);
110         when(node.getNodeId()).thenReturn(mock(NodeId.class));
111         when(ev.getNode()).thenReturn(node);
112
113         when(ev.getAction()).thenReturn(Action.UPDATE);
114         nodeCacheManagerImpl.processEvent(ev);
115     }
116
117     @Test
118     public void testSetDependencies() throws Exception {
119         Southbound southbound = mock(Southbound.class);
120         EventDispatcher eventDispatcher = mock(EventDispatcher.class);
121
122         PowerMockito.mockStatic(ServiceHelper.class);
123         PowerMockito.when(ServiceHelper.getGlobalInstance(Southbound.class, nodeCacheManagerImpl)).thenReturn(southbound);
124         PowerMockito.when(ServiceHelper.getGlobalInstance(EventDispatcher.class, nodeCacheManagerImpl)).thenReturn(eventDispatcher);
125
126         nodeCacheManagerImpl.setDependencies(mock(ServiceReference.class));
127
128         assertEquals("Error, did not return the correct object", getField("southbound"), southbound);
129         assertEquals("Error, did not return the correct object", getSuperField("eventDispatcher"), eventDispatcher);
130     }
131
132     private Object getField(String fieldName) throws Exception {
133         Field field = NodeCacheManagerImpl.class.getDeclaredField(fieldName);
134         field.setAccessible(true);
135         return field.get(nodeCacheManagerImpl);
136     }
137
138     private Object getSuperField(String fieldName) throws Exception {
139         Field field = NodeCacheManagerImpl.class.getSuperclass().getDeclaredField(fieldName);
140         field.setAccessible(true);
141         return field.get(nodeCacheManagerImpl);
142     }
143 }