/* * 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.tomcat; import java.io.File; import java.net.URL; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import org.apache.commons.io.FileUtils; import org.jboss.errai.security.shared.api.Group; 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.commons.config.ConfigProperties; 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.*; /** * This tests create temporary working copy of the "tomcat-users.xml" file as the tests are run using the real tomcat admin api for realm management. */ @RunWith(MockitoJUnitRunner.class) public class TomcatGroupManagerTest extends BaseTest { protected static final String ADMIN = "admin"; protected static final String USERS_FILE_PATH = "org/uberfire/ext/security/management/tomcat/"; protected static final String USERS_FILE_NAME = "tomcat-users.xml"; @ClassRule public static TemporaryFolder tempFolder = new TemporaryFolder(); private static File elHome; @Spy private TomcatGroupManager groupsManager = new TomcatGroupManager(); @BeforeClass public static void initWorkspace() throws Exception { elHome = tempFolder.newFolder("uf-extensions-security-management-tomcat"); } @Before public void setup() throws Exception { URL templateURL = Thread.currentThread().getContextClassLoader().getResource(USERS_FILE_PATH + USERS_FILE_NAME); File templateFile = new File(templateURL.getFile()); FileUtils.cleanDirectory(elHome); FileUtils.copyFileToDirectory(templateFile, elHome); String full = new File(elHome, templateFile.getName()).getAbsolutePath(); String path = full.substring(0, full.lastIndexOf(File.separator)); String name = full.substring(full.lastIndexOf(File.separator) + 1, full.length()); Map<String, String> props = new HashMap<String, String>(1); props.put("org.uberfire.ext.security.management.tomcat.catalina-base", path); props.put("org.uberfire.ext.security.management.tomcat.users-file", name); System.setProperty(BaseTomcatManager.CATALINA_BASE_PROPERTY, ""); groupsManager.loadConfig(new ConfigProperties(props)); groupsManager.initialize(userSystemManager); } @After public void finishIt() throws Exception { groupsManager.destroy(); } @Test public void testCapabilities() { assertEquals(groupsManager.getCapabilityStatus(Capability.CAN_SEARCH_GROUPS), CapabilityStatus.ENABLED); assertEquals(groupsManager.getCapabilityStatus(Capability.CAN_READ_GROUP), CapabilityStatus.ENABLED); assertEquals(groupsManager.getCapabilityStatus(Capability.CAN_ADD_GROUP), CapabilityStatus.ENABLED); assertEquals(groupsManager.getCapabilityStatus(Capability.CAN_DELETE_GROUP), CapabilityStatus.ENABLED); assertEquals(groupsManager.getCapabilityStatus(Capability.CAN_UPDATE_GROUP), CapabilityStatus.UNSUPPORTED); } @Test public void testAllowsEmpty() { assertTrue(groupsManager.getSettings().allowEmpty()); } @Test(expected = RuntimeException.class) public void testSearchPageZero() { AbstractEntityManager.SearchRequest request = buildSearchRequestMock("", 0, 5); AbstractEntityManager.SearchResponse<Group> response = groupsManager.search(request); } @Test public void testSearchAll() { AbstractEntityManager.SearchRequest request = buildSearchRequestMock("", 1, 5); AbstractEntityManager.SearchResponse<Group> response = groupsManager.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 testGet() { assertGet(ADMIN); assertGet("role1"); assertGet("role2"); assertGet("role3"); } @Test public void testCreateGroup() { Group group = mock(Group.class); when(group.getName()).thenReturn("role10"); groupsManager.create(group); Group created = groupsManager.get("role10"); assertNotNull(created); assertEquals("role10", created.getName()); } @Test(expected = UnsupportedServiceCapabilityException.class) public void testUpdateGroup() { Group group = mock(Group.class); when(group.getName()).thenReturn("role10"); groupsManager.update(group); } @Test(expected = GroupNotFoundException.class) public void testDeleteGroup() { groupsManager.delete("role3"); groupsManager.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 = groupsManager.get(name); assertNotNull(group); assertEquals(group.getName(), name); } }