2 * Copyright (c) 2015, 2016 Inocybe 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
9 package org.opendaylight.netvirt.openstack.netvirt;
11 import static org.junit.Assert.assertEquals;
12 import static org.mockito.Matchers.any;
13 import static org.mockito.Matchers.anyString;
14 import static org.mockito.Matchers.same;
15 import static org.mockito.Mockito.mock;
16 import static org.mockito.Mockito.times;
17 import static org.mockito.Mockito.verify;
18 import static org.mockito.Mockito.when;
20 import java.lang.reflect.Field;
21 import java.net.HttpURLConnection;
22 import java.util.ArrayList;
23 import java.util.List;
25 import org.junit.Before;
26 import org.junit.Test;
27 import org.junit.runner.RunWith;
28 import org.mockito.InjectMocks;
29 import org.mockito.Mock;
30 import org.mockito.Mockito;
31 import org.mockito.runners.MockitoJUnitRunner;
32 import org.opendaylight.netvirt.openstack.netvirt.api.NodeCacheManager;
33 import org.opendaylight.netvirt.openstack.netvirt.api.TenantNetworkManager;
34 import org.opendaylight.netvirt.openstack.netvirt.translator.crud.INeutronNetworkCRUD;
35 import org.opendaylight.netvirt.openstack.netvirt.api.Action;
36 import org.opendaylight.netvirt.openstack.netvirt.api.BridgeConfigurationManager;
37 import org.opendaylight.netvirt.openstack.netvirt.api.EventDispatcher;
38 import org.opendaylight.netvirt.openstack.netvirt.api.Southbound;
39 import org.opendaylight.netvirt.openstack.netvirt.impl.NeutronL3Adapter;
40 import org.opendaylight.netvirt.openstack.netvirt.translator.NeutronNetwork;
41 import org.opendaylight.netvirt.utils.servicehelper.ServiceHelper;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105
43 .OvsdbTerminationPointAugmentation;
44 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology
46 import org.osgi.framework.ServiceReference;
49 * Unit test for {@link NetworkHandler}
51 @RunWith(MockitoJUnitRunner.class)
52 public class NetworkHandlerTest {
54 @InjectMocks private NetworkHandler networkHandler;
56 @Mock private NeutronNetwork sharedNeutronNetwork;
57 @Mock private NeutronNetwork nonSharedNeutronNetwork;
59 @Mock private NeutronL3Adapter neutronL3Adapter;
60 @Mock private TenantNetworkManager tenantNetworkManager;
61 @Mock private INeutronNetworkCRUD neutronNetworkCache;
62 @Mock private BridgeConfigurationManager bridgeConfigurationManager;
63 @Mock private NodeCacheManager nodeCacheManager;
64 @Mock private Southbound southbound;
68 when(sharedNeutronNetwork.isShared()).thenReturn(true);
69 when(nonSharedNeutronNetwork.isShared()).thenReturn(false);
73 * Test method {@link NetworkHandler#canCreateNetwork(NeutronNetwork)}
76 public void testCanCreateNetwork() {
77 assertEquals("Error, did not return the correct HTTP flag", HttpURLConnection.HTTP_NOT_ACCEPTABLE, networkHandler.canCreateNetwork(sharedNeutronNetwork));
78 assertEquals("Error, did not return the correct HTTP flag", HttpURLConnection.HTTP_OK, networkHandler.canCreateNetwork(nonSharedNeutronNetwork));
82 * Test method {@link NetworkHandler#canUpdateNetwork(NeutronNetwork, NeutronNetwork)}
85 public void testCanUpdateNetwork() {
86 assertEquals("Error, did not return the correct HTTP flag", HttpURLConnection.HTTP_NOT_ACCEPTABLE, networkHandler.canUpdateNetwork(sharedNeutronNetwork, sharedNeutronNetwork));
87 assertEquals("Error, did not return the correct HTTP flag", HttpURLConnection.HTTP_OK, networkHandler.canUpdateNetwork(nonSharedNeutronNetwork, nonSharedNeutronNetwork));
91 * Test method {@link NetworkHandler#canDeleteNetwork(NeutronNetwork)}
94 public void testCanDeleteNetwork() {
95 assertEquals("Error, did not return the correct HTTP flag", HttpURLConnection.HTTP_OK, networkHandler.canDeleteNetwork(nonSharedNeutronNetwork));
99 * Test method {@link NetworkHandler#processEvent(AbstractEvent)}
102 public void testProcessEvent() {
103 NetworkHandler networkHandlerSpy = Mockito.spy(networkHandler);
105 NorthboundEvent ev = mock(NorthboundEvent.class);
106 when(ev.getNeutronNetwork()).thenReturn(nonSharedNeutronNetwork);
108 when(ev.getAction()).thenReturn(Action.ADD);
109 networkHandlerSpy.processEvent(ev);
110 verify(neutronL3Adapter, times(1)).handleNeutronNetworkEvent(any(NeutronNetwork.class), same(Action.ADD));
112 when(ev.getAction()).thenReturn(Action.UPDATE);
113 networkHandlerSpy.processEvent(ev);
114 verify(neutronL3Adapter, times(1)).handleNeutronNetworkEvent(any(NeutronNetwork.class), same(Action.UPDATE));
116 String portName = "portName";
118 List<NeutronNetwork> networks = new ArrayList<>();
119 when(neutronNetworkCache.getAllNetworks()).thenReturn(networks);
121 List<Node> nodes = new ArrayList<>();
122 nodes.add(mock(Node.class));
123 when(nodeCacheManager.getNodes()).thenReturn(nodes);
125 List<String> phyIfName = new ArrayList<>();
126 phyIfName.add(portName);
127 when(bridgeConfigurationManager.getAllPhysicalInterfaceNames(any(Node.class))).thenReturn(phyIfName );
129 List<OvsdbTerminationPointAugmentation> ports = new ArrayList<>();
130 OvsdbTerminationPointAugmentation port = mock(OvsdbTerminationPointAugmentation.class);
131 when(port.getName()).thenReturn(portName);
133 when(southbound.getTerminationPointsOfBridge(any(Node.class))).thenReturn(ports);
135 when(ev.getAction()).thenReturn(Action.DELETE);
136 when(southbound.isTunnel(any(OvsdbTerminationPointAugmentation.class))).thenReturn(true);
137 networkHandlerSpy.processEvent(ev); // test delete with southbound.isTunnel(true)
138 when(southbound.isTunnel(any(OvsdbTerminationPointAugmentation.class))).thenReturn(false);
139 networkHandlerSpy.processEvent(ev); // test delete with southbound.isTunnel(false)
140 // the functions are called once per call to processEvent()
141 verify(neutronL3Adapter, times(2)).handleNeutronNetworkEvent(any(NeutronNetwork.class), same(Action.DELETE));
142 verify(tenantNetworkManager, times(2)).networkDeleted(anyString());
143 // depending on the southbound.isTunnel()
144 verify(southbound, times(2)).deleteTerminationPoint(any(Node.class), anyString());
148 public void testSetDependencies() throws Exception {
149 TenantNetworkManager tenantNetworkManager = mock(TenantNetworkManager.class);
150 BridgeConfigurationManager bridgeConfigurationManager = mock(BridgeConfigurationManager.class);
151 NodeCacheManager nodeCacheManager = mock(NodeCacheManager.class);
152 NeutronL3Adapter neutronL3Adapter = mock(NeutronL3Adapter.class);
153 Southbound southbound = mock(Southbound.class);
154 EventDispatcher eventDispatcher = mock(EventDispatcher.class);
157 ServiceHelper.overrideGlobalInstance(TenantNetworkManager.class, tenantNetworkManager);
158 ServiceHelper.overrideGlobalInstance(BridgeConfigurationManager.class, bridgeConfigurationManager);
159 ServiceHelper.overrideGlobalInstance(NodeCacheManager.class, nodeCacheManager);
160 ServiceHelper.overrideGlobalInstance(NeutronL3Adapter.class, neutronL3Adapter);
161 ServiceHelper.overrideGlobalInstance(Southbound.class, southbound);
162 ServiceHelper.overrideGlobalInstance(EventDispatcher.class, eventDispatcher);
164 networkHandler.setDependencies(mock(ServiceReference.class));
166 assertEquals("Error, did not return the correct object", getField("tenantNetworkManager"), tenantNetworkManager);
167 assertEquals("Error, did not return the correct object", getField("bridgeConfigurationManager"), bridgeConfigurationManager);
168 assertEquals("Error, did not return the correct object", getField("nodeCacheManager"), nodeCacheManager);
169 assertEquals("Error, did not return the correct object", getField("neutronL3Adapter"), neutronL3Adapter);
170 assertEquals("Error, did not return the correct object", getField("southbound"), southbound);
171 assertEquals("Error, did not return the correct object", networkHandler.eventDispatcher, eventDispatcher);
175 public void testSetDependenciesObject() throws Exception{
176 INeutronNetworkCRUD iNeutronNetworkCRUD = mock(INeutronNetworkCRUD.class);
177 networkHandler.setDependencies(iNeutronNetworkCRUD);
178 assertEquals("Error, did not return the correct object", getField("neutronNetworkCache"), iNeutronNetworkCRUD);
181 private Object getField(String fieldName) throws Exception {
182 Field field = NetworkHandler.class.getDeclaredField(fieldName);
183 field.setAccessible(true);
184 return field.get(networkHandler);