001package org.apache.turbine.services.security; 002/* 003 * Licensed to the Apache Software Foundation (ASF) under one 004 * or more contributor license agreements. See the NOTICE file 005 * distributed with this work for additional information 006 * regarding copyright ownership. The ASF licenses this file 007 * to you under the Apache License, Version 2.0 (the 008 * "License"); you may not use this file except in compliance 009 * with the License. You may obtain a copy of the License at 010 * 011 * http://www.apache.org/licenses/LICENSE-2.0 012 * 013 * Unless required by applicable law or agreed to in writing, 014 * software distributed under the License is distributed on an 015 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 016 * KIND, either express or implied. See the License for the 017 * specific language governing permissions and limitations 018 * under the License. 019 */ 020import static org.junit.Assert.assertFalse; 021import static org.junit.Assert.assertTrue; 022 023import org.apache.fulcrum.security.SecurityService; 024import org.apache.fulcrum.security.entity.Group; 025import org.apache.fulcrum.security.entity.Role; 026import org.apache.fulcrum.security.model.turbine.TurbineModelManager; 027import org.apache.fulcrum.security.model.turbine.entity.TurbineUser; 028import org.apache.fulcrum.security.model.turbine.entity.TurbineUserGroupRole; 029import org.apache.fulcrum.security.model.turbine.entity.impl.TurbineUserImpl; 030import org.apache.fulcrum.security.model.turbine.test.AbstractTurbineModelManagerTest; 031import org.apache.fulcrum.security.util.DataBackendException; 032import org.apache.fulcrum.security.util.EntityExistsException; 033import org.apache.fulcrum.security.util.UnknownEntityException; 034import org.apache.fulcrum.testcontainer.BaseUnit4Test; 035import org.apache.turbine.om.security.User; 036import org.apache.turbine.services.ServiceManager; 037import org.apache.turbine.services.TurbineServices; 038import org.apache.turbine.util.TurbineConfig; 039import org.junit.AfterClass; 040import org.junit.Before; 041import org.junit.BeforeClass; 042import org.junit.Test; 043 044/** 045 * Test that the SecurityService works properly by comparing behaviour of Turbine and Fulcrum security services using memory user manager. 046 * 047 * Code adapted from SecurityServiceAdapter in Fulcrum Security Adapter 048 * 049 * @author gkallidis 050 * @version $Id$ 051 */ 052 053public class SecurityServiceTest extends BaseUnit4Test 054{ 055 056 SecurityService fulcrumSecurityService; 057 org.apache.turbine.services.security.SecurityService securityService; 058 static TurbineConfig tc; 059 060 061 @BeforeClass 062 public static void init() throws Exception 063 { 064 tc = new TurbineConfig(".", "/conf/test/CompleteTurbineResources.properties"); 065 tc.initialize(); 066 067 } 068 069 @Before 070 public void setUpBefore() throws Exception 071 { 072 073 ServiceManager serviceManager = TurbineServices.getInstance(); 074 // 075 fulcrumSecurityService = (SecurityService) serviceManager.getService(SecurityService.ROLE); 076 077 securityService = (org.apache.turbine.services.security.SecurityService) 078 TurbineServices.getInstance().getService(org.apache.turbine.services.security.SecurityService.SERVICE_NAME); 079 } 080 081 @Test 082 public void testAccountExists() throws Exception 083 { 084 085 User user = new org.apache.turbine.om.security.DefaultUserImpl(new TurbineUserImpl()); 086 user.setAccessCounter(5); 087 088 assertFalse(securityService.accountExists(user)); 089 assertFalse(fulcrumSecurityService.getUserManager().checkExists(user)); 090 091 } 092 @Test 093 public void testCreateUser() throws Exception 094 { 095 096 User user = new org.apache.turbine.om.security.DefaultUserImpl(new TurbineUserImpl()); 097 user.setAccessCounter(5); 098 user.setName("ringo"); 099 securityService.addUser(user,"fakepasswrod"); 100 assertTrue(securityService.accountExists(user)); 101 assertTrue(fulcrumSecurityService.getUserManager().checkExists(user)); 102 103 } 104 105 /** 106 * Tests Turbine and Fulcrum. 107 * 108 * Fulcrum part is similar/duplicated from {@link AbstractTurbineModelManagerTest#testGrantUserGroupRole()} 109 * 110 * 111 * @throws Exception 112 */ 113 @Test 114 public void testGrantUserGroupRole() throws Exception 115 { 116 Group group = fulcrumSecurityService.getGroupManager().getGroupInstance(); 117 group.setName("TEST_GROUP"); 118 fulcrumSecurityService.getGroupManager().addGroup(group); 119 Role role = fulcrumSecurityService.getRoleManager().getRoleInstance(); 120 role.setName("TEST_Role"); 121 fulcrumSecurityService.getRoleManager().addRole(role); 122 123 // Turbine security service returns a wrapped instance: org.apache.turbine.om.security.DefaultUserImpl 124 // which implements org.apache.turbine.om.security.User and contains 125 User user = securityService.getUserInstance("Clint"); 126 // memory 127 securityService.addUser(user, "clint"); 128 securityService.grant(user, group, role); 129 130 addUserAndCheck(group, role, user.getUserDelegate()); 131 132 // Fulcrum security service returns a raw org.apache.fulcrum.security.model.turbine.entity.impl.TurbineUserImpl, 133 org.apache.fulcrum.security.UserManager userManager = fulcrumSecurityService.getUserManager(); 134 TurbineUser fulcrumUser = userManager.getUserInstance("Clint2"); 135 userManager.addUser(fulcrumUser, "clint2"); // memory 136 ((TurbineModelManager)fulcrumSecurityService.getModelManager()).grant(fulcrumUser, group, role); 137 138 addUserAndCheck(group, role, fulcrumUser); 139 140 } 141 142 /** 143 * Fulcrum contract check 144 * 145 * @param group Fulcrum interface 146 * @param role Fulcrum interface 147 * @param user Fulcrum interface 148 * @throws EntityExistsException 149 * @throws DataBackendException 150 * @throws UnknownEntityException 151 */ 152 private void addUserAndCheck(Group group, Role role, TurbineUser user) 153 throws EntityExistsException, DataBackendException, 154 UnknownEntityException 155 { 156 157 boolean ugrFound = false; 158 TurbineUserGroupRole ugrTest = null; 159 for (TurbineUserGroupRole ugr : ((TurbineUser) user).getUserGroupRoleSet()) 160 { 161 if (ugr.getUser().equals(user) && ugr.getGroup().equals(group) && ugr.getRole().equals(role)) 162 { 163 ugrFound = true; 164 ugrTest = ugr; 165 break; 166 } 167 } 168 assertTrue(ugrFound); 169 assertTrue(ugrTest.getGroup().equals(group)); 170 assertTrue(ugrTest.getUser().equals(user)); 171 } 172 173 174 @AfterClass 175 public static void setupAfter() 176 { 177 ServiceManager serviceManager = TurbineServices.getInstance(); 178 serviceManager.shutdownService(org.apache.turbine.services.security.SecurityService.SERVICE_NAME); 179 serviceManager.shutdownServices(); 180 } 181 182 183}