Author: bdelacretaz
Date: Thu Sep 12 17:19:17 2013
New Revision: 1522668

URL: http://svn.apache.org/r1522668
Log:
SLING-2788 - set thread context class loader for all login variants, more login 
tests pass now

Modified:
    
sling/whiteboard/bdelacretaz/bdelacretaz-oak-server/src/main/java/org/apache/sling/oak/server/JcrRepositoryHacks.java
    
sling/whiteboard/bdelacretaz/it-repository/src/test/java/org/apache/sling/jcr/repository/it/SlingRepositoryITBase.java

Modified: 
sling/whiteboard/bdelacretaz/bdelacretaz-oak-server/src/main/java/org/apache/sling/oak/server/JcrRepositoryHacks.java
URL: 
http://svn.apache.org/viewvc/sling/whiteboard/bdelacretaz/bdelacretaz-oak-server/src/main/java/org/apache/sling/oak/server/JcrRepositoryHacks.java?rev=1522668&r1=1522667&r2=1522668&view=diff
==============================================================================
--- 
sling/whiteboard/bdelacretaz/bdelacretaz-oak-server/src/main/java/org/apache/sling/oak/server/JcrRepositoryHacks.java
 (original)
+++ 
sling/whiteboard/bdelacretaz/bdelacretaz-oak-server/src/main/java/org/apache/sling/oak/server/JcrRepositoryHacks.java
 Thu Sep 12 17:19:17 2013
@@ -17,6 +17,8 @@
  */
 package org.apache.sling.oak.server;
 
+import java.util.Map;
+
 import javax.jcr.Credentials;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
@@ -28,22 +30,73 @@ import org.apache.jackrabbit.oak.spi.sec
 import org.apache.jackrabbit.oak.spi.whiteboard.Whiteboard;
 
 class JcrRepositoryHacks extends RepositoryImpl {
+    
+    // TODO TCCL switching shouldn't be needed?
+    // LoginModules are not found without this
+    static abstract class LoginHelper {
+        Session TCCLLogin() throws RepositoryException {
+            final Thread thread = Thread.currentThread();
+            final ClassLoader loader = thread.getContextClassLoader();
+            try {
+                thread.setContextClassLoader(Oak.class.getClassLoader());
+                return doLogin();
+            } finally {
+                thread.setContextClassLoader(loader);
+            }
+            
+        }
+        
+        protected abstract Session doLogin() throws RepositoryException;
+    };
+    
        JcrRepositoryHacks(ContentRepository contentRepository, Whiteboard 
whiteboard, SecurityProvider securityProvider) {
                super(contentRepository, whiteboard, securityProvider);
        }
        
     @Override
+    public Session login() throws RepositoryException {
+        return new LoginHelper() {
+            protected Session doLogin() throws RepositoryException {
+                return JcrRepositoryHacks.super.login();
+            }
+        }.TCCLLogin();
+    }
+
+    @Override
+    public Session login(final Credentials creds, final String workspace, 
final Map<String, Object> opt)
+            throws RepositoryException {
+        return new LoginHelper() {
+            protected Session doLogin() throws RepositoryException {
+                return JcrRepositoryHacks.super.login(creds, workspace, opt);
+            }
+        }.TCCLLogin();
+    }
+
+    @Override
+    public Session login(final Credentials credentials) throws 
RepositoryException {
+        return new LoginHelper() {
+            protected Session doLogin() throws RepositoryException {
+                return JcrRepositoryHacks.super.login(credentials);
+            }
+        }.TCCLLogin();
+    }
+
+    @Override
+    public Session login(final String workspace) throws RepositoryException {
+        return new LoginHelper() {
+            protected Session doLogin() throws RepositoryException {
+                return JcrRepositoryHacks.super.login(workspace);
+            }
+        }.TCCLLogin();
+    }
+
+    @Override
     public Session login(final Credentials credentials, final String workspace)
             throws RepositoryException {
-       // TODO: shouldn't be needed - set context class loader to
-       // avoid class not found exceptions on login modules
-        final Thread thread = Thread.currentThread();
-        final ClassLoader loader = thread.getContextClassLoader();
-        try {
-            thread.setContextClassLoader(Oak.class.getClassLoader());
-            return super.login(credentials, workspace);
-        } finally {
-            thread.setContextClassLoader(loader);
-        }
+        return new LoginHelper() {
+            protected Session doLogin() throws RepositoryException {
+                return JcrRepositoryHacks.super.login(credentials, workspace);
+            }
+        }.TCCLLogin();
     }
 }
\ No newline at end of file

Modified: 
sling/whiteboard/bdelacretaz/it-repository/src/test/java/org/apache/sling/jcr/repository/it/SlingRepositoryITBase.java
URL: 
http://svn.apache.org/viewvc/sling/whiteboard/bdelacretaz/it-repository/src/test/java/org/apache/sling/jcr/repository/it/SlingRepositoryITBase.java?rev=1522668&r1=1522667&r2=1522668&view=diff
==============================================================================
--- 
sling/whiteboard/bdelacretaz/it-repository/src/test/java/org/apache/sling/jcr/repository/it/SlingRepositoryITBase.java
 (original)
+++ 
sling/whiteboard/bdelacretaz/it-repository/src/test/java/org/apache/sling/jcr/repository/it/SlingRepositoryITBase.java
 Thu Sep 12 17:19:17 2013
@@ -62,8 +62,7 @@ public abstract class SlingRepositoryITB
     }
 
     @Test
-    @Ignore("Fails on Oak: javax.security.auth.login.LoginException: unable to 
find LoginModule class: 
org.apache.jackrabbit.oak.spi.security.authentication.GuestLoginModule")
-    public void testAdminLogin() throws RepositoryException {
+    public void testExplicitAdminLogin() throws RepositoryException {
         final Credentials creds = new SimpleCredentials("admin", 
"admin".toCharArray());
         repository.login(creds).logout();
     }
@@ -71,7 +70,7 @@ public abstract class SlingRepositoryITB
     @Test(expected=RepositoryException.class)
     public void testWrongLogin() throws RepositoryException {
         final Credentials creds = new SimpleCredentials("badName", 
"badPAssword".toCharArray());
-        repository.login(creds).logout();
+        repository.login(creds);
     }
     
     private void assertCreateRetrieveNode(String nodeType) throws 
RepositoryException {


Reply via email to