You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 10:22:17 UTC

[sling-org-apache-sling-testing-sling-mock] 07/28: SLING-4437 MockJcrResourceResolverFactory should allow to register services dynamically

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.3.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-testing-sling-mock.git

commit 71bbb5c4a5633d5f761f16262be89153bc4b716d
Author: Stefan Seifert <ss...@apache.org>
AuthorDate: Thu Feb 19 20:20:58 2015 +0000

    SLING-4437 MockJcrResourceResolverFactory should allow to register services dynamically
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/testing/mocks/sling-mock@1660995 13f79535-47bb-0310-9956-ffa450edef68
---
 .../mock/sling/MockJcrResourceResolverFactory.java | 36 ++++++++++------------
 .../apache/sling/testing/mock/sling/MockSling.java | 12 +++++++-
 .../context/ContextResourceResolverFactory.java    |  6 ++--
 .../mock/sling/context/SlingContextImpl.java       |  2 +-
 .../sling/testing/mock/sling/package-info.java     |  2 +-
 .../AbstractMultipleResourceResolverTest.java      |  5 ++-
 6 files changed, 38 insertions(+), 25 deletions(-)

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 d948434..69a8af7 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
@@ -19,6 +19,7 @@
 package org.apache.sling.testing.mock.sling;
 
 import java.util.Dictionary;
+import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.Hashtable;
 import java.util.Map;
@@ -36,7 +37,6 @@ import org.apache.sling.resourceresolver.impl.helper.ResourceResolverContext;
 import org.apache.sling.testing.mock.osgi.MockOsgi;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
-import org.osgi.framework.ServiceReference;
 import org.osgi.service.component.ComponentContext;
 
 import com.google.common.collect.ImmutableMap;
