| // Licensed to the Apache Software Foundation (ASF) under one | |
| // or more contributor license agreements. See the NOTICE file | |
| // distributed with this work for additional information | |
| // regarding copyright ownership. The ASF licenses this file | |
| // to you under the Apache License, Version 2.0 (the | |
| // "License"); you may not use this file except in compliance | |
| // with the License. You may obtain a copy of the License at | |
| // | |
| // http://www.apache.org/licenses/LICENSE-2.0 | |
| // | |
| // Unless required by applicable law or agreed to in writing, | |
| // software distributed under the License is distributed on an | |
| // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
| // KIND, either express or implied. See the License for the | |
| // specific language governing permissions and limitations | |
| // under the License. | |
| package com.cloud.api.query.dao; | |
| import com.cloud.api.query.vo.SecurityGroupJoinVO; | |
| import com.cloud.network.security.SecurityGroupVMMapVO; | |
| import com.cloud.network.security.dao.SecurityGroupVMMapDao; | |
| import com.cloud.user.Account; | |
| import com.cloud.vm.UserVmVO; | |
| import com.cloud.vm.dao.UserVmDao; | |
| import junit.framework.TestCase; | |
| import org.apache.cloudstack.api.response.SecurityGroupResponse; | |
| import org.junit.After; | |
| import org.junit.Before; | |
| import org.junit.Test; | |
| import org.junit.runner.RunWith; | |
| import org.mockito.InjectMocks; | |
| import org.mockito.Mock; | |
| import org.mockito.MockitoAnnotations; | |
| import org.mockito.junit.MockitoJUnitRunner; | |
| import java.lang.reflect.Field; | |
| import java.util.ArrayList; | |
| import java.util.List; | |
| import java.util.Set; | |
| import static org.mockito.Mockito.when; | |
| @RunWith(MockitoJUnitRunner.class) | |
| public class SecurityGroupJoinDaoImplTest extends TestCase { | |
| // Mock private variables. | |
| @Mock (name = "_resourceTagJoinDao") | |
| private ResourceTagJoinDao _resourceTagJoinDao; | |
| @Mock (name = "_securityGroupVMMapDao") | |
| private SecurityGroupVMMapDao _securityGroupVMMapDao; | |
| @Mock (name = "_userVmDao") | |
| private UserVmDao _userVmDao; | |
| // Inject mocks in class to be tested. | |
| @InjectMocks | |
| private SecurityGroupJoinDaoImpl _securityGroupJoinDaoImpl; | |
| // Mock a caller and a SecurityGroupJoinVO | |
| @Mock | |
| private Account caller; | |
| @Mock | |
| private SecurityGroupJoinVO vsg; | |
| // Mock securitygroups | |
| @Mock | |
| private SecurityGroupVMMapVO securityGroupVMMapVOone; | |
| @Mock | |
| private SecurityGroupVMMapVO securityGroupVMMapVOtwo; | |
| // Mock 2 UserVmVOs | |
| @Mock | |
| private UserVmVO userVmVOone; | |
| @Mock | |
| private UserVmVO userVmVOtwo; | |
| // Random generated UUIDs | |
| private final String uuidOne = "463e022a-249d-4212-bdf4-726bc9047aa7"; | |
| private final String uuidTwo = "d8714c5f-766f-4b14-bdf4-17571042b9c5"; | |
| private AutoCloseable closeable; | |
| @Before | |
| public void setup() { | |
| closeable = MockitoAnnotations.openMocks(this); | |
| // Security group without vms associated. | |
| List<SecurityGroupVMMapVO> securityGroupVmMap_empty = new ArrayList<SecurityGroupVMMapVO>(); | |
| // Security group with one vm associated. | |
| List<SecurityGroupVMMapVO> securityGroupVmMap_one = new ArrayList<SecurityGroupVMMapVO>(); | |
| securityGroupVmMap_one.add(securityGroupVMMapVOone); | |
| // Security group with two or many vms associated | |
| List<SecurityGroupVMMapVO> securityGroupVmMap_two = new ArrayList<SecurityGroupVMMapVO>(); | |
| securityGroupVmMap_two.add(securityGroupVMMapVOone); | |
| securityGroupVmMap_two.add(securityGroupVMMapVOtwo); | |
| // Mock the listBySecurityGroup method to return a specified list when being called. | |
| when(_securityGroupVMMapDao.listBySecurityGroup(1L)).thenReturn(securityGroupVmMap_empty); | |
| when(_securityGroupVMMapDao.listBySecurityGroup(2L)).thenReturn(securityGroupVmMap_one); | |
| when(_securityGroupVMMapDao.listBySecurityGroup(3L)).thenReturn(securityGroupVmMap_two); | |
| // Mock the securityGroupVMMapVOs to return a specified instance id. | |
| when(securityGroupVMMapVOone.getInstanceId()).thenReturn(1L); | |
| when(securityGroupVMMapVOtwo.getInstanceId()).thenReturn(2L); | |
| // Mock _userVmDao to return a non null instance of UserVmVO. | |
| when(_userVmDao.findById(1L)).thenReturn(userVmVOone); | |
| when(_userVmDao.findById(2L)).thenReturn(userVmVOtwo); | |
| // Mock _userVmDao to return a non null instance of UserVmVO. | |
| when(userVmVOone.getUuid()).thenReturn(uuidOne); | |
| when(userVmVOtwo.getUuid()).thenReturn(uuidTwo); | |
| } | |
| @Override | |
| @After | |
| public void tearDown() throws Exception { | |
| closeable.close(); | |
| } | |
| @Test | |
| public void virtualMachineCountEmptyTest() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException { | |
| when(vsg.getId()).thenReturn(1L); | |
| SecurityGroupResponse securityGroupResponse = _securityGroupJoinDaoImpl.newSecurityGroupResponse(vsg, caller); | |
| Field virtualMachineCount = securityGroupResponse.getClass().getDeclaredField("virtualMachineCount"); | |
| virtualMachineCount.setAccessible(true); | |
| assertEquals(0, ((Integer)virtualMachineCount.get(securityGroupResponse)).intValue()); | |
| } | |
| @Test | |
| public void virtualMachineCountOneTest() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException { | |
| when(vsg.getId()).thenReturn(2L); | |
| SecurityGroupResponse securityGroupResponse = _securityGroupJoinDaoImpl.newSecurityGroupResponse(vsg, caller); | |
| Field virtualMachineCount = securityGroupResponse.getClass().getDeclaredField("virtualMachineCount"); | |
| virtualMachineCount.setAccessible(true); | |
| assertEquals(1, ((Integer)virtualMachineCount.get(securityGroupResponse)).intValue()); | |
| } | |
| @Test | |
| public void virtualMachineCountTwoTest() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException { | |
| when(vsg.getId()).thenReturn(3L); | |
| SecurityGroupResponse securityGroupResponse = _securityGroupJoinDaoImpl.newSecurityGroupResponse(vsg, caller); | |
| Field virtualMachineCount = securityGroupResponse.getClass().getDeclaredField("virtualMachineCount"); | |
| virtualMachineCount.setAccessible(true); | |
| assertEquals(2, ((Integer)virtualMachineCount.get(securityGroupResponse)).intValue()); | |
| } | |
| @Test | |
| public void virtualMachineIDsEmptyTest() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException { | |
| when(vsg.getId()).thenReturn(1L); | |
| SecurityGroupResponse securityGroupResponse = _securityGroupJoinDaoImpl.newSecurityGroupResponse(vsg, caller); | |
| Field fieldVirtualMachineIds = securityGroupResponse.getClass().getDeclaredField("virtualMachineIds"); | |
| fieldVirtualMachineIds.setAccessible(true); | |
| Set<String> virtualMachineIds = (Set<String>)fieldVirtualMachineIds.get(securityGroupResponse); | |
| assertEquals(0, virtualMachineIds.size()); | |
| } | |
| @Test | |
| public void virtualMachineIDsOneTest() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException { | |
| when(vsg.getId()).thenReturn(2L); | |
| SecurityGroupResponse securityGroupResponse = _securityGroupJoinDaoImpl.newSecurityGroupResponse(vsg, caller); | |
| Field fieldVirtualMachineIds = securityGroupResponse.getClass().getDeclaredField("virtualMachineIds"); | |
| fieldVirtualMachineIds.setAccessible(true); | |
| Set<String> virtualMachineIds = (Set<String>)fieldVirtualMachineIds.get(securityGroupResponse); | |
| assertEquals(1, virtualMachineIds.size()); | |
| assertTrue(virtualMachineIds.contains(uuidOne)); | |
| } | |
| @Test | |
| public void virtualMachineIDsTwoTest() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException { | |
| when(vsg.getId()).thenReturn(3L); | |
| SecurityGroupResponse securityGroupResponse = _securityGroupJoinDaoImpl.newSecurityGroupResponse(vsg, caller); | |
| Field fieldVirtualMachineIds = securityGroupResponse.getClass().getDeclaredField("virtualMachineIds"); | |
| fieldVirtualMachineIds.setAccessible(true); | |
| Set<String> virtualMachineIds = (Set<String>)fieldVirtualMachineIds.get(securityGroupResponse); | |
| assertEquals(2, virtualMachineIds.size()); | |
| assertTrue(virtualMachineIds.contains(uuidOne)); | |
| assertTrue(virtualMachineIds.contains(uuidTwo)); | |
| } | |
| } |