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:20:40 UTC
[sling-org-apache-sling-testing-osgi-mock] 04/06: SLING-6650
osgi-mock: Fallback to component name when service.pid property not set in
SCR metadata
This is an automated email from the ASF dual-hosted git repository.
rombert pushed a commit to annotated tag org.apache.sling.testing.osgi-mock-1.9.4
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-testing-osgi-mock.git
commit 6f57fc2264c5f84f115b28438502f116403140e8
Author: Stefan Seifert <ss...@apache.org>
AuthorDate: Wed Mar 15 16:23:17 2017 +0000
SLING-6650 osgi-mock: Fallback to component name when service.pid property not set in SCR metadata
git-svn-id: https://svn.apache.org/repos/asf/sling/branches/testing/mocks/osgi-mock-1.x@1787073 13f79535-47bb-0310-9956-ffa450edef68
---
.../sling/testing/mock/osgi/MapMergeUtil.java | 3 +--
.../sling/testing/mock/osgi/OsgiMetadataUtil.java | 25 ++++++++++++++++++++++
.../testing/mock/osgi/OsgiMetadataUtilTest.java | 5 +++--
.../OsgiServiceUtilActivateDeactivateTest.java | 4 ++--
src/test/resources/OSGI-INF/serviceComponents.xml | 1 -
5 files changed, 31 insertions(+), 7 deletions(-)
diff --git a/src/main/java/org/apache/sling/testing/mock/osgi/MapMergeUtil.java b/src/main/java/org/apache/sling/testing/mock/osgi/MapMergeUtil.java
index c6dccb7..4ac0341 100644
--- a/src/main/java/org/apache/sling/testing/mock/osgi/MapMergeUtil.java
+++ b/src/main/java/org/apache/sling/testing/mock/osgi/MapMergeUtil.java
@@ -27,7 +27,6 @@ import java.util.HashMap;
import java.util.Map;
import org.apache.sling.testing.mock.osgi.OsgiMetadataUtil.OsgiMetadata;
-import org.osgi.framework.Constants;
import org.osgi.service.cm.Configuration;
import org.osgi.service.cm.ConfigurationAdmin;
@@ -70,7 +69,7 @@ final class MapMergeUtil {
// merge with configuration from config admin
if (configAdmin != null) {
- Object pid = metadataProperties.get(Constants.SERVICE_PID);
+ Object pid = metadata.getPID();
if (pid != null) {
try {
Configuration config = configAdmin.getConfiguration(pid.toString());
diff --git a/src/main/java/org/apache/sling/testing/mock/osgi/OsgiMetadataUtil.java b/src/main/java/org/apache/sling/testing/mock/osgi/OsgiMetadataUtil.java
index c209bab..49ad738 100644
--- a/src/main/java/org/apache/sling/testing/mock/osgi/OsgiMetadataUtil.java
+++ b/src/main/java/org/apache/sling/testing/mock/osgi/OsgiMetadataUtil.java
@@ -42,6 +42,7 @@ import javax.xml.xpath.XPathFactory;
import org.apache.commons.lang3.StringUtils;
import org.apache.felix.framework.FilterImpl;
+import org.osgi.framework.Constants;
import org.osgi.framework.Filter;
import org.osgi.framework.InvalidSyntaxException;
import org.osgi.framework.ServiceReference;
@@ -257,6 +258,15 @@ final class OsgiMetadataUtil {
return StringUtils.substringBefore(className, "$$Enhancer");
}
+ private static String getComponentName(Class clazz, Document metadata) {
+ String query = getComponentXPathQuery(clazz);
+ NodeList nodes = queryNodes(metadata, query);
+ if (nodes != null && nodes.getLength() > 0) {
+ return getAttributeValue(nodes.item(0), "name");
+ }
+ return null;
+ }
+
private static Set<String> getServiceInterfaces(Class clazz, Document metadata) {
Set<String> serviceInterfaces = new HashSet<String>();
String query = getComponentXPathQuery(clazz) + "/service/provide[@interface!='']";
@@ -367,6 +377,7 @@ final class OsgiMetadataUtil {
static class OsgiMetadata {
private final Class<?> clazz;
+ private final String name;
private final Set<String> serviceInterfaces;
private final Map<String, Object> properties;
private final List<Reference> references;
@@ -376,6 +387,7 @@ final class OsgiMetadataUtil {
private OsgiMetadata(Class<?> clazz, Document metadataDocument) {
this.clazz = clazz;
+ this.name = OsgiMetadataUtil.getComponentName(clazz, metadataDocument);
this.serviceInterfaces = OsgiMetadataUtil.getServiceInterfaces(clazz, metadataDocument);
this.properties = OsgiMetadataUtil.getProperties(clazz, metadataDocument);
this.references = OsgiMetadataUtil.getReferences(clazz, metadataDocument);
@@ -386,6 +398,7 @@ final class OsgiMetadataUtil {
private OsgiMetadata() {
this.clazz = null;
+ this.name = null;
this.serviceInterfaces = null;
this.properties = null;
this.references = null;
@@ -397,6 +410,18 @@ final class OsgiMetadataUtil {
public Class<?> getServiceClass() {
return clazz;
}
+
+ public String getName() {
+ return name;
+ }
+
+ public String getPID() {
+ String pid = null;
+ if (properties != null) {
+ pid = (String)properties.get(Constants.SERVICE_PID);
+ }
+ return StringUtils.defaultString(pid, name);
+ }
public Set<String> getServiceInterfaces() {
return serviceInterfaces;
diff --git a/src/test/java/org/apache/sling/testing/mock/osgi/OsgiMetadataUtilTest.java b/src/test/java/org/apache/sling/testing/mock/osgi/OsgiMetadataUtilTest.java
index eaf31fd..896d68f 100644
--- a/src/test/java/org/apache/sling/testing/mock/osgi/OsgiMetadataUtilTest.java
+++ b/src/test/java/org/apache/sling/testing/mock/osgi/OsgiMetadataUtilTest.java
@@ -39,6 +39,8 @@ public class OsgiMetadataUtilTest {
public void testMetadata() {
OsgiMetadata metadata = OsgiMetadataUtil.getMetadata(ServiceWithMetadata.class);
+ assertEquals("org.apache.sling.testing.mock.osgi.OsgiMetadataUtilTest$ServiceWithMetadata", metadata.getPID());
+
Set<String> serviceInterfaces = metadata.getServiceInterfaces();
assertEquals(3, serviceInterfaces.size());
assertTrue(serviceInterfaces.contains("org.apache.sling.models.spi.Injector"));
@@ -47,10 +49,9 @@ public class OsgiMetadataUtilTest {
assertTrue(serviceInterfaces.contains("java.lang.Comparable"));
Map<String, Object> props = metadata.getProperties();
- assertEquals(4, props.size());
+ assertEquals(3, props.size());
assertEquals(5000, props.get("service.ranking"));
assertEquals("The Apache Software Foundation", props.get(Constants.SERVICE_VENDOR));
- assertEquals("org.apache.sling.testing.mock.osgi.OsgiMetadataUtilTest$ServiceWithMetadata", props.get(Constants.SERVICE_PID));
assertArrayEquals(new String[] { "org.apache.sling.api.resource.Resource", "org.apache.sling.api.resource.ResourceResolver" },
(String[])props.get("adaptables"));
}
diff --git a/src/test/java/org/apache/sling/testing/mock/osgi/OsgiServiceUtilActivateDeactivateTest.java b/src/test/java/org/apache/sling/testing/mock/osgi/OsgiServiceUtilActivateDeactivateTest.java
index efd898d..8c91aac 100644
--- a/src/test/java/org/apache/sling/testing/mock/osgi/OsgiServiceUtilActivateDeactivateTest.java
+++ b/src/test/java/org/apache/sling/testing/mock/osgi/OsgiServiceUtilActivateDeactivateTest.java
@@ -72,7 +72,7 @@ public class OsgiServiceUtilActivateDeactivateTest {
assertTrue(MockOsgi.activate(service, bundleContext, map));
assertTrue(service.isActivated());
- assertEquals(map, ImmutableMap.copyOf(service.getMap()));
+ assertEquals("value1", service.getMap().get("prop1"));
assertTrue(MockOsgi.deactivate(service, bundleContext, map));
assertFalse(service.isActivated());
@@ -108,7 +108,7 @@ public class OsgiServiceUtilActivateDeactivateTest {
assertTrue(service.isActivated());
assertSame(bundleContext, service.getComponentContext().getBundleContext());
assertSame(bundleContext, service.getBundleContext());
- assertEquals(map, ImmutableMap.copyOf(service.getMap()));
+ assertEquals("value1", service.getMap().get("prop1"));
assertTrue(MockOsgi.deactivate(service, bundleContext, map));
assertFalse(service.isActivated());
diff --git a/src/test/resources/OSGI-INF/serviceComponents.xml b/src/test/resources/OSGI-INF/serviceComponents.xml
index 882de1c..f173b6b 100644
--- a/src/test/resources/OSGI-INF/serviceComponents.xml
+++ b/src/test/resources/OSGI-INF/serviceComponents.xml
@@ -28,7 +28,6 @@
</service>
<property name="service.ranking" type="Integer" value="5000"/>
<property name="service.vendor" value="The Apache Software Foundation"/>
- <property name="service.pid" value="org.apache.sling.testing.mock.osgi.OsgiMetadataUtilTest$ServiceWithMetadata"/>
<property name="adaptables">
org.apache.sling.api.resource.Resource
org.apache.sling.api.resource.ResourceResolver
--
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.