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.3 topia-security/src/test/org/codelutin/topia/security/test/TopiaSecurityTest.java:1.4 --- topia-security/src/test/org/codelutin/topia/security/test/TopiaSecurityTest.java:1.3 Thu Sep 14 13:56:20 2006 +++ topia-security/src/test/org/codelutin/topia/security/test/TopiaSecurityTest.java Fri Sep 15 13:01:49 2006 @@ -20,24 +20,22 @@ 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; import javax.security.auth.login.LoginContext; import junit.framework.TestCase; - +import static org.codelutin.topia.security.TopiaSecurityUtil.*; 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.security.TopiaSecurityDAOHelper; +import org.codelutin.topia.framework.TopiaContextImplementor; +import org.codelutin.topia.persistence.TopiaDAO; import org.codelutin.topia.security.TopiaSecurityManager; import org.codelutin.topia.security.TopiaSecurityManagerImpl; import org.codelutin.topia.security.entities.authorization.TopiaEntityAuthorization; @@ -47,14 +45,15 @@ 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.person.Person; 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 = "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 static String entitiesList = "org.codelutin.topia.security.test.person.PersonImpl,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 static Properties getProperties() { Properties config = new Properties(); @@ -79,10 +78,13 @@ protected static void init() throws TopiaException { /* Création des contextes d'exécution */ - Properties config = getProperties(); + TopiaContext context = TopiaContextFactory.getContext(getProperties()); - context = TopiaContextFactory.getContext(config); + /* DAO Personne */ + TopiaContextImplementor childContext = (TopiaContextImplementor) context.beginTransaction(); + TopiaDAO personDAO = childContext.getDAO(Person.class); + /* DAOs Sécurité */ TopiaSecurityManager securityManager = new TopiaSecurityManagerImpl(context); TopiaUserDAO topiaUserDAO = securityManager.getTopiaUserDAO(); TopiaGroupDAO topiaGroupDAO = securityManager.getTopiaGroupDAO(); @@ -99,29 +101,44 @@ TopiaUser ruchaud = topiaUserDAO.create(); ruchaud.setLogin("ruchaud"); ruchaud.setPassword("mdp"); - TopiaGroup essai = topiaGroupDAO.create(); - essai.setName("essai"); + TopiaGroup groupRuchaud = topiaGroupDAO.create(); + groupRuchaud.setName("essai"); - essai.setTopiaUser(new ArrayList()); - ruchaud.addTopiaGroup(essai); + groupRuchaud.setTopiaUser(new ArrayList()); + ruchaud.addTopiaGroup(groupRuchaud); - essai.update(); + groupRuchaud.update(); ruchaud.update(); - /* 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(); + /* Création des personnes */ + 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); + + /* Création des autorisations */ + 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(); + /* Commit */ + childContext.commitTransaction(); + securityManager.getTopiaSecurityContext().commitTransaction(); + /* Mise en marche de la sécurité */ securityManager.init(); } @@ -135,7 +152,7 @@ } } - public void testLogin() throws Exception { + public void testLoginThimel() throws Exception { /* Authentification de l'utilisateur Thimel */ LoginContext loginContext = new LoginContext("topia", new TopiaCallbackHandler( "thimel", "zou;bi@da")); @@ -148,7 +165,7 @@ loginContext.logout(); } - public void testLoginWithGroup() throws Exception { + public void testLoginRuchaud() throws Exception { /* Authentification de l'utilisateur Ruchaud */ LoginContext loginContext = new LoginContext("topia", new TopiaCallbackHandler( "ruchaud", "mdp")); @@ -161,7 +178,28 @@ loginContext.logout(); } - public void testEntityAuthorization() throws Exception { + public void testEntityAuthorizationThimel() throws Exception { + /* Authentification de l'utilisateur Ruchaud */ + LoginContext loginContext = new LoginContext("topia", new TopiaCallbackHandler( + "thimel", "zou;bi@da")); + loginContext.login(); + Subject subject = loginContext.getSubject(); + + /* Test */ + Subject.doAsPrivileged(subject, new PrivilegedExceptionAction() { + public Object run() throws Exception { + TopiaContext context = TopiaContextFactory.getContext(getProperties()); + TopiaContextImplementor childContext = (TopiaContextImplementor) context.beginTransaction(); + TopiaDAO personDAO = childContext.getDAO(Person.class); + assertEquals(personDAO.findAll(), 1); + return null; + } + }, null); + + loginContext.logout(); + } + + public void testEntityAuthorizationRuchaud() throws Exception { /* Authentification de l'utilisateur Ruchaud */ LoginContext loginContext = new LoginContext("topia", new TopiaCallbackHandler( "ruchaud", "mdp")); @@ -171,10 +209,10 @@ /* 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); + TopiaContext context = TopiaContextFactory.getContext(getProperties()); + TopiaContextImplementor childContext = (TopiaContextImplementor) context.beginTransaction(); + TopiaDAO personDAO = childContext.getDAO(Person.class); + assertEquals(personDAO.findAll().size(), 2); return null; } }, null);