Package org.eclipse.ecf.tests.filetransfer

Source Code of org.eclipse.ecf.tests.filetransfer.AbstractSendTestCase

/****************************************************************************
* Copyright (c) 2007 Composent, Inc. 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, Inc. - initial API and implementation
*****************************************************************************/

package org.eclipse.ecf.tests.filetransfer;

import java.io.File;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;

import junit.framework.TestCase;

import org.eclipse.ecf.core.ContainerFactory;
import org.eclipse.ecf.filetransfer.IFileTransferListener;
import org.eclipse.ecf.filetransfer.IOutgoingFileTransfer;
import org.eclipse.ecf.filetransfer.ISendFileTransferContainerAdapter;
import org.eclipse.ecf.filetransfer.events.IFileTransferEvent;
import org.eclipse.ecf.filetransfer.events.IOutgoingFileTransferResponseEvent;
import org.eclipse.ecf.filetransfer.events.IOutgoingFileTransferSendDataEvent;
import org.eclipse.ecf.filetransfer.events.IOutgoingFileTransferSendDoneEvent;
import org.eclipse.ecf.filetransfer.identity.FileIDFactory;
import org.eclipse.ecf.filetransfer.identity.IFileID;
import org.eclipse.equinox.concurrent.future.TimeoutException;

/**
*
*/
public abstract class AbstractSendTestCase extends TestCase {

  ISendFileTransferContainerAdapter sendAdapter = null;

  protected List startEvents = null;
  protected List dataEvents = null;
  protected List doneEvents = null;

  protected IOutgoingFileTransfer outgoingFileTransfer;

  protected boolean done = false;

  Object lock = new Object();

  protected void trace(String msg) {
    System.out.println(msg);
  }

  protected ISendFileTransferContainerAdapter getSendAdapter() throws Exception {
    return (ISendFileTransferContainerAdapter) ContainerFactory.getDefault().createContainer().getAdapter(ISendFileTransferContainerAdapter.class);
  }

  protected IFileID createFileID(URL url) throws Exception {
    return FileIDFactory.getDefault().createFileID(sendAdapter.getOutgoingNamespace(), url);
  }

  protected void handleUnexpectedEvent(IFileTransferEvent event) {
    trace("handleUnexpectedEvent(" + event + ")");
  }

  protected void handleStartEvent(IOutgoingFileTransferResponseEvent event) {
    trace("handleStartEvent(" + event + ")");
    startEvents.add(event);
  }

  protected void handleDataEvent(IOutgoingFileTransferSendDataEvent event) {
    trace("handleDataEvent(" + event + ")");
    dataEvents.add(event);
  }

  protected void handleDoneEvent(IOutgoingFileTransferSendDoneEvent event) {
    trace("handleDoneEvent(" + event + ")");
    doneEvents.add(event);
    synchronized (lock) {
      done = true;
    }
  }

  protected IFileTransferListener createFileTransferListener() {
    return new IFileTransferListener() {
      public void handleTransferEvent(IFileTransferEvent event) {
        if (event instanceof IOutgoingFileTransferResponseEvent) {
          handleStartEvent((IOutgoingFileTransferResponseEvent) event);
        } else if (event instanceof IOutgoingFileTransferSendDataEvent) {
          handleDataEvent((IOutgoingFileTransferSendDataEvent) event);
        } else if (event instanceof IOutgoingFileTransferSendDoneEvent) {
          handleDoneEvent((IOutgoingFileTransferSendDoneEvent) event);
        } else {
          handleUnexpectedEvent(event);
        }
      }

    };
  }

  protected void testSendForFile(URL target, File inputFile) throws Exception {
    sendAdapter.sendOutgoingRequest(createFileID(target), inputFile, createFileTransferListener(), null);
  }

  /* (non-Javadoc)
   * @see junit.framework.TestCase#setUp()
   */
  protected void setUp() throws Exception {
    super.setUp();
    sendAdapter = getSendAdapter();
    startEvents = new ArrayList();
    dataEvents = new ArrayList();
    doneEvents = new ArrayList();
    synchronized (lock) {
      done = false;
    }
  }

  /* (non-Javadoc)
   * @see junit.framework.TestCase#tearDown()
   */
  protected void tearDown() throws Exception {
    sendAdapter = null;
    startEvents = null;
    dataEvents = null;
    doneEvents = null;
    super.tearDown();
  }

  protected void waitForDone(int timeout) throws Exception {
    final long start = System.currentTimeMillis();
    synchronized (lock) {
      while (!done && ((System.currentTimeMillis() - start) < timeout)) {
        lock.wait(timeout / 20);
      }
      if (!done)
        throw new TimeoutException(timeout);
    }
  }

  protected void assertHasEvent(Collection collection, Class eventType) {
    assertHasEventCount(collection, eventType, 1);
  }

  protected void assertHasEventCount(Collection collection, Class eventType, int eventCount) {
    int count = 0;
    for (final Iterator i = collection.iterator(); i.hasNext();) {
      final Object o = i.next();
      if (eventType.isInstance(o))
        count++;
    }
    assertTrue(count == eventCount);
  }

  protected void assertHasMoreThanEventCount(Collection collection, Class eventType, int eventCount) {
    int count = 0;
    for (final Iterator i = collection.iterator(); i.hasNext();) {
      final Object o = i.next();
      if (eventType.isInstance(o))
        count++;
    }
    assertTrue(count > eventCount);
  }

}
TOP

Related Classes of org.eclipse.ecf.tests.filetransfer.AbstractSendTestCase

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.