This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to annotated tag org.apache.sling.testing.sling-mock-1.6.0 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-testing-sling-mock.git
commit add520f7cc6d83b257185f88ad673275cca13aab Author: Stefan Seifert <[email protected]> AuthorDate: Thu Sep 17 23:54:42 2015 +0000 SLING-5042 ResourceResolver.commit() does not call session.save() on the backing JCR Session git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/testing/mocks/sling-mock@1703732 13f79535-47bb-0310-9956-ffa450edef68 --- .../sling/AbstractMockResourceResolverFactory.java | 11 ++--- .../mock/sling/MockJcrResourceResolverFactory.java | 50 +++------------------- .../resource/AbstractJcrResourceResolverTest.java | 18 ++++++++ .../AbstractSlingCrudResourceResolverTest.java | 15 +++++++ 4 files changed, 46 insertions(+), 48 deletions(-) diff --git a/src/main/java/org/apache/sling/testing/mock/sling/AbstractMockResourceResolverFactory.java b/src/main/java/org/apache/sling/testing/mock/sling/AbstractMockResourceResolverFactory.java index c1377c3..1a6915d 100644 --- a/src/main/java/org/apache/sling/testing/mock/sling/AbstractMockResourceResolverFactory.java +++ b/src/main/java/org/apache/sling/testing/mock/sling/AbstractMockResourceResolverFactory.java @@ -28,8 +28,6 @@ import org.apache.sling.api.resource.ResourceResolverFactory; 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 AbstractMockResourceResolverFactory implements ResourceResolverFa 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); + } } /** diff --git a/src/main/java/org/apache/sling/testing/mock/sling/MockJcrResourceResolverFactory.java b/src/main/java/org/apache/sling/testing/mock/sling/MockJcrResourceResolverFactory.java index 8de58a1..bc1a83d 100644 --- a/src/main/java/org/apache/sling/testing/mock/sling/MockJcrResourceResolverFactory.java +++ b/src/main/java/org/apache/sling/testing/mock/sling/MockJcrResourceResolverFactory.java @@ -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 extends AbstractMockResourceResolverFactory // 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()); - - ResourceProvider resourceProvider; - if (isAdmin) { - resourceProvider = jcrResourceProviderFactory.getAdministrativeResourceProvider(authenticationInfo); - } - else { - resourceProvider = jcrResourceProviderFactory.getResourceProvider(authenticationInfo); - } + MockOsgi.activate(jcrResourceProviderFactory, bundleContext, resourceProviderProps); + bundleContext.registerService(ResourceProviderFactory.class.getName(), jcrResourceProviderFactory, resourceProviderProps); - // 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); diff --git a/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractJcrResourceResolverTest.java b/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractJcrResourceResolverTest.java index c5867f6..12960dd 100644 --- a/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractJcrResourceResolverTest.java +++ b/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractJcrResourceResolverTest.java @@ -20,7 +20,9 @@ package org.apache.sling.testing.mock.sling.resource; 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 AbstractJcrResourceResolverTest { 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()); + } + } diff --git a/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractSlingCrudResourceResolverTest.java b/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractSlingCrudResourceResolverTest.java index 316d61d..5226486 100644 --- a/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractSlingCrudResourceResolverTest.java +++ b/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractSlingCrudResourceResolverTest.java @@ -281,4 +281,19 @@ public abstract class AbstractSlingCrudResourceResolverTest { 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()); + } + } -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
