7ae180f48f51cbfa0cbb8ee590f6cbdfe0b17ad9
[netvirt.git] / openstack / net-virt / src / test / java / org / opendaylight / netvirt / openstack / netvirt / impl / TenantNetworkManagerImplTest.java
1 /*
2  * Copyright (c) 2015, 2016 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.netvirt.openstack.netvirt.impl;
10
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;
20
21 import java.lang.reflect.Field;
22 import java.util.ArrayList;
23 import java.util.List;
24
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
41         .Node;
42 import org.osgi.framework.ServiceReference;
43
44 /**
45  * Unit test for {@link TenantNetworkManagerImpl}
46  */
47 @RunWith(MockitoJUnitRunner.class)
48 public class TenantNetworkManagerImplTest {
49
50     @InjectMocks private TenantNetworkManagerImpl tenantNetworkManagerImpl;
51
52     @Mock private INeutronPortCRUD neutronPortCache;
53     @Mock private INeutronNetworkCRUD neutronNetworkCache;
54     @Mock private VlanConfigurationCache vlanConfigurationCache;
55     @Mock private NeutronL3Adapter neutronL3Adapter;
56     @Mock private NetworkingProviderManager networkingProviderManager;
57     @Mock private Southbound southbound;
58
59     private static final String NETWORK_ID= "networkId";
60     private static final String SEG_ID = "segId";
61     private static final String INTERFACE_ID = "intId";
62     /**
63      * Test method {@link TenantNetworkManagerImpl#getInternalVlan(Node, String)}
64      */
65     @Test
66     public void testGetInternalVlan() {
67         when(vlanConfigurationCache.getInternalVlan(any(Node.class), eq(NETWORK_ID))).thenReturn(10);
68
69         assertEquals("Error, did not return the correct internalVlan" , 10, tenantNetworkManagerImpl.getInternalVlan(mock(Node.class), NETWORK_ID));
70         assertEquals("Error, did not return the correct internalVlan", 0, tenantNetworkManagerImpl.getInternalVlan(mock(Node.class), "unexistingNetwork"));
71
72         verify(vlanConfigurationCache, times(2)).getInternalVlan(any(Node.class), anyString());
73     }
74
75     /**
76      * Test method {@link TenantNetworkManagerImpl#reclaimInternalVlan(Node, NeutronNetwork)}
77      */
78     @Test
79     public void testReclaimInternalVlan() {
80         when(vlanConfigurationCache.reclaimInternalVlan(any(Node.class), eq(NETWORK_ID))).thenReturn(10);
81
82         tenantNetworkManagerImpl.reclaimInternalVlan(mock(Node.class), mock(NeutronNetwork.class));
83         tenantNetworkManagerImpl.reclaimInternalVlan(mock(Node.class), mock(NeutronNetwork.class));
84
85         verify(vlanConfigurationCache, times(2)).reclaimInternalVlan(any(Node.class), anyString());
86     }
87
88     /**
89      * Test method {@link TenantNetworkManagerImpl#programInternalVlan(Node, OvsdbTerminationPointAugmentation, NeutronNetwork)}
90      */
91     @Test
92     public void testProgramInternalVlan(){
93         when(vlanConfigurationCache.getInternalVlan(any(Node.class), anyString())).thenReturn(10);
94
95         tenantNetworkManagerImpl.programInternalVlan(mock(Node.class), mock(OvsdbTerminationPointAugmentation.class), mock(NeutronNetwork.class));
96
97         verify(vlanConfigurationCache, times(1)).getInternalVlan(any(Node.class), anyString());
98     }
99
100     /**
101      * Test method {@link TenantNetworkManagerImpl#isTenantNetworkPresentInNode(Node, String)}
102      */
103     @Test
104     public void testIsTenantNetworkPresentInNode() {
105         NeutronNetwork neutronNetwork = mock(NeutronNetwork.class);
106         when(neutronNetwork.getProviderSegmentationID()).thenReturn(SEG_ID);
107         when(neutronNetwork.getNetworkUUID()).thenReturn(NETWORK_ID);
108         List<NeutronNetwork> listNeutronNetwork = new ArrayList<>();
109         listNeutronNetwork.add(neutronNetwork);
110         when(neutronNetworkCache.getAllNetworks()).thenReturn(listNeutronNetwork);
111
112         when(southbound.getInterfaceExternalIdsValue(any(OvsdbTerminationPointAugmentation.class), anyString())).thenReturn(INTERFACE_ID);
113         NeutronPort neutronPort = mock(NeutronPort.class);
114         when(neutronPort.getNetworkUUID()).thenReturn(NETWORK_ID);
115         when(neutronL3Adapter.getPortPreferablyFromCleanupCache(anyString())).thenReturn(neutronPort);
116
117         List<OvsdbTerminationPointAugmentation> ports = new ArrayList<>();
118         ports.add(mock(OvsdbTerminationPointAugmentation.class));
119         when(southbound.readTerminationPointAugmentations(any(Node.class))).thenReturn(ports);
120
121         assertTrue("Error, did not return correct boolean for isTenantNetworkPresentInNode", tenantNetworkManagerImpl.isTenantNetworkPresentInNode(mock(Node.class), SEG_ID));
122     }
123
124     /**
125      * Test method {@link TenantNetworkManagerImpl#getNetworkId(String)}
126      */
127     @Test
128     public void testGetNetworkId() {
129         NeutronNetwork neutronNetwork = mock(NeutronNetwork.class);
130         List<NeutronNetwork> listNeutronNetwork = new ArrayList<>();
131         listNeutronNetwork.add(neutronNetwork);
132
133         when(neutronNetwork.getProviderSegmentationID()).thenReturn("segId");
134         when(neutronNetwork.getNetworkUUID()).thenReturn("networkUUID");
135         when(neutronNetworkCache.getAllNetworks()).thenReturn(listNeutronNetwork);
136
137         assertEquals("Error, did not return the UUID of the correct network", listNeutronNetwork.get(0).getNetworkUUID(), tenantNetworkManagerImpl.getNetworkId("segId"));
138
139         verify(neutronNetworkCache, times(1)).getAllNetworks();
140     }
141
142     /**
143      * Test method {@link TenantNetworkManagerImpl#getTenantNetwork(OvsdbTerminationPointAugmentation)}
144      */
145     @Test
146     public void testGetTenantNetwork() {
147         when(southbound.getInterfaceExternalIdsValue(any(OvsdbTerminationPointAugmentation.class), anyString())).thenReturn(INTERFACE_ID);
148         NeutronPort neutronPort = mock(NeutronPort.class);
149         when(neutronL3Adapter.getPortPreferablyFromCleanupCache(anyString())).thenReturn(neutronPort);
150         NeutronNetwork neutronNetwork = mock(NeutronNetwork.class);
151         when(neutronNetworkCache.getNetwork(anyString())).thenReturn(neutronNetwork);
152
153         assertEquals("Error, did not return the correct tenant", neutronNetwork, tenantNetworkManagerImpl.getTenantNetwork(mock(OvsdbTerminationPointAugmentation.class)));
154     }
155
156     @Test
157     public void testGetTenantPort() {
158         when(southbound.getInterfaceExternalIdsValue(any(OvsdbTerminationPointAugmentation.class), anyString())).thenReturn(INTERFACE_ID);
159         NeutronPort neutronPort = mock(NeutronPort.class);
160         when(neutronL3Adapter.getPortPreferablyFromCleanupCache(anyString())).thenReturn(neutronPort);
161
162         assertEquals("Error, did not return the correct tenant", neutronPort, tenantNetworkManagerImpl.getTenantPort(mock(OvsdbTerminationPointAugmentation.class)));
163     }
164
165     @Test
166     public void testNetworkCreated() {
167         tenantNetworkManagerImpl.networkCreated(mock(Node.class), NETWORK_ID);
168         verify(vlanConfigurationCache, times(1)).assignInternalVlan(any(Node.class), anyString());
169     }
170
171     @Test
172     public void testSetDependencies() throws Exception {
173         VlanConfigurationCache vlanConfigurationCache = mock(VlanConfigurationCache.class);
174         Southbound southbound = mock(Southbound.class);
175
176         ServiceHelper.overrideGlobalInstance(VlanConfigurationCache.class, vlanConfigurationCache);
177         ServiceHelper.overrideGlobalInstance(Southbound.class, southbound);
178
179         tenantNetworkManagerImpl.setDependencies(mock(ServiceReference.class));
180
181         assertEquals("Error, did not return the correct object", getField("vlanConfigurationCache"), vlanConfigurationCache);
182         assertEquals("Error, did not return the correct object", getField("southbound"), southbound);
183     }
184
185     @Test
186     public void testSetDependenciesObject() throws Exception{
187         INeutronNetworkCRUD neutronNetworkCache = mock(INeutronNetworkCRUD.class);
188         tenantNetworkManagerImpl.setDependencies(neutronNetworkCache);
189         assertEquals("Error, did not return the correct object", getField("neutronNetworkCache"), neutronNetworkCache);
190
191         INeutronPortCRUD neutronPortCache = mock(INeutronPortCRUD.class);
192         tenantNetworkManagerImpl.setDependencies(neutronPortCache);
193         assertEquals("Error, did not return the correct object", getField("neutronPortCache"), neutronPortCache);
194     }
195
196     private Object getField(String fieldName) throws Exception {
197         Field field = TenantNetworkManagerImpl.class.getDeclaredField(fieldName);
198         field.setAccessible(true);
199         return field.get(tenantNetworkManagerImpl);
200     }
201 }