You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ss...@apache.org on 2019/08/05 16:15:20 UTC
[sling-org-apache-sling-testing-osgi-mock] branch master updated:
SLING-8612 osgi-mock: Restarting service due to static dependency injection
may lead to wrong service interface registration
This is an automated email from the ASF dual-hosted git repository.
sseifert pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-testing-osgi-mock.git
The following commit(s) were added to refs/heads/master by this push:
new 30956f8 SLING-8612 osgi-mock: Restarting service due to static dependency injection may lead to wrong service interface registration
30956f8 is described below
commit 30956f807efce7417d917058f9ae4fa0152c63b0
Author: sseifert <ss...@pro-vision.de>
AuthorDate: Mon Aug 5 18:15:09 2019 +0200
SLING-8612 osgi-mock: Restarting service due to static dependency injection may lead to wrong service interface registration
---
.../sling/testing/mock/osgi/MockBundleContext.java | 4 +++-
.../MockBundleContextStaticGreedyReferencesTest.java | 9 +++++----
.../sling/testing/mock/osgi/OsgiServiceUtilTest.java | 18 ++++++++++++++++--
...che.sling.testing.mock.osgi.OsgiServiceUtilTest.xml | 4 ++--
4 files changed, 26 insertions(+), 9 deletions(-)
diff --git a/core/src/main/java/org/apache/sling/testing/mock/osgi/MockBundleContext.java b/core/src/main/java/org/apache/sling/testing/mock/osgi/MockBundleContext.java
index a42a3c8..010c707 100644
--- a/core/src/main/java/org/apache/sling/testing/mock/osgi/MockBundleContext.java
+++ b/core/src/main/java/org/apache/sling/testing/mock/osgi/MockBundleContext.java
@@ -214,7 +214,9 @@ class MockBundleContext implements BundleContext {
}
MockOsgi.injectServices(newService, this);
MockOsgi.activate(newService, this, properties);
- registerService(serviceClass.getName(), newService, MapUtil.toDictionary(properties));
+
+ String[] serviceInterfaces = (String[])registration.getClasses().toArray(new String[registration.getClasses().size()]);
+ registerService(serviceInterfaces, newService, MapUtil.toDictionary(properties));
}
/**
diff --git a/core/src/test/java/org/apache/sling/testing/mock/osgi/MockBundleContextStaticGreedyReferencesTest.java b/core/src/test/java/org/apache/sling/testing/mock/osgi/MockBundleContextStaticGreedyReferencesTest.java
index 69b8765..117bb27 100644
--- a/core/src/test/java/org/apache/sling/testing/mock/osgi/MockBundleContextStaticGreedyReferencesTest.java
+++ b/core/src/test/java/org/apache/sling/testing/mock/osgi/MockBundleContextStaticGreedyReferencesTest.java
@@ -23,6 +23,7 @@ import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest.Service3StaticGreedy;
+import org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest.Service3StaticGreedyImpl;
import org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest.ServiceInterface1;
import org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest.ServiceInterface1Optional;
import org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest.ServiceInterface2;
@@ -71,7 +72,7 @@ public class MockBundleContextStaticGreedyReferencesTest {
reg1a = bundleContext.registerService(ServiceInterface1.class.getName(), dependency1a, null);
reg2a = bundleContext.registerService(ServiceInterface2.class.getName(), dependency2a, null);
- Service3StaticGreedy service = new Service3StaticGreedy();
+ Service3StaticGreedy service = new Service3StaticGreedyImpl();
MockOsgi.injectServices(service, bundleContext);
MockOsgi.activate(service, bundleContext);
bundleContext.registerService(Service3StaticGreedy.class.getName(), service, null);
@@ -148,7 +149,7 @@ public class MockBundleContextStaticGreedyReferencesTest {
}
private void assertDependency1(ServiceInterface1 instance) {
- Service3StaticGreedy service =getService();
+ Service3StaticGreedy service = getService();
if (instance == null) {
assertNull(service.getReference1());
}
@@ -158,7 +159,7 @@ public class MockBundleContextStaticGreedyReferencesTest {
}
private void assertDependency1Optional(ServiceInterface1Optional instance) {
- Service3StaticGreedy service =getService();
+ Service3StaticGreedy service = getService();
if (instance == null) {
assertNull(service.getReference1Optional());
}
@@ -168,7 +169,7 @@ public class MockBundleContextStaticGreedyReferencesTest {
}
private void assertDependencies2(ServiceInterface2... instances) {
- Service3StaticGreedy service =getService();
+ Service3StaticGreedy service = getService();
assertEquals(ImmutableSet.<ServiceInterface2>copyOf(instances),
ImmutableSet.<ServiceInterface2>copyOf(service.getReferences2()));
}
diff --git a/core/src/test/java/org/apache/sling/testing/mock/osgi/OsgiServiceUtilTest.java b/core/src/test/java/org/apache/sling/testing/mock/osgi/OsgiServiceUtilTest.java
index f418cea..a962daa 100644
--- a/core/src/test/java/org/apache/sling/testing/mock/osgi/OsgiServiceUtilTest.java
+++ b/core/src/test/java/org/apache/sling/testing/mock/osgi/OsgiServiceUtilTest.java
@@ -402,9 +402,18 @@ public class OsgiServiceUtilTest {
}
- @Component(reference = { @Reference(name = "reference2", service = ServiceInterface2.class, cardinality = ReferenceCardinality.AT_LEAST_ONE,
+ public interface Service3StaticGreedy {
+ ServiceInterface1 getReference1();
+ ServiceInterface1Optional getReference1Optional();
+ List<ServiceInterface2> getReferences2();
+ List<ServiceSuperInterface3> getReferences3();
+ List<Map<String, Object>> getReference3Configs();
+ }
+
+ @Component(service= Service3StaticGreedy.class,
+ reference = { @Reference(name = "reference2", service = ServiceInterface2.class, cardinality = ReferenceCardinality.AT_LEAST_ONE,
bind="bindReference2", unbind="unbindReference2") })
- public static class Service3StaticGreedy {
+ public static class Service3StaticGreedyImpl implements Service3StaticGreedy {
@Reference(bind="bindReference1", unbind="unbindReference1")
private ServiceInterface1 reference1;
@@ -437,14 +446,17 @@ public class OsgiServiceUtilTest {
this.config = newConfig;
}
+ @Override
public ServiceInterface1 getReference1() {
return this.reference1;
}
+ @Override
public ServiceInterface1Optional getReference1Optional() {
return this.reference1Optional;
}
+ @Override
public List<ServiceInterface2> getReferences2() {
List<ServiceInterface2> services = new ArrayList<ServiceInterface2>();
for (ServiceReference<?> serviceReference : references2) {
@@ -453,10 +465,12 @@ public class OsgiServiceUtilTest {
return services;
}
+ @Override
public List<ServiceSuperInterface3> getReferences3() {
return this.references3;
}
+ @Override
public List<Map<String, Object>> getReference3Configs() {
return this.reference3Configs;
}
diff --git a/core/src/test/resources/OSGI-INF/org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest.xml b/core/src/test/resources/OSGI-INF/org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest.xml
index 7698b9e..b4a4266 100644
--- a/core/src/test/resources/OSGI-INF/org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest.xml
+++ b/core/src/test/resources/OSGI-INF/org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest.xml
@@ -54,8 +54,8 @@
<reference name="reference3DynamicFiltered" interface="org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest$ServiceInterface3" cardinality="0..1" policy="dynamic" field="reference3DynamicFiltered" field-collection-type="service"/>
</scr:component>
<scr:component name="org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest$Service3StaticGreedy" activate="activate" deactivate="deactivate" modified="modified">
- <implementation class="org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest$Service3StaticGreedy"/>
- <property name="service.pid" value="org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest$Service3StaticGreedy"/>
+ <implementation class="org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest$Service3StaticGreedyImpl"/>
+ <property name="service.pid" value="org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest$Service3StaticGreedyImpl"/>
<reference name="reference1" interface="org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest$ServiceInterface1" cardinality="1..1" policy="static" policy-option="greedy" bind="bindReference1" unbind="unbindReference1"/>
<reference name="reference1Optional" interface="org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest$ServiceInterface1Optional" cardinality="0..1" policy="dynamic" policy-option="greedy" bind="bindReference1Optional" unbind="unbindReference1Optional"/>
<reference name="reference2" interface="org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest$ServiceInterface2" cardinality="1..n" policy="static" policy-option="greedy" bind="bindReference2" unbind="unbindReference2"/>