Improve Jackrabbit unit tests.
authorMathieu Baudier <mbaudier@argeo.org>
Mon, 19 Oct 2015 10:08:42 +0000 (10:08 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Mon, 19 Oct 2015 10:08:42 +0000 (10:08 +0000)
git-svn-id: https://svn.argeo.org/commons/trunk@8523 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

org.argeo.security.jackrabbit/ext/test/org/argeo/security/jackrabbit/JackrabbitAuthTest.java
org.argeo.security.jackrabbit/ext/test/org/argeo/security/jackrabbit/test_jaas.config [deleted file]
org.argeo.server.jcr/src/org/argeo/jackrabbit/unit/AbstractJackrabbitTestCase.java
org.argeo.server.jcr/src/org/argeo/jackrabbit/unit/jaas.config [new file with mode: 0644]
org.argeo.server.jcr/src/org/argeo/jcr/unit/AbstractJcrTestCase.java

index 140dfa67fcd833b23925c4fc117fb5e00d74ed3b..47afff92216bc8791da148ef287155c54f0de2cc 100644 (file)
@@ -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<Void>() {
-
-                       @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<Void>() {
+               //
+               // @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 (file)
index 233af54..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-SYSTEM {
-   org.argeo.security.core.SystemLoginModule requisite;
-};
-
-Jackrabbit {
-   org.argeo.security.jackrabbit.SystemJackrabbitLoginModule requisite;
-};
index d3f35b7560354c4d8693ab53a7d5d9aa131a186e..1523c835d7c76abdb4941103ba5858204cb535cd 100644 (file)
@@ -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 (file)
index 0000000..5f034ef
--- /dev/null
@@ -0,0 +1,7 @@
+TEST_SYSTEM {
+   org.argeo.security.core.SystemLoginModule requisite;
+};
+
+Jackrabbit {
+   org.argeo.security.jackrabbit.SystemJackrabbitLoginModule requisite;
+};
index ca32f7df0b359fdc8a0f4ed72581348b1c03389c..1d9eedc4d880826210df15837de507dfe63d8688 100644 (file)
 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<Session>() {
+
+                                               @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() {