You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by wi...@apache.org on 2015/08/13 13:47:49 UTC
[1/2] git commit: updated refs/heads/master to aa7f8e5
Repository: cloudstack
Updated Branches:
refs/heads/master 792c27c9b -> aa7f8e57c
Added unit tests for CLOUDSTACK-8133
Tests will confirm the behaviour of the newly added response fields of listSecurityGroups.
Signed-off-by: Wido den Hollander <wi...@widodh.nl>
This closes #679
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/aa7f8e57
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/aa7f8e57
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/aa7f8e57
Branch: refs/heads/master
Commit: aa7f8e57c592cd3e4f3e222697c0fe3cc5eef7b4
Parents: 03f4887
Author: Boris Schrijver <bo...@pcextreme.nl>
Authored: Wed Aug 12 16:00:07 2015 +0200
Committer: Wido den Hollander <wi...@widodh.nl>
Committed: Thu Aug 13 13:47:38 2015 +0200
----------------------------------------------------------------------
.../query/dao/SecurityGroupJoinDaoImplTest.java | 205 +++++++++++++++++++
1 file changed, 205 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/aa7f8e57/server/test/com/cloud/api/query/dao/SecurityGroupJoinDaoImplTest.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/api/query/dao/SecurityGroupJoinDaoImplTest.java b/server/test/com/cloud/api/query/dao/SecurityGroupJoinDaoImplTest.java
new file mode 100644
index 0000000..112504d
--- /dev/null
+++ b/server/test/com/cloud/api/query/dao/SecurityGroupJoinDaoImplTest.java
@@ -0,0 +1,205 @@
+// 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 static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.when;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.cloudstack.api.response.SecurityGroupResponse;
+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.runners.MockitoJUnitRunner;
+
+import com.cloud.api.query.vo.ResourceTagJoinVO;
+import com.cloud.api.query.vo.SecurityGroupJoinVO;
+import com.cloud.network.security.SecurityGroupVMMapVO;
+import com.cloud.network.security.dao.SecurityGroupVMMapDao;
+import com.cloud.server.ResourceTag.ResourceObjectType;
+import com.cloud.user.Account;
+import com.cloud.vm.UserVmVO;
+import com.cloud.vm.dao.UserVmDao;
+
+import junit.framework.TestCase;
+
+@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";
+
+ @Before
+ public void setup() {
+ MockitoAnnotations.initMocks(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 resource tags to return an empty list.
+ when(_resourceTagJoinDao.listBy(anyString(), any(ResourceObjectType.class))).thenReturn(new ArrayList<ResourceTagJoinVO>());
+
+ // 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);
+ }
+
+ @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));
+ }
+}
\ No newline at end of file
[2/2] git commit: updated refs/heads/master to aa7f8e5
Posted by wi...@apache.org.
CLOUDSTACK-8133 Added Virtualmachine count and ID's to listSecurityGroups response.
See issue CLOUDSTACK-8133 for more information.
Added null check by comment of Koushik Das.
Added brackets by comment of Wido den Hollander.
Removed a call to findById() by comment of Koushik Das.
Signed-off-by: Wido den Hollander <wi...@widodh.nl>
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/03f48872
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/03f48872
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/03f48872
Branch: refs/heads/master
Commit: 03f48872d602c64bd74c40a2cd93f17acc746236
Parents: 792c27c
Author: Boris Schrijver <bo...@pcextreme.nl>
Authored: Tue Aug 11 19:01:38 2015 +0200
Committer: Wido den Hollander <wi...@widodh.nl>
Committed: Thu Aug 13 13:47:38 2015 +0200
----------------------------------------------------------------------
.../org/apache/cloudstack/api/ApiConstants.java | 1 +
.../api/response/SecurityGroupResponse.java | 24 +++++++++++++++--
.../api/query/dao/SecurityGroupJoinDaoImpl.java | 27 ++++++++++++++++----
3 files changed, 45 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/03f48872/api/src/org/apache/cloudstack/api/ApiConstants.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/ApiConstants.java b/api/src/org/apache/cloudstack/api/ApiConstants.java
index 0e7ff88..e86e2d4 100644
--- a/api/src/org/apache/cloudstack/api/ApiConstants.java
+++ b/api/src/org/apache/cloudstack/api/ApiConstants.java
@@ -271,6 +271,7 @@ public class ApiConstants {
public static final String VIRTUAL_MACHINE_ID = "virtualmachineid";
public static final String VIRTUAL_MACHINE_IDS = "virtualmachineids";
public static final String VIRTUAL_MACHINE_ID_IP = "vmidipmap";
+ public static final String VIRTUAL_MACHINE_COUNT = "virtualmachinecount";
public static final String USAGE_ID = "usageid";
public static final String VLAN = "vlan";
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/03f48872/api/src/org/apache/cloudstack/api/response/SecurityGroupResponse.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/response/SecurityGroupResponse.java b/api/src/org/apache/cloudstack/api/response/SecurityGroupResponse.java
index 0be2ee1..c96421b 100644
--- a/api/src/org/apache/cloudstack/api/response/SecurityGroupResponse.java
+++ b/api/src/org/apache/cloudstack/api/response/SecurityGroupResponse.java
@@ -19,14 +19,13 @@ package org.apache.cloudstack.api.response;
import java.util.LinkedHashSet;
import java.util.Set;
-import com.google.gson.annotations.SerializedName;
-
import org.apache.cloudstack.api.ApiConstants;
import org.apache.cloudstack.api.BaseResponse;
import org.apache.cloudstack.api.EntityReference;
import com.cloud.network.security.SecurityGroup;
import com.cloud.serializer.Param;
+import com.google.gson.annotations.SerializedName;
@SuppressWarnings("unused")
@EntityReference(value = SecurityGroup.class)
@@ -76,7 +75,16 @@ public class SecurityGroupResponse extends BaseResponse implements ControlledVie
@Param(description = "the list of resource tags associated with the rule", responseObject = ResourceTagResponse.class)
private Set<ResourceTagResponse> tags;
+ @SerializedName(ApiConstants.VIRTUAL_MACHINE_COUNT)
+ @Param(description = "the number of virtualmachines associated with this securitygroup", since = "4.6.0")
+ private Integer virtualMachineCount;
+
+ @SerializedName(ApiConstants.VIRTUAL_MACHINE_IDS)
+ @Param(description = "the list of virtualmachine ids associated with this securitygroup", since = "4.6.0")
+ private Set<String> virtualMachineIds;
+
public SecurityGroupResponse() {
+ this.virtualMachineIds = new LinkedHashSet<String>();
this.ingressRules = new LinkedHashSet<SecurityGroupRuleResponse>();
this.egressRules = new LinkedHashSet<SecurityGroupRuleResponse>();
this.tags = new LinkedHashSet<ResourceTagResponse>();
@@ -176,4 +184,16 @@ public class SecurityGroupResponse extends BaseResponse implements ControlledVie
public void addTag(ResourceTagResponse tag) {
this.tags.add(tag);
}
+
+ public void setVirtualMachineCount(Integer virtualMachineCount) {
+ this.virtualMachineCount = virtualMachineCount;
+ }
+
+ public void setVirtualMachineIds(Set<String> virtualMachineIds) {
+ this.virtualMachineIds = virtualMachineIds;
+ }
+
+ public void addVirtualMachineId(String virtualMachineId) {
+ this.virtualMachineIds.add(virtualMachineId);
+ }
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/03f48872/server/src/com/cloud/api/query/dao/SecurityGroupJoinDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/query/dao/SecurityGroupJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/SecurityGroupJoinDaoImpl.java
index bb4df1d..1c54427 100644
--- a/server/src/com/cloud/api/query/dao/SecurityGroupJoinDaoImpl.java
+++ b/server/src/com/cloud/api/query/dao/SecurityGroupJoinDaoImpl.java
@@ -24,25 +24,28 @@ import java.util.Set;
import javax.ejb.Local;
import javax.inject.Inject;
-import com.cloud.server.ResourceTag;
import org.apache.cloudstack.api.response.ResourceTagResponse;
-import org.apache.log4j.Logger;
-import org.springframework.stereotype.Component;
-
import org.apache.cloudstack.api.response.SecurityGroupResponse;
import org.apache.cloudstack.api.response.SecurityGroupRuleResponse;
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
+import org.apache.log4j.Logger;
+import org.springframework.stereotype.Component;
import com.cloud.api.ApiDBUtils;
import com.cloud.api.ApiResponseHelper;
import com.cloud.api.query.vo.ResourceTagJoinVO;
import com.cloud.api.query.vo.SecurityGroupJoinVO;
import com.cloud.network.security.SecurityGroup;
+import com.cloud.network.security.SecurityGroupVMMapVO;
import com.cloud.network.security.SecurityRule.SecurityRuleType;
+import com.cloud.network.security.dao.SecurityGroupVMMapDao;
+import com.cloud.server.ResourceTag;
import com.cloud.user.Account;
import com.cloud.utils.db.GenericDaoBase;
import com.cloud.utils.db.SearchBuilder;
import com.cloud.utils.db.SearchCriteria;
+import com.cloud.vm.UserVmVO;
+import com.cloud.vm.dao.UserVmDao;
@Component
@Local(value = {SecurityGroupJoinDao.class})
@@ -51,9 +54,12 @@ public class SecurityGroupJoinDaoImpl extends GenericDaoBase<SecurityGroupJoinVO
@Inject
private ConfigurationDao _configDao;
-
@Inject
private ResourceTagJoinDao _resourceTagJoinDao;
+ @Inject
+ private SecurityGroupVMMapDao _securityGroupVMMapDao;
+ @Inject
+ private UserVmDao _userVmDao;
private final SearchBuilder<SecurityGroupJoinVO> sgSearch;
@@ -125,6 +131,17 @@ public class SecurityGroupJoinDaoImpl extends GenericDaoBase<SecurityGroupJoinVO
}
}
+ List<SecurityGroupVMMapVO> securityGroupVmMap = _securityGroupVMMapDao.listBySecurityGroup(vsg.getId());
+ s_logger.debug("newSecurityGroupResponse() -> virtualmachine count: " + securityGroupVmMap.size());
+ sgResponse.setVirtualMachineCount(securityGroupVmMap.size());
+
+ for(SecurityGroupVMMapVO securityGroupVMMapVO : securityGroupVmMap) {
+ final UserVmVO userVmVO = _userVmDao.findById(securityGroupVMMapVO.getInstanceId());
+ if (userVmVO != null) {
+ sgResponse.addVirtualMachineId(userVmVO.getUuid());
+ }
+ }
+
// update tag information
Long tag_id = vsg.getTagId();
if (tag_id != null && tag_id.longValue() > 0) {