blob: 1c50c9c8986aa27c6705089503e9f1650bec5a3a [file] [log] [blame]
/****************************************************************************
* Copyright (c) 2007 Composent, Inc. and others.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* Contributors:
* Composent, Inc. - initial API and implementation
*
* SPDX-License-Identifier: EPL-2.0
*****************************************************************************/
package org.eclipse.ecf.tests.filetransfer;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import org.eclipse.core.runtime.Assert;
import org.eclipse.ecf.core.ContainerFactory;
import org.eclipse.ecf.core.IContainer;
import org.eclipse.ecf.filetransfer.IRemoteFile;
import org.eclipse.ecf.filetransfer.IRemoteFileAttributes;
import org.eclipse.ecf.filetransfer.IRemoteFileInfo;
import org.eclipse.ecf.filetransfer.IRemoteFileSystemBrowserContainerAdapter;
import org.eclipse.ecf.filetransfer.IRemoteFileSystemListener;
import org.eclipse.ecf.filetransfer.IRemoteFileSystemRequest;
import org.eclipse.ecf.filetransfer.events.IRemoteFileSystemBrowseEvent;
import org.eclipse.ecf.filetransfer.events.IRemoteFileSystemEvent;
import org.eclipse.ecf.filetransfer.identity.FileIDFactory;
import org.eclipse.ecf.filetransfer.identity.IFileID;
import org.eclipse.equinox.concurrent.future.TimeoutException;
/**
*
*/
public abstract class AbstractBrowseTestCase extends AbstractFileTransferTestCase {
protected IRemoteFileSystemBrowserContainerAdapter adapter = null;
protected Object lock = new Object();
protected boolean done = false;
protected IRemoteFileSystemRequest request = null;
/* (non-Javadoc)
* @see junit.framework.TestCase#setUp()
*/
protected void setUp() throws Exception {
super.setUp();
final IContainer container = ContainerFactory.getDefault().createContainer();
adapter = container.getAdapter(IRemoteFileSystemBrowserContainerAdapter.class);
}
/* (non-Javadoc)
* @see junit.framework.TestCase#tearDown()
*/
protected void tearDown() throws Exception {
super.tearDown();
adapter = null;
if (request != null) {
request.cancel();
request = null;
}
}
protected IRemoteFileSystemListener createRemoteFileSystemListener() {
return new IRemoteFileSystemListener() {
public void handleRemoteFileEvent(IRemoteFileSystemEvent event) {
if (event instanceof IRemoteFileSystemBrowseEvent) {
handleFileSystemBrowseEvent((IRemoteFileSystemBrowseEvent) event);
} else
handleUnknownEvent(event);
}
};
}
protected IFileID createFileID(URL directoryOrFile) throws Exception {
return FileIDFactory.getDefault().createFileID(adapter.getBrowseNamespace(), directoryOrFile);
}
protected void testBrowse(URL directoryOrFile) throws Exception {
Assert.isNotNull(adapter);
request = adapter.sendBrowseRequest(createFileID(directoryOrFile), createRemoteFileSystemListener());
}
/**
* @param event
*/
protected void handleUnknownEvent(IRemoteFileSystemEvent event) {
trace("handleUnknownEvent(" + event + ")");
}
/**
* @param event
*/
protected void handleFileSystemBrowseEvent(IRemoteFileSystemBrowseEvent event) {
trace("handleFileSystemBrowseEvent(" + event + ")");
if (event.getException() != null) {
trace(event.getException().toString());
}
}
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++;
}
assertEquals(eventCount, count);
}
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);
}
/**
* @param remoteFiles
*/
protected void verifyRemoteFiles(final IRemoteFile[] remoteFiles) {
for (int i = 0; i < remoteFiles.length; i++) {
final IRemoteFile first = remoteFiles[i];
final IRemoteFileInfo firstInfo = first.getInfo();
assertNotNull(firstInfo);
final IFileID firstID = first.getID();
assertNotNull(firstID);
trace("firstID=" + firstID);
// Now check out info
assertNotNull(firstInfo.getName());
assertTrue(firstInfo.getLastModified() > 0);
trace("lastModified=" + new SimpleDateFormat().format(new Date(firstInfo.getLastModified())));
trace("length=" + firstInfo.getLength());
trace("isDirectory=" + firstInfo.isDirectory());
final IRemoteFileAttributes attributes = firstInfo.getAttributes();
assertNotNull(attributes);
final Iterator attrNames = attributes.getAttributeKeys();
for (; attrNames.hasNext();) {
final String key = (String) attrNames.next();
String s = "attrname=" + key;
s += " attrvalue=" + attributes.getAttribute(key);
trace(s);
}
}
}
}