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.1 topia-security/src/test/org/codelutin/topia/security/test/TopiaSecurityTest.java:1.2 --- topia-security/src/test/org/codelutin/topia/security/test/TopiaSecurityTest.java:1.1 Wed Sep 13 14:26:18 2006 +++ topia-security/src/test/org/codelutin/topia/security/test/TopiaSecurityTest.java Thu Sep 14 13:42:00 2006 @@ -20,7 +20,11 @@ package org.codelutin.topia.security.test; +import static org.codelutin.topia.security.TopiaSecurityUtil.LOAD; + +import java.security.PrivilegedExceptionAction; import java.util.ArrayList; +import java.util.List; import java.util.Properties; import javax.security.auth.Subject; @@ -32,8 +36,12 @@ 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.security.TopiaSecurityDAOHelper; import org.codelutin.topia.security.TopiaSecurityManager; import org.codelutin.topia.security.TopiaSecurityManagerImpl; +import org.codelutin.topia.security.entities.authorization.TopiaEntityAuthorization; +import org.codelutin.topia.security.entities.authorization.TopiaEntityAuthorizationDAO; import org.codelutin.topia.security.entities.user.TopiaGroup; import org.codelutin.topia.security.entities.user.TopiaGroupDAO; import org.codelutin.topia.security.entities.user.TopiaUser; @@ -43,11 +51,12 @@ public class TopiaSecurityTest extends TestCase { /** to use log facility, just put in your code: log.info(\"...\"); */ - static private Log log = LogFactory.getLog(TopiaSecurityTest.class); + protected static 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 static 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 static TopiaContext context; - protected Properties getProperties() { + protected static Properties getProperties() { Properties config = new Properties(); config.setProperty("hibernate.show_sql", "true"); config.setProperty("hibernate.hbm2ddl.auto", "create"); @@ -67,61 +76,110 @@ return config; } - - public void testLogin() throws Exception { + + protected static void init() throws TopiaException { /* Création des contextes d'exécution */ Properties config = getProperties(); - TopiaContext context = TopiaContextFactory.getContext(config); - TopiaContext transaction = context.beginTransaction(); + context = TopiaContextFactory.getContext(config); - TopiaSecurityManager securityManager = new TopiaSecurityManagerImpl(transaction); + TopiaSecurityManager securityManager = new TopiaSecurityManagerImpl(context); TopiaUserDAO topiaUserDAO = securityManager.getTopiaUserDAO(); TopiaGroupDAO topiaGroupDAO = securityManager.getTopiaGroupDAO(); + TopiaEntityAuthorizationDAO topiaEntityAuthorizationDAO = securityManager.getTopiaEntityAuthorizationDAO(); /* Création d'un utilisateur */ TopiaUser thimel = topiaUserDAO.create(); thimel.setLogin("thimel"); thimel.setPassword("zou;bi@da"); thimel.update(); - transaction.commitTransaction(); + securityManager.getTopiaSecurityContext().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); + TopiaGroup essai = topiaGroupDAO.create(); + essai.setName("essai"); + + essai.setTopiaUser(new ArrayList()); + ruchaud.addTopiaGroup(essai); - group.update(); + essai.update(); ruchaud.update(); - transaction.commitTransaction(); + + /* Création d'un groupe */ + TopiaGroup test = topiaGroupDAO.create(); + test.setName("test"); + test.update(); + + /* Création d'une autorisation */ + TopiaEntityAuthorization authorization = topiaEntityAuthorizationDAO.create(); + authorization.setId("*"); + authorization.setActions(LOAD); + authorization.setPrincipals(ruchaud.getTopiaId()); + authorization.update(); + + securityManager.getTopiaSecurityContext().commitTransaction(); + /* Mise en marche de la sécurité */ securityManager.init(); + } + /* Initialisation de la BD */ + static { + try { + init(); + } catch (TopiaException e) { + e.printStackTrace(); + } + } + + public void testLogin() throws Exception { /* Authentification de l'utilisateur Thimel */ - LoginContext loginContext; - Subject subject; - - loginContext = new LoginContext("topia", new TopiaCallbackHandler( + LoginContext loginContext = new LoginContext("topia", new TopiaCallbackHandler( "thimel", "zou;bi@da")); loginContext.login(); - subject = loginContext.getSubject(); + Subject subject = loginContext.getSubject(); /* Test */ assertEquals(subject.getPrincipals().size(), 1); - + + loginContext.logout(); + } + + public void testLoginWithGroup() throws Exception { /* Authentification de l'utilisateur Ruchaud */ - loginContext = new LoginContext("topia", new TopiaCallbackHandler( + LoginContext loginContext = new LoginContext("topia", new TopiaCallbackHandler( "ruchaud", "mdp")); loginContext.login(); - subject = loginContext.getSubject(); + Subject subject = loginContext.getSubject(); /* Test */ assertEquals(subject.getPrincipals().size(), 2); + + loginContext.logout(); + } + + public void testqsddqsd() throws Exception { + /* Authentification de l'utilisateur Ruchaud */ + LoginContext loginContext = new LoginContext("topia", new TopiaCallbackHandler( + "ruchaud", "mdp")); + loginContext.login(); + Subject subject = loginContext.getSubject(); + + /* Test */ + Subject.doAsPrivileged(subject, new PrivilegedExceptionAction() { + public Object run() throws Exception { + TopiaContext transaction = context.beginTransaction(); + TopiaGroupDAO groupDAO = TopiaSecurityDAOHelper.getTopiaGroupDAO(transaction); + List findAll = groupDAO.findAll(); + assertEquals(findAll.size(), 2); + return null; + } + }, null); + + loginContext.logout(); } }