Package org.eclipse.ecf.tests.remoteservice

Source Code of org.eclipse.ecf.tests.remoteservice.AbstractConcatConsumerTestCase

/*******************************************************************************
* Copyright (c) 2009 EclipseSource 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:
*   EclipseSource - initial API and implementation
******************************************************************************/
package org.eclipse.ecf.tests.remoteservice;

import java.util.Arrays;
import java.util.Dictionary;
import java.util.List;

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.IContainerManager;
import org.eclipse.ecf.core.identity.ID;
import org.eclipse.ecf.core.identity.IDFactory;
import org.eclipse.ecf.core.identity.Namespace;
import org.eclipse.ecf.remoteservice.IRemoteCall;
import org.eclipse.ecf.remoteservice.IRemoteCallListener;
import org.eclipse.ecf.remoteservice.IRemoteService;
import org.eclipse.ecf.remoteservice.IRemoteServiceContainer;
import org.eclipse.ecf.remoteservice.IRemoteServiceContainerAdapter;
import org.eclipse.ecf.remoteservice.IRemoteServiceID;
import org.eclipse.ecf.remoteservice.IRemoteServiceReference;
import org.eclipse.ecf.remoteservice.RemoteServiceContainer;
import org.eclipse.ecf.remoteservice.events.IRemoteCallEvent;
import org.eclipse.equinox.concurrent.future.IFuture;
import org.osgi.framework.InvalidSyntaxException;

public abstract class AbstractConcatConsumerTestCase extends TestCase {

  private static int ASYNC_WAITTIME = 5000;
  protected IRemoteServiceContainer rsContainer;
  protected ID targetID;

  protected abstract String getContainerType();

  protected ID createStringID(String value) {
    return IDFactory.getDefault().createStringID(value);
  }

  protected ID createID(IContainer container, String value) {
    return IDFactory.getDefault().createID(container.getConnectNamespace(),
        value);
  }

  protected IContainer createContainer() throws ContainerCreateException {
    return Activator.getDefault().getContainerManager()
        .getContainerFactory().createContainer(getContainerType());
  }

  protected IContainer createContainer(ID containerID)
      throws ContainerCreateException {
    return Activator.getDefault().getContainerManager()
        .getContainerFactory().createContainer(getContainerType(),
            containerID);
  }

  protected IContainer createContainer(String containerID)
      throws ContainerCreateException {
    return Activator.getDefault().getContainerManager()
        .getContainerFactory().createContainer(getContainerType(),
            createStringID(containerID));
  }

  protected IRemoteServiceContainer createRemoteServiceContainer(
      IContainer container) {
    return new RemoteServiceContainer(container,
        (IRemoteServiceContainerAdapter) container
            .getAdapter(IRemoteServiceContainerAdapter.class));
  }

  protected void tearDown() throws Exception {
    rsContainer.getContainer().disconnect();
    rsContainer.getContainer().dispose();
    ((IContainerManager) ContainerFactory.getDefault())
        .removeAllContainers();
    rsContainer = null;
    targetID = null;
  }

  protected Object createRemoteService() {
    return new IConcatService() {
      public String concat(String string1, String string2) {
        final String result = string1.concat(string2);
        System.out.println("SERVICE.concat(" + string1 + "," + string2
            + ") returning " + result);
        return string1.concat(string2);
      }
    };
  }

  protected Dictionary createRemoteServiceProperties() {
    return null;
  }

  protected IRemoteService getRemoteService(ID target, String clazz,
      String filter) {
    final IRemoteServiceReference[] refs = getRemoteServiceReferences(
        target, clazz, filter);
    if (refs == null || refs.length == 0)
      return null;
    return rsContainer.getContainerAdapter().getRemoteService(refs[0]);
  }

  protected IRemoteServiceReference[] getRemoteServiceReferences(ID target,
      String clazz, String filter) {
    try {
      return rsContainer.getContainerAdapter()
          .getRemoteServiceReferences(target, clazz, filter);
    } catch (final InvalidSyntaxException e) {
      fail("should not happen");
    } catch (final ContainerConnectException e) {
      fail("connect problem");
    }
    return null;
  }

