Author: sseifert
Date: Wed Mar 15 16:22:54 2017
New Revision: 1787072
URL: http://svn.apache.org/viewvc?rev=1787072&view=rev
Log:
SLING-6650 osgi-mock: Fallback to component name when service.pid property not
set in SCR metadata
Modified:
sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/MapMergeUtil.java
sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/OsgiMetadataUtil.java
sling/trunk/testing/mocks/osgi-mock/src/test/java/org/apache/sling/testing/mock/osgi/OsgiMetadataUtilTest.java
sling/trunk/testing/mocks/osgi-mock/src/test/java/org/apache/sling/testing/mock/osgi/OsgiServiceUtilActivateDeactivateTest.java
sling/trunk/testing/mocks/osgi-mock/src/test/resources/OSGI-INF/serviceComponents.xml
Modified:
sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/MapMergeUtil.java
URL:
http://svn.apache.org/viewvc/sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/MapMergeUtil.java?rev=1787072&r1=1787071&r2=1787072&view=diff
==============================================================================
---
sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/MapMergeUtil.java
(original)
+++
sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/MapMergeUtil.java
Wed Mar 15 16:22:54 2017
@@ -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());
Modified:
sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/OsgiMetadataUtil.java
URL:
http://svn.apache.org/viewvc/sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/OsgiMetadataUtil.java?rev=1787072&r1=1787071&r2=1787072&view=diff
==============================================================================
---
sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/OsgiMetadataUtil.java
(original)
+++
sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/OsgiMetadataUtil.java
Wed Mar 15 16:22:54 2017
@@ -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;
Modified:
sling/trunk/testing/mocks/osgi-mock/src/test/java/org/apache/sling/testing/mock/osgi/OsgiMetadataUtilTest.java
URL:
http://svn.apache.org/viewvc/sling/trunk/testing/mocks/osgi-mock/src/test/java/org/apache/sling/testing/mock/osgi/OsgiMetadataUtilTest.java?rev=1787072&r1=1787071&r2=1787072&view=diff
==============================================================================
---
sling/trunk/testing/mocks/osgi-mock/src/test/java/org/apache/sling/testing/mock/osgi/OsgiMetadataUtilTest.java
(original)
+++
sling/trunk/testing/mocks/osgi-mock/src/test/java/org/apache/sling/testing/mock/osgi/OsgiMetadataUtilTest.java
Wed Mar 15 16:22:54 2017
@@ -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"));
}
Modified:
sling/trunk/testing/mocks/osgi-mock/src/test/java/org/apache/sling/testing/mock/osgi/OsgiServiceUtilActivateDeactivateTest.java
URL:
http://svn.apache.org/viewvc/sling/trunk/testing/mocks/osgi-mock/src/test/java/org/apache/sling/testing/mock/osgi/OsgiServiceUtilActivateDeactivateTest.java?rev=1787072&r1=1787071&r2=1787072&view=diff
==============================================================================
---
sling/trunk/testing/mocks/osgi-mock/src/test/java/org/apache/sling/testing/mock/osgi/OsgiServiceUtilActivateDeactivateTest.java
(original)
+++
sling/trunk/testing/mocks/osgi-mock/src/test/java/org/apache/sling/testing/mock/osgi/OsgiServiceUtilActivateDeactivateTest.java
Wed Mar 15 16:22:54 2017
@@ -72,7 +72,7 @@ public class OsgiServiceUtilActivateDeac
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 OsgiServiceUtilActivateDeac
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());
Modified:
sling/trunk/testing/mocks/osgi-mock/src/test/resources/OSGI-INF/serviceComponents.xml
URL:
http://svn.apache.org/viewvc/sling/trunk/testing/mocks/osgi-mock/src/test/resources/OSGI-INF/serviceComponents.xml?rev=1787072&r1=1787071&r2=1787072&view=diff
==============================================================================
---
sling/trunk/testing/mocks/osgi-mock/src/test/resources/OSGI-INF/serviceComponents.xml
(original)
+++
sling/trunk/testing/mocks/osgi-mock/src/test/resources/OSGI-INF/serviceComponents.xml
Wed Mar 15 16:22:54 2017
@@ -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