Repository: aries-rsa
Updated Branches:
  refs/heads/master da63f3671 -> fb2165ae4


ARIES-1519 - NPE when DistributionProvider has no
remote.intents.supported

adds a null check and defaults to an empty string if either
remote.intents.supported or remote.configs.supported is not set by a
distribution provider

Project: http://git-wip-us.apache.org/repos/asf/aries-rsa/repo
Commit: http://git-wip-us.apache.org/repos/asf/aries-rsa/commit/c848ffb4
Tree: http://git-wip-us.apache.org/repos/asf/aries-rsa/tree/c848ffb4
Diff: http://git-wip-us.apache.org/repos/asf/aries-rsa/diff/c848ffb4

Branch: refs/heads/master
Commit: c848ffb4270729043d5f32c1af44291dcd97d4c6
Parents: da63f36
Author: Johannes Utzig <[email protected]>
Authored: Wed Apr 6 15:26:32 2016 +0200
Committer: Christian Schneider <[email protected]>
Committed: Wed Apr 6 17:54:59 2016 +0200

----------------------------------------------------------------------
 .../rsa/core/DistributionProviderTracker.java   | 10 ++++--
 .../core/DistributionProviderTrackerTest.java   | 33 ++++++++++++++++++++
 2 files changed, 41 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/c848ffb4/rsa/src/main/java/org/apache/aries/rsa/core/DistributionProviderTracker.java
----------------------------------------------------------------------
diff --git 
a/rsa/src/main/java/org/apache/aries/rsa/core/DistributionProviderTracker.java 
b/rsa/src/main/java/org/apache/aries/rsa/core/DistributionProviderTracker.java
index d33f402..ea45c65 100644
--- 
a/rsa/src/main/java/org/apache/aries/rsa/core/DistributionProviderTracker.java
+++ 
b/rsa/src/main/java/org/apache/aries/rsa/core/DistributionProviderTracker.java
@@ -28,6 +28,7 @@ import org.osgi.framework.BundleException;
 import org.osgi.framework.FrameworkUtil;
 import org.osgi.framework.ServiceReference;
 import org.osgi.framework.ServiceRegistration;
+import org.osgi.service.remoteserviceadmin.RemoteConstants;
 import org.osgi.service.remoteserviceadmin.RemoteServiceAdmin;
 import org.osgi.util.tracker.ServiceTracker;
 import org.slf4j.Logger;
@@ -51,8 +52,13 @@ public class DistributionProviderTracker extends 
ServiceTracker<DistributionProv
                                                                     provider);
         RemoteServiceadminFactory rsaf = new 
RemoteServiceadminFactory(rsaCore);
         Dictionary<String, Object> props = new Hashtable<String, Object>();
-        props.put("remote.intents.supported", 
reference.getProperty("remote.intents.supported"));
-        props.put("remote.configs.supported", 
reference.getProperty("remote.configs.supported"));
+        Object value = 
reference.getProperty(RemoteConstants.REMOTE_INTENTS_SUPPORTED);
+        value = value == null ? "" : value;
+        props.put(RemoteConstants.REMOTE_INTENTS_SUPPORTED, value);
+
+        value = 
reference.getProperty(RemoteConstants.REMOTE_CONFIGS_SUPPORTED);
+        value = value == null ? "" : value;
+        props.put(RemoteConstants.REMOTE_CONFIGS_SUPPORTED, value);
         LOG.info("Registering RemoteServiceAdmin for provider " + 
provider.getClass().getName());
         return context.registerService(RemoteServiceAdmin.class.getName(), 
rsaf, props);
     }

http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/c848ffb4/rsa/src/test/java/org/apache/aries/rsa/core/DistributionProviderTrackerTest.java
----------------------------------------------------------------------
diff --git 
a/rsa/src/test/java/org/apache/aries/rsa/core/DistributionProviderTrackerTest.java
 
b/rsa/src/test/java/org/apache/aries/rsa/core/DistributionProviderTrackerTest.java
index fd81337..9a4de6b 100644
--- 
a/rsa/src/test/java/org/apache/aries/rsa/core/DistributionProviderTrackerTest.java
+++ 
b/rsa/src/test/java/org/apache/aries/rsa/core/DistributionProviderTrackerTest.java
@@ -79,4 +79,37 @@ public class DistributionProviderTrackerTest {
         tracker.removedService(providerRef, rsaReg);
         c.verify();
     }
+
+    @Test
+    public void testAddingWithNullValues() throws InvalidSyntaxException {
+        IMocksControl c = EasyMock.createControl();
+        DistributionProvider provider = 
c.createMock(DistributionProvider.class);
+
+        ServiceReference<DistributionProvider> providerRef = 
c.createMock(ServiceReference.class);
+        
EasyMock.expect(providerRef.getProperty(RemoteConstants.REMOTE_INTENTS_SUPPORTED)).andReturn(null);
+        
EasyMock.expect(providerRef.getProperty(RemoteConstants.REMOTE_CONFIGS_SUPPORTED)).andReturn(null);
+
+        BundleContext context = c.createMock(BundleContext.class);
+        String filterSt = String.format("(objectClass=%s)", 
DistributionProvider.class.getName());
+        Filter filter = FrameworkUtil.createFilter(filterSt);
+        EasyMock.expect(context.createFilter(filterSt)).andReturn(filter);
+        EasyMock.expect(context.getService(providerRef)).andReturn(provider);
+        ServiceRegistration rsaReg = c.createMock(ServiceRegistration.class);
+        EasyMock.expect(context.registerService(EasyMock.isA(String.class), 
EasyMock.isA(ServiceFactory.class),
+                                                
EasyMock.isA(Dictionary.class)))
+            .andReturn(rsaReg).atLeastOnce();
+
+        context.addServiceListener(EasyMock.isA(ServiceListener.class), 
EasyMock.isA(String.class));
+        EasyMock.expectLastCall();
+
+        final BundleContext apiContext = c.createMock(BundleContext.class);
+        c.replay();
+        DistributionProviderTracker tracker = new 
DistributionProviderTracker(context) {
+            protected BundleContext getAPIContext() {
+                return apiContext;
+            };
+        };
+        tracker.addingService(providerRef);
+        c.verify();
+    }
 }

Reply via email to