X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.server.jcr%2Fsrc%2Forg%2Fargeo%2Fjcr%2Funit%2FAbstractJcrTestCase.java;h=1269a3ee5730243b172896b546ff6191e3974dcc;hb=0d843d64df3f588ad1429905cf5f6e29c65becd3;hp=ca32f7df0b359fdc8a0f4ed72581348b1c03389c;hpb=2e7b5578166da0854f29b69b1d2f25ee102d0d85;p=lgpl%2Fargeo-commons.git 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..1269a3ee5 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,17 +16,22 @@ 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 junit.framework.TestCase; +import javax.security.auth.Subject; +import javax.security.auth.login.LoginContext; +import javax.security.auth.login.LoginException; import org.apache.commons.io.FileUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.argeo.ArgeoException; +import org.argeo.jcr.ArgeoJcrException; + +import junit.framework.TestCase; public abstract class AbstractJcrTestCase extends TestCase { private final static Log log = LogFactory.getLog(AbstractJcrTestCase.class); @@ -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_JACKRABBIT_ADMIN"; + + // 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 ArgeoJcrException("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 ArgeoJcrException("Cannot login to repository", e); } - return session; } protected Repository getRepository() { @@ -84,30 +123,6 @@ public abstract class AbstractJcrTestCase extends TestCase { this.repository = repository; } - // public void logout() { - // if (session != null && session.isLive()) - // JcrUtils.logoutQuietly(session); - // } - // - // protected static TestSuite defaultTestSuite(Class - // clss) { - // String testSuiteClassName = - // "org.argeo.jackrabbit.unit.JackrabbitTestSuite"; - // try { - // Class testSuiteClass = AbstractJcrTestCase.class - // .getClassLoader().loadClass(testSuiteClassName); - // if (clss == null) { - // return (TestSuite) testSuiteClass.newInstance(); - // } else { - // return (TestSuite) testSuiteClass.getConstructor(Class.class) - // .newInstance(clss); - // } - // } catch (Exception e) { - // throw new ArgeoException("Cannot find default test suite " - // + testSuiteClassName, e); - // } - // } - protected File getHomeDir() { File homeDir = new File(System.getProperty("java.io.tmpdir"), AbstractJcrTestCase.class.getSimpleName() + "-"