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