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:21:56 UTC
[sling-org-apache-sling-testing-osgi-mock] 06/09: 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-2.2.4
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-testing-osgi-mock.git
commit 27e25ff2570ca38a2689db6f03aa598144a631af
Author: Stefan Seifert <ss...@apache.org>
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
"commits@sling.apache.org" <co...@sling.apache.org>.