diff options
author | slewis | 2011-01-10 03:36:03 +0000 |
---|---|---|
committer | slewis | 2011-01-10 03:36:03 +0000 |
commit | 2573731bf982d74dade98043cd778a8129fec2e9 (patch) | |
tree | fb0cdefe152bed9e130ae06be375f000106a9629 /incubation | |
parent | d968b1bba5ec4d158156d75c89be610fb578504e (diff) | |
download | org.eclipse.ecf-2573731bf982d74dade98043cd778a8129fec2e9.tar.gz org.eclipse.ecf-2573731bf982d74dade98043cd778a8129fec2e9.tar.xz org.eclipse.ecf-2573731bf982d74dade98043cd778a8129fec2e9.zip |
Fix for bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=333818 and
addition of test cases.
Diffstat (limited to 'incubation')
8 files changed, 263 insertions, 15 deletions
diff --git a/incubation/bundles/org.eclipse.ecf.tests.osgi.services.remoteserviceadmin/META-INF/MANIFEST.MF b/incubation/bundles/org.eclipse.ecf.tests.osgi.services.remoteserviceadmin/META-INF/MANIFEST.MF index 5ca436286..53aec2392 100644 --- a/incubation/bundles/org.eclipse.ecf.tests.osgi.services.remoteserviceadmin/META-INF/MANIFEST.MF +++ b/incubation/bundles/org.eclipse.ecf.tests.osgi.services.remoteserviceadmin/META-INF/MANIFEST.MF @@ -24,4 +24,4 @@ Import-Package: org.eclipse.ecf.core, Require-Bundle: org.eclipse.equinox.common;bundle-version="3.6.0", org.junit;bundle-version="4.8.1", org.eclipse.ecf.tests;bundle-version="2.1.0" -Export-Package: org.eclipse.ecf.tests.osgi.services.remoteserviceadmin +Export-Package: org.eclipse.ecf.tests.osgi.services.remoteserviceadmin;version="1.1.1" diff --git a/incubation/bundles/org.eclipse.ecf.tests.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/tests/osgi/services/remoteserviceadmin/AbstractDistributionTest.java b/incubation/bundles/org.eclipse.ecf.tests.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/tests/osgi/services/remoteserviceadmin/AbstractDistributionTest.java index 0b2be69ea..64d5247cc 100644 --- a/incubation/bundles/org.eclipse.ecf.tests.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/tests/osgi/services/remoteserviceadmin/AbstractDistributionTest.java +++ b/incubation/bundles/org.eclipse.ecf.tests.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/tests/osgi/services/remoteserviceadmin/AbstractDistributionTest.java @@ -9,6 +9,7 @@ ******************************************************************************/ package org.eclipse.ecf.tests.osgi.services.remoteserviceadmin; +import java.util.Arrays; import java.util.Dictionary; import java.util.Enumeration; import java.util.Properties; @@ -181,7 +182,7 @@ public abstract class AbstractDistributionTest extends .getProperty(org.osgi.framework.Constants.OBJECTCLASS); assertTrue(classes != null); // Check object class - assertTrue(classname.equals(classes[0])); + assertTrue(Arrays.asList(classes).contains(classname)); } protected void assertReferencesValidAndFirstHasCorrectType( diff --git a/incubation/bundles/org.eclipse.ecf.tests.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/tests/osgi/services/remoteserviceadmin/AbstractEndpointDescriptionWriterTest.java b/incubation/bundles/org.eclipse.ecf.tests.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/tests/osgi/services/remoteserviceadmin/AbstractEndpointDescriptionWriterTest.java new file mode 100644 index 000000000..c4effd789 --- /dev/null +++ b/incubation/bundles/org.eclipse.ecf.tests.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/tests/osgi/services/remoteserviceadmin/AbstractEndpointDescriptionWriterTest.java @@ -0,0 +1,92 @@ +package org.eclipse.ecf.tests.osgi.services.remoteserviceadmin;
+
+import java.io.IOException;
+import java.io.StringWriter;
+import java.util.Properties;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.ecf.osgi.services.remoteserviceadmin.EndpointDescription;
+import org.eclipse.ecf.osgi.services.remoteserviceadmin.EndpointDescriptionWriter;
+import org.eclipse.ecf.osgi.services.remoteserviceadmin.IEndpointDescriptionAdvertiser;
+import org.osgi.framework.ServiceRegistration;
+import org.osgi.service.remoteserviceadmin.RemoteConstants;
+
+public abstract class AbstractEndpointDescriptionWriterTest extends
+ AbstractDistributionTest {
+
+ protected static final int REGISTER_WAIT = 2000;
+ private ServiceRegistration registration;
+
+ private ServiceRegistration writerEndpointDescriptionAdvertiser;
+ private EndpointDescriptionWriter writer;
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ writer = new EndpointDescriptionWriter();
+ writerEndpointDescriptionAdvertiser = getContext().registerService(IEndpointDescriptionAdvertiser.class.getName(), createStandardOutputWriterServiceInfoFactory(), null);
+ }
+
+ private IEndpointDescriptionAdvertiser createStandardOutputWriterServiceInfoFactory() {
+ return new IEndpointDescriptionAdvertiser() {
+
+ @Override
+ public IStatus advertise(
+ org.osgi.service.remoteserviceadmin.EndpointDescription endpointDescription) {
+ // TODO Auto-generated method stub
+ try {
+ StringWriter sr = new StringWriter();
+ sr.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>").append("\n");
+ writer.writeEndpointDescriptions(sr, new EndpointDescription[] { (EndpointDescription) endpointDescription });
+ System.out.print(sr.toString());
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ return Status.OK_STATUS;
+ }
+
+ @Override
+ public IStatus unadvertise(
+ org.osgi.service.remoteserviceadmin.EndpointDescription endpointDescription) {
+ // TODO Auto-generated method stub
+ return Status.OK_STATUS;
+ }
+ };
+ }
+
+ protected void tearDown() throws Exception {
+ if (registration != null) {
+ registration.unregister();
+ registration = null;
+ }
+ if (writerEndpointDescriptionAdvertiser != null) {
+ writerEndpointDescriptionAdvertiser.unregister();
+ writerEndpointDescriptionAdvertiser = null;
+ }
+ super.tearDown();
+ }
+
+ public void testRegisterOnCreatedServer() throws Exception {
+ Properties props = getServiceProperties();
+ // Actually register with default service (IConcatService)
+ registration = registerDefaultService(props);
+ // Wait a while
+ Thread.sleep(REGISTER_WAIT);
+ }
+
+ protected abstract String getServerContainerTypeName();
+
+ private Properties getServiceProperties() {
+ Properties props = new Properties();
+ // Set config to the server container name/provider config name (e.g.
+ // ecf.generic.server)
+ props.put(RemoteConstants.SERVICE_EXPORTED_CONFIGS,
+ getServerContainerTypeName());
+ // Set the service exported interfaces to all
+ props.put(RemoteConstants.SERVICE_EXPORTED_INTERFACES, "*");
+ return props;
+ }
+
+}
diff --git a/incubation/bundles/org.eclipse.ecf.tests.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/tests/osgi/services/remoteserviceadmin/AbstractMetadataFactoryTest.java b/incubation/bundles/org.eclipse.ecf.tests.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/tests/osgi/services/remoteserviceadmin/AbstractMetadataFactoryTest.java index 51ec506a2..727ad91f4 100644 --- a/incubation/bundles/org.eclipse.ecf.tests.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/tests/osgi/services/remoteserviceadmin/AbstractMetadataFactoryTest.java +++ b/incubation/bundles/org.eclipse.ecf.tests.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/tests/osgi/services/remoteserviceadmin/AbstractMetadataFactoryTest.java @@ -94,7 +94,6 @@ public abstract class AbstractMetadataFactoryTest extends ECFAbstractTestCase { Map<String,Object> props = new HashMap<String,Object>();
// Add required OSGi properties
addRequiredOSGiProperties(props);
- ID containerID = createECFContainerID(props);
createECFRemoteServiceId(props);
// Add extra properties
addExtraProperties(props);
@@ -108,11 +107,6 @@ public abstract class AbstractMetadataFactoryTest extends ECFAbstractTestCase { // Add full OSGi properties
addOptionalOSGiProperties(props);
// required ECF properties
- ID containerID = createECFContainerID(props);
- createECFRemoteServiceId(props);
- ID targetID = createECFTargetID(props);
- ID[] idFilter = createECFIDFilterIDs(props);
- String rsFilter = createECFRSFilter(props);
// Add extra properties
addExtraProperties(props);
return new EndpointDescription(props);
@@ -127,7 +121,6 @@ public abstract class AbstractMetadataFactoryTest extends ECFAbstractTestCase { Map<String,Object> props = new HashMap<String,Object>();
// Add only ECF properties
// no OSGi properties
- ID containerID = createECFContainerID(props);
createECFRemoteServiceId(props);
// This should throw a runtime exception
return new EndpointDescription(props);
diff --git a/incubation/bundles/org.eclipse.ecf.tests.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/tests/osgi/services/remoteserviceadmin/AbstractRemoteServiceAccessTest.java b/incubation/bundles/org.eclipse.ecf.tests.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/tests/osgi/services/remoteserviceadmin/AbstractRemoteServiceAccessTest.java index 8038947eb..b4815dd81 100644 --- a/incubation/bundles/org.eclipse.ecf.tests.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/tests/osgi/services/remoteserviceadmin/AbstractRemoteServiceAccessTest.java +++ b/incubation/bundles/org.eclipse.ecf.tests.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/tests/osgi/services/remoteserviceadmin/AbstractRemoteServiceAccessTest.java @@ -18,9 +18,6 @@ import org.eclipse.ecf.remoteservice.IRemoteService; import org.eclipse.ecf.remoteservice.events.IRemoteCallCompleteEvent; import org.eclipse.ecf.remoteservice.events.IRemoteCallEvent; import org.eclipse.equinox.concurrent.future.IFuture; -import org.osgi.framework.AllServiceListener; -import org.osgi.framework.ServiceEvent; -import org.osgi.framework.ServiceListener; import org.osgi.framework.ServiceReference; import org.osgi.framework.ServiceRegistration; import org.osgi.service.remoteserviceadmin.RemoteConstants; diff --git a/incubation/bundles/org.eclipse.ecf.tests.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/tests/osgi/services/remoteserviceadmin/AbstractTwoRemoteServiceAccessTest.java b/incubation/bundles/org.eclipse.ecf.tests.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/tests/osgi/services/remoteserviceadmin/AbstractTwoRemoteServiceAccessTest.java new file mode 100644 index 000000000..54add6c4b --- /dev/null +++ b/incubation/bundles/org.eclipse.ecf.tests.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/tests/osgi/services/remoteserviceadmin/AbstractTwoRemoteServiceAccessTest.java @@ -0,0 +1,158 @@ +/******************************************************************************* + * Copyright (c) 2011 Composent and others. All rights reserved. This + * program and the accompanying materials are made available under the terms of + * the Eclipse Public License v1.0 which accompanies this distribution, and is + * available at http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Composent - initial API and implementation + ******************************************************************************/ +package org.eclipse.ecf.tests.osgi.services.remoteserviceadmin; + +import java.util.Properties; + +import org.eclipse.ecf.core.util.Trace; +import org.eclipse.ecf.remoteservice.IRemoteCall; +import org.osgi.framework.ServiceReference; +import org.osgi.framework.ServiceRegistration; +import org.osgi.service.remoteserviceadmin.RemoteConstants; +import org.osgi.util.tracker.ServiceTracker; + +public abstract class AbstractTwoRemoteServiceAccessTest extends + AbstractDistributionTest { + + protected static final int REGISTER_WAIT = Integer.parseInt(System.getProperty("waittime","15000")); + + private final String[] classes = new String[] { TestServiceInterface1.class.getName(), TestServiceInterface2.class.getName() }; + + private ServiceTracker st; + private ServiceRegistration registration; + + /* (non-Javadoc) + * @see org.eclipse.ecf.tests.osgi.services.distribution.AbstractDistributionTest#tearDown() + */ + protected void tearDown() throws Exception { + // Unregister on server + if (registration != null) { + registration.unregister(); + registration = null; + } + if (st != null) { + st.close(); + st = null; + } + Thread.sleep(REGISTER_WAIT); + + super.tearDown(); + } + + protected void createServiceTrackerAndRegister(String lookupClass, final Properties props) throws Exception { + // Setup service tracker for client + st = createProxyServiceTracker(lookupClass); + + // Actually register + registration = registerService(classes, + new TestService1(), props); + + // Wait + Thread.sleep(REGISTER_WAIT); + } + + protected void createServiceTrackerAndRegister(String lookupClass) throws Exception { + createServiceTrackerAndRegister(lookupClass, getServiceProperties()); + } + + protected Properties getServiceProperties() { + final Properties props = new Properties(); + props.put(RemoteConstants.SERVICE_EXPORTED_CONFIGS, getServerContainerName()); + props.put(RemoteConstants.SERVICE_EXPORTED_INTERFACES, "*"); + return props; + } + + protected IRemoteCall createRemoteCall() { + return new IRemoteCall() { + + public String getMethod() { + return "doStuff1"; + } + + public Object[] getParameters() { + return new Object[] {}; + } + + public long getTimeout() { + return 30000; + } + + }; + } + + + public void testGetRemoteService1Reference() throws Exception { + String lookupClass = TestServiceInterface1.class.getName(); + createServiceTrackerAndRegister(lookupClass); + + // Service Consumer - Get (remote) ervice references + final ServiceReference[] remoteReferences = st.getServiceReferences(); + assertReferencesValidAndFirstHasCorrectType(remoteReferences, lookupClass); + // Spec requires that the 'service.imported' property be set + assertTrue(remoteReferences[0].getProperty(RemoteConstants.SERVICE_IMPORTED) != null); + } + + public void testGetRemoteService2Reference() throws Exception { + String lookupClass = TestServiceInterface2.class.getName(); + createServiceTrackerAndRegister(lookupClass); + + // Service Consumer - Get (remote) ervice references + final ServiceReference[] remoteReferences = st.getServiceReferences(); + assertReferencesValidAndFirstHasCorrectType(remoteReferences, lookupClass); + // Spec requires that the 'service.imported' property be set + assertTrue(remoteReferences[0].getProperty(RemoteConstants.SERVICE_IMPORTED) != null); + } + + + public void testProxyWithService1() throws Exception { + String lookupClass = TestServiceInterface1.class.getName(); + createServiceTrackerAndRegister(lookupClass); + + // Client - Get service references from service tracker + final ServiceReference[] remoteReferences = st.getServiceReferences(); + assertReferencesValidAndFirstHasCorrectType(remoteReferences, lookupClass); + + // Get proxy/service + final TestServiceInterface1 proxy = (TestServiceInterface1) getContext() + .getService(remoteReferences[0]); + assertNotNull(proxy); + // Now use proxy + final String result = proxy.doStuff1(); + Trace.trace(Activator.PLUGIN_ID, "proxy.doStuff1 result=" + result); + assertTrue(TestServiceInterface1.TEST_SERVICE_STRING1.equals(result)); + } + + public void testProxyWithService2() throws Exception { + + String lookupClass = TestServiceInterface2.class.getName(); + + createServiceTrackerAndRegister(lookupClass); + + // Client - Get service references from service tracker + final ServiceReference[] remoteReferences = st.getServiceReferences(); + assertReferencesValidAndFirstHasCorrectType(remoteReferences, lookupClass); + + // Get proxy/service + final TestServiceInterface2 proxy = (TestServiceInterface2) getContext() + .getService(remoteReferences[0]); + assertNotNull(proxy); + // Now use proxy + String result = proxy.doStuff1(); + Trace.trace(Activator.PLUGIN_ID, "proxy.doStuff1 result=" + result); + assertTrue(TestServiceInterface1.TEST_SERVICE_STRING1.equals(result)); + + // Now use proxy + result = proxy.doStuff2(); + Trace.trace(Activator.PLUGIN_ID, "proxy.doStuff2 result=" + result); + assertTrue(TestServiceInterface2.TEST_SERVICE_STRING2.equals(result)); + + } + +} diff --git a/incubation/bundles/org.eclipse.ecf.tests.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/tests/osgi/services/remoteserviceadmin/TestService1.java b/incubation/bundles/org.eclipse.ecf.tests.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/tests/osgi/services/remoteserviceadmin/TestService1.java index d1bfb7770..40644d7d1 100644 --- a/incubation/bundles/org.eclipse.ecf.tests.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/tests/osgi/services/remoteserviceadmin/TestService1.java +++ b/incubation/bundles/org.eclipse.ecf.tests.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/tests/osgi/services/remoteserviceadmin/TestService1.java @@ -10,10 +10,14 @@ *****************************************************************************/ package org.eclipse.ecf.tests.osgi.services.remoteserviceadmin; -public final class TestService1 implements TestServiceInterface1 { +public final class TestService1 implements TestServiceInterface1, TestServiceInterface2 { public String doStuff1() { return TestServiceInterface1.TEST_SERVICE_STRING1; } + public String doStuff2() { + return TestServiceInterface2.TEST_SERVICE_STRING2; + } + } diff --git a/incubation/bundles/org.eclipse.ecf.tests.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/tests/osgi/services/remoteserviceadmin/TestServiceInterface2.java b/incubation/bundles/org.eclipse.ecf.tests.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/tests/osgi/services/remoteserviceadmin/TestServiceInterface2.java index e078e56c5..313d22410 100644 --- a/incubation/bundles/org.eclipse.ecf.tests.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/tests/osgi/services/remoteserviceadmin/TestServiceInterface2.java +++ b/incubation/bundles/org.eclipse.ecf.tests.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/tests/osgi/services/remoteserviceadmin/TestServiceInterface2.java @@ -10,8 +10,11 @@ *****************************************************************************/ package org.eclipse.ecf.tests.osgi.services.remoteserviceadmin; -public interface TestServiceInterface2 { +public interface TestServiceInterface2 extends TestServiceInterface1 { - void doStuff2(); + public static final String TEST_SERVICE_STRING2 = "TestService2"; + + + String doStuff2(); } |