@@ -49,15 +49,14 @@ import com.google.common.collect.ImmutableMap;
 class MockJcrResourceResolverFactory implements ResourceResolverFactory {
 
     private final SlingRepository slingRepository;
+    private final BundleContext bundleContext;
 
-    public MockJcrResourceResolverFactory(final SlingRepository repository) {
+    public MockJcrResourceResolverFactory(final SlingRepository repository, BundleContext bundleContext) {
         this.slingRepository = repository;
+        this.bundleContext = bundleContext;
     }
 
     private ResourceResolver getResourceResolverInternal(Map<String, Object> authenticationInfo, boolean isAdmin) throws LoginException {
-        // setup mock OSGi environment
-        BundleContext bundleContext = MockOsgi.newBundleContext();
-
         Dictionary<String, Object> resourceProviderFactoryFactoryProps = new Hashtable<String, Object>();
         resourceProviderFactoryFactoryProps.put(Constants.SERVICE_VENDOR, "sling-mock");
         resourceProviderFactoryFactoryProps.put(Constants.SERVICE_DESCRIPTION, "sling-mock");
@@ -66,7 +65,9 @@ class MockJcrResourceResolverFactory implements ResourceResolverFactory {
         ComponentContext resourceProviderComponentContext = MockOsgi.newComponentContext(bundleContext, resourceProviderFactoryFactoryProps);
 
         // setup mocked JCR environment
-        bundleContext.registerService(SlingRepository.class.getName(), this.slingRepository, null);
+        if (bundleContext.getServiceReference(SlingRepository.class.getName()) == null) {
+            bundleContext.registerService(SlingRepository.class.getName(), this.slingRepository, null);
+        }
 
         // setup real sling JCR resource provider implementation for use in
         // mocked context
@@ -84,14 +85,10 @@ class MockJcrResourceResolverFactory implements ResourceResolverFactory {
 
         Dictionary<Object, Object> resourceProviderProps = new Hashtable<Object, Object>();
         resourceProviderProps.put(ResourceProvider.ROOTS, new String[] { "/" });
-        bundleContext.registerService(ResourceProvider.class.getName(), resourceProvider, resourceProviderProps);
-        ServiceReference resourceProviderServiceReference = bundleContext.getServiceReference(ResourceProvider.class.getName());
 
-        // setup real sling resource resolver implementation for use in mocked
-        // context
+        // setup real sling resource resolver implementation for use in mocked context
         MockResourceResolverFactoryActivator activator = new MockResourceResolverFactoryActivator();
-        activator.bindResourceProvider(resourceProvider,
-                getServiceReferenceProperties(resourceProviderServiceReference));
+        activator.bindResourceProvider(resourceProvider, toMap(resourceProviderProps));
         activator.activate(resourceProviderComponentContext);
         CommonResourceResolverFactoryImpl commonFactoryImpl = new CommonResourceResolverFactoryImpl(activator);
         ResourceResolverContext context = new ResourceResolverContext(true, authenticationInfo, new ResourceAccessSecurityTracker());
@@ -99,15 +96,16 @@ class MockJcrResourceResolverFactory implements ResourceResolverFactory {
         return resourceResolver;
     }
 
-    private Map<String, Object> getServiceReferenceProperties(final ServiceReference serviceReference) {
-        Map<String, Object> props = new HashMap<String, Object>();
-        String[] keys = serviceReference.getPropertyKeys();
-        for (String key : keys) {
-            props.put(key, serviceReference.getProperty(key));
+    private static Map<String, Object> toMap(Dictionary<Object, Object> dictionary) {
+        Map<String,Object> map = new HashMap<String, Object>();
+        Enumeration<Object> keys = dictionary.keys();
+        while (keys.hasMoreElements()) {
+            String key = keys.nextElement().toString();
+            map.put(key, dictionary.get(key));
         }
-        return props;
+        return map;
     }
-
+    
     @Override
     public ResourceResolver getResourceResolver(final Map<String, Object> authenticationInfo) throws LoginException {
         return getResourceResolverInternal(authenticationInfo, false);
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/MockSling.java b/src/main/java/org/apache/sling/testing/mock/sling/MockSling.java
index 5b7ca82..3f4a9de 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/MockSling.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/MockSling.java
@@ -58,6 +58,16 @@ public final class MockSling {
      * @return Resource resolver factory instance
      */
     public static ResourceResolverFactory newResourceResolverFactory(final ResourceResolverType type) {
+        return newResourceResolverFactory(type, MockOsgi.newBundleContext());
+    }
+    
+    /**
+     * Creates new sling resource resolver factory instance.
+     * @param type Type of underlying repository.
+     * @return Resource resolver factory instance
+     */
+    public static ResourceResolverFactory newResourceResolverFactory(final ResourceResolverType type,
+            final BundleContext bundleContext) {
         ResourceResolverTypeAdapter adapter = getResourceResolverTypeAdapter(type);
         ResourceResolverFactory factory = adapter.newResourceResolverFactory();
         if (factory == null) {
@@ -65,7 +75,7 @@ public final class MockSling {
             if (repository == null) {
                 throw new RuntimeException("Adapter neither provides resource resolver factory nor sling repository.");
             }
-            factory = new MockJcrResourceResolverFactory(repository);
+            factory = new MockJcrResourceResolverFactory(repository, bundleContext);
         }
         return factory;
     }
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/context/ContextResourceResolverFactory.java b/src/main/java/org/apache/sling/testing/mock/sling/context/ContextResourceResolverFactory.java
index 006a448..4d62ffe 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/context/ContextResourceResolverFactory.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/context/ContextResourceResolverFactory.java
@@ -27,6 +27,7 @@ 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;
+import org.osgi.framework.BundleContext;
 
 /**
  * Create resolve resolver instance and initialize it depending on it's type.
@@ -37,13 +38,14 @@ final class ContextResourceResolverFactory {
         // static methods only
     }
 
-    public static ResourceResolverFactory get(final ResourceResolverType resourceResolverType) {
+    public static ResourceResolverFactory get(final ResourceResolverType resourceResolverType,
+            final BundleContext bundleContext) {
         ResourceResolverType type = resourceResolverType;
         if (type == null) {
             type = MockSling.DEFAULT_RESOURCERESOLVER_TYPE;
         }
         try {
-            ResourceResolverFactory factory = MockSling.newResourceResolverFactory(type);
+            ResourceResolverFactory factory = MockSling.newResourceResolverFactory(type, bundleContext);
 
             switch (type) {
             case JCR_MOCK:
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java b/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java
index 39ff90b..a1e5463 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java
@@ -100,7 +100,7 @@ public class SlingContextImpl extends OsgiContextImpl {
      * @return Resource resolver factory
      */
     protected ResourceResolverFactory newResourceResolverFactory() {
-        return ContextResourceResolverFactory.get(this.resourceResolverType);
+        return ContextResourceResolverFactory.get(this.resourceResolverType, bundleContext());
     }
 
     /**
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/package-info.java b/src/main/java/org/apache/sling/testing/mock/sling/package-info.java
index 7b9feaa..8053938 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/package-info.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/package-info.java
@@ -19,5 +19,5 @@
 /**
  * Mock implementation of selected Sling APIs.
  */
-@aQute.bnd.annotation.Version("1.0")
+@aQute.bnd.annotation.Version("1.1")
 package org.apache.sling.testing.mock.sling;
diff --git a/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractMultipleResourceResolverTest.java b/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractMultipleResourceResolverTest.java
index aba23e9..cdd0aee 100644
--- a/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractMultipleResourceResolverTest.java
+++ b/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractMultipleResourceResolverTest.java
@@ -25,9 +25,11 @@ import static org.junit.Assert.assertNull;
 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.testing.mock.osgi.MockOsgi;
 import org.apache.sling.testing.mock.sling.MockSling;
 import org.apache.sling.testing.mock.sling.ResourceResolverType;
 import org.junit.Test;
+import org.osgi.framework.BundleContext;
 
 import com.google.common.collect.ImmutableMap;
 
@@ -36,10 +38,11 @@ import com.google.common.collect.ImmutableMap;
  */
 public abstract class AbstractMultipleResourceResolverTest {
 
+    private final BundleContext bundleContext = MockOsgi.newBundleContext();
     protected abstract ResourceResolverType getResourceResolverType();
 
     protected ResourceResolverFactory newResourceResolerFactory() {
-        return MockSling.newResourceResolverFactory(getResourceResolverType());
+        return MockSling.newResourceResolverFactory(getResourceResolverType(), bundleContext);
     }
     
     @Test

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.