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-2.2.4 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-testing-osgi-mock.git
commit 27e25ff2570ca38a2689db6f03aa598144a631af Author: Stefan Seifert <[email protected]> AuthorDate: Wed Mar 15 16:22:54 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/trunk/testing/mocks/osgi-mock@1787072 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 246ecc5..d690752 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; @@ -79,7 +78,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 110f1fb..a41be7c 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; @@ -245,6 +246,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!='']"; @@ -355,6 +365,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; @@ -364,6 +375,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); @@ -374,6 +386,7 @@ final class OsgiMetadataUtil { private OsgiMetadata() { this.clazz = null; + this.name = null; this.serviceInterfaces = null; this.properties = null; this.references = null; @@ -385,6 +398,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 6139710..7ea72d3 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()); @@ -109,7 +109,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 "[email protected]" <[email protected]>.
