Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'tests/bundles/org.eclipse.ecf.tests.provider.xmpp/src/org/eclipse/ecf/tests/provider/xmpp/remoteservice/RemoteServiceRetrievalTest.java')
-rw-r--r--tests/bundles/org.eclipse.ecf.tests.provider.xmpp/src/org/eclipse/ecf/tests/provider/xmpp/remoteservice/RemoteServiceRetrievalTest.java243
1 files changed, 243 insertions, 0 deletions
diff --git a/tests/bundles/org.eclipse.ecf.tests.provider.xmpp/src/org/eclipse/ecf/tests/provider/xmpp/remoteservice/RemoteServiceRetrievalTest.java b/tests/bundles/org.eclipse.ecf.tests.provider.xmpp/src/org/eclipse/ecf/tests/provider/xmpp/remoteservice/RemoteServiceRetrievalTest.java
new file mode 100644
index 000000000..bae66ce4e
--- /dev/null
+++ b/tests/bundles/org.eclipse.ecf.tests.provider.xmpp/src/org/eclipse/ecf/tests/provider/xmpp/remoteservice/RemoteServiceRetrievalTest.java
@@ -0,0 +1,243 @@
+/****************************************************************************
+ * Copyright (c) 2010 Eugen Reiswich.
+ * 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:
+ * Eugen Reiswich - initial API and implementation
+ *****************************************************************************/
+package org.eclipse.ecf.tests.provider.xmpp.remoteservice;
+
+import java.net.URISyntaxException;
+
+import junit.framework.TestCase;
+
+import org.eclipse.ecf.core.ContainerConnectException;
+import org.eclipse.ecf.core.ContainerCreateException;
+import org.eclipse.ecf.core.ContainerFactory;
+import org.eclipse.ecf.core.IContainer;
+import org.eclipse.ecf.core.identity.ID;
+import org.eclipse.ecf.core.security.ConnectContextFactory;
+import org.eclipse.ecf.core.security.IConnectContext;
+import org.eclipse.ecf.core.util.ECFException;
+import org.eclipse.ecf.provider.xmpp.identity.XMPPID;
+import org.eclipse.ecf.remoteservice.IRemoteService;
+import org.eclipse.ecf.remoteservice.IRemoteServiceContainerAdapter;
+import org.eclipse.ecf.remoteservice.IRemoteServiceReference;
+import org.eclipse.ecf.remoteservice.IRemoteServiceRegistration;
+import org.eclipse.ecf.tests.provider.xmpp.XMPPS;
+import org.osgi.framework.InvalidSyntaxException;
+
+public class RemoteServiceRetrievalTest extends TestCase {
+
+ private XMPPClient[] xmppClients;
+
+ private static final int SLEEPTIME = new Integer(
+ System.getProperty(
+ "org.eclipse.ecf.tests.provider.xmpp.remoteservice.RemoteServiceRetrieval.SLEEPTIME",
+ "6000")).intValue();
+
+ public void setUp() {
+ try {
+ createXMPPClients();
+ } catch (ContainerConnectException e) {
+ e.printStackTrace();
+ fail();
+ } catch (ContainerCreateException e) {
+ e.printStackTrace();
+ fail();
+ } catch (URISyntaxException e) {
+ e.printStackTrace();
+ fail();
+ }
+ registerRemoteServicesNoFilterIDs();
+ }
+
+ private XMPPClient getClient(int clientNr) {
+ assertTrue(0 <= clientNr);
+ assertTrue(clientNr <= 2);
+ return xmppClients[clientNr];
+ }
+
+ /*
+ * Make sure that the right service is returned for the right client.
+ */
+ public void testRightServiceForClients() throws Exception {
+
+ // Client 1 tries to retrieve services registered by client 2 & 3
+ IExampleService remoteService1 = getClient(0).getRemoteService(
+ getClient(1));
+ assertNotNull(remoteService1);
+ assertEquals(getClient(1).getClientID(), remoteService1.getClientID());
+
+ IExampleService remoteService2 = getClient(0).getRemoteService(
+ getClient(2));
+ assertNotNull(remoteService2);
+ assertEquals(getClient(2).getClientID(), remoteService2.getClientID());
+
+ // Client 2 tries to retrieve services registered by client 1 & 3
+ IExampleService remoteService3 = getClient(1).getRemoteService(
+ getClient(0));
+ assertNotNull(remoteService3);
+ assertEquals(getClient(0).getClientID(), remoteService3.getClientID());
+
+ IExampleService remoteService4 = getClient(1).getRemoteService(
+ getClient(2));
+ assertNotNull(remoteService4);
+ assertEquals(getClient(2).getClientID(), remoteService4.getClientID());
+
+ // Client 3 tries to retrieve services registered by client 1 & 2
+ IExampleService remoteService5 = getClient(2).getRemoteService(
+ getClient(0));
+ assertNotNull(remoteService5);
+ assertEquals(getClient(0).getClientID(), remoteService5.getClientID());
+
+ IExampleService remoteService6 = getClient(2).getRemoteService(
+ getClient(1));
+ assertNotNull(remoteService6);
+ assertEquals(getClient(1).getClientID(), remoteService6.getClientID());
+ }
+
+ public void testRegisterAndUnregisterRemoteServices() throws Exception {
+ // Client 0 tries to get service from client 1
+ IExampleService remoteService1 = getClient(0).getRemoteService(
+ getClient(1));
+ assertNotNull(remoteService1);
+ // unregister remote service on client 1, no services available for
+ // client 1
+ getClient(1).unregisterRemoteService();
+ // wait for unregistration to propogate
+ Thread.sleep(SLEEPTIME);
+ // Now lookup and make sure the reference is now null
+ IExampleService remoteService2 = getClient(0).getRemoteService(
+ getClient(1));
+ assertNull(remoteService2);
+
+ // register remote service on client 1
+ registerRemoteServiceOnClient(getClient(1));
+ // wait for registration to propogate
+ Thread.sleep(SLEEPTIME);
+
+ IExampleService remoteService3 = getClient(0).getRemoteService(
+ getClient(1));
+ assertNotNull(remoteService3);
+ }
+
+ /*
+ * Remote service registration without filterIDs.
+ */
+ private void registerRemoteServicesNoFilterIDs() {
+ registerRemoteServiceOnClient(getClient(0));
+ registerRemoteServiceOnClient(getClient(1));
+ registerRemoteServiceOnClient(getClient(2));
+ }
+
+ private void registerRemoteServiceOnClient(XMPPClient client) {
+ client.registerRemoteService(IExampleService.class.getName(), new ExampleService(client.getClientID()));
+ }
+
+ public void tearDown() {
+ for (int clientNumber = 0; clientNumber <= 2; clientNumber++) {
+ getClient(clientNumber).tearDown();
+ }
+ }
+
+ protected void createXMPPClients() throws URISyntaxException,
+ ContainerConnectException, ContainerCreateException {
+ xmppClients = new XMPPClient[3];
+ for (int clientNr = 0; clientNr <= 2; clientNr++) {
+ // usernames already contain server address e.g.
+ // ecf-test1@ecf-project.org
+ String username = System.getProperty("username" + clientNr);
+ String password = System.getProperty("password" + clientNr);
+ assertNotNull(username);
+ assertNotNull(password);
+
+ XMPPClient xmppClient = new XMPPClient(username, password);
+ xmppClient.connect();
+ xmppClients[clientNr] = xmppClient;
+ }
+ assertEquals(3, xmppClients.length);
+ }
+
+ /*
+ * Convenience class for Client data
+ */
+ private class XMPPClient {
+
+ private IContainer container;
+ private XMPPID clientID;
+ private IConnectContext connectContext;
+ private IRemoteServiceContainerAdapter adapter;
+ private IRemoteServiceRegistration registration;
+
+ public XMPPClient(String username, String password)
+ throws ContainerCreateException, URISyntaxException {
+ container = ContainerFactory.getDefault().createContainer(
+ XMPPS.CONTAINER_NAME);
+ assertNotNull(container);
+
+ adapter = (IRemoteServiceContainerAdapter) container
+ .getAdapter(IRemoteServiceContainerAdapter.class);
+ assertNotNull(adapter);
+
+ clientID = new XMPPID(container.getConnectNamespace(), username);
+ assertNotNull(clientID);
+
+ connectContext = ConnectContextFactory
+ .createUsernamePasswordConnectContext(username, password);
+ assertNotNull(connectContext);
+ }
+
+ void tearDown() {
+ unregisterRemoteService();
+ try {
+ Thread.sleep(SLEEPTIME);
+ } catch (InterruptedException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ container.disconnect();
+ }
+
+ XMPPID getClientID() {
+ return clientID;
+ }
+
+ void connect() throws ContainerConnectException {
+ container.connect(clientID, connectContext);
+ }
+
+ public void registerRemoteService(String svcInterface, Object svc) {
+ this.registration = adapter.registerRemoteService(
+ new String[] { svcInterface }, svc, null);
+ }
+
+ void unregisterRemoteService() {
+ if (registration != null) {
+ // unregister the remote service registration
+ registration.unregister();
+ }
+ }
+
+ private IExampleService getRemoteService(XMPPClient toClient)
+ throws InvalidSyntaxException, ECFException {
+ IRemoteServiceReference[] remoteServiceReferences = adapter
+ .getRemoteServiceReferences(
+ new ID[] { toClient.getClientID() },
+ IExampleService.class.getName(), null);
+ if (remoteServiceReferences == null
+ || remoteServiceReferences.length == 0)
+ return null;
+ assertEquals(1, remoteServiceReferences.length);
+
+ IRemoteService remoteService = adapter
+ .getRemoteService(remoteServiceReferences[0]);
+ IExampleService remoteServiceUser = (IExampleService) remoteService
+ .getProxy();
+ return remoteServiceUser;
+ }
+ }
+} \ No newline at end of file

Back to the top