Index: topia-security/src/test/org/codelutin/topia/security/test/TopiaSecurityTest.java diff -u /dev/null topia-security/src/test/org/codelutin/topia/security/test/TopiaSecurityTest.java:1.1 --- /dev/null Wed Sep 13 14:26:23 2006 +++ topia-security/src/test/org/codelutin/topia/security/test/TopiaSecurityTest.java Wed Sep 13 14:26:18 2006 @@ -0,0 +1,127 @@ +/* *##% +* 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 java.util.ArrayList; +import java.util.Properties; + +import javax.security.auth.Subject; +import javax.security.auth.login.LoginContext; + +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.security.TopiaSecurityManager; +import org.codelutin.topia.security.TopiaSecurityManagerImpl; +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; + +public class TopiaSecurityTest extends TestCase { + + /** to use log facility, just put in your code: log.info(\"...\"); */ + static private Log log = LogFactory.getLog(TopiaSecurityTest.class); + + private String entitiesList = "org.codelutin.topia.security.entities.user.TopiaUserImpl,org.codelutin.topia.security.entities.authorization.TopiaEntityAuthorizationImpl,org.codelutin.topia.security.entities.user.TopiaGroupImpl,org.codelutin.topia.security.entities.authorization.TopiaLinkAuthorizationImpl,org.codelutin.topia.security.entities.authorization.TopiaAssociationAuthorizationImpl,org.codelutin.topia.security.entities.authorization.TopiaAuthorizationImpl"; + + protected Properties getProperties() { + Properties config = new Properties(); + config.setProperty("hibernate.show_sql", "true"); + config.setProperty("hibernate.hbm2ddl.auto", "create"); + + config.setProperty("topia.dao.flatfile.directory", "/tmp/topia-security-db"); + config.setProperty("topia.dao.flatfile.mapping.key", "firstname"); + + config.setProperty("topia.persistence.classes", entitiesList); + config.setProperty("hibernate.dialect", + "org.hibernate.dialect.DerbyDialect"); + config.setProperty("hibernate.connection.driver_class", + "org.apache.derby.jdbc.EmbeddedDriver"); + config.setProperty("hibernate.connection.url", + "jdbc:derby:/tmp/topia-security-derby;create=true"); + config.setProperty("hibernate.connection.username", "dbuser"); + config.setProperty("hibernate.connection.password", "xxxxxxxx"); + + return config; + } + + public void testLogin() throws Exception { + /* Création des contextes d'exécution */ + Properties config = getProperties(); + + TopiaContext context = TopiaContextFactory.getContext(config); + TopiaContext transaction = context.beginTransaction(); + + TopiaSecurityManager securityManager = new TopiaSecurityManagerImpl(transaction); + TopiaUserDAO topiaUserDAO = securityManager.getTopiaUserDAO(); + TopiaGroupDAO topiaGroupDAO = securityManager.getTopiaGroupDAO(); + + /* Création d'un utilisateur */ + TopiaUser thimel = topiaUserDAO.create(); + thimel.setLogin("thimel"); + thimel.setPassword("zou;bi@da"); + thimel.update(); + transaction.commitTransaction(); + + /* Création d'un groupe avec un utilisateur */ + TopiaUser ruchaud = topiaUserDAO.create(); + ruchaud.setLogin("ruchaud"); + ruchaud.setPassword("mdp"); + TopiaGroup group = topiaGroupDAO.create(); + group.setName("essai"); + + group.setTopiaUser(new ArrayList()); + ruchaud.addTopiaGroup(group); + + group.update(); + ruchaud.update(); + transaction.commitTransaction(); + /* Mise en marche de la sécurité */ + securityManager.init(); + + /* Authentification de l'utilisateur Thimel */ + LoginContext loginContext; + Subject subject; + + loginContext = new LoginContext("topia", new TopiaCallbackHandler( + "thimel", "zou;bi@da")); + loginContext.login(); + subject = loginContext.getSubject(); + + /* Test */ + assertEquals(subject.getPrincipals().size(), 1); + + /* Authentification de l'utilisateur Ruchaud */ + loginContext = new LoginContext("topia", new TopiaCallbackHandler( + "ruchaud", "mdp")); + loginContext.login(); + subject = loginContext.getSubject(); + + /* Test */ + assertEquals(subject.getPrincipals().size(), 2); + } + +}