You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ss...@apache.org on 2015/09/18 01:54:43 UTC

svn commit: r1703732 - in /sling/trunk/testing/mocks/sling-mock/src: main/java/org/apache/sling/testing/mock/sling/ test/java/org/apache/sling/testing/mock/sling/resource/

Author: sseifert
Date: Thu Sep 17 23:54:42 2015
New Revision: 1703732

URL: http://svn.apache.org/viewvc?rev=1703732&view=rev
Log:
SLING-5042 ResourceResolver.commit() does not call session.save() on the backing JCR Session

Modified:
    sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/AbstractMockResourceResolverFactory.java
    sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/MockJcrResourceResolverFactory.java
    sling/trunk/testing/mocks/sling-mock/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractJcrResourceResolverTest.java
    sling/trunk/testing/mocks/sling-mock/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractSlingCrudResourceResolverTest.java

Modified: sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/AbstractMockResourceResolverFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/AbstractMockResourceResolverFactory.java?rev=1703732&r1=1703731&r2=1703732&view=diff
==============================================================================
--- sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/AbstractMockResourceResolverFactory.java (original)
+++ sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/AbstractMockResourceResolverFactory.java Thu Sep 17 23:54:42 2015
@@ -28,8 +28,6 @@ import org.apache.sling.api.resource.Res
 import org.apache.sling.resourceresolver.impl.CommonResourceResolverFactoryImpl;
 import org.apache.sling.resourceresolver.impl.ResourceAccessSecurityTracker;
 import org.apache.sling.resourceresolver.impl.ResourceResolverFactoryActivator;
-import org.apache.sling.resourceresolver.impl.ResourceResolverImpl;
-import org.apache.sling.resourceresolver.impl.helper.ResourceResolverContext;
 import org.apache.sling.serviceusermapping.ServiceUserMapper;
 import org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl;
 import org.apache.sling.testing.mock.osgi.MockEventAdmin;
@@ -64,9 +62,12 @@ abstract class AbstractMockResourceResol
         MockOsgi.activate(activator, resourceProviderFactoryFactoryProps);
         
         CommonResourceResolverFactoryImpl commonFactoryImpl = new CommonResourceResolverFactoryImpl(activator);
