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>.