// 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.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.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 org.apache.cloudstack.iam.api.IAMGroup; | |
import org.apache.cloudstack.iam.api.IAMPolicy; | |
import org.apache.cloudstack.iam.api.IAMService; | |
import org.apache.cloudstack.iam.server.IAMGroupVO; | |
import org.apache.cloudstack.iam.server.IAMPolicyVO; | |
import org.apache.cloudstack.iam.server.IAMServiceImpl; | |
import org.apache.cloudstack.iam.server.dao.IAMAccountPolicyMapDao; | |
import org.apache.cloudstack.iam.server.dao.IAMGroupAccountMapDao; | |
import org.apache.cloudstack.iam.server.dao.IAMGroupDao; | |
import org.apache.cloudstack.iam.server.dao.IAMGroupPolicyMapDao; | |
import org.apache.cloudstack.iam.server.dao.IAMPolicyDao; | |
import org.apache.cloudstack.iam.server.dao.IAMPolicyPermissionDao; | |
import org.apache.cloudstack.test.utils.SpringUtils; | |
import com.cloud.exception.InvalidParameterValueException; | |
import com.cloud.utils.component.ComponentContext; | |
import com.cloud.utils.db.EntityManager; | |
import com.cloud.utils.db.SearchCriteria; | |
@RunWith(SpringJUnit4ClassRunner.class) | |
@ContextConfiguration(loader = AnnotationConfigContextLoader.class) | |
public class IAMServiceUnitTest { | |
@Inject | |
IAMService _iamService; | |
@Inject | |
IAMPolicyDao _aclPolicyDao; | |
@Inject | |
IAMGroupDao _aclGroupDao; | |
@Inject | |
EntityManager _entityMgr; | |
@Inject | |
IAMGroupPolicyMapDao _aclGroupPolicyMapDao; | |
@Inject | |
IAMGroupAccountMapDao _aclGroupAccountMapDao; | |
@Inject | |
IAMPolicyPermissionDao _policyPermissionDao; | |
@BeforeClass | |
public static void setUpClass() throws ConfigurationException { | |
} | |
@Before | |
public void setUp() { | |
ComponentContext.initComponentsLifeCycle(); | |
IAMGroupVO group = new IAMGroupVO("group1", "my first group"); | |
Mockito.when(_aclGroupDao.persist(Mockito.any(IAMGroupVO.class))).thenReturn(group); | |
List<IAMGroupVO> groups = new ArrayList<IAMGroupVO>(); | |
groups.add(group); | |
when(_aclGroupDao.search(Mockito.any(SearchCriteria.class), Mockito.any(com.cloud.utils.db.Filter.class))) | |
.thenReturn(groups); | |
IAMPolicyVO policy = new IAMPolicyVO("policy1", "my first policy"); | |
Mockito.when(_aclPolicyDao.persist(Mockito.any(IAMPolicyVO.class))).thenReturn(policy); | |
} | |
@After | |
public void tearDown() { | |
} | |
@Test(expected = InvalidParameterValueException.class) | |
public void createAclGroupTest() { | |
IAMGroup group = _iamService.createIAMGroup("group1", "my first group", "/root/mydomain"); | |
assertNotNull("Acl group 'group1' failed to create ", group); | |
IAMGroupVO group2 = new IAMGroupVO("group1", "my second group"); | |
when(_aclGroupDao.findByName(eq("/root/mydomain"), eq("group1"))).thenReturn(group2); | |
IAMGroup group3 = _iamService.createIAMGroup("group1", "my first group", "/root/mydomain"); | |
} | |
@Test(expected = InvalidParameterValueException.class) | |
public void deleteAclGroupInvalidIdTest() { | |
when(_aclGroupDao.findById(20L)).thenReturn(null); | |
_iamService.deleteIAMGroup(20L); | |
} | |
@Test | |
public void accountGroupMaptest() { | |
// create group | |
IAMGroupVO group = new IAMGroupVO("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() { | |
IAMPolicy policy = _iamService.createIAMPolicy("policy1", "my first policy", null, "/root/mydomain"); | |
assertNotNull("Acl policy 'policy1' failed to create ", policy); | |
IAMPolicyVO rvo = new IAMPolicyVO("policy2", "second policy"); | |
when(_aclPolicyDao.findByName(eq("policy2"))).thenReturn(rvo); | |
_iamService.createIAMPolicy("policy2", "second policy", null, "/root/mydomain"); | |
} | |
@Test(expected = InvalidParameterValueException.class) | |
public void deleteAclPolicyInvalidIdTest() { | |
when(_aclPolicyDao.findById(34L)).thenReturn(null); | |
_iamService.deleteIAMPolicy(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 IAMPolicyDao aclPolicyDao() { | |
return Mockito.mock(IAMPolicyDao.class); | |
} | |
@Bean | |
public IAMGroupDao aclGroupDao() { | |
return Mockito.mock(IAMGroupDao.class); | |
} | |
@Bean | |
public EntityManager entityManager() { | |
return Mockito.mock(EntityManager.class); | |
} | |
@Bean | |
public IAMGroupPolicyMapDao aclGroupPolicyMapDao() { | |
return Mockito.mock(IAMGroupPolicyMapDao.class); | |
} | |
@Bean | |
public IAMGroupAccountMapDao aclGroupAccountMapDao() { | |
return Mockito.mock(IAMGroupAccountMapDao.class); | |
} | |
@Bean | |
public IAMAccountPolicyMapDao aclAccountPolicyMapDao() { | |
return Mockito.mock(IAMAccountPolicyMapDao.class); | |
} | |
@Bean | |
public IAMPolicyPermissionDao aclPolicyPermissionDao() { | |
return Mockito.mock(IAMPolicyPermissionDao.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); | |
} | |
} | |
} | |
} |