*** empty log message ***
diff --git a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/TeamTest.java b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/TeamTest.java
index feb37bf..87060a5 100644
--- a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/TeamTest.java
+++ b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/TeamTest.java
@@ -1,18 +1,82 @@
package org.eclipse.team.tests.core;
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.tests.harness.EclipseWorkspaceTest;
public class TeamTest extends EclipseWorkspaceTest {
+
+ protected static final int RANDOM_CONTENT_SIZE = 3876;
+ protected static final String PLATFORM_NEWLINE = System.getProperty("line.separator");
+
public TeamTest() {
super();
}
public TeamTest(String name) {
super(name);
}
+
+ // Assert that the two containers have equal contents
+ protected void assertEquals(IContainer container1, IContainer container2) throws CoreException {
+ assertEquals(container1.getName(), container2.getName());
+ List members1 = new ArrayList();
+ members1.addAll(Arrays.asList(container1.members()));
+
+ List members2 = new ArrayList();
+ members2.addAll(Arrays.asList(container2.members()));
+
+ assertTrue(members1.size() == members2.size());
+ for (int i=0;i<members1.size();i++) {
+ IResource member1 = (IResource)members1.get(i);
+ IResource member2 = container2.findMember(member1.getName());
+ assertNotNull(member2);
+ assertEquals(member1, member2);
+ }
+ }
+
+ // Assert that the two files have equal contents
+ protected void assertEquals(IFile file1, IFile file2) throws CoreException {
+ assertEquals(file1.getName(), file2.getName());
+ assertTrue(compareContent(file1.getContents(), file2.getContents()));
+ }
+
+ // Assert that the two projects have equal contents ignoreing the project name
+ // and the .vcm_meta file
+ protected void assertEquals(IProject container1, IProject container2) throws CoreException {
+ List members1 = new ArrayList();
+ members1.addAll(Arrays.asList(container1.members()));
+ members1.remove(container1.findMember(".project"));
+
+ List members2 = new ArrayList();
+ members2.addAll(Arrays.asList(container2.members()));
+ members2.remove(container2.findMember(".project"));
+
+ assertTrue("Number of children differs for " + container1.getFullPath(), members1.size() == members2.size());
+ for (int i=0;i<members1.size();i++) {
+ IResource member1 = (IResource)members1.get(i);
+ IResource member2 = container2.findMember(member1.getName());
+ assertNotNull(member2);
+ assertEquals(member1, member2);
+ }
+ }
+ protected void assertEquals(IResource resource1, IResource resource2) throws CoreException {
+ assertEquals(resource1.getType(), resource2.getType());
+ if (resource1.getType() == IResource.FILE)
+ assertEquals((IFile)resource1, (IFile)resource2);
+ else
+ assertEquals((IContainer)resource1, (IContainer)resource2);
+ }
protected IProject getNamedTestProject(String name) throws CoreException {
IProject target = getWorkspace().getRoot().getProject(name);
@@ -32,4 +96,61 @@
protected IStatus getTeamTestStatus(int severity) {
return new Status(severity, "org.eclipse.team.tests.core", 0, "team status", null);
}
+
+ /**
+ * Return the average size of randomly generated contents for files that are created
+ * by the buildResources(IContainer, String[], boolean) methd.
+ * Subclasses can override to change the behavior
+ */
+ protected int getAverageRandomContentSize() {
+ return RANDOM_CONTENT_SIZE;
+ }
+
+ /**
+ * genertates Random content meand to be written in a File
+ */
+ protected static InputStream getRandomContents(int averageSize) {
+
+ StringBuffer content = new StringBuffer();
+ int contentSize;
+
+ content.append("Random file generated for test" + PLATFORM_NEWLINE);
+
+ contentSize = (int) Math.round(averageSize * 2 * Math.random());
+ for (int i=0; i < contentSize; i++) {
+
+ if (Math.random() > 0.9) {
+ content.append(PLATFORM_NEWLINE);
+ }
+
+ content.append((char)('\u0021' + Math.round(60 * Math.random())));
+ }
+
+ return new ByteArrayInputStream(content.toString().getBytes());
+ }
+
+ /**
+ * Return a collection of resources defined by hierarchy. The resources
+ * are added to the workspace and to the file system.
+ */
+ protected IResource[] buildResources(IContainer container, String[] hierarchy, boolean includeContainer) throws CoreException {
+ List resources = new ArrayList(hierarchy.length + 1);
+ resources.addAll(Arrays.asList(buildResources(container, hierarchy)));
+ if (includeContainer)
+ resources.add(container);
+ IResource[] result = (IResource[]) resources.toArray(new IResource[resources.size()]);
+ ensureExistsInWorkspace(result, true);
+ for (int i = 0; i < result.length; i++) {
+ if (result[i].getType() == IResource.FILE)
+ // 3786 bytes is the average size of Eclipse Java files!
+ ((IFile) result[i]).setContents(getRandomContents(getAverageRandomContentSize()), true, false, null);
+ }
+ return result;
+ }
+
+ protected IProject createUniqueTestProject(String prefix, String[] hierarchy) throws CoreException {
+ IProject project = getUniqueTestProject(prefix);
+ buildResources(project, hierarchy, true);
+ return project;
+ }
}
diff --git a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/ftp/ClientTest.java b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/ftp/ClientTest.java
index 2eea918..05d61db 100644
--- a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/ftp/ClientTest.java
+++ b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/ftp/ClientTest.java
@@ -14,10 +14,18 @@
import junit.framework.Test;
import junit.framework.TestSuite;
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Path;
import org.eclipse.team.internal.ftp.FTPException;
import org.eclipse.team.internal.ftp.client.FTPClient;
+import org.eclipse.team.internal.ftp.client.FTPDirectoryEntry;
import org.eclipse.team.tests.core.TeamTest;
public class ClientTest extends TeamTest {
@@ -48,23 +56,99 @@
return FTPTestSetup.openFTPConnection(getURL());
}
- public void testCreateDirectory() throws FTPException {
- FTPClient client = openFTPConnection();
- try {
- client.createDirectory("testCreateDirectory", DEFAULT_PROGRESS_MONITOR);
- client.deleteDirectory("testCreateDirectory", DEFAULT_PROGRESS_MONITOR);
- } finally {
- client.close(DEFAULT_PROGRESS_MONITOR);
+ public void putContainer(IContainer container, FTPClient client) throws FTPException, CoreException {
+ client.createDirectory(container.getName(), DEFAULT_PROGRESS_MONITOR);
+ client.changeDirectory(container.getName(), DEFAULT_PROGRESS_MONITOR);
+ IResource[] members = container.members();
+ for (int i = 0; i < members.length; i++) {
+ IResource resource = members[i];
+ if (resource.getType() == IResource.FILE) {
+ client.putFile(resource.getName(), (IFile)resource, false, DEFAULT_PROGRESS_MONITOR);
+ } else {
+ putContainer((IContainer)resource, client);
+ }
}
+ client.changeDirectory(FTPClient.PARENT_DIRECTORY, DEFAULT_PROGRESS_MONITOR);
}
- public void testSimpleTransfer() throws FTPException {
+ public void getAll(String sourceFolder, IContainer container, FTPClient client) throws FTPException, CoreException {
+ if (sourceFolder.indexOf('/') == 0) {
+ sourceFolder = sourceFolder.substring(1);
+ }
+ client.changeDirectory(sourceFolder, DEFAULT_PROGRESS_MONITOR);
+ if ( ! container.exists()) {
+ ((IFolder)container).create(false, true, DEFAULT_PROGRESS_MONITOR);
+ }
+ FTPDirectoryEntry[] entries = client.listFiles(null, DEFAULT_PROGRESS_MONITOR);
+ for (int i = 0; i < entries.length; i++) {
+ FTPDirectoryEntry entry = entries[i];
+ if (entry.hasFileSemantics()) {
+ client.getFile(entry.getName(), container.getFile(new Path(entry.getName())), false, false, DEFAULT_PROGRESS_MONITOR);
+ } else if (entry.hasDirectorySemantics()) {
+ getAll(entry.getName(), container.getFolder(new Path(entry.getName())), client);
+ }
+ }
+ // Assumes sourceFolder is a one segment path
+ client.changeDirectory(FTPClient.PARENT_DIRECTORY, DEFAULT_PROGRESS_MONITOR);
+ }
+
+ public void testSimpleFileTransfer() throws FTPException, CoreException {
+ String fileName = "file1.txt";
+ IProject project = createUniqueTestProject("testSimpleFileTransferSource", new String[] {fileName});
FTPClient client = openFTPConnection();
try {
- client.createDirectory("testCreateDirectory", DEFAULT_PROGRESS_MONITOR);
- client.deleteDirectory("testCreateDirectory", DEFAULT_PROGRESS_MONITOR);
+ client.createDirectory(project.getName(), DEFAULT_PROGRESS_MONITOR);
+ client.changeDirectory(project.getName(), DEFAULT_PROGRESS_MONITOR);
+ client.putFile(fileName, project.getFile(fileName), false, DEFAULT_PROGRESS_MONITOR);
+ client.getFile(fileName, project.getFile("CopyOf" + fileName), false, false, DEFAULT_PROGRESS_MONITOR);
} finally {
client.close(DEFAULT_PROGRESS_MONITOR);
}
+ assertTrue(compareContent(project.getFile(fileName).getContents(), project.getFile("CopyOf" + fileName).getContents()));
}
+
+ public void testDeepFileTransfer() throws FTPException, CoreException {
+ String deepFileName = "folder2/folder3/deep.txt";
+ IProject project = createUniqueTestProject("testDeepFileTransfer",
+ new String[] {"file1.txt", "folder1/a.txt", "folder1/b.txt", deepFileName});
+ FTPClient client = openFTPConnection();
+ try {
+ putContainer(project, client);
+ client.changeDirectory(project.getName(), DEFAULT_PROGRESS_MONITOR);
+ client.putFile(deepFileName, project.getFile(deepFileName), false, DEFAULT_PROGRESS_MONITOR);
+ client.getFile(deepFileName, project.getFile("deepFile"), false, false, DEFAULT_PROGRESS_MONITOR);
+ } finally {
+ client.close(DEFAULT_PROGRESS_MONITOR);
+ }
+ assertTrue(compareContent(project.getFile(deepFileName).getContents(), project.getFile("deepFile").getContents()));
+ }
+
+ public void testProjectTransfer() throws FTPException, CoreException {
+ IProject project = createUniqueTestProject("testProjectTransfer",
+ new String[] {"file1.txt", "folder1/a.txt", "folder1/b.txt", "folder2/folder3/"});
+ IProject copy = getUniqueTestProject("testProjectTransferDest");
+ FTPClient client = openFTPConnection();
+ try {
+ putContainer(project, client);
+ getAll(project.getName(), copy, client);
+ } finally {
+ client.close(DEFAULT_PROGRESS_MONITOR);
+ }
+ assertEquals(project, copy);
+ }
+
+ public void testFolderTransfer() throws FTPException, CoreException {
+ IProject project = createUniqueTestProject("testFolderTransfer",
+ new String[] {"file1.txt", "folder1/a.txt", "folder1/b.txt", "folder2/folder3/"});
+ IProject copy = getUniqueTestProject("testProjectTransferDest");
+ FTPClient client = openFTPConnection();
+ try {
+ putContainer(project, client);
+ getAll(project.getFolder("folder1").getFullPath().toString(), copy.getFolder("folder1"), client);
+ } finally {
+ client.close(DEFAULT_PROGRESS_MONITOR);
+ }
+ assertEquals(project.getFolder("folder1"), copy.getFolder("folder1"));
+ }
+
}
diff --git a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/ftp/FTPTestSetup.java b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/ftp/FTPTestSetup.java
index 3790be9..35d123f 100644
--- a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/ftp/FTPTestSetup.java
+++ b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/ftp/FTPTestSetup.java
@@ -34,6 +34,8 @@
public static final String FTP_URL;
public static final boolean SCRUB_URL;
+ public static final boolean DEBUG;
+ public static final String SCRUB_DISABLE_FILE = ".donotscrub";
private static final IProgressMonitor DEFAULT_PROGRESS_MONITOR = new NullProgressMonitor();
@@ -44,6 +46,7 @@
loadProperties();
FTP_URL = System.getProperty("eclipse.ftp.url");
SCRUB_URL = Boolean.valueOf(System.getProperty("eclipse.ftp.init", "false")).booleanValue();
+ DEBUG = Boolean.valueOf(System.getProperty("eclipse.ftp.debug", "false")).booleanValue();
}
public static void loadProperties() {
@@ -84,11 +87,17 @@
protected void scrubCurrentDirectory(FTPClient client) throws FTPException {
FTPDirectoryEntry[] entries = client.listFiles(null, DEFAULT_PROGRESS_MONITOR);
for (int i = 0; i < entries.length; i++) {
+ if (entries[i].getName().equals(SCRUB_DISABLE_FILE)) return;
+ }
+ for (int i = 0; i < entries.length; i++) {
FTPDirectoryEntry entry = entries[i];
if (entry.hasFileSemantics()) {
client.deleteFile(entry.getName(), DEFAULT_PROGRESS_MONITOR);
}
if (entry.hasDirectorySemantics()) {
+ client.changeDirectory(entry.getName(), DEFAULT_PROGRESS_MONITOR);
+ scrubCurrentDirectory(client);
+ client.changeDirectory(FTPClient.PARENT_DIRECTORY, DEFAULT_PROGRESS_MONITOR);
client.deleteDirectory(entry.getName(), DEFAULT_PROGRESS_MONITOR);
}
}
@@ -97,7 +106,7 @@
protected URL setupURL(String urlString) throws MalformedURLException, FTPException {
// Give some info about which repository the tests are running against
- System.out.println("Connecting to: " + urlString);
+ if (DEBUG) System.out.println("Connecting to: " + urlString);
// Validate that we can connect, also creates and caches the repository location. This
// is important for the UI tests.
@@ -108,6 +117,7 @@
// Initialize the repo if requested
// For safety, do not scrub if no path is provided
if( SCRUB_URL && ! new Path(url.getPath()).isEmpty()) {
+ if (DEBUG) System.out.println("Scrubbing: " + url.getPath());
scrubCurrentDirectory(client);
}
} finally {
@@ -125,25 +135,35 @@
FTPServerLocation location = FTPServerLocation.fromURL(url, false);
FTPClient client = new FTPClient(location, null, getListener());
client.open(DEFAULT_PROGRESS_MONITOR);
+ String urlPath = url.getPath();
+ // Strip leading slash
+ if (urlPath.indexOf('/') == 0) {
+ urlPath = urlPath.substring(1);
+ }
try {
- client.createDirectory(url.getPath(), DEFAULT_PROGRESS_MONITOR);
+ client.createDirectory(urlPath, DEFAULT_PROGRESS_MONITOR);
} catch (FTPException e) {
// Ignore the exception
}
- client.changeDirectory(url.getPath(), DEFAULT_PROGRESS_MONITOR);
+ try {
+ client.changeDirectory(urlPath, DEFAULT_PROGRESS_MONITOR);
+ } catch (FTPException e) {
+ client.close(DEFAULT_PROGRESS_MONITOR);
+ throw e;
+ }
return client;
}
public static IFTPClientListener getListener() {
return new IFTPClientListener() {
public void responseReceived(int responseCode, String responseText) {
- System.out.println(responseText);
+ if (DEBUG) System.out.println(responseText);
}
public void requestSent(String command, String argument) {
if (argument != null) {
- System.out.println(command + " " + argument);
+ if (DEBUG) System.out.println(command + " " + argument);
} else {
- System.out.println(command);
+ if (DEBUG) System.out.println(command);
}
}
};