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(); + } }
