blob: 9017ede026fdb35f63a73c0a7c89ea8789d20a89 [file] [log] [blame]
package ${package}.services.security;
/*
* 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.
*/
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.apache.fulcrum.security.SecurityService;
import org.apache.fulcrum.security.entity.Group;
import org.apache.fulcrum.security.entity.Role;
import org.apache.fulcrum.security.model.turbine.TurbineModelManager;
import org.apache.fulcrum.security.model.turbine.entity.TurbineUser;
import org.apache.fulcrum.security.model.turbine.entity.TurbineUserGroupRole;
import org.apache.fulcrum.security.model.turbine.entity.impl.TurbineUserImpl;
import org.apache.fulcrum.security.util.DataBackendException;
import org.apache.fulcrum.security.util.EntityExistsException;
import org.apache.fulcrum.security.util.UnknownEntityException;
import org.apache.fulcrum.testcontainer.BaseUnit4Test;
import org.apache.turbine.om.security.TurbineUserDelegate;
import org.apache.turbine.om.security.User;
import org.apache.turbine.services.ServiceManager;
import org.apache.turbine.services.TurbineServices;
import org.apache.turbine.util.TurbineConfig;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
/**
* Test that the SecurityService works properly by comparing behaviour of Turbine and Fulcrum security services using Torque and Turbine user manager.
*
*
* @author gkallidis
* @version $Id$
*/
public class TurbineSecurityServiceTest extends BaseUnit4Test
{
SecurityService fulcrumSecurityService;
org.apache.turbine.services.security.SecurityService turbineSecurityService;
static TurbineConfig tc;
@BeforeClass
public static void init() throws Exception
{
tc = new TurbineConfig(".", "src/test/conf/torque/turbine/CompleteTurbineResources.properties");
tc.initialize();
}
@Before
public void setUpBefore() throws Exception
{
ServiceManager serviceManager = TurbineServices.getInstance();
//
fulcrumSecurityService = (SecurityService) serviceManager.getService(SecurityService.ROLE);
turbineSecurityService = (org.apache.turbine.services.security.SecurityService)
TurbineServices.getInstance().getService(org.apache.turbine.services.security.SecurityService.SERVICE_NAME);
}
@Test
public void testAccountExists() throws Exception
{
User user = new org.apache.turbine.om.security.DefaultUserImpl(new TurbineUserImpl());
user.setAccessCounter(5);
assertFalse(turbineSecurityService.accountExists(user));
assertFalse(fulcrumSecurityService.getUserManager().checkExists(user));
}
@Test
@Ignore(value="Turbine security service supported requires Turbine 4.0.1")
public void testCreateUser() throws Exception
{
User user = new org.apache.turbine.om.security.DefaultUserImpl(new TurbineUserImpl());
user.setAccessCounter(5);
user.setName("ringo");
turbineSecurityService.addUser(user,"fakepasswrod");
assertTrue(turbineSecurityService.accountExists(user));
assertTrue(fulcrumSecurityService.getUserManager().checkExists(user));
}
/**
* Tests Turbine and Fulcrum.
*
* Fulcrum part is similar/duplicated from {@link AbstractTurbineModelManagerTest#testGrantUserGroupRole()}
*
*
* @throws Exception
*/
@Test
@Ignore(value="Turbine security service supported requires Turbine 4.0.1")
public void testGrantUserGroupRole() throws Exception
{
Group group = fulcrumSecurityService.getGroupManager().getGroupInstance();
group.setName("TEST_GROUP");
fulcrumSecurityService.getGroupManager().addGroup(group);
Role role = fulcrumSecurityService.getRoleManager().getRoleInstance();
role.setName("TEST_Role");
fulcrumSecurityService.getRoleManager().addRole(role);
// Turbine security service returns a wrapped instance: org.apache.turbine.om.security.DefaultUserImpl
// which implements org.apache.turbine.om.security.User and contains
User user = turbineSecurityService.getUserInstance("Clint");
// memory
turbineSecurityService.addUser(user, "clint");
turbineSecurityService.grant(user, group, role);
// this cast may not be required any more in turbine 4.0.1
addUserAndCheck(group, role, ( (TurbineUserDelegate) user).getUserDelegate());
// Fulcrum security service returns a raw org.apache.fulcrum.security.model.turbine.entity.impl.TurbineUserImpl,
org.apache.fulcrum.security.UserManager userManager = fulcrumSecurityService.getUserManager();
TurbineUser fulcrumUser = userManager.getUserInstance("Clint2");
userManager.addUser(fulcrumUser, "clint2"); // memory
((TurbineModelManager)fulcrumSecurityService.getModelManager()).grant(fulcrumUser, group, role);
addUserAndCheck(group, role, fulcrumUser);
}
/**
* Fulcrum contract check
*
* @param group Fulcrum interface
* @param role Fulcrum interface
* @param user Fulcrum interface
* @throws EntityExistsException
* @throws DataBackendException
* @throws UnknownEntityException
*/
private void addUserAndCheck(Group group, Role role, TurbineUser user)
throws EntityExistsException, DataBackendException,
UnknownEntityException
{
boolean ugrFound = false;
TurbineUserGroupRole ugrTest = null;
for (TurbineUserGroupRole ugr : ((TurbineUser) user).getUserGroupRoleSet())
{
if (ugr.getUser().equals(user) && ugr.getGroup().equals(group) && ugr.getRole().equals(role))
{
ugrFound = true;
ugrTest = ugr;
break;
}
}
assertTrue(ugrFound);
assertTrue(ugrTest.getGroup().equals(group));
assertTrue(ugrTest.getUser().equals(user));
}
@AfterClass
public static void setupAfter()
{
ServiceManager serviceManager = TurbineServices.getInstance();
serviceManager.shutdownService(org.apache.turbine.services.security.SecurityService.SERVICE_NAME);
serviceManager.shutdownServices();
// TODO cleanup added users, roles, permissions ..
}
}