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 .api .query .dao ;
18+
19+ import static org .mockito .Matchers .any ;
20+ import static org .mockito .Matchers .anyString ;
21+ import static org .mockito .Mockito .when ;
22+
23+ import java .lang .reflect .Field ;
24+ import java .util .ArrayList ;
25+ import java .util .List ;
26+ import java .util .Set ;
27+
28+ import org .apache .cloudstack .api .response .SecurityGroupResponse ;
29+ import org .junit .Before ;
30+ import org .junit .Test ;
31+ import org .junit .runner .RunWith ;
32+ import org .mockito .InjectMocks ;
33+ import org .mockito .Mock ;
34+ import org .mockito .MockitoAnnotations ;
35+ import org .mockito .runners .MockitoJUnitRunner ;
36+
37+ import com .cloud .api .query .vo .ResourceTagJoinVO ;
38+ import com .cloud .api .query .vo .SecurityGroupJoinVO ;
39+ import com .cloud .network .security .SecurityGroupVMMapVO ;
40+ import com .cloud .network .security .dao .SecurityGroupVMMapDao ;
41+ import com .cloud .server .ResourceTag .ResourceObjectType ;
42+ import com .cloud .user .Account ;
43+ import com .cloud .vm .UserVmVO ;
44+ import com .cloud .vm .dao .UserVmDao ;
45+
46+ import junit .framework .TestCase ;
47+
48+ @ RunWith (MockitoJUnitRunner .class )
49+ public class SecurityGroupJoinDaoImplTest extends TestCase {
50+
51+ // Mock private variables.
52+ @ Mock (name = "_resourceTagJoinDao" )
53+ private ResourceTagJoinDao _resourceTagJoinDao ;
54+ @ Mock (name = "_securityGroupVMMapDao" )
55+ private SecurityGroupVMMapDao _securityGroupVMMapDao ;
56+ @ Mock (name = "_userVmDao" )
57+ private UserVmDao _userVmDao ;
58+
59+ // Inject mocks in class to be tested.
60+ @ InjectMocks
61+ private SecurityGroupJoinDaoImpl _securityGroupJoinDaoImpl ;
62+
63+ // Mock a caller and a SecurityGroupJoinVO
64+ @ Mock
65+ private Account caller ;
66+ @ Mock
67+ private SecurityGroupJoinVO vsg ;
68+
69+ // Mock securitygroups
70+ @ Mock
71+ private SecurityGroupVMMapVO securityGroupVMMapVOone ;
72+ @ Mock
73+ private SecurityGroupVMMapVO securityGroupVMMapVOtwo ;
74+
75+ // Mock 2 UserVmVOs
76+ @ Mock
77+ private UserVmVO userVmVOone ;
78+ @ Mock
79+ private UserVmVO userVmVOtwo ;
80+
81+ // Random generated UUIDs
82+ private final String uuidOne = "463e022a-249d-4212-bdf4-726bc9047aa7" ;
83+ private final String uuidTwo = "d8714c5f-766f-4b14-bdf4-17571042b9c5" ;
84+
85+ @ Before
86+ public void setup () {
87+ MockitoAnnotations .initMocks (this );
88+
89+ // Security group without vms associated.
90+ List <SecurityGroupVMMapVO > securityGroupVmMap_empty = new ArrayList <SecurityGroupVMMapVO >();
91+
92+ // Security group with one vm associated.
93+ List <SecurityGroupVMMapVO > securityGroupVmMap_one = new ArrayList <SecurityGroupVMMapVO >();
94+ securityGroupVmMap_one .add (securityGroupVMMapVOone );
95+
96+ // Security group with two or many vms associated
97+ List <SecurityGroupVMMapVO > securityGroupVmMap_two = new ArrayList <SecurityGroupVMMapVO >();
98+ securityGroupVmMap_two .add (securityGroupVMMapVOone );
99+ securityGroupVmMap_two .add (securityGroupVMMapVOtwo );
100+
101+ // Mock the resource tags to return an empty list.
102+ when (_resourceTagJoinDao .listBy (anyString (), any (ResourceObjectType .class ))).thenReturn (new ArrayList <ResourceTagJoinVO >());
103+
104+ // Mock the listBySecurityGroup method to return a specified list when being called.
105+ when (_securityGroupVMMapDao .listBySecurityGroup (1L )).thenReturn (securityGroupVmMap_empty );
106+ when (_securityGroupVMMapDao .listBySecurityGroup (2L )).thenReturn (securityGroupVmMap_one );
107+ when (_securityGroupVMMapDao .listBySecurityGroup (3L )).thenReturn (securityGroupVmMap_two );
108+
109+ // Mock the securityGroupVMMapVOs to return a specified instance id.
110+ when (securityGroupVMMapVOone .getInstanceId ()).thenReturn (1L );
111+ when (securityGroupVMMapVOtwo .getInstanceId ()).thenReturn (2L );
112+
113+ // Mock _userVmDao to return a non null instance of UserVmVO.
114+ when (_userVmDao .findById (1L )).thenReturn (userVmVOone );
115+ when (_userVmDao .findById (2L )).thenReturn (userVmVOtwo );
116+
117+ // Mock _userVmDao to return a non null instance of UserVmVO.
118+ when (userVmVOone .getUuid ()).thenReturn (uuidOne );
119+ when (userVmVOtwo .getUuid ()).thenReturn (uuidTwo );
120+ }
121+
122+ @ Test
123+ public void virtualMachineCountEmptyTest () throws NoSuchFieldException , SecurityException , IllegalArgumentException , IllegalAccessException {
124+
125+ when (vsg .getId ()).thenReturn (1L );
126+
127+ SecurityGroupResponse securityGroupResponse = _securityGroupJoinDaoImpl .newSecurityGroupResponse (vsg , caller );
128+
129+ Field virtualMachineCount = securityGroupResponse .getClass ().getDeclaredField ("virtualMachineCount" );
130+ virtualMachineCount .setAccessible (true );
131+ assertEquals (0 , ((Integer )virtualMachineCount .get (securityGroupResponse )).intValue ());
132+ }
133+
134+ @ Test
135+ public void virtualMachineCountOneTest () throws NoSuchFieldException , SecurityException , IllegalArgumentException , IllegalAccessException {
136+
137+ when (vsg .getId ()).thenReturn (2L );
138+
139+ SecurityGroupResponse securityGroupResponse = _securityGroupJoinDaoImpl .newSecurityGroupResponse (vsg , caller );
140+
141+ Field virtualMachineCount = securityGroupResponse .getClass ().getDeclaredField ("virtualMachineCount" );
142+ virtualMachineCount .setAccessible (true );
143+ assertEquals (1 , ((Integer )virtualMachineCount .get (securityGroupResponse )).intValue ());
144+ }
145+
146+ @ Test
147+ public void virtualMachineCountTwoTest () throws NoSuchFieldException , SecurityException , IllegalArgumentException , IllegalAccessException {
148+
149+ when (vsg .getId ()).thenReturn (3L );
150+
151+ SecurityGroupResponse securityGroupResponse = _securityGroupJoinDaoImpl .newSecurityGroupResponse (vsg , caller );
152+
153+ Field virtualMachineCount = securityGroupResponse .getClass ().getDeclaredField ("virtualMachineCount" );
154+ virtualMachineCount .setAccessible (true );
155+ assertEquals (2 , ((Integer )virtualMachineCount .get (securityGroupResponse )).intValue ());
156+ }
157+
158+ @ Test
159+ public void virtualMachineIDsEmptyTest () throws NoSuchFieldException , SecurityException , IllegalArgumentException , IllegalAccessException {
160+
161+ when (vsg .getId ()).thenReturn (1L );
162+
163+ SecurityGroupResponse securityGroupResponse = _securityGroupJoinDaoImpl .newSecurityGroupResponse (vsg , caller );
164+
165+ Field fieldVirtualMachineIds = securityGroupResponse .getClass ().getDeclaredField ("virtualMachineIds" );
166+ fieldVirtualMachineIds .setAccessible (true );
167+
168+ Set <String > virtualMachineIds = (Set <String >)fieldVirtualMachineIds .get (securityGroupResponse );
169+
170+ assertEquals (0 , virtualMachineIds .size ());
171+ }
172+
173+ @ Test
174+ public void virtualMachineIDsOneTest () throws NoSuchFieldException , SecurityException , IllegalArgumentException , IllegalAccessException {
175+
176+ when (vsg .getId ()).thenReturn (2L );
177+
178+ SecurityGroupResponse securityGroupResponse = _securityGroupJoinDaoImpl .newSecurityGroupResponse (vsg , caller );
179+
180+ Field fieldVirtualMachineIds = securityGroupResponse .getClass ().getDeclaredField ("virtualMachineIds" );
181+ fieldVirtualMachineIds .setAccessible (true );
182+
183+ Set <String > virtualMachineIds = (Set <String >)fieldVirtualMachineIds .get (securityGroupResponse );
184+
185+ assertEquals (1 , virtualMachineIds .size ());
186+ assertTrue (virtualMachineIds .contains (uuidOne ));
187+ }
188+
189+ @ Test
190+ public void virtualMachineIDsTwoTest () throws NoSuchFieldException , SecurityException , IllegalArgumentException , IllegalAccessException {
191+
192+ when (vsg .getId ()).thenReturn (3L );
193+
194+ SecurityGroupResponse securityGroupResponse = _securityGroupJoinDaoImpl .newSecurityGroupResponse (vsg , caller );
195+
196+ Field fieldVirtualMachineIds = securityGroupResponse .getClass ().getDeclaredField ("virtualMachineIds" );
197+ fieldVirtualMachineIds .setAccessible (true );
198+
199+ Set <String > virtualMachineIds = (Set <String >)fieldVirtualMachineIds .get (securityGroupResponse );
200+
201+ assertEquals (2 , virtualMachineIds .size ());
202+ assertTrue (virtualMachineIds .contains (uuidOne ));
203+ assertTrue (virtualMachineIds .contains (uuidTwo ));
204+ }
205+ }
0 commit comments