  protected IRemoteServiceReference[] getRemoteServiceReferences(ID[] targets,
      String clazz, String filter) {
    try {
      return rsContainer.getContainerAdapter()
          .getRemoteServiceReferences(targets, clazz, filter);
    } catch (final InvalidSyntaxException e) {
      fail("should not happen");
    }
    return null;
  }

  public void testGetServiceReferences() throws Exception {
    final IRemoteServiceReference[] refs = getRemoteServiceReferences(
        targetID, getRemoteServiceClass().getName(),
        getRemoteServiceFilter());
    assertTrue(refs != null);
    assertTrue(refs.length > 0);
  }

  public void testGetRemoteServiceIDs() throws Exception {
    final IRemoteServiceReference[] refs = getRemoteServiceReferences(
        targetID, getRemoteServiceClass().getName(),
        getRemoteServiceFilter());
    assertTrue(refs != null);
    assertTrue(refs.length > 0);
    for (int i = 0; i < refs.length; i++) {
      IRemoteServiceID rsid = refs[i].getID();
      assertNotNull(rsid);
    }
  }

  public void testGetRemoteServiceReferenceObjectClass() throws Exception {
    String className = getRemoteServiceClass().getName();
    final IRemoteServiceReference[] refs = getRemoteServiceReferences(
        targetID, className, getRemoteServiceFilter());
    assertTrue(refs != null);
    assertTrue(refs.length > 0);
    for (int i = 0; i < refs.length; i++) {
      String[] intfClasses = (String[]) refs[i]
          .getProperty(org.eclipse.ecf.remoteservice.Constants.OBJECTCLASS);
      List classNames = Arrays.asList(intfClasses);
      assertTrue(classNames.contains(className));
    }
  }

  public void testGetRemoteServiceReferenceServiceID() throws Exception {
    final IRemoteServiceReference[] refs = getRemoteServiceReferences(
        targetID, getRemoteServiceClass().getName(),
        getRemoteServiceFilter());
    assertTrue(refs != null);
    assertTrue(refs.length > 0);
    for (int i = 0; i < refs.length; i++) {
      IRemoteServiceID rsid = refs[i].getID();
      Long sid = (Long) refs[i]
          .getProperty(org.eclipse.ecf.remoteservice.Constants.SERVICE_ID);
      assertNotNull(sid);
      assertTrue(sid.longValue() > -1);
      assertTrue(sid.longValue() == rsid.getContainerRelativeID());
    }
  }

  public void testGetService() throws Exception {
    final IRemoteService service = getRemoteService(targetID,
        IConcatService.class.getName(), null);
    assertNotNull(service);
  }

  public void testCallSynch() throws Exception {
    final IRemoteService service = getRemoteService(targetID,
        IConcatService.class.getName(), null);
    assertNotNull(service);
    traceCallStart("callSynch");
    final Object result = service.callSync(createRemoteConcat("Eclipse ",
        "is cool"));
    traceCallEnd("callSynch", result);

    assertNotNull(result);
    assertTrue(result.equals("Eclipse ".concat("is cool")));
  }

  protected void traceCallStart(String callType) {
    System.out.println(callType + " start");
  }

  protected void traceCallEnd(String callType, Object result) {
    System.out.println(callType + " end");
    System.out.println("  result=" + result);
  }

  protected void traceCallEnd(String callType) {
    System.out.println(callType + " end.");
  }

  protected IRemoteCallListener createRemoteCallListener() {
    return new IRemoteCallListener() {
      public void handleEvent(IRemoteCallEvent event) {
        System.out.println("CLIENT.handleEvent(" + event + ")");
      }
    };
  }

  protected IRemoteCall createRemoteCall(final String method,
      final Object[] params) {
    return new IRemoteCall() {
      public String getMethod() {
        return method;
      }

      public Object[] getParameters() {
        return params;
      }

      public long getTimeout() {
        return 3000;
      }
    };
  }

  protected IRemoteCall createRemoteConcat(String first, String second) {
    return createRemoteCall("concat", new Object[] { first, second });
  }

  protected Class getRemoteServiceClass() {
    return IConcatService.class;
  }

  protected String getRemoteServiceFilter() {
    return null;
  }

