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