/* * 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.wildfly.properties; import java.io.File; import java.net.URL; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set; import org.apache.commons.io.FileUtils; import org.jboss.errai.security.shared.api.Group; import org.jboss.errai.security.shared.api.GroupImpl; import org.junit.After; import org.junit.Before; import org.junit.BeforeClass; import org.junit.ClassRule; import org.junit.Test; import org.junit.rules.TemporaryFolder; import org.junit.runner.RunWith; import org.mockito.Spy; import org.mockito.runners.MockitoJUnitRunner; import org.uberfire.backend.server.security.RoleRegistry; import org.uberfire.ext.security.management.BaseTest; import org.uberfire.ext.security.management.api.AbstractEntityManager; import org.uberfire.ext.security.management.api.Capability; import org.uberfire.ext.security.management.api.CapabilityStatus; import org.uberfire.ext.security.management.api.exception.GroupNotFoundException; import org.uberfire.ext.security.management.api.exception.UnsupportedServiceCapabilityException; import org.uberfire.ext.security.management.util.SecurityManagementUtils; import static org.junit.Assert.*; import static org.mockito.Mockito.*; @RunWith(MockitoJUnitRunner.class) public class WildflyGroupsPropertiesManagerTest extends BaseTest { protected static final String ADMIN = "admin"; protected static final String GROUPS_FILE = "org/uberfire/ext/security/management/wildfly/application-roles.properties"; @ClassRule public static TemporaryFolder tempFolder = new TemporaryFolder(); private static File elHome; protected String groupsFilePath; @Spy private WildflyGroupPropertiesManager groupsPropertiesManager = new WildflyGroupPropertiesManager(); @BeforeClass public static void initWorkspace() throws Exception { elHome = tempFolder.newFolder("uf-extensions-security-management-wildfly"); RoleRegistry.get().clear(); } @Before public void setup() throws Exception { URL templateURL = Thread.currentThread().getContextClassLoader().getResource(GROUPS_FILE); File templateFile = new File(templateURL.getFile()); FileUtils.cleanDirectory(elHome); FileUtils.copyFileToDirectory(templateFile, elHome); this.groupsFilePath = new File(elHome, templateFile.getName()).getAbsolutePath(); doReturn(groupsFilePath).when(groupsPropertiesManager).getGroupsFilePath(); groupsPropertiesManager.initialize(userSystemManager); } @After public void finishIt() throws Exception { groupsPropertiesManager.destroy(); } @Test public void testCapabilities() { assertEquals(groupsPropertiesManager.getCapabilityStatus(Capability.CAN_SEARCH_GROUPS), CapabilityStatus.ENABLED); assertEquals(groupsPropertiesManager.getCapabilityStatus(Capability.CAN_READ_GROUP), CapabilityStatus.ENABLED); assertEquals(groupsPropertiesManager.getCapabilityStatus(Capability.CAN_ADD_GROUP), CapabilityStatus.ENABLED); assertEquals(groupsPropertiesManager.getCapabilityStatus(Capability.CAN_DELETE_GROUP), CapabilityStatus.ENABLED); assertEquals(groupsPropertiesManager.getCapabilityStatus(Capability.CAN_UPDATE_GROUP), CapabilityStatus.UNSUPPORTED); } @Test public void testAllowsEmpty() { assertFalse(groupsPropertiesManager.getSettings().allowEmpty()); } @Test(expected = RuntimeException.class) public void testSearchPageZero() { AbstractEntityManager.SearchRequest request = buildSearchRequestMock("", 0, 5); AbstractEntityManager.SearchResponse<Group> response = groupsPropertiesManager.search(request); } @Test public void testSearchAll() { AbstractEntityManager.SearchRequest request = buildSearchRequestMock("", 1, 5); AbstractEntityManager.SearchResponse<Group> response = groupsPropertiesManager.search(request); assertNotNull(response); List<Group> groups = response.getResults(); int total = response.getTotal(); boolean hasNextPage = response.hasNextPage(); assertEquals(total, 4); assertTrue(!hasNextPage); assertEquals(groups.size(), 4); List<Group> expectedGroups = createGroupList(ADMIN, "role3", "role2", "role1"); assertEquals(new HashSet<Group>(expectedGroups), new HashSet<Group>(groups)); } @Test public void testGroupsForUser() { Set<Group> groups = groupsPropertiesManager.getGroupsAndRolesForUser(ADMIN)[0]; assertGroupsForUser(groups, new String[]{ADMIN}); groups = groupsPropertiesManager.getGroupsAndRolesForUser("user1")[0]; assertGroupsForUser(groups, new String[]{"role1"}); groups = groupsPropertiesManager.getGroupsAndRolesForUser("user2")[0]; assertGroupsForUser(groups, new String[]{"role1", "role2"}); groups = groupsPropertiesManager.getGroupsAndRolesForUser("user3")[0]; assertGroupsForUser(groups, new String[]{"role3"}); } @Test public void testGet() { assertGet(ADMIN); assertGet("role1"); assertGet("role2"); assertGet("role3"); } @Test public void testCreateGroup() { Collection<String> users = new HashSet<String>(); users.add("user10"); groupsPropertiesManager.assignUsers("role10", users); Group created = groupsPropertiesManager.get("role10"); Set<Group> groups = groupsPropertiesManager.getGroupsAndRolesForUser("user10")[0]; assertNotNull(created); assertGroupsForUser(groups, new String[]{"role10"}); } @Test(expected = UnsupportedServiceCapabilityException.class) public void testUpdateGroup() { Group group = mock(Group.class); when(group.getName()).thenReturn("role10"); groupsPropertiesManager.update(group); } @Test(expected = GroupNotFoundException.class) public void testDeleteGroup() { groupsPropertiesManager.delete("role3"); groupsPropertiesManager.get("role3"); } private List<Group> createGroupList(String... names) { if (names != null) { List<Group> result = new ArrayList<Group>(names.length); for (int x = 0; x < names.length; x++) { String name = names[x]; Group g = SecurityManagementUtils.createGroup(name); result.add(g); } return result; } return null; } private void assertGet(String name) { Group group = groupsPropertiesManager.get(name); assertNotNull(group); assertEquals(group.getName(), name); } private void assertGroupsForUser(Set<Group> groupsSet, String[] groups) { assertNotNull(groupsSet); assertEquals(groupsSet.size(), groups.length); int x = 0; for (Group g : groupsSet) { String gName = groups[x]; assertTrue(groupsSet.contains(new GroupImpl(gName))); x++; } } }