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());
+ }
+
}