Updated Branches: refs/heads/rbac 01e6f47d4 -> 08122c9ad
- Added basic unit test for IAMService - Removed Event geenration annotations from IAM server Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/08122c9a Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/08122c9a Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/08122c9a Branch: refs/heads/rbac Commit: 08122c9adb57269987dd26fec172760b36c995a7 Parents: 01e6f47d Author: Prachi Damle <[email protected]> Authored: Fri Dec 27 16:05:22 2013 -0800 Committer: Prachi Damle <[email protected]> Committed: Fri Dec 27 16:06:06 2013 -0800 ---------------------------------------------------------------------- .../cloudstack/iam/server/IAMServiceImpl.java | 15 +- .../cloudstack/iam/IAMServiceUnitTest.java | 210 +++++++++++++++++++ 2 files changed, 211 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/08122c9a/services/iam/server/src/org/apache/cloudstack/iam/server/IAMServiceImpl.java ---------------------------------------------------------------------- diff --git a/services/iam/server/src/org/apache/cloudstack/iam/server/IAMServiceImpl.java b/services/iam/server/src/org/apache/cloudstack/iam/server/IAMServiceImpl.java index fa7c922..b04e100 100644 --- a/services/iam/server/src/org/apache/cloudstack/iam/server/IAMServiceImpl.java +++ b/services/iam/server/src/org/apache/cloudstack/iam/server/IAMServiceImpl.java @@ -80,9 +80,8 @@ public class IAMServiceImpl extends ManagerBase implements IAMService, Manager { @DB @Override - @ActionEvent(eventType = EventTypes.EVENT_ACL_GROUP_CREATE, eventDescription = "Creating Acl Group", create = true) public AclGroup createAclGroup(String aclGroupName, String description, String path) { - // check if the role is already existing + // check if the group is already existing AclGroup grp = _aclGroupDao.findByName(path, aclGroupName); if (grp != null) { throw new InvalidParameterValueException( @@ -97,7 +96,6 @@ public class IAMServiceImpl extends ManagerBase implements IAMService, Manager { @DB @Override - @ActionEvent(eventType = EventTypes.EVENT_ACL_GROUP_DELETE, eventDescription = "Deleting Acl Group") public boolean deleteAclGroup(final Long aclGroupId) { // get the Acl Group entity final AclGroup grp = _aclGroupDao.findById(aclGroupId); @@ -154,9 +152,7 @@ public class IAMServiceImpl extends ManagerBase implements IAMService, Manager { @DB @Override - @ActionEvent(eventType = EventTypes.EVENT_ACL_GROUP_UPDATE, eventDescription = "Adding accounts to acl group") public AclGroup addAccountsToGroup(final List<Long> acctIds, final Long groupId) { - final Account caller = CallContext.current().getCallingAccount(); // get the Acl Group entity AclGroup group = _aclGroupDao.findById(groupId); if (group == null) { @@ -184,9 +180,7 @@ public class IAMServiceImpl extends ManagerBase implements IAMService, Manager { @DB @Override - @ActionEvent(eventType = EventTypes.EVENT_ACL_GROUP_UPDATE, eventDescription = "Removing accounts from acl group") public AclGroup removeAccountsFromGroup(final List<Long> acctIds, final Long groupId) { - final Account caller = CallContext.current().getCallingAccount(); // get the Acl Group entity AclGroup group = _aclGroupDao.findById(groupId); if (group == null) { @@ -212,7 +206,6 @@ public class IAMServiceImpl extends ManagerBase implements IAMService, Manager { @DB @Override - @ActionEvent(eventType = EventTypes.EVENT_ACL_POLICY_CREATE, eventDescription = "Creating Acl Policy", create = true) public AclPolicy createAclPolicy(final String aclPolicyName, final String description, final Long parentPolicyId) { // check if the policy is already existing @@ -249,9 +242,7 @@ public class IAMServiceImpl extends ManagerBase implements IAMService, Manager { @DB @Override - @ActionEvent(eventType = EventTypes.EVENT_ACL_POLICY_DELETE, eventDescription = "Deleting Acl Policy") public boolean deleteAclPolicy(final long aclPolicyId) { - Account caller = CallContext.current().getCallingAccount(); // get the Acl Policy entity final AclPolicy policy = _aclPolicyDao.findById(aclPolicyId); if (policy == null) { @@ -315,7 +306,6 @@ public class IAMServiceImpl extends ManagerBase implements IAMService, Manager { @DB @Override - @ActionEvent(eventType = EventTypes.EVENT_ACL_GROUP_UPDATE, eventDescription = "Attaching policy to acl group") public AclGroup attachAclPoliciesToGroup(final List<Long> policyIds, final Long groupId) { // get the Acl Group entity AclGroup group = _aclGroupDao.findById(groupId); @@ -350,7 +340,6 @@ public class IAMServiceImpl extends ManagerBase implements IAMService, Manager { @DB @Override - @ActionEvent(eventType = EventTypes.EVENT_ACL_GROUP_UPDATE, eventDescription = "Removing policies from acl group") public AclGroup removeAclPoliciesFromGroup(final List<Long> policyIds, final Long groupId) { final Account caller = CallContext.current().getCallingAccount(); // get the Acl Group entity @@ -449,7 +438,6 @@ public class IAMServiceImpl extends ManagerBase implements IAMService, Manager { @DB @Override - @ActionEvent(eventType = EventTypes.EVENT_ACL_POLICY_GRANT, eventDescription = "Granting acl permission to Acl Policy") public AclPolicy addAclPermissionToAclPolicy(long aclPolicyId, String entityType, String scope, Long scopeId, String action, String accessType, Permission perm) { Account caller = CallContext.current().getCallingAccount(); @@ -473,7 +461,6 @@ public class IAMServiceImpl extends ManagerBase implements IAMService, Manager { @DB @Override - @ActionEvent(eventType = EventTypes.EVENT_ACL_POLICY_REVOKE, eventDescription = "Revoking acl permission from Acl Policy") public AclPolicy removeAclPermissionFromAclPolicy(long aclPolicyId, String entityType, String scope, Long scopeId, String action) { // get the Acl Policy entity http://git-wip-us.apache.org/repos/asf/cloudstack/blob/08122c9a/services/iam/server/test/org/apache/cloudstack/iam/IAMServiceUnitTest.java ---------------------------------------------------------------------- diff --git a/services/iam/server/test/org/apache/cloudstack/iam/IAMServiceUnitTest.java b/services/iam/server/test/org/apache/cloudstack/iam/IAMServiceUnitTest.java new file mode 100644 index 0000000..121f60d --- /dev/null +++ b/services/iam/server/test/org/apache/cloudstack/iam/IAMServiceUnitTest.java @@ -0,0 +1,210 @@ +// 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 org.apache.cloudstack.iam; + +import static org.junit.Assert.assertNotNull; +import static org.mockito.Matchers.anyLong; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.when; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import javax.inject.Inject; +import javax.naming.ConfigurationException; + +import org.junit.After; +import org.apache.cloudstack.test.utils.SpringUtils; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.ComponentScan.Filter; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.FilterType; +import org.springframework.core.type.classreading.MetadataReader; +import org.springframework.core.type.classreading.MetadataReaderFactory; +import org.springframework.core.type.filter.TypeFilter; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; + +import com.cloud.exception.InvalidParameterValueException; + +import org.apache.cloudstack.iam.api.AclGroup; +import org.apache.cloudstack.iam.api.AclPolicy; +import org.apache.cloudstack.iam.api.IAMService; +import org.apache.cloudstack.iam.server.AclGroupAccountMapVO; +import org.apache.cloudstack.iam.server.AclGroupVO; +import org.apache.cloudstack.iam.server.AclPolicyVO; +import org.apache.cloudstack.iam.server.IAMServiceImpl; +import org.apache.cloudstack.iam.server.dao.AclGroupAccountMapDao; +import org.apache.cloudstack.iam.server.dao.AclGroupDao; +import org.apache.cloudstack.iam.server.dao.AclGroupPolicyMapDao; +import org.apache.cloudstack.iam.server.dao.AclPolicyDao; +import org.apache.cloudstack.iam.server.dao.AclPolicyPermissionDao; +import com.cloud.utils.component.ComponentContext; +import com.cloud.utils.db.EntityManager; +import com.cloud.utils.db.GenericSearchBuilder; +import com.cloud.utils.db.SearchCriteria; +import com.cloud.utils.db.SearchCriteria.Op; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(loader = AnnotationConfigContextLoader.class) +public class IAMServiceUnitTest { + + @Inject + IAMService _iamService; + + @Inject + AclPolicyDao _aclPolicyDao; + + @Inject + AclGroupDao _aclGroupDao; + + @Inject + EntityManager _entityMgr; + + @Inject + AclGroupPolicyMapDao _aclGroupPolicyMapDao; + + @Inject + AclGroupAccountMapDao _aclGroupAccountMapDao; + + @Inject + AclPolicyPermissionDao _policyPermissionDao; + + + @BeforeClass + public static void setUpClass() throws ConfigurationException { + } + + @Before + public void setUp() { + ComponentContext.initComponentsLifeCycle(); + AclGroupVO group = new AclGroupVO("group1", "my first group"); + Mockito.when(_aclGroupDao.persist(Mockito.any(AclGroupVO.class))).thenReturn(group); + List<AclGroupVO> groups = new ArrayList<AclGroupVO>(); + groups.add(group); + when(_aclGroupDao.search(Mockito.any(SearchCriteria.class), Mockito.any(com.cloud.utils.db.Filter.class))) + .thenReturn(groups); + + AclPolicyVO policy = new AclPolicyVO("policy1", "my first policy"); + Mockito.when(_aclPolicyDao.persist(Mockito.any(AclPolicyVO.class))).thenReturn(policy); + + } + + @After + public void tearDown() { + } + + @Test(expected = InvalidParameterValueException.class) + public void createAclGroupTest() { + AclGroup group = _iamService.createAclGroup("group1", "my first group", "/root/mydomain"); + assertNotNull("Acl group 'group1' failed to create ", group); + + AclGroupVO group2 = new AclGroupVO("group1", "my second group"); + when(_aclGroupDao.findByName(eq("/root/mydomain"), eq("group1"))).thenReturn(group2); + + AclGroup group3 = _iamService.createAclGroup("group1", "my first group", "/root/mydomain"); + } + + @Test(expected = InvalidParameterValueException.class) + public void deleteAclGroupInvalidIdTest(){ + when(_aclGroupDao.findById(20L)).thenReturn(null); + _iamService.deleteAclGroup(20L); + } + + @Test + public void accountGroupMaptest() { + // create group + AclGroupVO group = new AclGroupVO("group1", "my first group"); + + // add account to group + List<Long> accountIds = new ArrayList<Long>(); + accountIds.add(100L); + when(_aclGroupDao.findById(20L)).thenReturn(group); + _iamService.addAccountsToGroup(accountIds, 20L); + + _iamService.removeAccountsFromGroup(accountIds, 20L); + } + + @Test(expected = InvalidParameterValueException.class) + public void createAclPolicyTest() { + AclPolicy policy = _iamService.createAclPolicy("policy1", "my first policy", null); + assertNotNull("Acl policy 'policy1' failed to create ", policy); + + AclPolicyVO rvo = new AclPolicyVO("policy2", "second policy"); + when(_aclPolicyDao.findByName(eq("policy2"))).thenReturn(rvo); + + _iamService.createAclPolicy("policy2", "second policy", null); + } + + @Test(expected = InvalidParameterValueException.class) + public void deleteAclPolicyInvalidIdTest() { + when(_aclPolicyDao.findById(34L)).thenReturn(null); + _iamService.deleteAclPolicy(34L); + } + + @Configuration + @ComponentScan(basePackageClasses = { IAMServiceImpl.class }, includeFilters = { @Filter(value = TestConfiguration.Library.class, type = FilterType.CUSTOM) }, useDefaultFilters = false) + public static class TestConfiguration extends SpringUtils.CloudStackTestConfiguration { + + @Bean + public AclPolicyDao aclPolicyDao() { + return Mockito.mock(AclPolicyDao.class); + } + + @Bean + public AclGroupDao aclGroupDao() { + return Mockito.mock(AclGroupDao.class); + } + + @Bean + public EntityManager entityManager() { + return Mockito.mock(EntityManager.class); + } + + @Bean + public AclGroupPolicyMapDao aclGroupPolicyMapDao() { + return Mockito.mock(AclGroupPolicyMapDao.class); + } + + @Bean + public AclGroupAccountMapDao aclGroupAccountMapDao() { + return Mockito.mock(AclGroupAccountMapDao.class); + } + + @Bean + public AclPolicyPermissionDao aclPolicyPermissionDao() { + return Mockito.mock(AclPolicyPermissionDao.class); + } + + public static class Library implements TypeFilter { + + @Override + public boolean match(MetadataReader mdr, MetadataReaderFactory arg1) throws IOException { + ComponentScan cs = TestConfiguration.class.getAnnotation(ComponentScan.class); + return SpringUtils.includedInBasePackageClasses(mdr.getClassMetadata().getClassName(), cs); + } + } + } +}
