1818
1919package com .cloud .bgp ;
2020
21+ import com .cloud .exception .ResourceUnavailableException ;
22+ import com .cloud .network .Network ;
23+ import com .cloud .network .NetworkModel ;
24+ import com .cloud .network .dao .NetworkServiceMapDao ;
25+ import com .cloud .network .element .VirtualRouterElement ;
26+ import com .cloud .network .element .VpcVirtualRouterElement ;
27+ import com .cloud .network .vpc .Vpc ;
28+ import com .cloud .network .vpc .dao .VpcServiceMapDao ;
29+ import com .cloud .user .AccountVO ;
30+ import com .cloud .user .dao .AccountDao ;
31+ import org .apache .cloudstack .network .BgpPeerVO ;
32+ import org .apache .cloudstack .network .RoutedIpv4Manager ;
33+ import org .apache .cloudstack .network .dao .BgpPeerDao ;
34+
2135import org .junit .Assert ;
2236import org .junit .Test ;
2337import org .junit .runner .RunWith ;
2438import org .mockito .InjectMocks ;
25-
39+ import org .mockito .Mock ;
40+ import org .mockito .Mockito ;
2641import org .mockito .Spy ;
2742import org .mockito .junit .MockitoJUnitRunner ;
2843
44+ import java .util .ArrayList ;
45+ import java .util .Arrays ;
46+ import java .util .List ;
47+
48+ import static org .mockito .ArgumentMatchers .any ;
49+ import static org .mockito .ArgumentMatchers .eq ;
50+ import static org .mockito .Mockito .doReturn ;
51+ import static org .mockito .Mockito .verify ;
52+ import static org .mockito .Mockito .when ;
53+
2954@ RunWith (MockitoJUnitRunner .class )
3055public class BGPServiceImplTest {
3156
3257 @ Spy
3358 @ InjectMocks
3459 BGPServiceImpl bGPServiceImplSpy = new BGPServiceImpl ();
3560
61+ @ Mock
62+ RoutedIpv4Manager routedIpv4Manager ;
63+
64+ @ Mock
65+ NetworkServiceMapDao ntwkSrvcDao ;
66+
67+ @ Mock
68+ NetworkModel networkModel ;
69+
70+ @ Mock
71+ BgpPeerDao bgpPeerDao ;
72+
73+ @ Mock
74+ AccountDao accountDao ;
75+
76+ @ Mock
77+ VpcServiceMapDao vpcServiceMapDao ;
78+
3679 @ Test
3780 public void testASNumbersOverlap () {
3881 Assert .assertEquals (bGPServiceImplSpy .isASNumbersOverlap (1 ,2 ,3 ,4 ), false );
@@ -42,4 +85,93 @@ public void testASNumbersOverlap() {
4285 Assert .assertEquals (bGPServiceImplSpy .isASNumbersOverlap (1 ,4 ,2 ,3 ), true );
4386 Assert .assertEquals (bGPServiceImplSpy .isASNumbersOverlap (3 ,4 ,1 ,2 ), false );
4487 }
88+
89+ @ Test
90+ public void testApplyBgpPeersForIsolatedNetwork () throws ResourceUnavailableException {
91+ Long networkId = 11L ;
92+ Network network = Mockito .mock (Network .class );
93+ when (network .getId ()).thenReturn (networkId );
94+ when (network .getVpcId ()).thenReturn (null );
95+
96+ when (routedIpv4Manager .isDynamicRoutedNetwork (network )).thenReturn (true );
97+ when (ntwkSrvcDao .getProviderForServiceInNetwork (networkId , Network .Service .Gateway )).thenReturn ("VirtualRouter" );
98+ VirtualRouterElement virtualRouterElement = Mockito .mock (VirtualRouterElement .class );
99+ when (networkModel .getElementImplementingProvider ("VirtualRouter" )).thenReturn (virtualRouterElement );
100+
101+ BgpPeerVO bgpPeer1 = Mockito .mock (BgpPeerVO .class );
102+ List <BgpPeerVO > bgpPeers = Arrays .asList (bgpPeer1 );
103+ when (bgpPeerDao .listNonRevokeByNetworkId (networkId )).thenReturn (bgpPeers );
104+ doReturn (true ).when (virtualRouterElement ).applyBgpPeers (null , network , bgpPeers );
105+
106+ bGPServiceImplSpy .applyBgpPeers (network , true );
107+
108+ verify (virtualRouterElement ).applyBgpPeers (null , network , bgpPeers );
109+ }
110+
111+ @ Test
112+ public void testApplyBgpPeersForVpcTier () throws ResourceUnavailableException {
113+ Long networkId = 11L ;
114+ Long accountId = 12L ;
115+ Long vpcId = 13L ;
116+ Long zoneId = 1L ;
117+ Network network = Mockito .mock (Network .class );
118+ when (network .getId ()).thenReturn (networkId );
119+ when (network .getVpcId ()).thenReturn (vpcId );
120+ when (network .getAccountId ()).thenReturn (accountId );
121+ when (network .getDataCenterId ()).thenReturn (zoneId );
122+
123+ when (routedIpv4Manager .isDynamicRoutedNetwork (network )).thenReturn (true );
124+ when (ntwkSrvcDao .getProviderForServiceInNetwork (networkId , Network .Service .Gateway )).thenReturn ("VirtualRouter" );
125+ VirtualRouterElement virtualRouterElement = Mockito .mock (VirtualRouterElement .class );
126+ when (networkModel .getElementImplementingProvider ("VirtualRouter" )).thenReturn (virtualRouterElement );
127+
128+ when (bgpPeerDao .listNonRevokeByVpcId (vpcId )).thenReturn (new ArrayList <>());
129+
130+ AccountVO owner = Mockito .mock (AccountVO .class );
131+ when (accountDao .findByIdIncludingRemoved (accountId )).thenReturn (owner );
132+
133+ Long bgpPeerId1 = 14L ;
134+ BgpPeerVO bgpPeer1 = Mockito .mock (BgpPeerVO .class );
135+ when (bgpPeerDao .findById (bgpPeerId1 )).thenReturn (bgpPeer1 );
136+ when (routedIpv4Manager .getBgpPeerIdsForAccount (owner , zoneId )).thenReturn (Arrays .asList (bgpPeerId1 ));
137+
138+ doReturn (true ).when (virtualRouterElement ).applyBgpPeers (eq (null ), eq (network ), any ());
139+
140+ bGPServiceImplSpy .applyBgpPeers (network , true );
141+
142+ verify (virtualRouterElement ).applyBgpPeers (eq (null ), eq (network ), any ());
143+ }
144+
145+ @ Test
146+ public void testApplyBgpPeersForVpcWithBgpPeers () throws ResourceUnavailableException {
147+ Long accountId = 12L ;
148+ Long vpcId = 13L ;
149+ Long zoneId = 1L ;
150+ Vpc vpc = Mockito .mock (Vpc .class );
151+ when (vpc .getId ()).thenReturn (vpcId );
152+ when (vpc .getAccountId ()).thenReturn (accountId );
153+ when (vpc .getZoneId ()).thenReturn (zoneId );
154+
155+ when (routedIpv4Manager .isDynamicRoutedVpc (vpc )).thenReturn (true );
156+ when (vpcServiceMapDao .getProviderForServiceInVpc (vpcId , Network .Service .Gateway )).thenReturn ("VPCVirtualRouter" );
157+ VpcVirtualRouterElement vpcVirtualRouterElement = Mockito .mock (VpcVirtualRouterElement .class );
158+ when (networkModel .getElementImplementingProvider ("VPCVirtualRouter" )).thenReturn (vpcVirtualRouterElement );
159+
160+ when (bgpPeerDao .listNonRevokeByVpcId (vpcId )).thenReturn (new ArrayList <>());
161+
162+ AccountVO owner = Mockito .mock (AccountVO .class );
163+ when (accountDao .findByIdIncludingRemoved (accountId )).thenReturn (owner );
164+
165+ Long bgpPeerId1 = 14L ;
166+ BgpPeerVO bgpPeer1 = Mockito .mock (BgpPeerVO .class );
167+ when (bgpPeerDao .findById (bgpPeerId1 )).thenReturn (bgpPeer1 );
168+ when (routedIpv4Manager .getBgpPeerIdsForAccount (owner , zoneId )).thenReturn (Arrays .asList (bgpPeerId1 ));
169+
170+ doReturn (true ).when (vpcVirtualRouterElement ).applyBgpPeers (eq (vpc ), eq (null ), any ());
171+
172+ bGPServiceImplSpy .applyBgpPeers (vpc , true );
173+
174+ verify (vpcVirtualRouterElement ).applyBgpPeers (eq (vpc ), eq (null ), any ());
175+ }
45176}
177+
0 commit comments