blob: 08e3ac68de34309d4247f90171aac2abfd0a0985 [file] [log] [blame]
/**
* Licensed 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.pulsar.manager.service;
import org.apache.pulsar.manager.PulsarManagerApplication;
import org.apache.pulsar.manager.entity.RoleBindingEntity;
import org.apache.pulsar.manager.entity.RoleBindingRepository;
import org.apache.pulsar.manager.entity.RoleInfoEntity;
import org.apache.pulsar.manager.entity.RolesRepository;
import org.apache.pulsar.manager.entity.TenantEntity;
import org.apache.pulsar.manager.entity.TenantsRepository;
import org.apache.pulsar.manager.entity.UserInfoEntity;
import org.apache.pulsar.manager.entity.UsersRepository;
import org.apache.pulsar.manager.profiles.HerdDBTestProfile;
import org.apache.pulsar.manager.utils.HttpUtil;
import org.apache.pulsar.manager.utils.ResourceType;
import org.apache.pulsar.manager.utils.ResourceVerbs;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PowerMockIgnore;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.powermock.modules.junit4.PowerMockRunnerDelegate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.List;
import java.util.Map;
@RunWith(PowerMockRunner.class)
@PowerMockRunnerDelegate(SpringRunner.class)
@PowerMockIgnore( {"javax.*", "sun.*", "com.sun.*", "org.xml.*", "org.w3c.*"})
@PrepareForTest(HttpUtil.class)
@SpringBootTest(
classes = {
PulsarManagerApplication.class,
HerdDBTestProfile.class
}
)
@ActiveProfiles("test")
public class RoleBindingServiceImplTest {
@Autowired
private UsersRepository usersRepository;
@Autowired
private RoleBindingService roleBindingService;
@Autowired
private TenantsRepository tenantsRepository;
@Autowired
private RolesRepository rolesRepository;
@Autowired
private RoleBindingRepository roleBindingRepository;
@Test
public void validateCurrentUserTest() {
UserInfoEntity userInfoEntity = new UserInfoEntity();
userInfoEntity.setName("test-user");
userInfoEntity.setAccessToken("test-access-token");
long userId = usersRepository.save(userInfoEntity);
RoleBindingEntity roleBindingEntity = new RoleBindingEntity();
Map<String, String> validateErrorUser = roleBindingService.validateCurrentUser(
"test-error-access-token", roleBindingEntity);
Assert.assertEquals(validateErrorUser.get("error"), "User no exist.");
TenantEntity tenantEntity = new TenantEntity();
tenantEntity.setTenant("test-tenant");
tenantEntity.setAdminRoles("test-admin-roles");
tenantEntity.setAllowedClusters("test-allowed-clusters");
long tenantId = tenantsRepository.save(tenantEntity);
RoleInfoEntity roleInfoEntity = new RoleInfoEntity();
roleInfoEntity.setRoleName("test-role");
roleInfoEntity.setRoleSource("test-tenant");
roleInfoEntity.setResourceId(tenantId);
roleInfoEntity.setFlag(1);
roleInfoEntity.setResourceName("test-tenant-resource");
roleInfoEntity.setResourceType(ResourceType.TENANTS.name());
roleInfoEntity.setResourceVerbs(ResourceVerbs.ADMIN.name());
long roleId = rolesRepository.save(roleInfoEntity);
roleBindingEntity.setUserId(userId);
roleBindingEntity.setRoleId(roleId);
roleBindingEntity.setName("test-role-binding");
roleBindingEntity.setDescription("test-role-binding-description");
roleBindingRepository.save(roleBindingEntity);
roleBindingEntity.setRoleId(10);
Map<String, String> validateIllegalUser = roleBindingService.validateCurrentUser(
"test-access-token", roleBindingEntity);
Assert.assertEquals(validateIllegalUser.get("error"), "This operation is illegal for this user");
roleBindingEntity.setRoleId(roleId);
Map<String, String> validateSuccessUser = roleBindingService.validateCurrentUser(
"test-access-token", roleBindingEntity);
Assert.assertEquals(validateSuccessUser.get("message"), "Validate current user success");
roleBindingRepository.delete(roleId, userId);
rolesRepository.delete("test-role", "test-tenant");
tenantsRepository.remove("test-tenant");
usersRepository.delete("test-user");
}
@Test
public void validateCreateRoleBinding() {
UserInfoEntity userInfoEntity = new UserInfoEntity();
userInfoEntity.setName("test-user");
userInfoEntity.setAccessToken("test-access-token");
long userId = usersRepository.save(userInfoEntity);
RoleBindingEntity roleBindingEntity = new RoleBindingEntity();
TenantEntity tenantEntity = new TenantEntity();
tenantEntity.setTenant("test-tenant");
tenantEntity.setAdminRoles("test-admin-roles");
tenantEntity.setAllowedClusters("test-allowed-clusters");
long tenantId = tenantsRepository.save(tenantEntity);
RoleInfoEntity roleInfoEntity = new RoleInfoEntity();
roleInfoEntity.setRoleName("test-role");
roleInfoEntity.setRoleSource("test-tenant");
roleInfoEntity.setResourceId(tenantId);
roleInfoEntity.setFlag(1);
roleInfoEntity.setResourceName("test-tenant-resource");
roleInfoEntity.setResourceType(ResourceType.TENANTS.name());
roleInfoEntity.setResourceVerbs(ResourceVerbs.ADMIN.name());
long roleId = rolesRepository.save(roleInfoEntity);
roleBindingEntity.setUserId(userId);
roleBindingEntity.setRoleId(roleId);
roleBindingEntity.setName("test-role-binding");
roleBindingEntity.setDescription("test-role-binding-description");
roleBindingRepository.save(roleBindingEntity);
Map<String, Object> validateErrorUser = roleBindingService.validateCreateRoleBinding(
"test-error-access-token", "test-error-tenant",
"test-role-name", "test-user-name");
Assert.assertEquals(validateErrorUser.get("error"), "The user is not exist");
Map<String, Object> validateErrorRoleName = roleBindingService.validateCreateRoleBinding(
"test-access-token", "test-tenant",
"test-error-role", "test-user");
Assert.assertEquals(validateErrorRoleName.get("error"), "This role is no exist");
RoleInfoEntity testRoleInfoEntity = new RoleInfoEntity();
testRoleInfoEntity.setRoleName("test-no-binding-role");
testRoleInfoEntity.setRoleSource("test-tenant");
testRoleInfoEntity.setResourceId(tenantId);
testRoleInfoEntity.setFlag(1);
testRoleInfoEntity.setResourceName("test-no-binding-tenant-resource");
testRoleInfoEntity.setResourceType(ResourceType.TENANTS.name());
testRoleInfoEntity.setResourceVerbs(ResourceVerbs.ADMIN.name());
rolesRepository.save(testRoleInfoEntity);
TenantEntity testNoBindingTenantEntity = new TenantEntity();
testNoBindingTenantEntity.setTenant("test-no-binding-tenant");
testNoBindingTenantEntity.setAdminRoles("test-admin-roles");
testNoBindingTenantEntity.setAllowedClusters("test-allowed-clusters");
long testNoBindingTenantId = tenantsRepository.save(tenantEntity);
RoleInfoEntity testNoBindingRoleInfoEntity = new RoleInfoEntity();
testNoBindingRoleInfoEntity.setRoleName("test-no-binding-role");
testNoBindingRoleInfoEntity.setRoleSource("test-no-binding-tenant");
testNoBindingRoleInfoEntity.setResourceId(testNoBindingTenantId);
testNoBindingRoleInfoEntity.setFlag(1);
testNoBindingRoleInfoEntity.setResourceName("test-no-binding-tenant-resource");
testNoBindingRoleInfoEntity.setResourceType(ResourceType.TENANTS.name());
testNoBindingRoleInfoEntity.setResourceVerbs(ResourceVerbs.ADMIN.name());
rolesRepository.save(testNoBindingRoleInfoEntity);
Map<String, Object> validateBindingRole = roleBindingService.validateCreateRoleBinding(
"test-access-token", "test-tenant",
"test-role", "test-user");
Assert.assertEquals(validateBindingRole.get("error"), "Role binding already exist");
Map<String, Object> validateCreateRoleBinding = roleBindingService.validateCreateRoleBinding(
"test-access-token", "test-tenant",
"test-no-binding-role", "test-user");
Assert.assertEquals(validateCreateRoleBinding.get("message"), "Validate create role success");
roleBindingRepository.delete(roleId, userId);
rolesRepository.delete("test-role", "test-tenant");
rolesRepository.delete("test-no-binding-role", "test-no-binding-tenant");
rolesRepository.delete("test-no-binding-role", "test-tenant");
tenantsRepository.remove("test-tenant");
tenantsRepository.remove("test-no-binding-tenant");
usersRepository.delete("test-user");
}
@Test
public void getRoleBindingList() {
UserInfoEntity userInfoEntity = new UserInfoEntity();
userInfoEntity.setName("test-user-binding");
userInfoEntity.setAccessToken("test-access-token-binding");
long userId = usersRepository.save(userInfoEntity);
RoleBindingEntity roleBindingEntity = new RoleBindingEntity();
TenantEntity tenantEntity = new TenantEntity();
tenantEntity.setTenant("test-tenant-binding");
tenantEntity.setAdminRoles("test-admin-roles");
tenantEntity.setAllowedClusters("test-allowed-clusters");
long tenantId = tenantsRepository.save(tenantEntity);
RoleInfoEntity roleInfoEntity = new RoleInfoEntity();
roleInfoEntity.setRoleName("test-role-binding");
roleInfoEntity.setRoleSource("test-tenant-binding");
roleInfoEntity.setResourceId(tenantId);
roleInfoEntity.setFlag(1);
roleInfoEntity.setResourceName("test-tenant-resource");
roleInfoEntity.setResourceType(ResourceType.TENANTS.name());
roleInfoEntity.setResourceVerbs(ResourceVerbs.ADMIN.name());
long roleId = rolesRepository.save(roleInfoEntity);
roleBindingEntity.setUserId(userId);
roleBindingEntity.setRoleId(roleId);
roleBindingEntity.setName("test-role-binding");
roleBindingEntity.setDescription("test-role-binding-description");
roleBindingRepository.save(roleBindingEntity);
List<Map<String, Object>> roleBindingMap = roleBindingService.getRoleBindingList(
"test-access-token-binding", "test-tenant-binding");
for (Map<String, Object> stringObjectMap : roleBindingMap) {
Assert.assertEquals(stringObjectMap.get("name"), "test-role-binding");
Assert.assertEquals(stringObjectMap.get("userId"), userId);
Assert.assertEquals(stringObjectMap.get("userName"), "test-user-binding");
Assert.assertEquals(stringObjectMap.get("roleId"), roleId);
Assert.assertEquals(stringObjectMap.get("roleName"), "test-role-binding");
Assert.assertEquals(stringObjectMap.get("description"), "test-role-binding-description");
}
roleBindingRepository.delete(roleId, userId);
rolesRepository.delete("test-role-binding", "test-tenant-binding");
tenantsRepository.remove("test-tenant-binding");
usersRepository.delete("test-user-binding");
}
}