  public void testGetNamespace() throws Exception {
    Namespace ns = rsContainer.getContainer().getConnectNamespace();
    assertNotNull(ns);
  }

  public void testGetRSNamespace() throws Exception {
    Namespace ns = rsContainer.getContainerAdapter()
        .getRemoteServiceNamespace();
    assertNotNull(ns);
  }

  public void testGetRSReference() throws Exception {
    IRemoteServiceReference[] references = getRemoteServiceReferences(
        targetID, getRemoteServiceClass().getName(),
        getRemoteServiceFilter());
    assertNotNull(references);
    assertTrue(references.length == 1);
  }

  public void testCallAsynch() throws Exception {
    final IRemoteService service = getRemoteService(targetID,
        getRemoteServiceClass().getName(), getRemoteServiceFilter());
    assertNotNull(service);
    traceCallStart("callAsynch");
    service.callAsync(createRemoteConcat("ECF ", "is cool"),
        createRemoteCallListener());
    traceCallEnd("callAsynch");
    Thread.sleep(ASYNC_WAITTIME);
  }

  public void testFireAsynch() throws Exception {
    final IRemoteService service = getRemoteService(targetID,
        getRemoteServiceClass().getName(), getRemoteServiceFilter());
    assertNotNull(service);
    traceCallStart("fireAsynch");
    service.fireAsync(createRemoteConcat("Eclipse ", "sucks"));
    traceCallEnd("fireAsynch");
    Thread.sleep(ASYNC_WAITTIME);
  }

  public void testProxy() throws Exception {
    final IRemoteService service = getRemoteService(targetID,
        getRemoteServiceClass().getName(), getRemoteServiceFilter());
    assertNotNull(service);
    final IConcatService proxy = (IConcatService) service.getProxy();
    assertNotNull(proxy);
    traceCallStart("getProxy");
    final String result = proxy.concat("ECF ", "sucks");
    traceCallEnd("getProxy", result);
    Thread.sleep(ASYNC_WAITTIME);
  }

  public void testAsyncResult() throws Exception {
    final IRemoteService service = getRemoteService(targetID,
        getRemoteServiceClass().getName(), getRemoteServiceFilter());
    assertNotNull(service);
    traceCallStart("callAsynchResult");
    final IFuture result = service.callAsync(createRemoteConcat(
        "ECF AsynchResults ", "are cool"));
    Thread.sleep(ASYNC_WAITTIME);
    traceCallEnd("callAsynchResult", result);
    assertNotNull(result);
  }

  public void testGetLocallyRegisteredService() throws Exception {
    String classname = getRemoteServiceClass().getName();
    registerLocalService(classname, createRemoteService(),
        createRemoteServiceProperties());
    IRemoteServiceReference[] references = rsContainer.getContainerAdapter().getRemoteServiceReferences(new ID[] { rsContainer.getContainer().getID() }, classname, getRemoteServiceFilter());
    assertNotNull(references);
    assertTrue(references.length == 1);
    assertTrue(references[0].getContainerID().equals(
        rsContainer.getContainer().getID()));
    Thread.sleep(ASYNC_WAITTIME);
  }

  private void registerLocalService(String name, Object service,
      Dictionary properties) {
    rsContainer.getContainerAdapter().registerRemoteService(
        new String[] { name }, service, properties);
  }

  public void testGetRemoteServiceWithLocallyRegisteredService()
      throws Exception {
    String classname = getRemoteServiceClass().getName();
    // Register service locally
    registerLocalService(classname, createRemoteService(),
        createRemoteServiceProperties());
    // Now get remote service
    final IRemoteService service = getRemoteService(targetID,
        getRemoteServiceClass().getName(), getRemoteServiceFilter());
    assertNotNull(service);
    // Now get both
    IRemoteServiceReference[] references = getRemoteServiceReferences(
        new ID[] { rsContainer.getContainer().getID(), targetID }, classname,
        getRemoteServiceFilter());
    assertNotNull(references);
    assertTrue(references.length == 2);
    Thread.sleep(ASYNC_WAITTIME);
  }
}
TOP

Related Classes of org.eclipse.ecf.tests.remoteservice.AbstractConcatConsumerTestCase

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.