blob: a9b9745acc8c911691ba56061cdda32b0e4d75d9 [file] [log] [blame]
/****************************************************************************
* 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);
}
}