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