-        ResourceResolverContext context = new ResourceResolverContext(true, authenticationInfo, new ResourceAccessSecurityTracker());
-        ResourceResolverImpl resourceResolver = new ResourceResolverImpl(commonFactoryImpl, context);
-        return resourceResolver;
+        if (isAdmin) {
+            return commonFactoryImpl.getAdministrativeResourceResolver(authenticationInfo);
+        }
+        else {
+            return commonFactoryImpl.getResourceResolver(authenticationInfo);
+        }
     }
     
     /**

Modified: sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/MockJcrResourceResolverFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/MockJcrResourceResolverFactory.java?rev=1703732&r1=1703731&r2=1703732&view=diff
==============================================================================
--- sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/MockJcrResourceResolverFactory.java (original)
+++ sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/MockJcrResourceResolverFactory.java Thu Sep 17 23:54:42 2015
@@ -24,20 +24,15 @@ import java.util.Map;
 
 import javax.jcr.query.Query;
 
-import org.apache.commons.lang3.ArrayUtils;
 import org.apache.sling.api.resource.LoginException;
 import org.apache.sling.api.resource.QueriableResourceProvider;
 import org.apache.sling.api.resource.ResourceProvider;
+import org.apache.sling.api.resource.ResourceProviderFactory;
 import org.apache.sling.api.resource.ResourceResolver;
-import org.apache.sling.commons.osgi.PropertiesUtil;
 import org.apache.sling.jcr.api.SlingRepository;
 import org.apache.sling.jcr.resource.internal.helper.jcr.JcrResourceProviderFactory;
 import org.apache.sling.testing.mock.osgi.MockOsgi;
 import org.osgi.framework.BundleContext;
-import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.framework.ServiceReference;
-
-import com.google.common.collect.ImmutableMap;
 
 /**
  * Mock {@link ResourceResolverFactory} implementation.
@@ -64,49 +59,18 @@ class MockJcrResourceResolverFactory ext
         // use reflection to not depend on it if running with older version of org.apache.sling.jcr.resource
         registerServiceIfFoundInClasspath("org.apache.sling.jcr.resource.internal.helper.jcr.PathMapper");
 
-        // setup real sling JCR resource provider implementation for use in
-        // mocked context
+        // setup real sling JCR resource provider implementation for use in mocked context
         JcrResourceProviderFactory jcrResourceProviderFactory = new JcrResourceProviderFactory();
+        Dictionary<String, Object> resourceProviderProps = new Hashtable<String, Object>();
+        resourceProviderProps.put(ResourceProvider.ROOTS, new String[] { "/" });
+        resourceProviderProps.put(QueriableResourceProvider.LANGUAGES, new String[] { Query.XPATH, Query.SQL, Query.JCR_SQL2 });
         MockOsgi.injectServices(jcrResourceProviderFactory, bundleContext);
-        MockOsgi.activate(jcrResourceProviderFactory, bundleContext, ImmutableMap.<String, Object> of());
+        MockOsgi.activate(jcrResourceProviderFactory, bundleContext, resourceProviderProps);
+        bundleContext.registerService(ResourceProviderFactory.class.getName(), jcrResourceProviderFactory, resourceProviderProps);
 
-        ResourceProvider resourceProvider;
-        if (isAdmin) {
-            resourceProvider = jcrResourceProviderFactory.getAdministrativeResourceProvider(authenticationInfo);
-        }
-        else {
-            resourceProvider = jcrResourceProviderFactory.getResourceProvider(authenticationInfo);
-        }
-
-        // register JCR resource provider if not already registered
-        if (!isRootServiceProviderRegistered(bundleContext)) {
-            Dictionary<Object, Object> resourceProviderProps = new Hashtable<Object, Object>();
-            resourceProviderProps.put(ResourceProvider.ROOTS, new String[] { "/" });
-            resourceProviderProps.put(QueriableResourceProvider.LANGUAGES, new String[] { Query.XPATH, Query.SQL, Query.JCR_SQL2 });
-            bundleContext.registerService(ResourceProvider.class.getName(), resourceProvider, resourceProviderProps);
-        }
-        
         return super.getResourceResolverInternal(authenticationInfo, isAdmin);
     }
     
-    private boolean isRootServiceProviderRegistered(BundleContext bundleContext) {
-        try {
-            ServiceReference[] serviceReferences = bundleContext.getServiceReferences(ResourceProvider.class.getName(), null) ;
-            if (serviceReferences != null) {
-                for (ServiceReference serviceReference : serviceReferences) {
-                    String[] roots = PropertiesUtil.toStringArray(serviceReference.getProperty(ResourceProvider.ROOTS));
-                    if (ArrayUtils.contains(roots, "/")) {
-                        return true;
-                    }
-                }
-            }
-            return false;
-        }
-        catch (InvalidSyntaxException ex) {
-            throw new RuntimeException(ex);
-        }
-    }
-    
     private void registerServiceIfFoundInClasspath(String className) {
         try {
             Class pathMapperClass = Class.forName(className);

Modified: sling/trunk/testing/mocks/sling-mock/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractJcrResourceResolverTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/sling-mock/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractJcrResourceResolverTest.java?rev=1703732&r1=1703731&r2=1703732&view=diff
==============================================================================
--- sling/trunk/testing/mocks/sling-mock/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractJcrResourceResolverTest.java (original)
+++ sling/trunk/testing/mocks/sling-mock/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractJcrResourceResolverTest.java Thu Sep 17 23:54:42 2015
@@ -20,7 +20,9 @@ package org.apache.sling.testing.mock.sl
 
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
 
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
@@ -176,4 +178,20 @@ public abstract class AbstractJcrResourc
         assertEquals("sling/resource/type", child.getResourceType());
     }
 
+    @Test
+    public void testPendingChangesCommit() throws Exception {
+        
+        // skip this test for JCR_MOCK because it does not track pending changes
+        if (getResourceResolverType()==ResourceResolverType.JCR_MOCK) {
+            return;
+        }
+        
+        Resource testRootResource = resourceResolver.getResource(getTestRootNode().getPath());
+        resourceResolver.delete(testRootResource);
+        assertTrue(session.hasPendingChanges());
+        
+        resourceResolver.commit();
+        assertFalse(session.hasPendingChanges());
+    }
+
 }

Modified: sling/trunk/testing/mocks/sling-mock/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractSlingCrudResourceResolverTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/sling-mock/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractSlingCrudResourceResolverTest.java?rev=1703732&r1=1703731&r2=1703732&view=diff
==============================================================================
--- sling/trunk/testing/mocks/sling-mock/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractSlingCrudResourceResolverTest.java (original)
+++ sling/trunk/testing/mocks/sling-mock/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractSlingCrudResourceResolverTest.java Thu Sep 17 23:54:42 2015
@@ -281,4 +281,19 @@ public abstract class AbstractSlingCrudR
         assertEquals("/apps/any/path", resource.getPath());
     }
 
+    @Test
+    public void testPendingChangesCommit() throws PersistenceException {
+        
+        // skip this test for JCR_MOCK because it does not track pending changes
+        if (getResourceResolverType()==ResourceResolverType.JCR_MOCK) {
+            return;
+        }
+        
+        resourceResolver.delete(getTestRootResource());
+        assertTrue(resourceResolver.hasChanges());
+        
+        resourceResolver.commit();
+        assertFalse(resourceResolver.hasChanges());
+    }
+
 }