From: Mathieu Baudier Date: Mon, 19 Oct 2015 10:08:42 +0000 (+0000) Subject: Improve Jackrabbit unit tests. X-Git-Tag: argeo-commons-2.1.30~63 X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;h=a9974420ad58fab72c0f67a8955a296cd546c27e;p=lgpl%2Fargeo-commons.git Improve Jackrabbit unit tests. git-svn-id: https://svn.argeo.org/commons/trunk@8523 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- diff --git a/org.argeo.security.jackrabbit/ext/test/org/argeo/security/jackrabbit/JackrabbitAuthTest.java b/org.argeo.security.jackrabbit/ext/test/org/argeo/security/jackrabbit/JackrabbitAuthTest.java index 140dfa67f..47afff922 100644 --- a/org.argeo.security.jackrabbit/ext/test/org/argeo/security/jackrabbit/JackrabbitAuthTest.java +++ b/org.argeo.security.jackrabbit/ext/test/org/argeo/security/jackrabbit/JackrabbitAuthTest.java @@ -1,12 +1,7 @@ package org.argeo.security.jackrabbit; -import java.net.URL; -import java.security.PrivilegedExceptionAction; - import javax.jcr.Repository; import javax.jcr.Session; -import javax.security.auth.Subject; -import javax.security.auth.login.LoginContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -16,31 +11,37 @@ public class JackrabbitAuthTest extends AbstractJackrabbitTestCase { private final Log log = LogFactory.getLog(JackrabbitAuthTest.class); public void testLogin() throws Exception { - Subject subject = new Subject(); - LoginContext loginContext = new LoginContext("SYSTEM", subject); - loginContext.login(); - Subject.doAs(subject, new PrivilegedExceptionAction() { - - @Override - public Void run() throws Exception { - Repository repository = getRepository(); - Session session = repository.login(); - log.debug(session.getUserID()); - return null; - } - }); + Session session = session(); + log.debug(session.getUserID()); + assertEquals("admin", session.getUserID()); + // Subject subject = new Subject(); + // LoginContext loginContext = new LoginContext("SYSTEM", subject); + // loginContext.login(); + // Subject.doAs(subject, new PrivilegedExceptionAction() { + // + // @Override + // public Void run() throws Exception { + // Repository repository = getRepository(); + // Session session = repository.login(); + // log.debug(session.getUserID()); + // return null; + // } + // }); + } + + @Override + protected String getLoginContext() { + return LOGIN_CONTEXT_TEST_SYSTEM; } @Override protected Repository createRepository() throws Exception { - URL url = getClass().getResource("test_jaas.config"); - System.setProperty("java.security.auth.login.config", url.toString()); return super.createRepository(); } @Override protected void clearRepository(Repository repository) throws Exception { - System.setProperty("java.security.auth.login.config", ""); + // System.setProperty("java.security.auth.login.config", ""); } @Override diff --git a/org.argeo.security.jackrabbit/ext/test/org/argeo/security/jackrabbit/test_jaas.config b/org.argeo.security.jackrabbit/ext/test/org/argeo/security/jackrabbit/test_jaas.config deleted file mode 100644 index 233af5461..000000000 --- a/org.argeo.security.jackrabbit/ext/test/org/argeo/security/jackrabbit/test_jaas.config +++ /dev/null @@ -1,7 +0,0 @@ -SYSTEM { - org.argeo.security.core.SystemLoginModule requisite; -}; - -Jackrabbit { - org.argeo.security.jackrabbit.SystemJackrabbitLoginModule requisite; -}; diff --git a/org.argeo.server.jcr/src/org/argeo/jackrabbit/unit/AbstractJackrabbitTestCase.java b/org.argeo.server.jcr/src/org/argeo/jackrabbit/unit/AbstractJackrabbitTestCase.java index d3f35b756..1523c835d 100644 --- a/org.argeo.server.jcr/src/org/argeo/jackrabbit/unit/AbstractJackrabbitTestCase.java +++ b/org.argeo.server.jcr/src/org/argeo/jackrabbit/unit/AbstractJackrabbitTestCase.java @@ -15,6 +15,8 @@ */ package org.argeo.jackrabbit.unit; +import java.net.URL; + import javax.jcr.Repository; import org.apache.commons.io.FileUtils; @@ -32,6 +34,12 @@ public abstract class AbstractJackrabbitTestCase extends AbstractJcrTestCase { // return res.getFile(); // } + public AbstractJackrabbitTestCase() { + URL url = AbstractJackrabbitTestCase.class.getResource("jaas.config"); + assert url != null; + System.setProperty("java.security.auth.login.config", url.toString()); + } + protected Repository createRepository() throws Exception { // Repository repository = new TransientRepository(getRepositoryFile(), // getHomeDir()); diff --git a/org.argeo.server.jcr/src/org/argeo/jackrabbit/unit/jaas.config b/org.argeo.server.jcr/src/org/argeo/jackrabbit/unit/jaas.config new file mode 100644 index 000000000..5f034efb7 --- /dev/null +++ b/org.argeo.server.jcr/src/org/argeo/jackrabbit/unit/jaas.config @@ -0,0 +1,7 @@ +TEST_SYSTEM { + org.argeo.security.core.SystemLoginModule requisite; +}; + +Jackrabbit { + org.argeo.security.jackrabbit.SystemJackrabbitLoginModule requisite; +}; diff --git a/org.argeo.server.jcr/src/org/argeo/jcr/unit/AbstractJcrTestCase.java b/org.argeo.server.jcr/src/org/argeo/jcr/unit/AbstractJcrTestCase.java index ca32f7df0..1d9eedc4d 100644 --- a/org.argeo.server.jcr/src/org/argeo/jcr/unit/AbstractJcrTestCase.java +++ b/org.argeo.server.jcr/src/org/argeo/jcr/unit/AbstractJcrTestCase.java @@ -16,10 +16,15 @@ package org.argeo.jcr.unit; import java.io.File; +import java.security.AccessController; +import java.security.PrivilegedAction; import javax.jcr.Repository; import javax.jcr.Session; import javax.jcr.SimpleCredentials; +import javax.security.auth.Subject; +import javax.security.auth.login.LoginContext; +import javax.security.auth.login.LoginException; import junit.framework.TestCase; @@ -34,7 +39,9 @@ public abstract class AbstractJcrTestCase extends TestCase { private Repository repository; private Session session = null; -// protected abstract File getRepositoryFile() throws Exception; + public final static String LOGIN_CONTEXT_TEST_SYSTEM = "TEST_SYSTEM"; + + // protected abstract File getRepositoryFile() throws Exception; protected abstract Repository createRepository() throws Exception; @@ -59,17 +66,49 @@ public abstract class AbstractJcrTestCase extends TestCase { } protected Session session() { - if (session == null || !session.isLive()) { + if (session != null && session.isLive()) + return session; + Session session; + if (getLoginContext() != null) { + LoginContext lc; try { - if (log.isTraceEnabled()) - log.trace("Login session"); - session = getRepository().login( - new SimpleCredentials("demo", "demo".toCharArray())); - } catch (Exception e) { - throw new ArgeoException("Cannot login to repository", e); + lc = new LoginContext(getLoginContext()); + lc.login(); + } catch (LoginException e) { + throw new ArgeoException("JAAS login failed", e); } + session = Subject.doAs(lc.getSubject(), + new PrivilegedAction() { + + @Override + public Session run() { + return login(); + } + + }); + } else + session = login(); + this.session = session; + return this.session; + } + + protected String getLoginContext() { + return null; + } + + protected Session login() { + try { + if (log.isTraceEnabled()) + log.trace("Login session"); + Subject subject = Subject.getSubject(AccessController.getContext()); + if (subject != null) + return getRepository().login(); + else + return getRepository().login( + new SimpleCredentials("demo", "demo".toCharArray())); + } catch (Exception e) { + throw new ArgeoException("Cannot login to repository", e); } - return session; } protected Repository getRepository() {