You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by cs...@apache.org on 2018/01/31 10:46:04 UTC
[2/2] aries-rsa git commit: [ARIES-1763] Simplify RemoteServiceAdmin
tests
[ARIES-1763] Simplify RemoteServiceAdmin tests
Project: http://git-wip-us.apache.org/repos/asf/aries-rsa/repo
Commit: http://git-wip-us.apache.org/repos/asf/aries-rsa/commit/d6b354da
Tree: http://git-wip-us.apache.org/repos/asf/aries-rsa/tree/d6b354da
Diff: http://git-wip-us.apache.org/repos/asf/aries-rsa/diff/d6b354da
Branch: refs/heads/master
Commit: d6b354daffd46ae0d2b8f745ae90ff2631f69c06
Parents: 3f77941
Author: Christian Schneider <cs...@adobe.com>
Authored: Wed Jan 31 11:44:51 2018 +0100
Committer: Christian Schneider <cs...@adobe.com>
Committed: Wed Jan 31 11:44:51 2018 +0100
----------------------------------------------------------------------
parent/pom.xml | 5 +
.../rsa/core/DistributionProviderTracker.java | 7 +-
.../aries/rsa/core/ExportRegistrationImpl.java | 2 +
.../org/apache/aries/rsa/core/PackageUtil.java | 10 +-
.../aries/rsa/core/RemoteServiceAdminCore.java | 30 +-
.../aries/rsa/core/event/EventProducer.java | 2 +-
.../aries/rsa/core/OverlayPropertiesTest.java | 164 +++++
.../rsa/core/RemoteServiceAdminCoreTest.java | 627 ++++++-------------
8 files changed, 392 insertions(+), 455 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/d6b354da/parent/pom.xml
----------------------------------------------------------------------
diff --git a/parent/pom.xml b/parent/pom.xml
index 3d46cd3..43a4c07 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -75,6 +75,11 @@
<artifactId>easymockclassextension</artifactId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.hamcrest</groupId>
+ <artifactId>hamcrest-all</artifactId>
+ <version>1.3</version>
+ </dependency>
</dependencies>
<dependencyManagement>
http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/d6b354da/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 79b1b51..b208b40 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
@@ -24,6 +24,7 @@ import static org.osgi.service.remoteserviceadmin.RemoteConstants.REMOTE_INTENTS
import java.util.Dictionary;
import java.util.Hashtable;
+import org.apache.aries.rsa.core.event.EventProducer;
import org.apache.aries.rsa.spi.DistributionProvider;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
@@ -49,9 +50,13 @@ public class DistributionProviderTracker extends ServiceTracker<DistributionProv
LOG.debug("RemoteServiceAdmin Implementation is starting up");
DistributionProvider provider = context.getService(reference);
BundleContext apiContext = getAPIContext();
+ PackageUtil packageUtil = new PackageUtil(context);
+ EventProducer eventProducer = new EventProducer(context);
RemoteServiceAdminCore rsaCore = new RemoteServiceAdminCore(context,
apiContext,
- provider);
+ eventProducer,
+ provider,
+ packageUtil);
RemoteServiceadminFactory rsaf = new RemoteServiceadminFactory(rsaCore);
Dictionary<String, Object> props = new Hashtable<String, Object>();
props.put(REMOTE_INTENTS_SUPPORTED, getPropertyNullSafe(reference, REMOTE_INTENTS_SUPPORTED));
http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/d6b354da/rsa/src/main/java/org/apache/aries/rsa/core/ExportRegistrationImpl.java
----------------------------------------------------------------------
diff --git a/rsa/src/main/java/org/apache/aries/rsa/core/ExportRegistrationImpl.java b/rsa/src/main/java/org/apache/aries/rsa/core/ExportRegistrationImpl.java
index 7fac146..23496fa 100644
--- a/rsa/src/main/java/org/apache/aries/rsa/core/ExportRegistrationImpl.java
+++ b/rsa/src/main/java/org/apache/aries/rsa/core/ExportRegistrationImpl.java
@@ -98,9 +98,11 @@ public class ExportRegistrationImpl implements ExportRegistration {
}
public ExportReference getExportReference() {
+ /* TODO check if we need to throw exception here
if (exportReference == null) {
throw new IllegalStateException(getException());
}
+ */
return closed ? null : exportReference;
}
http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/d6b354da/rsa/src/main/java/org/apache/aries/rsa/core/PackageUtil.java
----------------------------------------------------------------------
diff --git a/rsa/src/main/java/org/apache/aries/rsa/core/PackageUtil.java b/rsa/src/main/java/org/apache/aries/rsa/core/PackageUtil.java
index fe58bdf..daf9c9d 100644
--- a/rsa/src/main/java/org/apache/aries/rsa/core/PackageUtil.java
+++ b/rsa/src/main/java/org/apache/aries/rsa/core/PackageUtil.java
@@ -27,13 +27,15 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@SuppressWarnings("deprecation")
-public final class PackageUtil {
+public class PackageUtil {
public static final Logger LOG = LoggerFactory.getLogger(PackageUtil.class);
+ private BundleContext bc;
- private PackageUtil() {
+ public PackageUtil(BundleContext bc) {
+ this.bc = bc;
}
-
+
/**
* Tries to retrieve the version of iClass via the PackageAdmin.
*
@@ -42,7 +44,7 @@ public final class PackageUtil {
* @return the version of the interface or "0.0.0" if no version information could be found or an error
* occurred during the retrieval
*/
- public static String getVersion(Class<?> iClass, BundleContext bc) {
+ public String getVersion(Class<?> iClass) {
ServiceReference<PackageAdmin> paRef = bc.getServiceReference(PackageAdmin.class);
if (paRef != null) {
PackageAdmin pa = bc.getService(paRef);
http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/d6b354da/rsa/src/main/java/org/apache/aries/rsa/core/RemoteServiceAdminCore.java
----------------------------------------------------------------------
diff --git a/rsa/src/main/java/org/apache/aries/rsa/core/RemoteServiceAdminCore.java b/rsa/src/main/java/org/apache/aries/rsa/core/RemoteServiceAdminCore.java
index 7b7b38d..2b2dedf 100644
--- a/rsa/src/main/java/org/apache/aries/rsa/core/RemoteServiceAdminCore.java
+++ b/rsa/src/main/java/org/apache/aries/rsa/core/RemoteServiceAdminCore.java
@@ -68,16 +68,26 @@ public class RemoteServiceAdminCore implements RemoteServiceAdmin {
private final BundleContext bctx;
private final EventProducer eventProducer;
- private final ServiceListener exportedServiceListener;
+ private ServiceListener exportedServiceListener;
private DistributionProvider provider;
private BundleContext apictx;
+ private PackageUtil packageUtil;
- public RemoteServiceAdminCore(BundleContext context, BundleContext apiContext, DistributionProvider provider) {
+ public RemoteServiceAdminCore(BundleContext context,
+ BundleContext apiContext,
+ EventProducer eventProducer,
+ DistributionProvider provider,
+ PackageUtil packageUtil) {
this.bctx = context;
this.apictx = apiContext;
- this.eventProducer = new EventProducer(bctx);
+ this.eventProducer = eventProducer;
this.provider = provider;
+ this.packageUtil = packageUtil;
// listen for exported services being unregistered so we can close the export
+ createExportedServicesListener();
+ }
+
+ protected void createExportedServicesListener() {
this.exportedServiceListener = new ServiceListener() {
public void serviceChanged(ServiceEvent event) {
if (event.getType() == ServiceEvent.UNREGISTERING) {
@@ -87,7 +97,7 @@ public class RemoteServiceAdminCore implements RemoteServiceAdmin {
};
try {
String filter = "(" + RemoteConstants.SERVICE_EXPORTED_INTERFACES + "=*)";
- context.addServiceListener(exportedServiceListener, filter);
+ bctx.addServiceListener(exportedServiceListener, filter);
} catch (InvalidSyntaxException ise) {
throw new RuntimeException(ise); // can never happen
}
@@ -329,7 +339,9 @@ public class RemoteServiceAdminCore implements RemoteServiceAdmin {
List<ExportReference> ers = new ArrayList<ExportReference>();
for (Collection<ExportRegistration> exportRegistrations : exportedServices.values()) {
for (ExportRegistration er : exportRegistrations) {
- ers.add(new ExportReferenceImpl(er.getExportReference()));
+ if (er.getExportReference() != null) {
+ ers.add(new ExportReferenceImpl(er.getExportReference()));
+ }
}
}
return Collections.unmodifiableCollection(ers);
@@ -548,7 +560,9 @@ public class RemoteServiceAdminCore implements RemoteServiceAdmin {
public void close() {
removeImportRegistrations();
- bctx.removeServiceListener(exportedServiceListener);
+ if (exportedServiceListener != null) {
+ bctx.removeServiceListener(exportedServiceListener);
+ }
}
static void overlayProperties(Map<String, Object> serviceProperties,
@@ -606,13 +620,11 @@ public class RemoteServiceAdminCore implements RemoteServiceAdmin {
props.put(RemoteConstants.ENDPOINT_FRAMEWORK_UUID, frameworkUUID);
for (Class<?> iface : ifaces) {
String pkg = iface.getPackage().getName();
- props.put(RemoteConstants.ENDPOINT_PACKAGE_VERSION_ + pkg, PackageUtil.getVersion(iface, bctx));
+ props.put(RemoteConstants.ENDPOINT_PACKAGE_VERSION_ + pkg, packageUtil.getVersion(iface));
}
return props;
}
-
-
private void copyEndpointProperties(Map<String, Object> sd, Map<String, Object> endpointProps) {
Set<Map.Entry<String, Object>> keys = sd.entrySet();
for (Map.Entry<String, Object> entry : keys) {
http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/d6b354da/rsa/src/main/java/org/apache/aries/rsa/core/event/EventProducer.java
----------------------------------------------------------------------
diff --git a/rsa/src/main/java/org/apache/aries/rsa/core/event/EventProducer.java b/rsa/src/main/java/org/apache/aries/rsa/core/event/EventProducer.java
index 2ff8c4e..ae6f8f6 100644
--- a/rsa/src/main/java/org/apache/aries/rsa/core/event/EventProducer.java
+++ b/rsa/src/main/java/org/apache/aries/rsa/core/event/EventProducer.java
@@ -94,7 +94,7 @@ public class EventProducer {
@SuppressWarnings({
"rawtypes", "unchecked"
})
- private void notifyListeners(RemoteServiceAdminEvent rsae) {
+ protected void notifyListeners(RemoteServiceAdminEvent rsae) {
try {
ServiceReference[] listenerRefs = bctx.getServiceReferences(
RemoteServiceAdminListener.class.getName(), null);
http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/d6b354da/rsa/src/test/java/org/apache/aries/rsa/core/OverlayPropertiesTest.java
----------------------------------------------------------------------
diff --git a/rsa/src/test/java/org/apache/aries/rsa/core/OverlayPropertiesTest.java b/rsa/src/test/java/org/apache/aries/rsa/core/OverlayPropertiesTest.java
new file mode 100644
index 0000000..9b784cc
--- /dev/null
+++ b/rsa/src/test/java/org/apache/aries/rsa/core/OverlayPropertiesTest.java
@@ -0,0 +1,164 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.aries.rsa.core;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.junit.Test;
+import org.osgi.framework.Constants;
+
+public class OverlayPropertiesTest {
+
+ @Test
+ public void testOverlayProperties() {
+ Map<String, Object> sProps = new HashMap<String, Object>();
+ Map<String, Object> aProps = new HashMap<String, Object>();
+
+ RemoteServiceAdminCore.overlayProperties(sProps, aProps);
+ assertEquals(0, sProps.size());
+
+ sProps.put("aaa", "aval");
+ sProps.put("bbb", "bval");
+ sProps.put(Constants.OBJECTCLASS, new String[] {"X"});
+ sProps.put(Constants.SERVICE_ID, 17L);
+
+ aProps.put("AAA", "achanged");
+ aProps.put("CCC", "CVAL");
+ aProps.put(Constants.OBJECTCLASS, new String[] {"Y"});
+ aProps.put(Constants.SERVICE_ID.toUpperCase(), 51L);
+
+ Map<String, Object> aPropsOrg = new HashMap<String, Object>(aProps);
+ RemoteServiceAdminCore.overlayProperties(sProps, aProps);
+ assertEquals("The additional properties should not be modified", aPropsOrg, aProps);
+
+ assertEquals(5, sProps.size());
+ assertEquals("achanged", sProps.get("aaa"));
+ assertEquals("bval", sProps.get("bbb"));
+ assertEquals("CVAL", sProps.get("CCC"));
+ assertTrue("Should not be possible to override the objectClass property",
+ Arrays.equals(new String[] {"X"}, (Object[]) sProps.get(Constants.OBJECTCLASS)));
+ assertEquals("Should not be possible to override the service.id property",
+ 17L, sProps.get(Constants.SERVICE_ID));
+ }
+
+ @Test
+ public void testOverlayProperties2() {
+ Map<String, Object> original = new HashMap<String, Object>();
+
+ original.put("MyProp", "my value");
+ original.put(Constants.OBJECTCLASS, "myClass");
+
+ Map<String, Object> copy = new HashMap<String, Object>();
+ copy.putAll(original);
+
+ // nothing should change here
+ Map<String, Object> overload = new HashMap<String, Object>();
+ RemoteServiceAdminCore.overlayProperties(copy, overload);
+
+ assertEquals(original.size(), copy.size());
+ for (Object key : original.keySet()) {
+ assertEquals(original.get(key), copy.get(key));
+ }
+
+ copy.clear();
+ copy.putAll(original);
+
+ // a property should be added
+ overload = new HashMap<String, Object>();
+ overload.put("new", "prop");
+
+ RemoteServiceAdminCore.overlayProperties(copy, overload);
+
+ assertEquals(original.size() + 1, copy.size());
+ for (Object key : original.keySet()) {
+ assertEquals(original.get(key), copy.get(key));
+ }
+ assertNotNull(overload.get("new"));
+ assertEquals("prop", overload.get("new"));
+
+ copy.clear();
+ copy.putAll(original);
+
+ // only one property should be added
+ overload = new HashMap<String, Object>();
+ overload.put("new", "prop");
+ overload.put("NEW", "prop");
+
+ RemoteServiceAdminCore.overlayProperties(copy, overload);
+
+ assertEquals(original.size() + 1, copy.size());
+ for (Object key : original.keySet()) {
+ assertEquals(original.get(key), copy.get(key));
+ }
+ assertNotNull(overload.get("new"));
+ assertEquals("prop", overload.get("new"));
+
+ copy.clear();
+ copy.putAll(original);
+
+ // nothing should change here
+ overload = new HashMap<String, Object>();
+ overload.put(Constants.OBJECTCLASS, "assd");
+ overload.put(Constants.SERVICE_ID, "asasdasd");
+ RemoteServiceAdminCore.overlayProperties(copy, overload);
+
+ assertEquals(original.size(), copy.size());
+ for (Object key : original.keySet()) {
+ assertEquals(original.get(key), copy.get(key));
+ }
+
+ copy.clear();
+ copy.putAll(original);
+
+ // overwrite own prop
+ overload = new HashMap<String, Object>();
+ overload.put("MyProp", "newValue");
+ RemoteServiceAdminCore.overlayProperties(copy, overload);
+
+ assertEquals(original.size(), copy.size());
+ for (Object key : original.keySet()) {
+ if (!"MyProp".equals(key)) {
+ assertEquals(original.get(key), copy.get(key));
+ }
+ }
+ assertEquals("newValue", copy.get("MyProp"));
+
+ copy.clear();
+ copy.putAll(original);
+
+ // overwrite own prop in different case
+ overload = new HashMap<String, Object>();
+ overload.put("MYPROP", "newValue");
+ RemoteServiceAdminCore.overlayProperties(copy, overload);
+
+ assertEquals(original.size(), copy.size());
+ for (Object key : original.keySet()) {
+ if (!"MyProp".equals(key)) {
+ assertEquals(original.get(key), copy.get(key));
+ }
+ }
+ assertEquals("newValue", copy.get("MyProp"));
+ }
+}
http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/d6b354da/rsa/src/test/java/org/apache/aries/rsa/core/RemoteServiceAdminCoreTest.java
----------------------------------------------------------------------
diff --git a/rsa/src/test/java/org/apache/aries/rsa/core/RemoteServiceAdminCoreTest.java b/rsa/src/test/java/org/apache/aries/rsa/core/RemoteServiceAdminCoreTest.java
index 4ef5102..09dffc2 100644
--- a/rsa/src/test/java/org/apache/aries/rsa/core/RemoteServiceAdminCoreTest.java
+++ b/rsa/src/test/java/org/apache/aries/rsa/core/RemoteServiceAdminCoreTest.java
@@ -18,10 +18,16 @@
*/
package org.apache.aries.rsa.core;
-import static org.easymock.EasyMock.*;
-import static org.junit.Assert.*;
+import static org.easymock.EasyMock.anyObject;
+import static org.easymock.EasyMock.expect;
+import static org.hamcrest.Matchers.contains;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
-import java.io.IOException;
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.Collection;
@@ -31,101 +37,104 @@ import java.util.Hashtable;
import java.util.List;
import java.util.Map;
+import org.apache.aries.rsa.core.event.EventProducer;
import org.apache.aries.rsa.spi.DistributionProvider;
import org.apache.aries.rsa.spi.Endpoint;
import org.easymock.EasyMock;
import org.easymock.IAnswer;
import org.easymock.IMocksControl;
import org.junit.Assert;
+import org.junit.Before;
import org.junit.Test;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.Constants;
-import org.osgi.framework.FrameworkUtil;
import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.framework.ServiceListener;
import org.osgi.framework.ServiceReference;
-import org.osgi.service.event.EventAdmin;
-import org.osgi.service.packageadmin.PackageAdmin;
+import org.osgi.framework.Version;
import org.osgi.service.remoteserviceadmin.EndpointDescription;
+import org.osgi.service.remoteserviceadmin.ExportReference;
import org.osgi.service.remoteserviceadmin.ExportRegistration;
import org.osgi.service.remoteserviceadmin.ImportRegistration;
import org.osgi.service.remoteserviceadmin.RemoteConstants;
@SuppressWarnings({
- "rawtypes", "unchecked", "deprecation"
+ "rawtypes", "unchecked"
})
public class RemoteServiceAdminCoreTest {
private static final String MYCONFIG = "myconfig";
+ private IMocksControl c;
+ private BundleContext rsaContext;
+ private RemoteServiceAdminCore rsaCore;
+ private BundleContext apiContext;
+ private DummyProvider provider;
+
+ @Before
+ public void setup() throws InvalidSyntaxException {
+ c = EasyMock.createControl();
+ rsaContext = c.createMock(BundleContext.class);
+ Bundle b = createDummyRsaBundle(rsaContext);
+ expect(rsaContext.getProperty(Constants.FRAMEWORK_VERSION)).andReturn("1111").anyTimes();
+ expect(rsaContext.getProperty(Constants.FRAMEWORK_UUID)).andReturn("some_uuid1").anyTimes();
+
+ expect(rsaContext.getBundle()).andReturn(b).anyTimes();
+ apiContext = c.createMock(BundleContext.class);
+ provider = new DummyProvider();
+ PackageUtil packageUtil = new PackageUtil(rsaContext) {
+ @Override
+ public String getVersion(Class<?> iClass) {
+ return "1.0.0";
+ }
+ };
+ EventProducer eventProducer = new EventProducer(rsaContext) {
+ protected void notifyListeners(org.osgi.service.remoteserviceadmin.RemoteServiceAdminEvent rsae) {
+ // skip
+ };
+ };
+ rsaCore = new RemoteServiceAdminCore(rsaContext, apiContext, eventProducer, provider, packageUtil) {
+ protected void createExportedServicesListener() {
+ // Skip
+ }
+ };
+ }
@Test
public void testDontExportOwnServiceProxies() throws InvalidSyntaxException {
- IMocksControl c = EasyMock.createControl();
- Bundle b = c.createMock(Bundle.class);
- BundleContext bc = c.createMock(BundleContext.class);
-
- EasyMock.expect(bc.getBundle()).andReturn(b).anyTimes();
- bc.addServiceListener(EasyMock.<ServiceListener>anyObject(), EasyMock.<String>anyObject());
- EasyMock.expectLastCall().anyTimes();
- bc.removeServiceListener(EasyMock.<ServiceListener>anyObject());
- EasyMock.expectLastCall().anyTimes();
-
- Dictionary<String, String> d = new Hashtable<String, String>();
- EasyMock.expect(b.getHeaders()).andReturn(d).anyTimes();
-
- ServiceReference sref = c.createMock(ServiceReference.class);
- EasyMock.expect(sref.getBundle()).andReturn(b).anyTimes();
- EasyMock.expect(sref.getPropertyKeys())
- .andReturn(new String[]{"objectClass", "service.exported.interfaces"}).anyTimes();
- EasyMock.expect(sref.getProperty("objectClass")).andReturn(new String[] {"a.b.C"}).anyTimes();
- EasyMock.expect(sref.getProperty(RemoteConstants.SERVICE_IMPORTED)).andReturn(true).anyTimes();
- EasyMock.expect(sref.getProperty("service.exported.interfaces")).andReturn("*").anyTimes();
-
- DistributionProvider provider = c.createMock(DistributionProvider.class);
+ Map<String, Object> sProps = new HashMap<>();
+ sProps.put("objectClass", new String[] {"a.b.C"});
+ sProps.put(RemoteConstants.SERVICE_IMPORTED, true);
+ sProps.put("service.exported.interfaces", "*");
+ ServiceReference sref = mockServiceReference(sProps);
c.replay();
- RemoteServiceAdminCore rsaCore = new RemoteServiceAdminCore(bc, bc, provider);
-
- // must return an empty List as sref if from the same bundle
List<ExportRegistration> exRefs = rsaCore.exportService(sref, null);
assertNotNull(exRefs);
assertEquals(0, exRefs.size());
-
- // must be empty
assertEquals(rsaCore.getExportedServices().size(), 0);
c.verify();
}
@Test
- public void testImport() {
- IMocksControl c = EasyMock.createNiceControl();
- Bundle b = c.createMock(Bundle.class);
- BundleContext bc = c.createMock(BundleContext.class);
-
- Dictionary<String, String> d = new Hashtable<String, String>();
- EasyMock.expect(b.getHeaders()).andReturn(d).anyTimes();
-
- EasyMock.expect(bc.getBundle()).andReturn(b).anyTimes();
- EasyMock.expect(b.getSymbolicName()).andReturn("BundleName").anyTimes();
-
+ public void testDoNotImportUnsupportedConfig() {
EndpointDescription endpoint = creatEndpointDesc("unsupportedConfiguration");
-
- DistributionProvider provider = c.createMock(DistributionProvider.class);
- EasyMock.expect(provider.getSupportedTypes())
- .andReturn(new String[]{MYCONFIG}).atLeastOnce();
+
c.replay();
- RemoteServiceAdminCore rsaCore = new RemoteServiceAdminCore(bc, bc, provider);
-
- // must be null as the endpoint doesn't contain any usable configurations
assertNull(rsaCore.importService(endpoint));
- // must be empty
assertEquals(0, rsaCore.getImportedEndpoints().size());
+
+ c.verify();
+ }
+ @Test
+ public void testImport() {
+ expect(apiContext.registerService(EasyMock.aryEq(new String[]{"es.schaaf.my.class"}), anyObject(), (Dictionary<String, ? >)anyObject())).andReturn(null);
+
+ c.replay();
EndpointDescription endpoint2 = creatEndpointDesc(MYCONFIG);
ImportRegistration ireg = rsaCore.importService(endpoint2);
@@ -156,29 +165,12 @@ public class RemoteServiceAdminCoreTest {
c.verify();
}
-
@Test
public void testImportWithMultipleInterfaces() {
- IMocksControl c = EasyMock.createNiceControl();
- Bundle b = c.createMock(Bundle.class);
- BundleContext bc = c.createMock(BundleContext.class);
-
- Dictionary<String, String> d = new Hashtable<String, String>();
- EasyMock.expect(b.getHeaders()).andReturn(d).anyTimes();
+ expect(apiContext.registerService(EasyMock.aryEq(new String[]{"es.schaaf.my.class","java.lang.Runnable"}), anyObject(), (Dictionary<String, ? >)anyObject())).andReturn(null);
- EasyMock.expect(bc.getBundle()).andReturn(b).anyTimes();
-
- EasyMock.expect(bc.registerService(EasyMock.aryEq(new String[]{"es.schaaf.my.class","java.lang.Runnable"}), anyObject(), (Dictionary<String, ? >)anyObject())).andReturn(null);
- EasyMock.expect(b.getSymbolicName()).andReturn("BundleName").anyTimes();
-
- DistributionProvider provider = c.createMock(DistributionProvider.class);
- EasyMock.expect(provider.getSupportedTypes())
- .andReturn(new String[]{MYCONFIG}).atLeastOnce();
c.replay();
- RemoteServiceAdminCore rsaCore = new RemoteServiceAdminCore(bc, bc, provider);
-
-
Map<String, Object> p = new HashMap<String, Object>();
p.put(RemoteConstants.ENDPOINT_ID, "http://google.de");
p.put(Constants.OBJECTCLASS, new String[] {
@@ -191,7 +183,6 @@ public class RemoteServiceAdminCoreTest {
ImportRegistration ireg = rsaCore.importService(endpoint);
assertNotNull(ireg);
-
assertEquals(1, rsaCore.getImportedEndpoints().size());
// lets import the same endpoint once more -> should get a copy of the ImportRegistration
@@ -210,32 +201,8 @@ public class RemoteServiceAdminCoreTest {
c.verify();
}
- private EndpointDescription creatEndpointDesc(String configType) {
- Map<String, Object> p = new HashMap<String, Object>();
- p.put(RemoteConstants.ENDPOINT_ID, "http://google.de");
- p.put(Constants.OBJECTCLASS, new String[] {
- "es.schaaf.my.class"
- });
- p.put(RemoteConstants.SERVICE_IMPORTED_CONFIGS, configType);
- EndpointDescription endpoint = new EndpointDescription(p);
- return endpoint;
- }
-
@Test
public void testExport() throws Exception {
- BundleContext bc = EasyMock.createMock(BundleContext.class);
- EasyMock.expect(bc.getProperty(Constants.FRAMEWORK_VERSION)).andReturn(null).anyTimes();
- bc.addServiceListener(EasyMock.<ServiceListener>anyObject(), EasyMock.<String>anyObject());
- EasyMock.expectLastCall().anyTimes();
- bc.removeServiceListener(EasyMock.<ServiceListener>anyObject());
- EasyMock.expectLastCall().anyTimes();
- EasyMock.expect(bc.getServiceReferences(EasyMock.<String>anyObject(),
- EasyMock.<String>anyObject())).andReturn(null).anyTimes();
- EasyMock.expect(bc.getAllServiceReferences(EasyMock.<String>anyObject(),
- EasyMock.<String>anyObject())).andReturn(null).anyTimes();
-
- Bundle b = createDummyRsaBundle(bc);
-
final Map<String, Object> sProps = new HashMap<String, Object>();
sProps.put("objectClass", new String[] {"java.lang.Runnable"});
sProps.put("service.id", 51L);
@@ -243,442 +210,222 @@ public class RemoteServiceAdminCoreTest {
sProps.put("service.exported.interfaces", "*");
ServiceReference sref = mockServiceReference(sProps);
- Runnable svcObject = EasyMock.createNiceMock(Runnable.class);
- EasyMock.replay(svcObject);
-
- EasyMock.expect(bc.getService(sref)).andReturn(svcObject).anyTimes();
- EasyMock.expect(bc.getBundle()).andReturn(b).anyTimes();
- EasyMock.expect(bc.createFilter("(service.id=51)"))
- .andReturn(FrameworkUtil.createFilter("(service.id=51)")).anyTimes();
- EasyMock.expect(bc.getProperty(org.osgi.framework.Constants.FRAMEWORK_UUID)).andReturn("1111");
- EasyMock.expect(bc.getServiceReference(PackageAdmin.class)).andReturn(null);
- EasyMock.expect(bc.getServiceReference(EventAdmin.class)).andReturn(null).atLeastOnce();
- EasyMock.replay(bc);
-
- Map<String, Object> eProps = new HashMap<String, Object>(sProps);
- eProps.put("endpoint.id", "http://something");
- eProps.put("service.imported.configs", new String[] {"org.apache.cxf.ws"});
- final EndpointDescription epd = new EndpointDescription(eProps);
- Endpoint er = new Endpoint() {
-
- @Override
- public void close() throws IOException {
- }
-
- @Override
- public EndpointDescription description() {
- return epd;
- }
- };
-
- DistributionProvider handler = EasyMock.createMock(DistributionProvider.class);
- EasyMock.expect(handler.exportService(anyObject(),
- anyObject(BundleContext.class),
- anyObject(Map.class), isA(Class[].class))).andReturn(er);
- EasyMock.replay(handler);
-
- RemoteServiceAdminCore rsaCore = new RemoteServiceAdminCore(bc, bc, handler);
+ provider.endpoint = createEndpoint(sProps);
+ c.replay();
// Export the service for the first time
- List<ExportRegistration> ereg = rsaCore.exportService(sref, null);
- assertEquals(1, ereg.size());
- assertNull(ereg.get(0).getException());
- assertSame(sref, ereg.get(0).getExportReference().getExportedService());
- EndpointDescription endpoint = ereg.get(0).getExportReference().getExportedEndpoint();
+ List<ExportRegistration> eregs = rsaCore.exportService(sref, null);
+ assertEquals(1, eregs.size());
+ ExportRegistration ereg = eregs.iterator().next();
+ assertNull(ereg.getException());
+ assertSame(sref, ereg.getExportReference().getExportedService());
+ EndpointDescription endpoint = ereg.getExportReference().getExportedEndpoint();
Map<String, Object> edProps = endpoint.getProperties();
assertEquals("http://something", edProps.get("endpoint.id"));
assertNotNull(edProps.get("service.imported"));
assertTrue(Arrays.equals(new String[] {"java.lang.Runnable"},
(Object[]) edProps.get("objectClass")));
- assertTrue(Arrays.equals(new String[] {"org.apache.cxf.ws"},
+ assertTrue(Arrays.equals(new String[] {MYCONFIG},
(Object[]) edProps.get("service.imported.configs")));
// Ask to export the same service again, this should not go through the whole process again but simply return
// a copy of the first instance.
- final Map<String, Object> sProps2 = new HashMap<String, Object>();
- sProps2.put("objectClass", new String[] {"java.lang.Runnable"});
- sProps2.put("service.id", 51L);
- sProps2.put("service.exported.interfaces", "*");
- ServiceReference sref2 = mockServiceReference(sProps2);
- Map<String, Object> props2 = new HashMap<String, Object>();
- props2.put("myProp", "myVal");
- List<ExportRegistration> ereg2 = rsaCore.exportService(sref2, props2);
-
- assertEquals(1, ereg2.size());
- assertNull(ereg2.get(0).getException());
- assertEquals(ereg.get(0).getExportReference().getExportedEndpoint().getProperties(),
- ereg2.get(0).getExportReference().getExportedEndpoint().getProperties());
+ ServiceReference sref2 = mockServiceReference(sProps);
+ List<ExportRegistration> eregs2 = rsaCore.exportService(sref2, null);
+ assertEquals(1, eregs2.size());
+ ExportRegistration ereg2 = eregs2.iterator().next();
+ assertNull(ereg2.getException());
+ assertEquals(ereg.getExportReference().getExportedEndpoint().getProperties(),
+ ereg2.getExportReference().getExportedEndpoint().getProperties());
// Look at the exportedServices data structure
- Field field = RemoteServiceAdminCore.class.getDeclaredField("exportedServices");
- field.setAccessible(true);
- Map<Map<String, Object>, Collection<ExportRegistration>> exportedServices =
- (Map<Map<String, Object>, Collection<ExportRegistration>>) field.get(rsaCore);
+ Map<Map<String, Object>, Collection<ExportRegistration>> exportedServices = getInternalExportedServices();
assertEquals("One service was exported", 1, exportedServices.size());
+ Collection<ExportRegistration> firstRegs = exportedServices.values().iterator().next();
assertEquals("There are 2 export registrations (identical copies)",
- 2, exportedServices.values().iterator().next().size());
+ 2, firstRegs.size());
// Unregister one of the exports
- rsaCore.removeExportRegistration((ExportRegistrationImpl) ereg.get(0));
+ rsaCore.removeExportRegistration((ExportRegistrationImpl) eregs.get(0));
assertEquals("One service was exported", 1, exportedServices.size());
- assertEquals("There 1 export registrations left",
- 1, exportedServices.values().iterator().next().size());
+ assertEquals("There 1 export registrations left", 1, firstRegs.size());
// Unregister the other export
- rsaCore.removeExportRegistration((ExportRegistrationImpl) ereg2.get(0));
+ rsaCore.removeExportRegistration((ExportRegistrationImpl) eregs2.get(0));
assertEquals("No more exported services", 0, exportedServices.size());
}
@Test
public void testExportWrongConfig() throws Exception {
- BundleContext bc = EasyMock.createMock(BundleContext.class);
- EasyMock.expect(bc.getProperty(Constants.FRAMEWORK_VERSION)).andReturn(null).anyTimes();
- bc.addServiceListener(EasyMock.<ServiceListener>anyObject(), EasyMock.<String>anyObject());
- EasyMock.expectLastCall().anyTimes();
- bc.removeServiceListener(EasyMock.<ServiceListener>anyObject());
- EasyMock.expectLastCall().anyTimes();
- EasyMock.expect(bc.getServiceReferences(EasyMock.<String>anyObject(),
- EasyMock.<String>anyObject())).andReturn(null).anyTimes();
- EasyMock.expect(bc.getAllServiceReferences(EasyMock.<String>anyObject(),
- EasyMock.<String>anyObject())).andReturn(null).anyTimes();
-
- Bundle b = createDummyRsaBundle(bc);
-
final Map<String, Object> sProps = new HashMap<String, Object>();
sProps.put("objectClass", new String[] {"java.lang.Runnable"});
sProps.put("service.id", 51L);
sProps.put("myProp", "myVal");
sProps.put("service.exported.interfaces", "*");
+ sProps.put(RemoteConstants.SERVICE_EXPORTED_CONFIGS, "org.apache.cxf.ws");
ServiceReference sref = mockServiceReference(sProps);
- Runnable svcObject = EasyMock.createNiceMock(Runnable.class);
- EasyMock.replay(svcObject);
-
- EasyMock.expect((Runnable)bc.getService(sref)).andReturn(svcObject).anyTimes();
- EasyMock.expect(bc.getBundle()).andReturn(b).anyTimes();
- EasyMock.expect(bc.createFilter("(service.id=51)"))
- .andReturn(FrameworkUtil.createFilter("(service.id=51)")).anyTimes();
- EasyMock.expect(bc.getProperty(org.osgi.framework.Constants.FRAMEWORK_UUID)).andReturn("1111");
- EasyMock.expect(bc.getServiceReference(PackageAdmin.class)).andReturn(null);
- EasyMock.replay(bc);
-
- Map<String, Object> eProps = new HashMap<String, Object>(sProps);
- eProps.put("endpoint.id", "http://something");
- eProps.put("service.imported.configs", new String[] {"org.apache.cxf.ws"});
-
- DistributionProvider handler = EasyMock.createStrictMock(DistributionProvider.class);
- EasyMock.expect(handler.getSupportedTypes()).andReturn(new String[]{"something"});
- //export service should never be called since the exported confgi does not match
- EasyMock.replay(handler);
+ c.replay();
+ List<ExportRegistration> ereg = rsaCore.exportService(sref, null);
- RemoteServiceAdminCore rsaCore = new RemoteServiceAdminCore(bc, bc, handler);
- Map<String, String> extraProperties = new HashMap<>();
- extraProperties.put(RemoteConstants.SERVICE_EXPORTED_CONFIGS, "org.apache.cxf.ws");
- // Export the service for the first time
- List<ExportRegistration> ereg = rsaCore.exportService(sref, extraProperties);
+ // Service should not be exported as the exported config does not match
assertEquals(0, ereg.size());
+ c.verify();
}
@Test
public void testExportOneConfigSupported() throws Exception {
- BundleContext bc = EasyMock.createMock(BundleContext.class);
- EasyMock.expect(bc.getProperty(Constants.FRAMEWORK_VERSION)).andReturn(null).anyTimes();
- bc.addServiceListener(EasyMock.<ServiceListener>anyObject(), EasyMock.<String>anyObject());
- EasyMock.expectLastCall().anyTimes();
- bc.removeServiceListener(EasyMock.<ServiceListener>anyObject());
- EasyMock.expectLastCall().anyTimes();
- EasyMock.expect(bc.getServiceReferences(EasyMock.<String>anyObject(),
- EasyMock.<String>anyObject())).andReturn(null).anyTimes();
- EasyMock.expect(bc.getAllServiceReferences(EasyMock.<String>anyObject(),
- EasyMock.<String>anyObject())).andReturn(null).anyTimes();
-
- Bundle b = createDummyRsaBundle(bc);
-
final Map<String, Object> sProps = new HashMap<String, Object>();
sProps.put("objectClass", new String[] {"java.lang.Runnable"});
sProps.put("service.id", 51L);
sProps.put("myProp", "myVal");
sProps.put("service.exported.interfaces", "*");
+ sProps.put(RemoteConstants.SERVICE_EXPORTED_CONFIGS, new String[]{MYCONFIG, "aconfig"});
ServiceReference sref = mockServiceReference(sProps);
+ provider.endpoint = createEndpoint(sProps);
+ c.replay();
- Runnable svcObject = EasyMock.createNiceMock(Runnable.class);
- EasyMock.replay(svcObject);
-
- EasyMock.expect((Runnable)bc.getService(sref)).andReturn(svcObject).anyTimes();
- EasyMock.expect(bc.getBundle()).andReturn(b).anyTimes();
- EasyMock.expect(bc.createFilter("(service.id=51)"))
- .andReturn(FrameworkUtil.createFilter("(service.id=51)")).anyTimes();
- EasyMock.expect(bc.getProperty(org.osgi.framework.Constants.FRAMEWORK_UUID)).andReturn("1111");
- EasyMock.expect(bc.getServiceReference(PackageAdmin.class)).andReturn(null);
- EasyMock.expect(bc.getServiceReference(EventAdmin.class)).andReturn(null).atLeastOnce();
- EasyMock.replay(bc);
-
- Map<String, Object> eProps = new HashMap<String, Object>(sProps);
- eProps.put("endpoint.id", "http://something");
- eProps.put("service.imported.configs", new String[] {"org.apache.cxf.ws","aconfig"});
- final EndpointDescription epd = new EndpointDescription(eProps);
- Endpoint er = new Endpoint() {
-
- @Override
- public void close() throws IOException {
- }
-
- @Override
- public EndpointDescription description() {
- return epd;
- }
- };
-
- DistributionProvider handler = EasyMock.createStrictMock(DistributionProvider.class);
- EasyMock.expect(handler.getSupportedTypes()).andReturn(new String[]{"something","aconfig"});
- EasyMock.expect(handler.exportService(anyObject(),
- anyObject(BundleContext.class),
- anyObject(Map.class), isA(Class[].class))).andReturn(er);
- //export service should never be called since the exported confgi does not match
- EasyMock.replay(handler);
-
- RemoteServiceAdminCore rsaCore = new RemoteServiceAdminCore(bc, bc, handler);
- Map<String, Object> extraProperties = new HashMap<>();
- extraProperties.put(RemoteConstants.SERVICE_EXPORTED_CONFIGS, new String[]{"org.apache.cxf.ws","aconfig"});
- // Export the service for the first time
- List<ExportRegistration> ereg = rsaCore.exportService(sref, extraProperties);
+ List<ExportRegistration> ereg = rsaCore.exportService(sref, null);
assertEquals(1, ereg.size());
- }
-
- private Bundle createDummyRsaBundle(BundleContext bc) {
- Bundle b = EasyMock.createNiceMock(Bundle.class);
- EasyMock.expect(b.getBundleContext()).andReturn(bc).anyTimes();
- EasyMock.expect(b.getSymbolicName()).andReturn("rsabundle").anyTimes();
- EasyMock.expect(b.getHeaders()).andReturn(new Hashtable<String, String>()).anyTimes();
- EasyMock.replay(b);
- return b;
+ ExportRegistration first = ereg.iterator().next();
+ EndpointDescription exportedEndpoint = first.getExportReference().getExportedEndpoint();
+ assertThat(exportedEndpoint.getConfigurationTypes(), contains(MYCONFIG));
}
@Test
public void testExportException() throws Exception {
- BundleContext bc = EasyMock.createNiceMock(BundleContext.class);
-
- Bundle b = createDummyRsaBundle(bc);
-
final Map<String, Object> sProps = new HashMap<String, Object>();
sProps.put("objectClass", new String[] {"java.lang.Runnable"});
sProps.put("service.id", 51L);
sProps.put("service.exported.interfaces", "*");
ServiceReference sref = mockServiceReference(sProps);
- Runnable svcObject = EasyMock.createNiceMock(Runnable.class);
- EasyMock.replay(svcObject);
-
- EasyMock.expect(bc.getService(sref)).andReturn(svcObject).anyTimes();
- EasyMock.expect(bc.getBundle()).andReturn(b).anyTimes();
- EasyMock.replay(bc);
-
- Map<String, Object> eProps = new HashMap<String, Object>(sProps);
- eProps.put("endpoint.id", "http://something");
- eProps.put("service.imported.configs", new String[] {"org.apache.cxf.ws"});
-
- DistributionProvider handler = EasyMock.createMock(DistributionProvider.class);
- EasyMock.expect(handler.exportService(anyObject(),
- anyObject(BundleContext.class),
- anyObject(Map.class), isA(Class[].class))).andThrow(new TestException());
- EasyMock.replay(handler);
-
- RemoteServiceAdminCore rsaCore = new RemoteServiceAdminCore(bc, bc, handler);
+ provider.ex = new TestException();
List<ExportRegistration> ereg = rsaCore.exportService(sref, sProps);
assertEquals(1, ereg.size());
assertTrue(ereg.get(0).getException() instanceof TestException);
- // Look at the exportedServices data structure
+ Collection<ExportReference> exportedServices = rsaCore.getExportedServices();
+ assertEquals("No service was exported", 0, exportedServices.size());
+ }
+
+ @Test
+ public void testCreateEndpointProps() {
+ c.replay();
+ Map<String, Object> sd = new HashMap<String, Object>();
+ sd.put(org.osgi.framework.Constants.SERVICE_ID, 42);
+ Map<String, Object> props = rsaCore.createEndpointProps(sd, new Class[]{String.class});
+
+ Assert.assertFalse(props.containsKey(org.osgi.framework.Constants.SERVICE_ID));
+ assertEquals(42, props.get(RemoteConstants.ENDPOINT_SERVICE_ID));
+ assertEquals("some_uuid1", props.get(RemoteConstants.ENDPOINT_FRAMEWORK_UUID));
+ assertEquals(Arrays.asList("java.lang.String"),
+ Arrays.asList((Object[]) props.get(org.osgi.framework.Constants.OBJECTCLASS)));
+ assertEquals("1.0.0", props.get("endpoint.package.version.java.lang"));
+ c.verify();
+ }
+
+ private Map<Map<String, Object>, Collection<ExportRegistration>> getInternalExportedServices()
+ throws NoSuchFieldException, IllegalAccessException {
Field field = RemoteServiceAdminCore.class.getDeclaredField("exportedServices");
field.setAccessible(true);
Map<Map<String, Object>, Collection<ExportRegistration>> exportedServices =
(Map<Map<String, Object>, Collection<ExportRegistration>>) field.get(rsaCore);
+ return exportedServices;
+ }
- assertEquals("One service was exported", 1, exportedServices.size());
- assertEquals("There is 1 export registration",
- 1, exportedServices.values().iterator().next().size());
+ private Endpoint createEndpoint(final Map<String, Object> sProps) {
+ Map<String, Object> eProps = new HashMap<String, Object>(sProps);
+ eProps.put("endpoint.id", "http://something");
+ eProps.put("service.imported.configs", new String[] {MYCONFIG});
+ final EndpointDescription epd = new EndpointDescription(eProps);
+ Endpoint er = c.createMock(Endpoint.class);
+ expect(er.description()).andReturn(epd);
+ return er;
+ }
+ private Bundle createDummyRsaBundle(BundleContext bc) {
+ Bundle b = c.createMock(Bundle.class);
+ expect(b.getBundleContext()).andReturn(bc).anyTimes();
+ expect(b.getSymbolicName()).andReturn("rsabundle").anyTimes();
+ expect(b.getBundleId()).andReturn(10l).anyTimes();
+ expect(b.getVersion()).andReturn(new Version("1.0.0")).anyTimes();
+ expect(b.getHeaders()).andReturn(new Hashtable<String, String>()).anyTimes();
+ return b;
}
- private ServiceReference mockServiceReference(final Map<String, Object> sProps) throws ClassNotFoundException {
+ private ServiceReference mockServiceReference(final Map<String, Object> sProps) {
BundleContext bc = EasyMock.createNiceMock(BundleContext.class);
-
- Bundle b = EasyMock.createNiceMock(Bundle.class);
- EasyMock.expect(b.getBundleContext()).andReturn(bc).anyTimes();
- EasyMock.expect((Class)b.loadClass(Runnable.class.getName())).andReturn(Runnable.class);
- EasyMock.replay(b);
-
- EasyMock.expect(bc.getBundle()).andReturn(b).anyTimes();
+
+ Bundle sb = EasyMock.createNiceMock(Bundle.class);
+ expect(sb.getBundleContext()).andReturn(bc).anyTimes();
+ try {
+ expect((Class)sb.loadClass(Runnable.class.getName())).andReturn(Runnable.class);
+ } catch (ClassNotFoundException e) {
+ throw new IllegalStateException(e.getMessage(), e);
+ }
+ EasyMock.replay(sb);
+
+ expect(bc.getBundle()).andReturn(sb).anyTimes();
EasyMock.replay(bc);
-
+
ServiceReference sref = EasyMock.createNiceMock(ServiceReference.class);
- EasyMock.expect(sref.getBundle()).andReturn(b).anyTimes();
- EasyMock.expect(sref.getPropertyKeys()).andReturn(sProps.keySet().toArray(new String[] {})).anyTimes();
- EasyMock.expect(sref.getProperty((String) EasyMock.anyObject())).andAnswer(new IAnswer<Object>() {
+ expect(sref.getBundle()).andReturn(sb).anyTimes();
+ expect(sref.getPropertyKeys()).andReturn(sProps.keySet().toArray(new String[] {})).anyTimes();
+ expect(sref.getProperty((String) EasyMock.anyObject())).andAnswer(new IAnswer<Object>() {
@Override
public Object answer() throws Throwable {
return sProps.get(EasyMock.getCurrentArguments()[0]);
}
}).anyTimes();
EasyMock.replay(sref);
+
+ Runnable svcObject = EasyMock.createNiceMock(Runnable.class);
+ EasyMock.replay(svcObject);
+
return sref;
}
+
+ private EndpointDescription creatEndpointDesc(String configType) {
+ Map<String, Object> p = new HashMap<String, Object>();
+ p.put(RemoteConstants.ENDPOINT_ID, "http://google.de");
+ p.put(Constants.OBJECTCLASS, new String[] {
+ "es.schaaf.my.class"
+ });
+ p.put(RemoteConstants.SERVICE_IMPORTED_CONFIGS, configType);
+ return new EndpointDescription(p);
+ }
@SuppressWarnings("serial")
private static class TestException extends RuntimeException {
}
-
- @Test
- public void testOverlayProperties() {
- Map<String, Object> sProps = new HashMap<String, Object>();
- Map<String, Object> aProps = new HashMap<String, Object>();
-
- RemoteServiceAdminCore.overlayProperties(sProps, aProps);
- assertEquals(0, sProps.size());
-
- sProps.put("aaa", "aval");
- sProps.put("bbb", "bval");
- sProps.put(Constants.OBJECTCLASS, new String[] {"X"});
- sProps.put(Constants.SERVICE_ID, 17L);
-
- aProps.put("AAA", "achanged");
- aProps.put("CCC", "CVAL");
- aProps.put(Constants.OBJECTCLASS, new String[] {"Y"});
- aProps.put(Constants.SERVICE_ID.toUpperCase(), 51L);
-
- Map<String, Object> aPropsOrg = new HashMap<String, Object>(aProps);
- RemoteServiceAdminCore.overlayProperties(sProps, aProps);
- assertEquals("The additional properties should not be modified", aPropsOrg, aProps);
-
- assertEquals(5, sProps.size());
- assertEquals("achanged", sProps.get("aaa"));
- assertEquals("bval", sProps.get("bbb"));
- assertEquals("CVAL", sProps.get("CCC"));
- assertTrue("Should not be possible to override the objectClass property",
- Arrays.equals(new String[] {"X"}, (Object[]) sProps.get(Constants.OBJECTCLASS)));
- assertEquals("Should not be possible to override the service.id property",
- 17L, sProps.get(Constants.SERVICE_ID));
- }
-
- @Test
- public void testOverlayProperties2() {
- Map<String, Object> original = new HashMap<String, Object>();
-
- original.put("MyProp", "my value");
- original.put(Constants.OBJECTCLASS, "myClass");
-
- Map<String, Object> copy = new HashMap<String, Object>();
- copy.putAll(original);
- // nothing should change here
- Map<String, Object> overload = new HashMap<String, Object>();
- RemoteServiceAdminCore.overlayProperties(copy, overload);
+ class DummyProvider implements DistributionProvider {
+
+ Endpoint endpoint;
+ RuntimeException ex;
- assertEquals(original.size(), copy.size());
- for (Object key : original.keySet()) {
- assertEquals(original.get(key), copy.get(key));
+ @Override
+ public String[] getSupportedTypes() {
+ return new String[]{MYCONFIG};
}
- copy.clear();
- copy.putAll(original);
-
- // a property should be added
- overload = new HashMap<String, Object>();
- overload.put("new", "prop");
-
- RemoteServiceAdminCore.overlayProperties(copy, overload);
-
- assertEquals(original.size() + 1, copy.size());
- for (Object key : original.keySet()) {
- assertEquals(original.get(key), copy.get(key));
- }
- assertNotNull(overload.get("new"));
- assertEquals("prop", overload.get("new"));
-
- copy.clear();
- copy.putAll(original);
-
- // only one property should be added
- overload = new HashMap<String, Object>();
- overload.put("new", "prop");
- overload.put("NEW", "prop");
-
- RemoteServiceAdminCore.overlayProperties(copy, overload);
-
- assertEquals(original.size() + 1, copy.size());
- for (Object key : original.keySet()) {
- assertEquals(original.get(key), copy.get(key));
- }
- assertNotNull(overload.get("new"));
- assertEquals("prop", overload.get("new"));
-
- copy.clear();
- copy.putAll(original);
-
- // nothing should change here
- overload = new HashMap<String, Object>();
- overload.put(Constants.OBJECTCLASS, "assd");
- overload.put(Constants.SERVICE_ID, "asasdasd");
- RemoteServiceAdminCore.overlayProperties(copy, overload);
-
- assertEquals(original.size(), copy.size());
- for (Object key : original.keySet()) {
- assertEquals(original.get(key), copy.get(key));
- }
-
- copy.clear();
- copy.putAll(original);
-
- // overwrite own prop
- overload = new HashMap<String, Object>();
- overload.put("MyProp", "newValue");
- RemoteServiceAdminCore.overlayProperties(copy, overload);
-
- assertEquals(original.size(), copy.size());
- for (Object key : original.keySet()) {
- if (!"MyProp".equals(key)) {
- assertEquals(original.get(key), copy.get(key));
+ @Override
+ public Endpoint exportService(Object serviceO, BundleContext serviceContext,
+ Map<String, Object> effectiveProperties, Class[] exportedInterfaces) {
+ if (ex != null) {
+ throw ex;
}
+ return endpoint;
}
- assertEquals("newValue", copy.get("MyProp"));
- copy.clear();
- copy.putAll(original);
-
- // overwrite own prop in different case
- overload = new HashMap<String, Object>();
- overload.put("MYPROP", "newValue");
- RemoteServiceAdminCore.overlayProperties(copy, overload);
-
- assertEquals(original.size(), copy.size());
- for (Object key : original.keySet()) {
- if (!"MyProp".equals(key)) {
- assertEquals(original.get(key), copy.get(key));
- }
+ @Override
+ public Object importEndpoint(ClassLoader cl, BundleContext consumerContext, Class[] interfaces,
+ EndpointDescription endpoint) {
+ return null;
}
- assertEquals("newValue", copy.get("MyProp"));
- }
-
- @Test
- public void testCreateEndpointProps() {
- BundleContext bc = EasyMock.createNiceMock(BundleContext.class);
- EasyMock.expect(bc.getProperty("org.osgi.framework.uuid")).andReturn("some_uuid1");
- EasyMock.replay(bc);
-
- Map<String, Object> sd = new HashMap<String, Object>();
- sd.put(org.osgi.framework.Constants.SERVICE_ID, 42);
- DistributionProvider provider = null;
- RemoteServiceAdminCore rsa = new RemoteServiceAdminCore(bc, bc, provider);
- Map<String, Object> props = rsa.createEndpointProps(sd, new Class[]{String.class});
-
- Assert.assertFalse(props.containsKey(org.osgi.framework.Constants.SERVICE_ID));
- assertEquals(42, props.get(RemoteConstants.ENDPOINT_SERVICE_ID));
- assertEquals("some_uuid1", props.get(RemoteConstants.ENDPOINT_FRAMEWORK_UUID));
- assertEquals(Arrays.asList("java.lang.String"),
- Arrays.asList((Object[]) props.get(org.osgi.framework.Constants.OBJECTCLASS)));
- assertEquals("0.0.0", props.get("endpoint.package.version.java.lang"));
}
}