Index: topia-security/src/test/org/codelutin/topia/security/test/TopiaSecurityTest.java diff -u topia-security/src/test/org/codelutin/topia/security/test/TopiaSecurityTest.java:1.8 topia-security/src/test/org/codelutin/topia/security/test/TopiaSecurityTest.java:1.9 --- topia-security/src/test/org/codelutin/topia/security/test/TopiaSecurityTest.java:1.8 Thu Sep 21 13:22:14 2006 +++ topia-security/src/test/org/codelutin/topia/security/test/TopiaSecurityTest.java Mon Sep 25 13:24:40 2006 @@ -20,11 +20,11 @@ package org.codelutin.topia.security.test; -import static org.codelutin.topia.security.TopiaSecurityUtil.LOAD; -import static org.codelutin.topia.security.TopiaSecurityUtil.TOPIA_SECURITY_PERSISTENCE_CLASSES; +import static org.codelutin.topia.security.util.TopiaSecurityUtil.LOAD; +import static org.codelutin.topia.security.util.TopiaSecurityUtil.UPDATE; import java.security.PrivilegedExceptionAction; -import java.util.ArrayList; +import java.util.List; import java.util.Properties; import javax.security.auth.Subject; @@ -32,175 +32,47 @@ import junit.framework.TestCase; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.codelutin.topia.TopiaContext; import org.codelutin.topia.TopiaContextFactory; -import org.codelutin.topia.TopiaException; -import org.codelutin.topia.framework.TopiaContextImplementor; import org.codelutin.topia.security.TopiaSecurityDAOHelper; import org.codelutin.topia.security.TopiaSecurityManager; -import org.codelutin.topia.security.TopiaSecurityManagerImpl; -import org.codelutin.topia.security.entities.authorization.TopiaAssociationAuthorization; -import org.codelutin.topia.security.entities.authorization.TopiaAssociationAuthorizationDAO; -import org.codelutin.topia.security.entities.authorization.TopiaEntityAuthorization; -import org.codelutin.topia.security.entities.authorization.TopiaEntityAuthorizationDAO; -import org.codelutin.topia.security.entities.authorization.TopiaLinkAuthorization; -import org.codelutin.topia.security.entities.authorization.TopiaLinkAuthorizationDAO; -import org.codelutin.topia.security.entities.user.TopiaGroup; -import org.codelutin.topia.security.entities.user.TopiaGroupDAO; -import org.codelutin.topia.security.entities.user.TopiaUser; -import org.codelutin.topia.security.entities.user.TopiaUserDAO; import org.codelutin.topia.security.jaas.TopiaCallbackHandler; import org.codelutin.topia.security.test.entities.Person; import org.codelutin.topia.security.test.entities.PersonDAO; import org.codelutin.topia.security.test.entities.Pet; import org.codelutin.topia.security.test.entities.PetDAO; +import org.codelutin.topia.security.util.TopiaSecurityFilterList; +/** + * Tests unitaires. + * Ne pas oublier de lancer le script d'initialisation de la base données. + * @author ruchaud + */ public class TopiaSecurityTest extends TestCase { - /** to use log facility, just put in your code: log.info(\"...\"); */ - protected static Log log = LogFactory.getLog(TopiaSecurityTest.class); - - protected static String entitiesList = TOPIA_SECURITY_PERSISTENCE_CLASSES + ",org.codelutin.topia.security.test.entities.PersonImpl,org.codelutin.topia.security.test.entities.PetImpl"; + protected TopiaContext context = TopiaContextFactory.getContext(getProperties()); + protected TopiaSecurityManager securityManager = context.getSecurityManager(); + protected static String entitiesList = "org.codelutin.topia.security.test.entities.PersonImpl,org.codelutin.topia.security.test.entities.PetImpl"; + protected static Properties getProperties() { Properties config = new Properties(); - /* HSQL 2 */ - config.setProperty("hibernate.hbm2ddl.auto", "create"); + //config.setProperty("hibernate.hbm2ddl.auto", "create"); config.setProperty("hibernate.show_sql", "true"); config.setProperty("topia.persistence.classes", entitiesList); + config.setProperty("topia.security.manager", "org.codelutin.topia.security.TopiaSecurityManagerImpl"); config.setProperty("hibernate.dialect", "org.hibernate.dialect.HSQLDialect"); config.setProperty("hibernate.connection.username", "sa"); config.setProperty("hibernate.connection.password", ""); config.setProperty("hibernate.connection.driver_class", "org.h2.Driver"); - config.setProperty("hibernate.connection.url", "jdbc:h2:mem:;LOCK_METHOD=NO"); + config.setProperty("hibernate.connection.url", "jdbc:h2:data/topia-security;LOCK_METHOD=NO"); return config; } - - protected static void init() throws TopiaException { - /* Création des contextes d'exécution */ - TopiaContext context = TopiaContextFactory.getContext(getProperties()); - - /* DAO Personne */ - TopiaContextImplementor childContext = (TopiaContextImplementor) context.beginTransaction(); - PersonDAO personDAO = TopiaSecurityDAOHelper.getPersonDAO(childContext); - PetDAO petDAO = TopiaSecurityDAOHelper.getPetDAO(childContext); - - /* DAOs Sécurité */ - TopiaSecurityManager securityManager = new TopiaSecurityManagerImpl(context); - TopiaUserDAO topiaUserDAO = ((TopiaSecurityManagerImpl)securityManager).getTopiaUserDAO(); - TopiaGroupDAO topiaGroupDAO = ((TopiaSecurityManagerImpl)securityManager).getTopiaGroupDAO(); - TopiaEntityAuthorizationDAO topiaEntityAuthorizationDAO = ((TopiaSecurityManagerImpl)securityManager).getTopiaEntityAuthorizationDAO(); - TopiaLinkAuthorizationDAO topiaLinkAuthorizationDAO = ((TopiaSecurityManagerImpl)securityManager).getTopiaLinkAuthorizationDAO(); - TopiaAssociationAuthorizationDAO topiaAssociationAuthorizationDAO = ((TopiaSecurityManagerImpl)securityManager).getTopiaAssociationAuthorizationDAO(); - - /* Création d'un utilisateur */ - TopiaUser thimel = topiaUserDAO.create(); - thimel.setLogin("thimel"); - thimel.setPassword("zou;bi@da"); - thimel.update(); - securityManager.getSecurityContext().commitTransaction(); - - /* Création d'un groupe avec un utilisateur */ - TopiaUser ruchaud = topiaUserDAO.create(); - ruchaud.setLogin("ruchaud"); - ruchaud.setPassword("mdp"); - TopiaGroup groupRuchaud = topiaGroupDAO.create(); - groupRuchaud.setName("essai"); - - groupRuchaud.setTopiaUser(new ArrayList()); - ruchaud.addTopiaGroup(groupRuchaud); - - groupRuchaud.update(); - ruchaud.update(); - - /* Création des personnes */ - Person jacques = personDAO.create(); - jacques.setName("poussin"); - jacques.setFirstname("jacques"); - personDAO.update(jacques); - - Person mylene = personDAO.create(); - mylene.setName("poussin"); - mylene.setFirstname("mylene"); - personDAO.update(mylene); - - /* Création des annimaux */ - Pet debux = petDAO.create(); - debux.setName("debux"); - debux.setType("chat"); - debux.setPerson(jacques); - debux.update(); - - Pet pluto = petDAO.create(); - pluto.setName("pluto"); - pluto.setType("chien"); - pluto.setPerson(jacques); - pluto.update(); - - Pet fliper = petDAO.create(); - fliper.setName("fliper"); - fliper.setType("dauphin"); - fliper.setPerson(mylene); - fliper.update(); - - /* Création des autorisations Entity */ - TopiaEntityAuthorization authorizationForRuchaud = topiaEntityAuthorizationDAO.create(); - authorizationForRuchaud.setId(Person.class.getName() + "#*"); - authorizationForRuchaud.setActions(LOAD); - authorizationForRuchaud.setPrincipals(groupRuchaud.getTopiaId()); - authorizationForRuchaud.update(); - - TopiaEntityAuthorization authorizationForThimel = topiaEntityAuthorizationDAO.create(); - authorizationForThimel.setId(jacques.getTopiaId()); - authorizationForThimel.setActions(LOAD); - authorizationForThimel.setPrincipals(thimel.getTopiaId()); - authorizationForThimel.update(); - securityManager.getSecurityContext().commitTransaction(); - - /* Création d'une autorisation Link */ - TopiaLinkAuthorization linkAuthorization = topiaLinkAuthorizationDAO.create(); - linkAuthorization.setId(mylene.getTopiaId()); - linkAuthorization.setTopiaAuthorization(authorizationForThimel); - linkAuthorization.update(); - - /* Création d'une authorisation association */ - TopiaAssociationAuthorization associationAuthorization = topiaAssociationAuthorizationDAO.create(); - associationAuthorization.setIdBeginAssociation(jacques.getTopiaId()); - associationAuthorization.setNameAssociation("pet"); - associationAuthorization.setActions(LOAD); - associationAuthorization.setPrincipals(ruchaud.getTopiaId()); - associationAuthorization.update(); - - associationAuthorization = topiaAssociationAuthorizationDAO.create(); - associationAuthorization.setIdBeginAssociation(mylene.getTopiaId()); - associationAuthorization.setNameAssociation("pet"); - associationAuthorization.setActions(LOAD); - associationAuthorization.setPrincipals(ruchaud.getTopiaId()); - associationAuthorization.update(); - - /* Commit */ - childContext.commitTransaction(); - securityManager.getSecurityContext().commitTransaction(); - /* Mise en marche de la sécurité */ - securityManager.init(); - } - - /* Initialisation de la BD */ - static { - try { - init(); - } catch (TopiaException e) { - e.printStackTrace(); - } - } - public void testLoginThimel() throws Exception { /* Authentification de l'utilisateur Thimel */ LoginContext loginContext = new LoginContext("topia", new TopiaCallbackHandler( @@ -234,18 +106,31 @@ loginContext.login(); Subject subject = loginContext.getSubject(); - /* Test */ + /* Tests */ Subject.doAsPrivileged(subject, new PrivilegedExceptionAction() { public Object run() throws Exception { - TopiaContext context = TopiaContextFactory.getContext(getProperties()); - TopiaContextImplementor childContext = (TopiaContextImplementor) context.beginTransaction(); + TopiaContext childContext = context.beginTransaction(); + /* Personnes */ PersonDAO personDAO = TopiaSecurityDAOHelper.getPersonDAO(childContext); - assertEquals(personDAO.findAll().size(), 2); + List findAllPerson = personDAO.findAll(); + + TopiaSecurityFilterList personsLOAD = new TopiaSecurityFilterList(findAllPerson, LOAD); + assertEquals(2, personsLOAD.size()); + TopiaSecurityFilterList personsUPDATE = new TopiaSecurityFilterList(findAllPerson, UPDATE); + assertEquals(0, personsUPDATE.size()); + + /* Annimaux */ PetDAO petDAO = TopiaSecurityDAOHelper.getPetDAO(childContext); - assertEquals(petDAO.findAll().size(), 0); + List findAllPet = petDAO.findAll(); + + TopiaSecurityFilterList petLOAD = new TopiaSecurityFilterList(findAllPet, LOAD); + assertEquals(petLOAD.size(), 0); + TopiaSecurityFilterList petUPDATE = new TopiaSecurityFilterList(findAllPet, UPDATE); + assertEquals(petUPDATE.size(), 0); + return null; } }, null); @@ -260,17 +145,30 @@ loginContext.login(); Subject subject = loginContext.getSubject(); - /* Test */ + /* Tests */ Subject.doAsPrivileged(subject, new PrivilegedExceptionAction() { public Object run() throws Exception { - TopiaContext context = TopiaContextFactory.getContext(getProperties()); - TopiaContextImplementor childContext = (TopiaContextImplementor) context.beginTransaction(); + TopiaContext childContext = context.beginTransaction(); + /* Personnes */ PersonDAO personDAO = TopiaSecurityDAOHelper.getPersonDAO(childContext); - assertEquals(personDAO.findAll().size(), 2); + List findAllPerson = personDAO.findAll(); + TopiaSecurityFilterList personsLOAD = new TopiaSecurityFilterList(findAllPerson, LOAD); + assertEquals(3, personsLOAD.size()); + + TopiaSecurityFilterList personsUPDATE = new TopiaSecurityFilterList(findAllPerson, UPDATE); + assertEquals(0, personsUPDATE.size()); + + /* Annimaux */ PetDAO petDAO = TopiaSecurityDAOHelper.getPetDAO(childContext); - assertEquals(petDAO.findAll().size(), 3); + List findAllPet = petDAO.findAll(); + + TopiaSecurityFilterList petLOAD = new TopiaSecurityFilterList(findAllPet, LOAD); + assertEquals(petLOAD.size(), 2); + + TopiaSecurityFilterList petUPDATE = new TopiaSecurityFilterList(findAllPet, UPDATE); + assertEquals(petUPDATE.size(), 1); return null; } @@ -278,5 +176,4 @@ loginContext.logout(); } - } Index: topia-security/src/test/org/codelutin/topia/security/test/ScriptInitialisationDataBase.java diff -u /dev/null topia-security/src/test/org/codelutin/topia/security/test/ScriptInitialisationDataBase.java:1.1 --- /dev/null Mon Sep 25 13:24:45 2006 +++ topia-security/src/test/org/codelutin/topia/security/test/ScriptInitialisationDataBase.java Mon Sep 25 13:24:40 2006 @@ -0,0 +1,194 @@ +/* *##% +* Copyright (C) 2002, 2003, 2004, 2005 Code Lutin, +* Cédric Pineau, Benjamin Poussin, +* +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* as published by the Free Software Foundation; either version 2 +* of the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*##%*/ + +package org.codelutin.topia.security.test; + +import static org.codelutin.topia.security.util.TopiaSecurityUtil.LOAD; +import static org.codelutin.topia.security.util.TopiaSecurityUtil.TOPIA_SECURITY_PERSISTENCE_CLASSES; +import static org.codelutin.topia.security.util.TopiaSecurityUtil.UPDATE; + +import java.util.ArrayList; +import java.util.Properties; + +import org.codelutin.topia.TopiaContext; +import org.codelutin.topia.TopiaContextFactory; +import org.codelutin.topia.TopiaException; +import org.codelutin.topia.security.TopiaSecurityDAOHelper; +import org.codelutin.topia.security.entities.authorization.TopiaAssociationAuthorization; +import org.codelutin.topia.security.entities.authorization.TopiaAssociationAuthorizationDAO; +import org.codelutin.topia.security.entities.authorization.TopiaEntityAuthorization; +import org.codelutin.topia.security.entities.authorization.TopiaEntityAuthorizationDAO; +import org.codelutin.topia.security.entities.authorization.TopiaLinkAuthorization; +import org.codelutin.topia.security.entities.authorization.TopiaLinkAuthorizationDAO; +import org.codelutin.topia.security.entities.user.TopiaGroup; +import org.codelutin.topia.security.entities.user.TopiaGroupDAO; +import org.codelutin.topia.security.entities.user.TopiaUser; +import org.codelutin.topia.security.entities.user.TopiaUserDAO; +import org.codelutin.topia.security.test.entities.Person; +import org.codelutin.topia.security.test.entities.PersonDAO; +import org.codelutin.topia.security.test.entities.Pet; +import org.codelutin.topia.security.test.entities.PetDAO; + +/** + * Script pour l'initialisation de la base de données pour pouvoir exécuter les + * tests unitaires. + * @author ruchaud + */ +public class ScriptInitialisationDataBase { + + protected static String entitiesList = TOPIA_SECURITY_PERSISTENCE_CLASSES + ",org.codelutin.topia.security.test.entities.PersonImpl,org.codelutin.topia.security.test.entities.PetImpl"; + + protected static Properties getProperties() { + Properties config = new Properties(); + config.setProperty("hibernate.hbm2ddl.auto", "create"); + config.setProperty("hibernate.show_sql", "true"); + + config.setProperty("topia.persistence.classes", entitiesList); + //config.setProperty("topia.security.manager", "org.codelutin.topia.security.TopiaSecurityManagerImpl"); + + config.setProperty("hibernate.dialect", "org.hibernate.dialect.HSQLDialect"); + config.setProperty("hibernate.connection.username", "sa"); + config.setProperty("hibernate.connection.password", ""); + config.setProperty("hibernate.connection.driver_class", "org.h2.Driver"); + + config.setProperty("hibernate.connection.url", "jdbc:h2:data/topia-security;LOCK_METHOD=NO"); + + return config; + } + + public static void main(String[] args) throws TopiaException { + + /* Transaction */ + TopiaContext context = TopiaContextFactory.getContext(getProperties()); + TopiaContext childContext = context.beginTransaction(); + + /* DAOs */ + PersonDAO personDAO = TopiaSecurityDAOHelper.getPersonDAO(childContext); + PetDAO petDAO = TopiaSecurityDAOHelper.getPetDAO(childContext); + + TopiaUserDAO topiaUserDAO = TopiaSecurityDAOHelper.getTopiaUserDAO(childContext); + TopiaGroupDAO topiaGroupDAO = TopiaSecurityDAOHelper.getTopiaGroupDAO(childContext); + TopiaEntityAuthorizationDAO topiaEntityAuthorizationDAO = TopiaSecurityDAOHelper.getTopiaEntityAuthorizationDAO(childContext); + TopiaLinkAuthorizationDAO topiaLinkAuthorizationDAO = TopiaSecurityDAOHelper.getTopiaLinkAuthorizationDAO(childContext); + TopiaAssociationAuthorizationDAO topiaAssociationAuthorizationDAO = TopiaSecurityDAOHelper.getTopiaAssociationAuthorizationDAO(childContext); + + /* Création d'un utilisateur */ + TopiaUser thimel = topiaUserDAO.create(); + thimel.setLogin("thimel"); + thimel.setPassword("zou;bi@da"); + thimel.update(); + childContext.commitTransaction(); + + /* Création d'un groupe avec un utilisateur */ + TopiaUser ruchaud = topiaUserDAO.create(); + ruchaud.setLogin("ruchaud"); + ruchaud.setPassword("mdp"); + TopiaGroup groupRuchaud = topiaGroupDAO.create(); + groupRuchaud.setName("essai"); + + groupRuchaud.setTopiaUser(new ArrayList()); + ruchaud.addTopiaGroup(groupRuchaud); + + groupRuchaud.update(); + ruchaud.update(); + childContext.commitTransaction(); + + /* Création des personnes */ + Person benjamin = personDAO.create(); + benjamin.setName("poussin"); + benjamin.setFirstname("benjamin"); + personDAO.update(benjamin); + childContext.commitTransaction(); + + Person jacques = personDAO.create(); + jacques.setName("poussin"); + jacques.setFirstname("jacques"); + personDAO.update(jacques); + childContext.commitTransaction(); + + Person mylene = personDAO.create(); + mylene.setName("poussin"); + mylene.setFirstname("mylene"); + personDAO.update(mylene); + childContext.commitTransaction(); + + /* Création des annimaux */ + Pet debux = petDAO.create(); + debux.setName("debux"); + debux.setType("chat"); + debux.setPerson(jacques); + debux.update(); + childContext.commitTransaction(); + + Pet pluto = petDAO.create(); + pluto.setName("pluto"); + pluto.setType("chien"); + pluto.setPerson(jacques); + pluto.update(); + childContext.commitTransaction(); + + Pet fliper = petDAO.create(); + fliper.setName("fliper"); + fliper.setType("dauphin"); + fliper.setPerson(mylene); + fliper.update(); + childContext.commitTransaction(); + + /* Création des autorisations Entity */ + TopiaEntityAuthorization authorizationForRuchaud = topiaEntityAuthorizationDAO.create(); + authorizationForRuchaud.setId(Person.class.getName() + "#*"); + authorizationForRuchaud.setActions(LOAD); + authorizationForRuchaud.setPrincipals(groupRuchaud.getTopiaId()); + authorizationForRuchaud.update(); + childContext.commitTransaction(); + + TopiaEntityAuthorization authorizationForThimel = topiaEntityAuthorizationDAO.create(); + authorizationForThimel.setId(jacques.getTopiaId()); + authorizationForThimel.setActions(LOAD); + authorizationForThimel.setPrincipals(thimel.getTopiaId()); + authorizationForThimel.update(); + childContext.commitTransaction(); + + /* Création d'une autorisation Link */ + TopiaLinkAuthorization linkAuthorization = topiaLinkAuthorizationDAO.create(); + linkAuthorization.setId(mylene.getTopiaId()); + linkAuthorization.setTopiaAuthorization(authorizationForThimel); + linkAuthorization.update(); + childContext.commitTransaction(); + + /* Création d'une authorisation association */ + TopiaAssociationAuthorization associationAuthorization = topiaAssociationAuthorizationDAO.create(); + associationAuthorization.setIdBeginAssociation(jacques.getTopiaId()); + associationAuthorization.setNameAssociation("pet"); + associationAuthorization.setActions(LOAD); + associationAuthorization.setPrincipals(ruchaud.getTopiaId()); + associationAuthorization.update(); + childContext.commitTransaction(); + + associationAuthorization = topiaAssociationAuthorizationDAO.create(); + associationAuthorization.setIdBeginAssociation(mylene.getTopiaId()); + associationAuthorization.setNameAssociation("pet"); + associationAuthorization.setActions(UPDATE); + associationAuthorization.setPrincipals(ruchaud.getTopiaId()); + associationAuthorization.update(); + childContext.commitTransaction(); + } + +}