Skip to content

Commit 5973f4e

Browse files
CLOUDSTACK-9106 - Adds a test to cover the changes in the applyVpnUsers() method
- Changed the NetworkTopologyContext class just to make the private member accessible from the test - Added a test class to cover the positive scenario of the VpcVirtualRouterElementTest.applyVpnUsers() method. - Covering when there is either no VPC or no routers.
1 parent 13eb789 commit 5973f4e

2 files changed

Lines changed: 204 additions & 0 deletions

File tree

server/src/org/apache/cloudstack/network/topology/NetworkTopologyContext.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,20 @@ public NetworkTopology retrieveNetworkTopology(final DataCenter dc) {
4949
}
5050
return _flyweight.get(dc.getNetworkType());
5151
}
52+
53+
/**
54+
* Method used for tests purpose only. Please do not use it to set the AdvanceNetworkTopology and it is managed by Spring.
55+
* @param advancedNetworkTopology
56+
*/
57+
public void setAdvancedNetworkTopology(final AdvancedNetworkTopology advancedNetworkTopology) {
58+
_advancedNetworkTopology = advancedNetworkTopology;
59+
}
60+
61+
/**
62+
* Method used for tests purpose only. Please do not use it to set the BasicNetworkTopology and it is managed by Spring.
63+
* @param basicNetworkTopology
64+
*/
65+
public void setBasicNetworkTopology(final BasicNetworkTopology basicNetworkTopology) {
66+
_basicNetworkTopology = basicNetworkTopology;
67+
}
5268
}
Lines changed: 188 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,188 @@
1+
// Licensed to the Apache Software Foundation (ASF) under one
2+
// or more contributor license agreements. See the NOTICE file
3+
// distributed with this work for additional information
4+
// regarding copyright ownership. The ASF licenses this file
5+
// to you under the Apache License, Version 2.0 (the
6+
// "License"); you may not use this file except in compliance
7+
// with the License. You may obtain a copy of the License at
8+
//
9+
// http://www.apache.org/licenses/LICENSE-2.0
10+
//
11+
// Unless required by applicable law or agreed to in writing,
12+
// software distributed under the License is distributed on an
13+
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14+
// KIND, either express or implied. See the License for the
15+
// specific language governing permissions and limitations
16+
// under the License.
17+
package com.cloud.network.element;
18+
19+
import static org.junit.Assert.assertEquals;
20+
import static org.junit.Assert.assertNotNull;
21+
import static org.junit.Assert.assertNull;
22+
import static org.junit.Assert.fail;
23+
import static org.mockito.Mockito.times;
24+
import static org.mockito.Mockito.verify;
25+
import static org.mockito.Mockito.when;
26+
27+
import java.util.ArrayList;
28+
import java.util.List;
29+
30+
import org.apache.cloudstack.network.topology.AdvancedNetworkTopology;
31+
import org.apache.cloudstack.network.topology.BasicNetworkTopology;
32+
import org.apache.cloudstack.network.topology.NetworkTopologyContext;
33+
import org.junit.Test;
34+
import org.junit.runner.RunWith;
35+
import org.mockito.InjectMocks;
36+
import org.mockito.Mock;
37+
import org.mockito.Mockito;
38+
import org.mockito.runners.MockitoJUnitRunner;
39+
40+
import com.cloud.dc.DataCenterVO;
41+
import com.cloud.dc.dao.DataCenterDao;
42+
import com.cloud.exception.ResourceUnavailableException;
43+
import com.cloud.network.RemoteAccessVpn;
44+
import com.cloud.network.VpnUser;
45+
import com.cloud.network.router.VpcVirtualNetworkApplianceManagerImpl;
46+
import com.cloud.network.vpc.Vpc;
47+
import com.cloud.utils.db.EntityManager;
48+
import com.cloud.vm.DomainRouterVO;
49+
import com.cloud.vm.dao.DomainRouterDao;
50+
51+
@RunWith(MockitoJUnitRunner.class)
52+
public class VpcVirtualRouterElementTest {
53+
@Mock
54+
DataCenterDao _dcDao;
55+
@Mock private DomainRouterDao _routerDao;
56+
57+
@Mock
58+
EntityManager _entityMgr;
59+
60+
@Mock
61+
NetworkTopologyContext networkTopologyContext;
62+
63+
@InjectMocks
64+
VpcVirtualNetworkApplianceManagerImpl _vpcRouterMgr;
65+
66+
@InjectMocks
67+
VpcVirtualRouterElement vpcVirtualRouterElement;
68+
69+
70+
@Test
71+
public void testApplyVpnUsers() {
72+
vpcVirtualRouterElement._vpcRouterMgr = _vpcRouterMgr;
73+
74+
final AdvancedNetworkTopology advancedNetworkTopology = Mockito.mock(AdvancedNetworkTopology.class);
75+
final BasicNetworkTopology basicNetworkTopology = Mockito.mock(BasicNetworkTopology.class);
76+
77+
networkTopologyContext.setAdvancedNetworkTopology(advancedNetworkTopology);
78+
networkTopologyContext.setBasicNetworkTopology(basicNetworkTopology);
79+
networkTopologyContext.init();
80+
81+
final Vpc vpc = Mockito.mock(Vpc.class);
82+
final DataCenterVO dataCenterVO = Mockito.mock(DataCenterVO.class);
83+
final RemoteAccessVpn remoteAccessVpn = Mockito.mock(RemoteAccessVpn.class);
84+
final DomainRouterVO domainRouterVO1 = Mockito.mock(DomainRouterVO.class);
85+
final DomainRouterVO domainRouterVO2 = Mockito.mock(DomainRouterVO.class);
86+
final VpnUser vpnUser1 = Mockito.mock(VpnUser.class);
87+
final VpnUser vpnUser2 = Mockito.mock(VpnUser.class);
88+
89+
final List<VpnUser> users = new ArrayList<VpnUser>();
90+
users.add(vpnUser1);
91+
users.add(vpnUser2);
92+
93+
final List<DomainRouterVO> routers = new ArrayList<DomainRouterVO>();
94+
routers.add(domainRouterVO1);
95+
routers.add(domainRouterVO2);
96+
97+
final Long vpcId = new Long(1l);
98+
final Long zoneId = new Long(1l);
99+
100+
when(remoteAccessVpn.getVpcId()).thenReturn(vpcId);
101+
when(_vpcRouterMgr.getVpcRouters(vpcId)).thenReturn(routers);
102+
when(_entityMgr.findById(Vpc.class, vpcId)).thenReturn(vpc);
103+
when(vpc.getZoneId()).thenReturn(zoneId);
104+
when(_dcDao.findById(zoneId)).thenReturn(dataCenterVO);
105+
when(networkTopologyContext.retrieveNetworkTopology(dataCenterVO)).thenReturn(advancedNetworkTopology);
106+
107+
try {
108+
when(advancedNetworkTopology.applyVpnUsers(remoteAccessVpn, users, domainRouterVO1)).thenReturn(new String[]{"user1", "user2"});
109+
when(advancedNetworkTopology.applyVpnUsers(remoteAccessVpn, users, domainRouterVO2)).thenReturn(new String[]{"user3", "user4"});
110+
} catch (final ResourceUnavailableException e) {
111+
fail(e.getMessage());
112+
}
113+
114+
try {
115+
final String [] results = vpcVirtualRouterElement.applyVpnUsers(remoteAccessVpn, users);
116+
117+
assertNotNull(results);
118+
assertEquals(results[0], "user1");
119+
assertEquals(results[1], "user2");
120+
assertEquals(results[2], "user3");
121+
assertEquals(results[3], "user4");
122+
} catch (final ResourceUnavailableException e) {
123+
fail(e.getMessage());
124+
}
125+
126+
verify(remoteAccessVpn, times(1)).getVpcId();
127+
verify(vpc, times(1)).getZoneId();
128+
verify(_dcDao, times(1)).findById(zoneId);
129+
verify(networkTopologyContext, times(1)).retrieveNetworkTopology(dataCenterVO);
130+
}
131+
132+
@Test
133+
public void testApplyVpnUsersException1() {
134+
vpcVirtualRouterElement._vpcRouterMgr = _vpcRouterMgr;
135+
136+
final AdvancedNetworkTopology advancedNetworkTopology = Mockito.mock(AdvancedNetworkTopology.class);
137+
final BasicNetworkTopology basicNetworkTopology = Mockito.mock(BasicNetworkTopology.class);
138+
139+
networkTopologyContext.setAdvancedNetworkTopology(advancedNetworkTopology);
140+
networkTopologyContext.setBasicNetworkTopology(basicNetworkTopology);
141+
networkTopologyContext.init();
142+
143+
final RemoteAccessVpn remoteAccessVpn = Mockito.mock(RemoteAccessVpn.class);
144+
final List<VpnUser> users = new ArrayList<VpnUser>();
145+
146+
when(remoteAccessVpn.getVpcId()).thenReturn(null);
147+
148+
try {
149+
final String [] results = vpcVirtualRouterElement.applyVpnUsers(remoteAccessVpn, users);
150+
assertNull(results);
151+
} catch (final ResourceUnavailableException e) {
152+
fail(e.getMessage());
153+
}
154+
155+
verify(remoteAccessVpn, times(1)).getVpcId();
156+
}
157+
158+
@Test
159+
public void testApplyVpnUsersException2() {
160+
vpcVirtualRouterElement._vpcRouterMgr = _vpcRouterMgr;
161+
162+
final AdvancedNetworkTopology advancedNetworkTopology = Mockito.mock(AdvancedNetworkTopology.class);
163+
final BasicNetworkTopology basicNetworkTopology = Mockito.mock(BasicNetworkTopology.class);
164+
165+
networkTopologyContext.setAdvancedNetworkTopology(advancedNetworkTopology);
166+
networkTopologyContext.setBasicNetworkTopology(basicNetworkTopology);
167+
networkTopologyContext.init();
168+
169+
final RemoteAccessVpn remoteAccessVpn = Mockito.mock(RemoteAccessVpn.class);
170+
171+
final List<VpnUser> users = new ArrayList<VpnUser>();
172+
173+
final Long vpcId = new Long(1l);
174+
175+
when(remoteAccessVpn.getVpcId()).thenReturn(vpcId);
176+
when(_vpcRouterMgr.getVpcRouters(vpcId)).thenReturn(null);
177+
178+
try {
179+
final String [] results = vpcVirtualRouterElement.applyVpnUsers(remoteAccessVpn, users);
180+
181+
assertNull(results);
182+
} catch (final ResourceUnavailableException e) {
183+
fail(e.getMessage());
184+
}
185+
186+
verify(remoteAccessVpn, times(1)).getVpcId();
187+
}
188+
}

0 commit comments

Comments
 (0)