diff options
5 files changed, 129 insertions, 145 deletions
diff --git a/providers/bundles/org.eclipse.ecf.provider.filetransfer.scp/src/org/eclipse/ecf/internal/provider/filetransfer/scp/ScpFileSystemBrowser.java b/providers/bundles/org.eclipse.ecf.provider.filetransfer.scp/src/org/eclipse/ecf/internal/provider/filetransfer/scp/ScpFileSystemBrowser.java index 9334ea32e..54e851745 100644 --- a/providers/bundles/org.eclipse.ecf.provider.filetransfer.scp/src/org/eclipse/ecf/internal/provider/filetransfer/scp/ScpFileSystemBrowser.java +++ b/providers/bundles/org.eclipse.ecf.provider.filetransfer.scp/src/org/eclipse/ecf/internal/provider/filetransfer/scp/ScpFileSystemBrowser.java @@ -14,9 +14,8 @@ package org.eclipse.ecf.internal.provider.filetransfer.scp; import com.jcraft.jsch.ChannelExec; import com.jcraft.jsch.Session; import java.io.*; -import java.net.URL; -import java.util.ArrayList; -import java.util.Map; +import java.net.*; +import java.util.*; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.ecf.core.identity.IDFactory; @@ -81,46 +80,52 @@ public class ScpFileSystemBrowser extends AbstractFileSystemBrowser implements * Method called from super class to build the list of remote files. */ protected void runRequest() throws Exception { - try { - - scpUtil = new ScpUtil(this); - final Session s = scpUtil.getSession(); - s.connect(); - if (s.isConnected()) { - final String targetFileName = scpUtil - .trimTargetFile(directoryOrFile.getPath()); - final String command = LS_START_COMMAND + targetFileName - + LS_END_COMMAND; - channel = (ChannelExec) s.openChannel(SCP_EXEC); - channel.setCommand(command); - final OutputStream outs = channel.getOutputStream(); - inputStream = channel.getInputStream(); - channel.connect(); - - setOutputStream(outs); - - BufferedReader reader = new BufferedReader( - new InputStreamReader(inputStream)); - String line = reader.readLine(); - ArrayList strings = new ArrayList(); - while (line != null) { - strings.add(line); - line = reader.readLine(); - } - remoteFiles = new IRemoteFile[strings.size()]; - for (int i = 0; i < strings.size(); i++) { - remoteFiles[i] = createRemoteFile((String) strings.get(i)); + scpUtil = new ScpUtil(this); + final Session s = scpUtil.getSession(); + s.connect(); + if (s.isConnected()) { + final String targetFileName = scpUtil + .trimTargetFile(directoryOrFile.getPath()); + final String command = LS_START_COMMAND + targetFileName + + LS_END_COMMAND; + channel = (ChannelExec) s.openChannel(SCP_EXEC); + channel.setCommand(command); + final OutputStream outs = channel.getOutputStream(); + inputStream = channel.getInputStream(); + channel.connect(); + + setOutputStream(outs); + + BufferedReader reader = new BufferedReader(new InputStreamReader( + inputStream)); + String line = reader.readLine(); + ArrayList strings = new ArrayList(); + while (line != null) { + strings.add(line); + line = reader.readLine(); + } + List remoteFilesList = new ArrayList(); + for (int i = 0; i < strings.size(); i++) { + try { + remoteFilesList.add(createRemoteFile((String) strings + .get(i))); + } catch (Exception e) { + Activator + .getDefault() + .log(new Status( + IStatus.ERROR, + Activator.PLUGIN_ID, + IStatus.ERROR, + "SCPFileBrowser could not convert string '" + ((String) strings.get(i)) + "' to FileID", e)); //$NON-NLS-1$ } } - } catch (final Exception e) { - Activator.getDefault().log( - new Status(IStatus.ERROR, Activator.PLUGIN_ID, - IStatus.ERROR, "runRequest", e)); //$NON-NLS-1$ + remoteFiles = (IRemoteFile[]) remoteFilesList + .toArray(new IRemoteFile[remoteFilesList.size()]); } } private IRemoteFile createRemoteFile(String string) - throws FileCreateException, SecurityException { + throws URISyntaxException, FileCreateException, SecurityException { URLRemoteFile file = null; IFileID id = null; String[] parts = string.split("\\|"); @@ -155,12 +160,13 @@ public class ScpFileSystemBrowser extends AbstractFileSystemBrowser implements builder.deleteCharAt(builder.length() - 1); } + URI uri = new URI(builder.toString()); + // Create the FileID - id = FileIDFactory.getDefault() - .createFileID( - IDFactory.getDefault().getNamespaceByName( - FileTransferNamespace.PROTOCOL), - builder.toString()); + id = FileIDFactory.getDefault().createFileID( + IDFactory.getDefault().getNamespaceByName( + FileTransferNamespace.PROTOCOL), + new Object[] { uri }); long size = Long.parseLong(parts[1]); long modification = Long.parseLong(parts[2]); file = new URLRemoteFile(modification, size, id); @@ -170,12 +176,6 @@ public class ScpFileSystemBrowser extends AbstractFileSystemBrowser implements protected void cleanUp() { super.cleanUp(); - // FIXME - This code is from ScpOutgoingFileTransfer, but it throws - // exceptions - // if (scpUtil != null) { - // scpUtil.sendZeroToStream(outputStream); - // scpUtil.checkAck(inputStream); - // } if (channel != null) { channel.disconnect(); channel = null; diff --git a/tests/bundles/org.eclipse.ecf.tests.provider.filetransfer.scp/src/org/eclipse/ecf/tests/provider/filetransfer/scp/AbstractSCPTest.java b/tests/bundles/org.eclipse.ecf.tests.provider.filetransfer.scp/src/org/eclipse/ecf/tests/provider/filetransfer/scp/AbstractSCPTest.java new file mode 100644 index 000000000..6e6e03ca5 --- /dev/null +++ b/tests/bundles/org.eclipse.ecf.tests.provider.filetransfer.scp/src/org/eclipse/ecf/tests/provider/filetransfer/scp/AbstractSCPTest.java @@ -0,0 +1,30 @@ +package org.eclipse.ecf.tests.provider.filetransfer.scp; + +import org.eclipse.ecf.core.ContainerFactory; +import org.eclipse.ecf.core.IContainer; +import org.eclipse.ecf.tests.ContainerAbstractTestCase; + +public abstract class AbstractSCPTest extends ContainerAbstractTestCase { + + protected String host = System.getProperty("host", "localhost"); //$NON-NLS-1$ //$NON-NLS-2$ + protected String username = System.getProperty("username", "nobody"); //$NON-NLS-1$ //$NON-NLS-2$ + protected String password = System.getProperty("password", "password"); //$NON-NLS-1$ //$NON-NLS-2$ + + protected IContainer baseContainer; + + /* + * (non-Javadoc) + * + * @see junit.framework.TestCase#setUp() + */ + protected void setUp() throws Exception { + super.setUp(); + this.baseContainer = ContainerFactory.getDefault().createContainer(); + } + + protected void tearDown() throws Exception { + this.baseContainer.dispose(); + this.baseContainer = null; + super.tearDown(); + } +} diff --git a/tests/bundles/org.eclipse.ecf.tests.provider.filetransfer.scp/src/org/eclipse/ecf/tests/provider/filetransfer/scp/SCPOutgoingTest.java b/tests/bundles/org.eclipse.ecf.tests.provider.filetransfer.scp/src/org/eclipse/ecf/tests/provider/filetransfer/scp/SCPOutgoingTest.java index c9698a133..1d6adaeeb 100755 --- a/tests/bundles/org.eclipse.ecf.tests.provider.filetransfer.scp/src/org/eclipse/ecf/tests/provider/filetransfer/scp/SCPOutgoingTest.java +++ b/tests/bundles/org.eclipse.ecf.tests.provider.filetransfer.scp/src/org/eclipse/ecf/tests/provider/filetransfer/scp/SCPOutgoingTest.java @@ -21,21 +21,14 @@ import org.eclipse.ecf.filetransfer.ISendFileTransferContainerAdapter; import org.eclipse.ecf.filetransfer.events.IFileTransferEvent; import org.eclipse.ecf.filetransfer.identity.FileIDFactory; import org.eclipse.ecf.filetransfer.identity.IFileID; -import org.eclipse.ecf.tests.ContainerAbstractTestCase; /** * */ -public class SCPOutgoingTest extends ContainerAbstractTestCase { +public class SCPOutgoingTest extends AbstractSCPTest { - String sendFile = System.getProperty("sendFile", "test.txt"); //$NON-NLS-1$ //$NON-NLS-2$ - - String host = System.getProperty("host", "localhost"); //$NON-NLS-1$ //$NON-NLS-2$ - String file = System.getProperty("file", "test.txt"); //$NON-NLS-1$ //$NON-NLS-2$ - - // URL (example: scp://slewis@ecf1.osuosl.org/test.txt - String username = System.getProperty("username", "nobody"); //$NON-NLS-1$ //$NON-NLS-2$ - String password = System.getProperty("password", "password"); //$NON-NLS-1$ //$NON-NLS-2$ + private String localSendFile = System.getProperty("localSendFile", "test.txt"); //$NON-NLS-1$ //$NON-NLS-2$ + private String targetSendFile = System.getProperty("targetSendFile", "test.txt"); //$NON-NLS-1$ //$NON-NLS-2$ protected ISendFileTransferContainerAdapter adapter = null; protected IFileTransferListener senderTransferListener = null; @@ -62,11 +55,11 @@ public class SCPOutgoingTest extends ContainerAbstractTestCase { } public void testSend() throws Exception { - String targetURL = "scp://" + username + "@" + host + (file.startsWith("/") ? "" : "/") + file; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ + String targetURL = "scp://" + username + "@" + host + (targetSendFile.startsWith("/") ? "" : "/") + targetSendFile; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ System.out.println("Sending to " + targetURL); //$NON-NLS-1$ final IFileID targetID = FileIDFactory.getDefault().createFileID(adapter.getOutgoingNamespace(), new URL(targetURL)); adapter.setConnectContextForAuthentication(ConnectContextFactory.createPasswordConnectContext(password)); - adapter.sendOutgoingRequest(targetID, new File(sendFile), senderTransferListener, null); + adapter.sendOutgoingRequest(targetID, new File(localSendFile), senderTransferListener, null); sleep(10000); } diff --git a/tests/bundles/org.eclipse.ecf.tests.provider.filetransfer.scp/src/org/eclipse/ecf/tests/provider/filetransfer/scp/SCPRetrieveTest.java b/tests/bundles/org.eclipse.ecf.tests.provider.filetransfer.scp/src/org/eclipse/ecf/tests/provider/filetransfer/scp/SCPRetrieveTest.java index c07d2ce86..0a7a723a4 100755 --- a/tests/bundles/org.eclipse.ecf.tests.provider.filetransfer.scp/src/org/eclipse/ecf/tests/provider/filetransfer/scp/SCPRetrieveTest.java +++ b/tests/bundles/org.eclipse.ecf.tests.provider.filetransfer.scp/src/org/eclipse/ecf/tests/provider/filetransfer/scp/SCPRetrieveTest.java @@ -14,25 +14,16 @@ package org.eclipse.ecf.tests.provider.filetransfer.scp; import java.io.IOException; import java.util.ArrayList; import java.util.List; -import org.eclipse.ecf.core.ContainerFactory; -import org.eclipse.ecf.core.IContainer; import org.eclipse.ecf.core.security.ConnectContextFactory; import org.eclipse.ecf.filetransfer.IFileTransferListener; import org.eclipse.ecf.filetransfer.IRetrieveFileTransferContainerAdapter; import org.eclipse.ecf.filetransfer.events.*; import org.eclipse.ecf.filetransfer.identity.FileIDFactory; -import org.eclipse.ecf.tests.ContainerAbstractTestCase; -public class SCPRetrieveTest extends ContainerAbstractTestCase { +public class SCPRetrieveTest extends AbstractSCPTest { - String host = System.getProperty("host", "localhost"); //$NON-NLS-1$ //$NON-NLS-2$ - String file = System.getProperty("file", "test.txt"); //$NON-NLS-1$ //$NON-NLS-2$ - - // URL (example: scp://slewis@ecf1.osuosl.org/test.txt - String username = System.getProperty("username", "nobody"); //$NON-NLS-1$ //$NON-NLS-2$ - String password = System.getProperty("password", "password"); //$NON-NLS-1$ //$NON-NLS-2$ - - IRetrieveFileTransferContainerAdapter adapter = null; + private String retrieveFile = System.getProperty("retrieveFile", "test.txt"); //$NON-NLS-1$ //$NON-NLS-2$ + private IRetrieveFileTransferContainerAdapter adapter = null; /* * (non-Javadoc) @@ -41,8 +32,7 @@ public class SCPRetrieveTest extends ContainerAbstractTestCase { */ protected void setUp() throws Exception { super.setUp(); - final IContainer container = ContainerFactory.getDefault().createContainer(); - adapter = (IRetrieveFileTransferContainerAdapter) container.getAdapter(IRetrieveFileTransferContainerAdapter.class); + adapter = (IRetrieveFileTransferContainerAdapter) baseContainer.getAdapter(IRetrieveFileTransferContainerAdapter.class); receiveStartEvents = new ArrayList(); receiveDataEvents = new ArrayList(); receiveDoneEvents = new ArrayList(); @@ -90,7 +80,7 @@ public class SCPRetrieveTest extends ContainerAbstractTestCase { } }; - String targetURL = "scp://" + host + (file.startsWith("/") ? "" : "/") + file; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ + String targetURL = "scp://" + host + (retrieveFile.startsWith("/") ? "" : "/") + retrieveFile; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ System.out.println("Retrieving from " + targetURL + " with username=" + username); //$NON-NLS-1$ //$NON-NLS-2$ adapter.setConnectContextForAuthentication(ConnectContextFactory.createUsernamePasswordConnectContext(username, password)); adapter.sendRetrieveRequest(FileIDFactory.getDefault().createFileID(adapter.getRetrieveNamespace(), targetURL), listener, null); diff --git a/tests/bundles/org.eclipse.ecf.tests.provider.filetransfer.scp/src/org/eclipse/ecf/tests/provider/filetransfer/scp/ScpFileBrowseTest.java b/tests/bundles/org.eclipse.ecf.tests.provider.filetransfer.scp/src/org/eclipse/ecf/tests/provider/filetransfer/scp/ScpFileBrowseTest.java index e7632b6ec..d1c5887bb 100644 --- a/tests/bundles/org.eclipse.ecf.tests.provider.filetransfer.scp/src/org/eclipse/ecf/tests/provider/filetransfer/scp/ScpFileBrowseTest.java +++ b/tests/bundles/org.eclipse.ecf.tests.provider.filetransfer.scp/src/org/eclipse/ecf/tests/provider/filetransfer/scp/ScpFileBrowseTest.java @@ -11,95 +11,66 @@ package org.eclipse.ecf.tests.provider.filetransfer.scp; -import java.io.File; -import java.net.URL; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; +import org.eclipse.ecf.core.ContainerFactory; import org.eclipse.ecf.core.security.ConnectContextFactory; -import org.eclipse.ecf.core.security.IConnectContext; +import org.eclipse.ecf.filetransfer.*; import org.eclipse.ecf.filetransfer.events.IRemoteFileSystemBrowseEvent; -import org.eclipse.ecf.tests.filetransfer.AbstractBrowseTestCase; +import org.eclipse.ecf.filetransfer.events.IRemoteFileSystemEvent; +import org.eclipse.ecf.filetransfer.identity.FileIDFactory; -public class ScpFileBrowseTest extends AbstractBrowseTestCase { +public class ScpFileBrowseTest extends AbstractSCPTest { - protected File[] roots; + private String browseDir = System.getProperty("browseDirectory", "/"); //$NON-NLS-1$ //$NON-NLS-2$ + private IRemoteFileSystemBrowserContainerAdapter adapter = null; - protected File[] files; - - // Using a countdown latch to wait until we get the proper number - // of browse results - CountDownLatch latch = new CountDownLatch(1); - - String username; + Throwable exception; + IRemoteFileSystemBrowseEvent browseEvent; protected void setUp() throws Exception { super.setUp(); - username = System.getProperty("user.name"); //$NON-NLS-1$ - IConnectContext cctx = ConnectContextFactory.createUsernamePasswordConnectContext(username, null); - - this.adapter.setConnectContextForAuthentication(cctx); - - roots = File.listRoots(); - List fList = new ArrayList(); - for (int i = 0; i < roots.length; i++) { - final File[] fs = roots[i].listFiles(); - if (fs != null) - for (int j = 0; j < fs.length; j++) { - if (fs[j].exists()) - fList.add(fs[j]); - } - } - this.files = (File[]) fList.toArray(new File[] {}); + this.adapter = (IRemoteFileSystemBrowserContainerAdapter) ContainerFactory.getDefault().createContainer().getAdapter(IRemoteFileSystemBrowserContainerAdapter.class); } protected void tearDown() throws Exception { + this.adapter = null; super.tearDown(); - this.roots = null; - this.files = null; } - public void testBrowseRoots() throws Exception { - latch = new CountDownLatch(roots.length); - for (int i = 0; i < roots.length; i++) { - if (roots[i].exists()) { - URL url = new URL("scp://" + username + "@localhost:" + roots[i].getAbsolutePath()); //$NON-NLS-1$ //$NON-NLS-2$ - System.out.println("Browsing: " + url); //$NON-NLS-1$ - testBrowse(url); - } else { - System.out.println("Skipping: " + roots[i].toString()); //$NON-NLS-1$ - latch.countDown(); + public void testFileBrowse() throws Exception { + assertNotNull(adapter); + IRemoteFileSystemListener listener = new IRemoteFileSystemListener() { + public void handleRemoteFileEvent(IRemoteFileSystemEvent event) { + System.out.println("localhost.handleRemoteFileEvent=" + event); //$NON-NLS-1$ + if (event instanceof IRemoteFileSystemBrowseEvent) { + exception = event.getException(); + if (exception == null) { + browseEvent = (IRemoteFileSystemBrowseEvent) event; + syncNotify(); + } + } } - // Need to sleep to give the connection time to close out - Thread.sleep(100); - } - assertTrue(latch.await(60, TimeUnit.SECONDS)); - } + }; + String targetURL = "scp://" + host + browseDir; //$NON-NLS-1$ + System.out.println("Browsing targetURL=" + targetURL + " with username=" + username); //$NON-NLS-1$ //$NON-NLS-2$ + adapter.setConnectContextForAuthentication(ConnectContextFactory.createUsernamePasswordConnectContext(username, password)); + adapter.sendBrowseRequest(FileIDFactory.getDefault().createFileID(adapter.getBrowseNamespace(), targetURL), listener); + + syncWaitForNotify(60000); + + assertNotNull(browseEvent); - protected void handleFileSystemBrowseEvent(IRemoteFileSystemBrowseEvent event) { - trace("handleFileSystemBrowseEvent(" + event + ")"); //$NON-NLS-1$ //$NON-NLS-2$ - if (event.getException() != null) { - trace(event.getException().toString()); + IRemoteFile[] remoteFiles = browseEvent.getRemoteFiles(); + assertNotNull(remoteFiles); + assertTrue(remoteFiles.length > 1); + + for (int i = 0; i < remoteFiles.length; i++) { + IRemoteFileInfo fInfo = remoteFiles[i].getInfo(); + System.out.println("directory entry=" + i + ";id=" + remoteFiles[i].getID() + ";name=" + fInfo.getName() + ";isDirectory=" + fInfo.isDirectory() + ";size=" + fInfo.getLength() + ";lastModified=" + fInfo.getLastModified()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ } - latch.countDown(); } - public void testFileBrowse() throws Exception { - latch = new CountDownLatch(files.length); - for (int i = 0; i < files.length; i++) { - if (files[i].isDirectory() && files[i].exists()) { - URL url = new URL("scp://" + username + "@localhost:" + files[i].getAbsolutePath()); //$NON-NLS-1$ //$NON-NLS-2$ - System.out.println("Browsing: " + url); //$NON-NLS-1$ - testBrowse(url); - } else { - System.out.println("Skipping: " + files[i].toString()); //$NON-NLS-1$ - latch.countDown(); - } - // Need to sleep to give the connection time to close out - Thread.sleep(100); - } - assertTrue(latch.await(60, TimeUnit.SECONDS)); + public void syncNotify() { + super.syncNotify(); } } |