Author: sseifert Date: Thu Oct 16 16:11:32 2014 New Revision: 1632375 URL: http://svn.apache.org/r1632375 Log: SLING-4042 do not forget to register ResourceResolverFactory in OSGi context as well
Modified: sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/context/ContextResourceResolverFactory.java sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java sling/trunk/testing/mocks/sling-mock/src/test/java/org/apache/sling/testing/mock/sling/context/SlingContextImplTest.java Modified: sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/context/ContextResourceResolverFactory.java URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/context/ContextResourceResolverFactory.java?rev=1632375&r1=1632374&r2=1632375&view=diff ============================================================================== --- sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/context/ContextResourceResolverFactory.java (original) +++ sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/context/ContextResourceResolverFactory.java Thu Oct 16 16:11:32 2014 @@ -22,7 +22,9 @@ import javax.jcr.NamespaceRegistry; import javax.jcr.RepositoryException; import javax.jcr.Session; +import org.apache.sling.api.resource.LoginException; import org.apache.sling.api.resource.ResourceResolver; +import org.apache.sling.api.resource.ResourceResolverFactory; import org.apache.sling.testing.mock.sling.MockSling; import org.apache.sling.testing.mock.sling.ResourceResolverType; @@ -35,42 +37,43 @@ final class ContextResourceResolverFacto // static methods only } - public static ResourceResolver initializeResourceResolver(final ResourceResolverType resourceResolverType) { + public static ResourceResolverFactory get(final ResourceResolverType resourceResolverType) { try { - ResourceResolver resourceResolver = MockSling.newResourceResolver(resourceResolverType); + ResourceResolverFactory factory = MockSling.newResourceResolverFactory(resourceResolverType); switch (resourceResolverType) { case JCR_MOCK: - initializeJcrMock(resourceResolver); + initializeJcrMock(factory); break; case JCR_JACKRABBIT: - initializeJcrJackrabbit(resourceResolver); + initializeJcrJackrabbit(factory); break; case RESOURCERESOLVER_MOCK: - initializeResourceResolverMock(resourceResolver); + initializeResourceResolverMock(factory); break; default: throw new IllegalArgumentException("Invalid resource resolver type: " + resourceResolverType); } - return resourceResolver; + return factory; } catch (Throwable ex) { - throw new RuntimeException("Unable to initialize " + resourceResolverType + " resource resolver.", ex); + throw new RuntimeException("Unable to initialize " + resourceResolverType + " resource resolver factory.", ex); } } - private static void initializeJcrMock(final ResourceResolver resourceResolver) throws RepositoryException { + private static void initializeJcrMock(ResourceResolverFactory factory) throws RepositoryException, LoginException { // register default namespaces - NamespaceRegistry namespaceRegistry = resourceResolver.adaptTo(Session.class).getWorkspace() - .getNamespaceRegistry(); + ResourceResolver resolver = factory.getResourceResolver(null); + Session session = resolver.adaptTo(Session.class); + NamespaceRegistry namespaceRegistry = session.getWorkspace().getNamespaceRegistry(); namespaceRegistry.registerNamespace("sling", "http://sling.apache.org/jcr/sling/1.0"); } - private static void initializeJcrJackrabbit(final ResourceResolver resourceResolver) { - // TODO: register sling node types + private static void initializeJcrJackrabbit(ResourceResolverFactory factory) { + // register sling node types? } - private static void initializeResourceResolverMock(final ResourceResolver resourceResolver) { + private static void initializeResourceResolverMock(ResourceResolverFactory factory) { // nothing to do } Modified: sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java?rev=1632375&r1=1632374&r2=1632375&view=diff ============================================================================== --- sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java (original) +++ sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java Thu Oct 16 16:11:32 2014 @@ -27,8 +27,10 @@ import javax.jcr.RepositoryException; import javax.jcr.Session; import org.apache.sling.api.adapter.AdapterFactory; +import org.apache.sling.api.resource.LoginException; import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ResourceResolver; +import org.apache.sling.api.resource.ResourceResolverFactory; import org.apache.sling.api.scripting.SlingBindings; import org.apache.sling.api.scripting.SlingScriptHelper; import org.apache.sling.commons.mime.MimeTypeService; @@ -73,6 +75,7 @@ public class SlingContextImpl { // default to publish instance run mode static final Set<String> DEFAULT_RUN_MODES = ImmutableSet.<String> builder().add("publish").build(); + protected ResourceResolverFactory resourceResolverFactory; protected MockModelAdapterFactory modelAdapterFactory; protected ResourceResolverType resourceResolverType; protected ComponentContext componentContext; @@ -95,14 +98,25 @@ public class SlingContextImpl { */ protected void setUp() { MockSling.setAdapterManagerBundleContext(bundleContext()); + this.resourceResolverFactory = newResourceResolverFactory(); registerDefaultServices(); } + + /** + * Initialize mocked resource resolver factory. + */ + protected ResourceResolverFactory newResourceResolverFactory() { + return ContextResourceResolverFactory.get(this.resourceResolverType); + } /** * Default services that should be available for every unit test */ protected void registerDefaultServices() { + // resource resolver factory + registerService(ResourceResolverFactory.class, this.resourceResolverFactory); + // adapter factories modelAdapterFactory = new MockModelAdapterFactory(componentContext()); registerService(AdapterFactory.class, modelAdapterFactory); @@ -187,15 +201,15 @@ public class SlingContextImpl { */ public final ResourceResolver resourceResolver() { if (this.resourceResolver == null) { - this.resourceResolver = createMockResourceResolver(); + try { + this.resourceResolver = this.resourceResolverFactory.getResourceResolver(null); + } catch (LoginException ex) { + throw new RuntimeException("Creating resource resolver failed.", ex); + } } return this.resourceResolver; } - protected ResourceResolver createMockResourceResolver() { - return ContextResourceResolverFactory.initializeResourceResolver(resourceResolverType()); - } - /** * @return Sling request */ Modified: sling/trunk/testing/mocks/sling-mock/src/test/java/org/apache/sling/testing/mock/sling/context/SlingContextImplTest.java URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/sling-mock/src/test/java/org/apache/sling/testing/mock/sling/context/SlingContextImplTest.java?rev=1632375&r1=1632374&r2=1632375&view=diff ============================================================================== --- sling/trunk/testing/mocks/sling-mock/src/test/java/org/apache/sling/testing/mock/sling/context/SlingContextImplTest.java (original) +++ sling/trunk/testing/mocks/sling-mock/src/test/java/org/apache/sling/testing/mock/sling/context/SlingContextImplTest.java Thu Oct 16 16:11:32 2014 @@ -34,6 +34,7 @@ import javax.inject.Inject; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ResourceResolver; +import org.apache.sling.api.resource.ResourceResolverFactory; import org.apache.sling.api.scripting.SlingBindings; import org.apache.sling.commons.mime.MimeTypeService; import org.apache.sling.models.annotations.Model; @@ -192,6 +193,12 @@ public class SlingContextImplTest { assertTrue(newRunModes.contains("mode1")); assertTrue(newRunModes.contains("mode2")); } + + @Test + public void testResourceResolverFactory() { + ResourceResolverFactory factory = context.getService(ResourceResolverFactory.class); + assertNotNull(factory); + } @Model(adaptables = SlingHttpServletRequest.class) public interface RequestAttributeModel {