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.impl;
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertTrue;
13 import static org.mockito.Matchers.any;
14 import static org.mockito.Matchers.anyString;
15 import static org.mockito.Matchers.eq;
16 import static org.mockito.Mockito.mock;
17 import static org.mockito.Mockito.times;
18 import static org.mockito.Mockito.verify;
19 import static org.mockito.Mockito.when;
21 import java.lang.reflect.Field;
22 import java.util.ArrayList;
23 import java.util.List;
25 import org.junit.Test;
26 import org.junit.runner.RunWith;
27 import org.mockito.InjectMocks;
28 import org.mockito.Mock;
29 import org.mockito.runners.MockitoJUnitRunner;
30 import org.opendaylight.netvirt.openstack.netvirt.translator.crud.INeutronNetworkCRUD;
31 import org.opendaylight.netvirt.openstack.netvirt.api.NetworkingProviderManager;
32 import org.opendaylight.netvirt.openstack.netvirt.api.Southbound;
33 import org.opendaylight.netvirt.openstack.netvirt.api.VlanConfigurationCache;
34 import org.opendaylight.netvirt.openstack.netvirt.translator.NeutronNetwork;
35 import org.opendaylight.netvirt.openstack.netvirt.translator.NeutronPort;
36 import org.opendaylight.netvirt.openstack.netvirt.translator.crud.INeutronPortCRUD;
37 import org.opendaylight.netvirt.utils.servicehelper.ServiceHelper;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105
39 .OvsdbTerminationPointAugmentation;
40 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology
42 import org.osgi.framework.ServiceReference;
45 * Unit test for {@link TenantNetworkManagerImpl}
47 @RunWith(MockitoJUnitRunner.class)
48 public class TenantNetworkManagerImplTest {
50 @InjectMocks private TenantNetworkManagerImpl tenantNetworkManagerImpl;
52 @Mock private INeutronPortCRUD neutronPortCache;
53 @Mock private INeutronNetworkCRUD neutronNetworkCache;
54 @Mock private VlanConfigurationCache vlanConfigurationCache;
55 @Mock private NetworkingProviderManager networkingProviderManager;
56 @Mock private Southbound southbound;
58 private static final String NETWORK_ID= "networkId";
59 private static final String SEG_ID = "segId";
60 private static final String INTERFACE_ID = "intId";
62 * Test method {@link TenantNetworkManagerImpl#getInternalVlan(Node, String)}
65 public void testGetInternalVlan() {
66 when(vlanConfigurationCache.getInternalVlan(any(Node.class), eq(NETWORK_ID))).thenReturn(10);
68 assertEquals("Error, did not return the correct internalVlan" , 10, tenantNetworkManagerImpl.getInternalVlan(mock(Node.class), NETWORK_ID));
69 assertEquals("Error, did not return the correct internalVlan", 0, tenantNetworkManagerImpl.getInternalVlan(mock(Node.class), "unexistingNetwork"));
71 verify(vlanConfigurationCache, times(2)).getInternalVlan(any(Node.class), anyString());
75 * Test method {@link TenantNetworkManagerImpl#reclaimInternalVlan(Node, NeutronNetwork)}
78 public void testReclaimInternalVlan() {
79 when(vlanConfigurationCache.reclaimInternalVlan(any(Node.class), eq(NETWORK_ID))).thenReturn(10);
81 tenantNetworkManagerImpl.reclaimInternalVlan(mock(Node.class), mock(NeutronNetwork.class));
82 tenantNetworkManagerImpl.reclaimInternalVlan(mock(Node.class), mock(NeutronNetwork.class));
84 verify(vlanConfigurationCache, times(2)).reclaimInternalVlan(any(Node.class), anyString());
88 * Test method {@link TenantNetworkManagerImpl#programInternalVlan(Node, OvsdbTerminationPointAugmentation, NeutronNetwork)}
91 public void testProgramInternalVlan(){
92 when(vlanConfigurationCache.getInternalVlan(any(Node.class), anyString())).thenReturn(10);
94 tenantNetworkManagerImpl.programInternalVlan(mock(Node.class), mock(OvsdbTerminationPointAugmentation.class), mock(NeutronNetwork.class));
96 verify(vlanConfigurationCache, times(1)).getInternalVlan(any(Node.class), anyString());
100 * Test method {@link TenantNetworkManagerImpl#isTenantNetworkPresentInNode(Node, String)}
103 public void testIsTenantNetworkPresentInNode() {
104 NeutronNetwork neutronNetwork = mock(NeutronNetwork.class);
105 when(neutronNetwork.getProviderSegmentationID()).thenReturn(SEG_ID);
106 when(neutronNetwork.getNetworkUUID()).thenReturn(NETWORK_ID);
107 List<NeutronNetwork> listNeutronNetwork = new ArrayList<>();
108 listNeutronNetwork.add(neutronNetwork);
109 when(neutronNetworkCache.getAllNetworks()).thenReturn(listNeutronNetwork);
111 when(southbound.getInterfaceExternalIdsValue(any(OvsdbTerminationPointAugmentation.class), anyString())).thenReturn(INTERFACE_ID);
112 NeutronPort neutronPort = mock(NeutronPort.class);
113 when(neutronPort.getNetworkUUID()).thenReturn(NETWORK_ID);
114 when(neutronPortCache.getPort(anyString())).thenReturn(neutronPort);
116 List<OvsdbTerminationPointAugmentation> ports = new ArrayList<>();
117 ports.add(mock(OvsdbTerminationPointAugmentation.class));
118 when(southbound.readTerminationPointAugmentations(any(Node.class))).thenReturn(ports);
120 assertTrue("Error, did not return correct boolean for isTenantNetworkPresentInNode", tenantNetworkManagerImpl.isTenantNetworkPresentInNode(mock(Node.class), SEG_ID));
124 * Test method {@link TenantNetworkManagerImpl#getNetworkId(String)}
127 public void testGetNetworkId() {
128 NeutronNetwork neutronNetwork = mock(NeutronNetwork.class);
129 List<NeutronNetwork> listNeutronNetwork = new ArrayList<>();
130 listNeutronNetwork.add(neutronNetwork);
132 when(neutronNetwork.getProviderSegmentationID()).thenReturn("segId");
133 when(neutronNetwork.getNetworkUUID()).thenReturn("networkUUID");
134 when(neutronNetworkCache.getAllNetworks()).thenReturn(listNeutronNetwork);
136 assertEquals("Error, did not return the UUID of the correct network", listNeutronNetwork.get(0).getNetworkUUID(), tenantNetworkManagerImpl.getNetworkId("segId"));
138 verify(neutronNetworkCache, times(1)).getAllNetworks();
142 * Test method {@link TenantNetworkManagerImpl#getTenantNetwork(OvsdbTerminationPointAugmentation)}
145 public void testGetTenantNetwork() {
146 when(southbound.getInterfaceExternalIdsValue(any(OvsdbTerminationPointAugmentation.class), anyString())).thenReturn(INTERFACE_ID);
147 NeutronPort neutronPort = mock(NeutronPort.class);
148 when(neutronPortCache.getPort(anyString())).thenReturn(neutronPort);
149 NeutronNetwork neutronNetwork = mock(NeutronNetwork.class);
150 when(neutronNetworkCache.getNetwork(anyString())).thenReturn(neutronNetwork);
152 assertEquals("Error, did not return the correct tenant", neutronNetwork, tenantNetworkManagerImpl.getTenantNetwork(mock(OvsdbTerminationPointAugmentation.class)));
156 public void testGetTenantPort() {
157 when(southbound.getInterfaceExternalIdsValue(any(OvsdbTerminationPointAugmentation.class), anyString())).thenReturn(INTERFACE_ID);
158 NeutronPort neutronPort = mock(NeutronPort.class);
159 when(neutronPortCache.getPort(anyString())).thenReturn(neutronPort);
161 assertEquals("Error, did not return the correct tenant", neutronPort, tenantNetworkManagerImpl.getTenantPort(mock(OvsdbTerminationPointAugmentation.class)));
165 public void testNetworkCreated() {
166 tenantNetworkManagerImpl.networkCreated(mock(Node.class), NETWORK_ID);
167 verify(vlanConfigurationCache, times(1)).assignInternalVlan(any(Node.class), anyString());
171 public void testSetDependencies() throws Exception {
172 VlanConfigurationCache vlanConfigurationCache = mock(VlanConfigurationCache.class);
173 Southbound southbound = mock(Southbound.class);
175 ServiceHelper.overrideGlobalInstance(VlanConfigurationCache.class, vlanConfigurationCache);
176 ServiceHelper.overrideGlobalInstance(Southbound.class, southbound);
178 tenantNetworkManagerImpl.setDependencies(mock(ServiceReference.class));
180 assertEquals("Error, did not return the correct object", getField("vlanConfigurationCache"), vlanConfigurationCache);
181 assertEquals("Error, did not return the correct object", getField("southbound"), southbound);
185 public void testSetDependenciesObject() throws Exception{
186 INeutronNetworkCRUD neutronNetworkCache = mock(INeutronNetworkCRUD.class);
187 tenantNetworkManagerImpl.setDependencies(neutronNetworkCache);
188 assertEquals("Error, did not return the correct object", getField("neutronNetworkCache"), neutronNetworkCache);
190 INeutronPortCRUD neutronPortCache = mock(INeutronPortCRUD.class);
191 tenantNetworkManagerImpl.setDependencies(neutronPortCache);
192 assertEquals("Error, did not return the correct object", getField("neutronPortCache"), neutronPortCache);
195 private Object getField(String fieldName) throws Exception {
196 Field field = TenantNetworkManagerImpl.class.getDeclaredField(fieldName);
197 field.setAccessible(true);
198 return field.get(tenantNetworkManagerImpl);