/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates.
*
* 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.uberfire.ext.security.management.util;
import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.jboss.errai.security.shared.api.Group;
import org.jboss.errai.security.shared.api.Role;
import org.jboss.errai.security.shared.api.RoleImpl;
import org.jboss.errai.security.shared.api.identity.User;
import org.junit.BeforeClass;
import org.junit.Test;
import org.uberfire.backend.server.security.RoleRegistry;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
/**
* <p>Unit test class for SecurityManagementUtils.</p>
* @since 0.8.0
*/
public class SecurityManagementUtilsTest {
@BeforeClass
public static void setup() throws IOException {
RoleRegistry.get().clear();
}
@Test
public void testCreateGroup() {
final String testId = "id1";
final Group group = SecurityManagementUtils.createGroup(testId);
assertNotNull(group);
final String name = group.getName();
assertEquals(name,
testId);
}
@Test
public void testCreateRole() {
final String testId = "id1";
final Role role = SecurityManagementUtils.createRole(testId);
assertNotNull(role);
final String name = role.getName();
assertEquals(name,
testId);
}
@Test
public void testCreateUserWithId() {
final String testId = "id1";
final User user = SecurityManagementUtils.createUser(testId);
assertNotNull(user);
final String id = user.getIdentifier();
assertEquals(id,
testId);
}
@Test
public void testCreateUserWithIdNull() {
final String testId = null;
assertNull(SecurityManagementUtils.createUser(testId));
}
@Test
public void testCreateUserWithGroups() {
final String testId = "id1";
final String group1Id = "g1";
final String group2Id = "g2";
final Group group1 = SecurityManagementUtils.createGroup(group1Id);
final Group group2 = SecurityManagementUtils.createGroup(group2Id);
final Set<Group> groups = new HashSet<Group>(2);
groups.add(group1);
groups.add(group2);
final User user = SecurityManagementUtils.createUser(testId,
groups);
assertNotNull(user);
final String id = user.getIdentifier();
assertEquals(id,
testId);
final Set<Group> resultGroups = user.getGroups();
assertNotNull(resultGroups);
assertTrue(resultGroups.size() == 2);
assertEquals(resultGroups,
groups);
}
@Test
public void testCreateUserWithGroupsAndRoles() {
final String testId = "id1";
final String group1Id = "g1";
final String group2Id = "g2";
final String role1Id = "r1";
final String role2Id = "r2";
final Group group1 = SecurityManagementUtils.createGroup(group1Id);
final Group group2 = SecurityManagementUtils.createGroup(group2Id);
final Set<Group> groups = new HashSet<Group>(2);
groups.add(group1);
groups.add(group2);
final Role role1 = SecurityManagementUtils.createRole(role1Id);
final Role role2 = SecurityManagementUtils.createRole(role2Id);
final Set<Role> roles = new HashSet<Role>(2);
roles.add(role1);
roles.add(role2);
final User user = SecurityManagementUtils.createUser(testId,
groups,
roles);
assertNotNull(user);
final String id = user.getIdentifier();
assertEquals(id,
testId);
final Set<Group> resultGroups = user.getGroups();
assertNotNull(resultGroups);
assertTrue(resultGroups.size() == 2);
assertEquals(resultGroups,
groups);
final Set<Role> resultRoles = user.getRoles();
assertNotNull(resultRoles);
assertTrue(resultRoles.size() == 2);
assertEquals(resultRoles,
roles);
}
@Test
public void testCreateUserWithGroupsAndRolesAndProperties() {
final String testId = "id1";
final String group1Id = "g1";
final String group2Id = "g2";
final String role1Id = "r1";
final String role2Id = "r2";
final Group group1 = SecurityManagementUtils.createGroup(group1Id);
final Group group2 = SecurityManagementUtils.createGroup(group2Id);
final Set<Group> groups = new HashSet<Group>(2);
groups.add(group1);
groups.add(group2);
final Role role1 = SecurityManagementUtils.createRole(role1Id);
final Role role2 = SecurityManagementUtils.createRole(role2Id);
final Set<Role> roles = new HashSet<Role>(2);
roles.add(role1);
roles.add(role2);
final Map<String, String> props = new HashMap<String, String>(2);
props.put("p1",
"value1");
props.put("p2",
"value2");
final User user = SecurityManagementUtils.createUser(testId,
groups,
roles,
props);
assertNotNull(user);
final String id = user.getIdentifier();
assertEquals(id,
testId);
final Set<Group> resultGroups = user.getGroups();
assertNotNull(resultGroups);
assertTrue(resultGroups.size() == 2);
assertEquals(resultGroups,
groups);
final Set<Role> resultRoles = user.getRoles();
assertNotNull(resultRoles);
assertTrue(resultRoles.size() == 2);
assertEquals(resultRoles,
roles);
final Map<String, String> resultProps = user.getProperties();
assertNotNull(resultProps);
assertTrue(resultProps.size() == 2);
assertEquals(resultProps.get("p1"),
"value1");
assertEquals(resultProps.get("p2"),
"value2");
}
@Test
public void testCloneUser() {
final String testId = "id1";
final String group1Id = "g1";
final String group2Id = "g2";
final String role1Id = "r1";
final String role2Id = "r2";
final Group group1 = SecurityManagementUtils.createGroup(group1Id);
final Group group2 = SecurityManagementUtils.createGroup(group2Id);
final Set<Group> groups = new HashSet<Group>(2);
groups.add(group1);
groups.add(group2);
final Role role1 = SecurityManagementUtils.createRole(role1Id);
final Role role2 = SecurityManagementUtils.createRole(role2Id);
final Set<Role> roles = new HashSet<Role>(2);
roles.add(role1);
roles.add(role2);
final Map<String, String> props = new HashMap<String, String>(2);
props.put("p1",
"value1");
props.put("p2",
"value2");
final User user = SecurityManagementUtils.createUser(testId,
groups,
roles,
props);
final User cloned = SecurityManagementUtils.clone(user);
assertNotNull(cloned);
final String id = cloned.getIdentifier();
assertEquals(id,
testId);
final Set<Group> resultGroups = cloned.getGroups();
assertNotNull(resultGroups);
assertTrue(resultGroups.size() == 2);
assertEquals(resultGroups,
groups);
final Set<Role> resultRoles = cloned.getRoles();
assertNotNull(resultRoles);
assertTrue(resultRoles.size() == 2);
assertEquals(resultRoles,
roles);
final Map<String, String> resultProps = cloned.getProperties();
assertNotNull(resultProps);
assertTrue(resultProps.size() == 2);
assertEquals(resultProps.get("p1"),
"value1");
assertEquals(resultProps.get("p2"),
"value2");
}
@Test
public void testGetRegisteredRoles() {
RoleRegistry.get().registerRole("role1");
RoleRegistry.get().registerRole("role2");
final Set<Role> roles = SecurityManagementUtils.getRegisteredRoles();
assertNotNull(roles);
assertTrue(roles.size() == 2);
assertFalse(roles.contains(new RoleImpl("admin")));
}
@Test
public void testGetRegisteredRoleNames() {
RoleRegistry.get().registerRole("role1");
RoleRegistry.get().registerRole("role2");
final Set<String> roles = SecurityManagementUtils.getRegisteredRoleNames();
assertNotNull(roles);
assertTrue(roles.size() == 2);
assertFalse(roles.contains("admin"));
}
@Test
public void testRolesToString() {
Set<Role> roles = new HashSet<Role>(2);
Role role1 = mock(Role.class);
when(role1.getName()).thenReturn("role1");
Role role2 = mock(Role.class);
when(role2.getName()).thenReturn("role2");
roles.add(role1);
roles.add(role2);
final Set<String> rolesStr = SecurityManagementUtils.rolesToString(roles);
assertNotNull(rolesStr);
assertTrue(rolesStr.size() == 2);
assertTrue(rolesStr.contains("role1"));
assertTrue(rolesStr.contains("role2"));
}
@Test
public void testRolesToStringEmpty() {
final Set<String> rolesStr = SecurityManagementUtils.rolesToString(null);
assertNotNull(rolesStr);
assertTrue(rolesStr.size() == 0);
}
@Test
public void testGroupsToString() {
Set<Group> roles = new HashSet<Group>(2);
Group role1 = mock(Group.class);
when(role1.getName()).thenReturn("group1");
Group role2 = mock(Group.class);
when(role2.getName()).thenReturn("group2");
roles.add(role1);
roles.add(role2);
final Set<String> rolesStr = SecurityManagementUtils.groupsToString(roles);
assertNotNull(rolesStr);
assertTrue(rolesStr.size() == 2);
assertTrue(rolesStr.contains("group1"));
assertTrue(rolesStr.contains("group2"));
}
@Test
public void testGroupsToStringEmpty() {
final Set<String> rolesStr = SecurityManagementUtils.groupsToString(null);
assertNotNull(rolesStr);
assertTrue(rolesStr.size() == 0);
}
@Test
public void testPopulateGroupsOrRoles() {
RoleRegistry.get().registerRole("role1");
Set<String> registeredRoles = SecurityManagementUtils.getRegisteredRoleNames();
Set<Group> groups = new HashSet<Group>();
Set<Role> roles = new HashSet<Role>();
SecurityManagementUtils.populateGroupOrRoles("group1",
registeredRoles,
groups,
roles);
assertTrue(groups.size() == 1);
assertTrue(roles.isEmpty());
SecurityManagementUtils.populateGroupOrRoles("role1",
registeredRoles,
groups,
roles);
assertTrue(groups.size() == 1);
assertTrue(roles.size() == 1);
}
}