aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/net/FTPTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/net/FTPTest.java')
-rw-r--r--framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/net/FTPTest.java879
1 files changed, 0 insertions, 879 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/net/FTPTest.java b/framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/net/FTPTest.java
deleted file mode 100644
index 1a22115e..00000000
--- a/framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/net/FTPTest.java
+++ /dev/null
@@ -1,879 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-package org.apache.tools.ant.taskdefs.optional.net;
-
-import static org.apache.tools.ant.AntAssert.assertContains;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Random;
-import java.util.Vector;
-
-import org.apache.commons.net.ftp.FTPClient;
-import org.apache.tools.ant.BuildEvent;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.BuildFileRule;
-import org.apache.tools.ant.DefaultLogger;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.taskdefs.condition.Os;
-import org.apache.tools.ant.types.FileSet;
-import org.apache.tools.ant.util.RetryHandler;
-import org.apache.tools.ant.util.Retryable;
-import org.apache.tools.ant.util.regexp.RegexpMatcher;
-import org.apache.tools.ant.util.regexp.RegexpMatcherFactory;
-import org.junit.After;
-import org.junit.Assume;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-
-//FIXME these tests are more integration than unit tests and report errors badly
-public class FTPTest {
-
- @Rule
- public BuildFileRule buildRule = new BuildFileRule();
-
- // keep track of what operating systems are supported here.
- private boolean supportsSymlinks = Os.isFamily("unix");
-
- private FTPClient ftp;
-
- private boolean loginSuceeded = false;
-
- private String loginFailureMessage;
-
- private String tmpDir = null;
- private String remoteTmpDir = null;
- private String ftpFileSep = null;
- private myFTP myFTPTask = new myFTP();
-
-
- @Before
- public void setUp() {
- buildRule.configureProject("src/etc/testcases/taskdefs/optional/net/ftp.xml");
- Project project = buildRule.getProject();
- project.executeTarget("setup");
- tmpDir = project.getProperty("tmp.dir");
- ftp = new FTPClient();
- ftpFileSep = project.getProperty("ftp.filesep");
- myFTPTask.setSeparator(ftpFileSep);
- myFTPTask.setProject(project);
- remoteTmpDir = myFTPTask.resolveFile(tmpDir);
- String remoteHost = project.getProperty("ftp.host");
- int port = Integer.parseInt(project.getProperty("ftp.port"));
- String remoteUser = project.getProperty("ftp.user");
- String password = project.getProperty("ftp.password");
- boolean connectionSucceeded = false;
- try {
- ftp.connect(remoteHost, port);
- connectionSucceeded = true;
- } catch (Exception ex) {
- loginFailureMessage = "could not connect to host " + remoteHost + " on port " + port;
- }
- if (connectionSucceeded) {
- try {
- ftp.login(remoteUser, password);
- loginSuceeded = true;
- } catch (IOException ioe) {
- loginFailureMessage = "could not log on to " + remoteHost + " as user " + remoteUser;
- }
- }
- }
-
- @After
- public void tearDown() {
- try {
- if (ftp!= null) {
- ftp.disconnect();
- }
- } catch (IOException ioe) {
- // do nothing
- }
- buildRule.getProject().executeTarget("cleanup");
- }
-
- private boolean changeRemoteDir(String remoteDir) {
- boolean result = true;
- try {
- ftp.cwd(remoteDir);
- }
- catch (Exception ex) {
- System.out.println("could not change directory to " + remoteTmpDir);
- result = false;
- }
- return result;
- }
-
- @Test
- public void test1() {
- Assume.assumeTrue(loginFailureMessage, loginSuceeded);
- Assume.assumeTrue("Could not change remote directory", changeRemoteDir(remoteTmpDir));
-
- FTP.FTPDirectoryScanner ds = myFTPTask.newScanner(ftp);
- ds.setBasedir(new File(buildRule.getProject().getBaseDir(), "tmp"));
- ds.setIncludes(new String[] {"alpha"});
- ds.scan();
- compareFiles(ds, new String[] {} ,new String[] {"alpha"});
- }
-
- @Test
- public void test2() {
- Assume.assumeTrue(loginFailureMessage, loginSuceeded);
- Assume.assumeTrue("Could not change remote directory", changeRemoteDir(remoteTmpDir));
- FTP.FTPDirectoryScanner ds = myFTPTask.newScanner(ftp);
- ds.setBasedir(new File(buildRule.getProject().getBaseDir(), "tmp"));
- ds.setIncludes(new String[] {"alpha/"});
- ds.scan();
- compareFiles(ds, new String[] {"alpha/beta/beta.xml",
- "alpha/beta/gamma/gamma.xml"},
- new String[] {"alpha", "alpha/beta", "alpha/beta/gamma"});
- }
-
- @Test
- public void test3() {
- Assume.assumeTrue(loginFailureMessage, loginSuceeded);
- Assume.assumeTrue("Could not change remote directory", changeRemoteDir(remoteTmpDir));
- FTP.FTPDirectoryScanner ds = myFTPTask.newScanner(ftp);
- ds.setBasedir(new File(buildRule.getProject().getBaseDir(), "tmp"));
- ds.scan();
- compareFiles(ds, new String[] {"alpha/beta/beta.xml",
- "alpha/beta/gamma/gamma.xml"},
- new String[] {"alpha", "alpha/beta",
- "alpha/beta/gamma"});
- }
-
- @Test
- public void testFullPathMatchesCaseSensitive() {
- Assume.assumeTrue(loginFailureMessage, loginSuceeded);
- Assume.assumeTrue("Could not change remote directory", changeRemoteDir(remoteTmpDir));
- FTP.FTPDirectoryScanner ds = myFTPTask.newScanner(ftp);
- ds.setBasedir(new File(buildRule.getProject().getBaseDir(), "tmp"));
- ds.setIncludes(new String[] {"alpha/beta/gamma/GAMMA.XML"});
- ds.scan();
- compareFiles(ds, new String[] {}, new String[] {});
- }
-
- @Test
- public void testFullPathMatchesCaseInsensitive() {
- Assume.assumeTrue(loginFailureMessage, loginSuceeded);
- Assume.assumeTrue("Could not change remote directory", changeRemoteDir(remoteTmpDir));
- FTP.FTPDirectoryScanner ds = myFTPTask.newScanner(ftp);
- ds.setCaseSensitive(false);
- ds.setBasedir(new File(buildRule.getProject().getBaseDir(), "tmp"));
- ds.setIncludes(new String[] {"alpha/beta/gamma/GAMMA.XML"});
- ds.scan();
- compareFiles(ds, new String[] {"alpha/beta/gamma/gamma.xml"},
- new String[] {});
- }
-
- @Test
- public void test2ButCaseInsensitive() {
- Assume.assumeTrue(loginFailureMessage, loginSuceeded);
- Assume.assumeTrue("Could not change remote directory", changeRemoteDir(remoteTmpDir));
- FTP.FTPDirectoryScanner ds = myFTPTask.newScanner(ftp);
- ds.setBasedir(new File(buildRule.getProject().getBaseDir(), "tmp"));
- ds.setIncludes(new String[] {"ALPHA/"});
- ds.setCaseSensitive(false);
- ds.scan();
- compareFiles(ds, new String[] {"alpha/beta/beta.xml",
- "alpha/beta/gamma/gamma.xml"},
- new String[] {"alpha", "alpha/beta", "alpha/beta/gamma"});
- }
-
- @Test
- public void test2bisButCaseInsensitive() {
- Assume.assumeTrue(loginFailureMessage, loginSuceeded);
- Assume.assumeTrue("Could not change remote directory", changeRemoteDir(remoteTmpDir));
- FTP.FTPDirectoryScanner ds = myFTPTask.newScanner(ftp);
- ds.setBasedir(new File(buildRule.getProject().getBaseDir(), "tmp"));
- ds.setIncludes(new String[] {"alpha/BETA/gamma/"});
- ds.setCaseSensitive(false);
- ds.scan();
- compareFiles(ds, new String[] {"alpha/beta/gamma/gamma.xml"},
- new String[] {"alpha/beta/gamma"});
- }
-
- @Test
- public void testGetWithSelector() {
- buildRule.executeTarget("ftp-get-with-selector");
- assertContains("selectors are not supported in remote filesets", buildRule.getLog());
- FileSet fsDestination = (FileSet) buildRule.getProject().getReference("fileset-destination-without-selector");
- DirectoryScanner dsDestination = fsDestination.getDirectoryScanner(buildRule.getProject());
- dsDestination.scan();
- String [] sortedDestinationDirectories = dsDestination.getIncludedDirectories();
- String [] sortedDestinationFiles = dsDestination.getIncludedFiles();
- for (int counter = 0; counter < sortedDestinationDirectories.length; counter++) {
- sortedDestinationDirectories[counter] =
- sortedDestinationDirectories[counter].replace(File.separatorChar, '/');
- }
- for (int counter = 0; counter < sortedDestinationFiles.length; counter++) {
- sortedDestinationFiles[counter] =
- sortedDestinationFiles[counter].replace(File.separatorChar, '/');
- }
- FileSet fsSource = (FileSet) buildRule.getProject().getReference("fileset-source-without-selector");
- DirectoryScanner dsSource = fsSource.getDirectoryScanner(buildRule.getProject());
- dsSource.scan();
- compareFiles(dsSource, sortedDestinationFiles, sortedDestinationDirectories);
- }
-
- @Test
- public void testGetFollowSymlinksTrue() {
- Assume.assumeTrue("System does not support Symlinks", supportsSymlinks);
- Assume.assumeTrue(loginFailureMessage, loginSuceeded);
- Assume.assumeTrue("Could not change remote directory", changeRemoteDir(remoteTmpDir));
- buildRule.getProject().executeTarget("ftp-get-directory-symbolic-link");
- FileSet fsDestination = (FileSet) buildRule.getProject().getReference("fileset-destination-without-selector");
- DirectoryScanner dsDestination = fsDestination.getDirectoryScanner(buildRule.getProject());
- dsDestination.scan();
- compareFiles(dsDestination, new String[] {"alpha/beta/gamma/gamma.xml"},
- new String[] {"alpha", "alpha/beta", "alpha/beta/gamma"});
- }
-
- @Test
- public void testGetFollowSymlinksFalse() {
- Assume.assumeTrue("System does not support Symlinks", supportsSymlinks);
- Assume.assumeTrue(loginFailureMessage, loginSuceeded);
- Assume.assumeTrue("Could not change remote directory", changeRemoteDir(remoteTmpDir));
- buildRule.getProject().executeTarget("ftp-get-directory-no-symbolic-link");
- FileSet fsDestination = (FileSet) buildRule.getProject().getReference("fileset-destination-without-selector");
- DirectoryScanner dsDestination = fsDestination.getDirectoryScanner(buildRule.getProject());
- dsDestination.scan();
- compareFiles(dsDestination, new String[] {},
- new String[] {});
- }
-
- @Test
- public void testAllowSymlinks() {
- Assume.assumeTrue("System does not support Symlinks", supportsSymlinks);
- Assume.assumeTrue(loginFailureMessage, loginSuceeded);
- Assume.assumeTrue("Could not change remote directory", changeRemoteDir(remoteTmpDir));
- buildRule.getProject().executeTarget("symlink-setup");
- FTP.FTPDirectoryScanner ds = myFTPTask.newScanner(ftp);
- ds.setBasedir(new File(buildRule.getProject().getBaseDir(), "tmp"));
- ds.setIncludes(new String[] {"alpha/beta/gamma/"});
- ds.setFollowSymlinks(true);
- ds.scan();
- compareFiles(ds, new String[] {"alpha/beta/gamma/gamma.xml"},
- new String[] {"alpha/beta/gamma"});
- }
-
- @Test
- public void testProhibitSymlinks() {
- Assume.assumeTrue("System does not support Symlinks", supportsSymlinks);
- Assume.assumeTrue(loginFailureMessage, loginSuceeded);
- Assume.assumeTrue("Could not change remote directory", changeRemoteDir(remoteTmpDir));
- buildRule.getProject().executeTarget("symlink-setup");
- FTP.FTPDirectoryScanner ds = myFTPTask.newScanner(ftp);
- ds.setBasedir(new File(buildRule.getProject().getBaseDir(), "tmp"));
- ds.setIncludes(new String[] {"alpha/beta/gamma/"});
- ds.setFollowSymlinks(false);
- ds.scan();
- compareFiles(ds, new String[] {}, new String[] {});
- }
-
- @Test
- public void testFileSymlink() {
- Assume.assumeTrue("System does not support Symlinks", supportsSymlinks);
- Assume.assumeTrue(loginFailureMessage, loginSuceeded);
- Assume.assumeTrue("Could not change remote directory", changeRemoteDir(remoteTmpDir));
- buildRule.getProject().executeTarget("symlink-file-setup");
- FTP.FTPDirectoryScanner ds = myFTPTask.newScanner(ftp);
- ds.setBasedir(new File(buildRule.getProject().getBaseDir(), "tmp"));
- ds.setIncludes(new String[] {"alpha/beta/gamma/"});
- ds.setFollowSymlinks(true);
- ds.scan();
- compareFiles(ds, new String[] {"alpha/beta/gamma/gamma.xml"},
- new String[] {"alpha/beta/gamma"});
- }
-
- // father and child pattern test
- @Test
- public void testOrderOfIncludePatternsIrrelevant() {
- Assume.assumeTrue(loginFailureMessage, loginSuceeded);
- Assume.assumeTrue("Could not change remote directory", changeRemoteDir(remoteTmpDir));
- String [] expectedFiles = {"alpha/beta/beta.xml",
- "alpha/beta/gamma/gamma.xml"};
- String [] expectedDirectories = {"alpha/beta", "alpha/beta/gamma" };
- FTP.FTPDirectoryScanner ds = myFTPTask.newScanner(ftp);
- ds.setBasedir(new File(buildRule.getProject().getBaseDir(), "tmp"));
- ds.setIncludes(new String[] {"alpha/be?a/**", "alpha/beta/gamma/"});
- ds.scan();
- compareFiles(ds, expectedFiles, expectedDirectories);
- // redo the test, but the 2 include patterns are inverted
- ds = myFTPTask.newScanner(ftp);
- ds.setBasedir(new File(buildRule.getProject().getBaseDir(), "tmp"));
- ds.setIncludes(new String[] {"alpha/beta/gamma/", "alpha/be?a/**"});
- ds.scan();
- compareFiles(ds, expectedFiles, expectedDirectories);
- }
-
- @Test
- public void testPatternsDifferInCaseScanningSensitive() {
- Assume.assumeTrue(loginFailureMessage, loginSuceeded);
- Assume.assumeTrue("Could not change remote directory", changeRemoteDir(remoteTmpDir));
- FTP.FTPDirectoryScanner ds = myFTPTask.newScanner(ftp);
- ds.setBasedir(new File(buildRule.getProject().getBaseDir(), "tmp"));
- ds.setIncludes(new String[] {"alpha/", "ALPHA/"});
- ds.scan();
- compareFiles(ds, new String[] {"alpha/beta/beta.xml",
- "alpha/beta/gamma/gamma.xml"},
- new String[] {"alpha", "alpha/beta", "alpha/beta/gamma"});
- }
-
- @Test
- public void testPatternsDifferInCaseScanningInsensitive() {
- Assume.assumeTrue(loginFailureMessage, loginSuceeded);
- Assume.assumeTrue("Could not change remote directory", changeRemoteDir(remoteTmpDir));
- FTP.FTPDirectoryScanner ds = myFTPTask.newScanner(ftp);
- ds.setBasedir(new File(buildRule.getProject().getBaseDir(), "tmp"));
- ds.setIncludes(new String[] {"alpha/", "ALPHA/"});
- ds.setCaseSensitive(false);
- ds.scan();
- compareFiles(ds, new String[] {"alpha/beta/beta.xml",
- "alpha/beta/gamma/gamma.xml"},
- new String[] {"alpha", "alpha/beta", "alpha/beta/gamma"});
- }
-
- @Test
- public void testFullpathDiffersInCaseScanningSensitive() {
- Assume.assumeTrue(loginFailureMessage, loginSuceeded);
- Assume.assumeTrue("Could not change remote directory", changeRemoteDir(remoteTmpDir));
- FTP.FTPDirectoryScanner ds = myFTPTask.newScanner(ftp);
- ds.setBasedir(new File(buildRule.getProject().getBaseDir(), "tmp"));
- ds.setIncludes(new String[] {
- "alpha/beta/gamma/gamma.xml",
- "alpha/beta/gamma/GAMMA.XML"
- });
- ds.scan();
- compareFiles(ds, new String[] {"alpha/beta/gamma/gamma.xml"},
- new String[] {});
- }
-
- @Test
- public void testFullpathDiffersInCaseScanningInsensitive() {
- Assume.assumeTrue(loginFailureMessage, loginSuceeded);
- Assume.assumeTrue("Could not change remote directory", changeRemoteDir(remoteTmpDir));
- FTP.FTPDirectoryScanner ds = myFTPTask.newScanner(ftp);
- ds.setBasedir(new File(buildRule.getProject().getBaseDir(), "tmp"));
- ds.setIncludes(new String[] {
- "alpha/beta/gamma/gamma.xml",
- "alpha/beta/gamma/GAMMA.XML"
- });
- ds.setCaseSensitive(false);
- ds.scan();
- compareFiles(ds, new String[] {"alpha/beta/gamma/gamma.xml"},
- new String[] {});
- }
-
- @Test
- public void testParentDiffersInCaseScanningSensitive() {
- Assume.assumeTrue(loginFailureMessage, loginSuceeded);
- Assume.assumeTrue("Could not change remote directory", changeRemoteDir(remoteTmpDir));
- FTP.FTPDirectoryScanner ds = myFTPTask.newScanner(ftp);
- ds.setBasedir(new File(buildRule.getProject().getBaseDir(), "tmp"));
- ds.setIncludes(new String[] {"alpha/", "ALPHA/beta/"});
- ds.scan();
- compareFiles(ds, new String[] {"alpha/beta/beta.xml",
- "alpha/beta/gamma/gamma.xml"},
- new String[] {"alpha", "alpha/beta", "alpha/beta/gamma"});
- }
-
- @Test
- public void testParentDiffersInCaseScanningInsensitive() {
- Assume.assumeTrue(loginFailureMessage, loginSuceeded);
- Assume.assumeTrue("Could not change remote directory", changeRemoteDir(remoteTmpDir));
- FTP.FTPDirectoryScanner ds = myFTPTask.newScanner(ftp);
- ds.setBasedir(new File(buildRule.getProject().getBaseDir(), "tmp"));
- ds.setIncludes(new String[] {"alpha/", "ALPHA/beta/"});
- ds.setCaseSensitive(false);
- ds.scan();
- compareFiles(ds, new String[] {"alpha/beta/beta.xml",
- "alpha/beta/gamma/gamma.xml"},
- new String[] {"alpha", "alpha/beta", "alpha/beta/gamma"});
- }
-
- @Test
- public void testExcludeOneFile() {
- Assume.assumeTrue(loginFailureMessage, loginSuceeded);
- Assume.assumeTrue("Could not change remote directory", changeRemoteDir(remoteTmpDir));
- FTP.FTPDirectoryScanner ds = myFTPTask.newScanner(ftp);
- ds.setBasedir(new File(buildRule.getProject().getBaseDir(), "tmp"));
- ds.setIncludes(new String[] {
- "**/*.xml"
- });
- ds.setExcludes(new String[] {
- "alpha/beta/b*xml"
- });
- ds.scan();
- compareFiles(ds, new String[] {"alpha/beta/gamma/gamma.xml"},
- new String[] {});
- }
-
- @Test
- public void testExcludeHasPrecedence() {
- Assume.assumeTrue(loginFailureMessage, loginSuceeded);
- Assume.assumeTrue("Could not change remote directory", changeRemoteDir(remoteTmpDir));
- FTP.FTPDirectoryScanner ds = myFTPTask.newScanner(ftp);
- ds.setBasedir(new File(buildRule.getProject().getBaseDir(), "tmp"));
- ds.setIncludes(new String[] {
- "alpha/**"
- });
- ds.setExcludes(new String[] {
- "alpha/**"
- });
- ds.scan();
- compareFiles(ds, new String[] {},
- new String[] {});
-
- }
-
- @Test
- public void testAlternateIncludeExclude() {
- Assume.assumeTrue(loginFailureMessage, loginSuceeded);
- Assume.assumeTrue("Could not change remote directory", changeRemoteDir(remoteTmpDir));
- FTP.FTPDirectoryScanner ds = myFTPTask.newScanner(ftp);
- ds.setBasedir(new File(buildRule.getProject().getBaseDir(), "tmp"));
- ds.setIncludes(new String[] {
- "alpha/**",
- "alpha/beta/gamma/**"
- });
- ds.setExcludes(new String[] {
- "alpha/beta/**"
- });
- ds.scan();
- compareFiles(ds, new String[] {},
- new String[] {"alpha"});
-
- }
-
- @Test
- public void testAlternateExcludeInclude() {
- Assume.assumeTrue(loginFailureMessage, loginSuceeded);
- Assume.assumeTrue("Could not change remote directory", changeRemoteDir(remoteTmpDir));
- FTP.FTPDirectoryScanner ds = myFTPTask.newScanner(ftp);
- ds.setBasedir(new File(buildRule.getProject().getBaseDir(), "tmp"));
- ds.setExcludes(new String[] {
- "alpha/**",
- "alpha/beta/gamma/**"
- });
- ds.setIncludes(new String[] {
- "alpha/beta/**"
- });
- ds.scan();
- compareFiles(ds, new String[] {},
- new String[] {});
-
- }
-
- /**
- * Test inspired by Bug#1415.
- */
- @Test
- public void testChildrenOfExcludedDirectory() {
- Assume.assumeTrue(loginFailureMessage, loginSuceeded);
- Assume.assumeTrue("Could not change remote directory", changeRemoteDir(remoteTmpDir));
- buildRule.getProject().executeTarget("children-of-excluded-dir-setup");
- FTP.FTPDirectoryScanner ds = myFTPTask.newScanner(ftp);
- ds.setBasedir(new File(buildRule.getProject().getBaseDir(), "tmp"));
- ds.setExcludes(new String[] {"alpha/**"});
- ds.scan();
- compareFiles(ds, new String[] {"delta/delta.xml"},
- new String[] {"delta"});
-
- ds = myFTPTask.newScanner(ftp);
- Assume.assumeTrue("Could not change remote directory", changeRemoteDir(remoteTmpDir));
- ds.setBasedir(new File(buildRule.getProject().getBaseDir(), "tmp"));
- ds.setExcludes(new String[] {"alpha"});
- ds.scan();
- compareFiles(ds, new String[] {"alpha/beta/beta.xml",
- "alpha/beta/gamma/gamma.xml",
- "delta/delta.xml"},
- new String[] {"alpha/beta", "alpha/beta/gamma", "delta"});
-
- }
-
- /**
- * This class enables the use of the log messages as a way of testing
- * the number of files actually transferred.
- * It uses the ant regular expression mechanism to get a regex parser
- * to parse the log output.
- */
- private class CountLogListener extends DefaultLogger {
- private Vector lastMatchGroups = null;
- private RegexpMatcher matcher = new RegexpMatcherFactory().newRegexpMatcher();
-
- /**
- * The only constructor for a CountLogListener
- * @param pattern a regular expression pattern. It should have
- * one parenthesized group and that group should contain the
- * number desired.
- */
- public CountLogListener(String pattern) {
- super();
- this.matcher.setPattern(pattern);
- }
-
-
- /*
- * @param event the build event that is being logged.
- */
- public void messageLogged(BuildEvent event) {
- String message = event.getMessage();
- if (this.matcher.matches(message)) {
- lastMatchGroups = this.matcher.getGroups(message);
- }
- super.messageLogged(event);
- }
-
- /**
- * returns the desired number that results from parsing the log
- * message
- * @return the number of files indicated in the desired message or -1
- * if a matching log message was never found.
- */
- public int getCount() {
- if (this.lastMatchGroups == null) {
- return -1;
- }
- return Integer.parseInt((String) this.lastMatchGroups.get(1));
- }
- }
-
- /**
- * This class enables the use of the log to count the number
- * of times a message has been emitted.
- */
- private class LogCounter extends DefaultLogger {
- private Map searchMap = new HashMap();
- private int matchCount;
-
- public void addLogMessageToSearch(String message) {
- searchMap.put(message, new Integer(0));
- }
-
- /*
- * @param event the build event that is being logged.
- */
- public void messageLogged(BuildEvent event) {
- String message = event.getMessage();
- Integer mcnt = (Integer) searchMap.get(message);
- if (null != mcnt) {
- searchMap.put(message, new Integer(mcnt.intValue() + 1));
- }
- super.messageLogged(event);
- }
-
- /**
- * @return the number of times that the looked for message was sent
- * to the log
- */
- public int getMatchCount(String message) {
- Integer mcnt = (Integer) searchMap.get(message);
- if (null != mcnt) {
- return mcnt.intValue();
- }
- return 0;
- }
- }
- /**
- * Tests the combination of the newer parameter and the
- * serverTimezoneConfig parameter in the PUT action. The default
- * configuration is an ftp server on localhost which formats
- * timestamps as GMT.
- */
- @Test
- public void testTimezonePut() {
- CountLogListener log = new CountLogListener("(\\d+) files? sent");
- buildRule.getProject().executeTarget("timed.test.setup");
- buildRule.getProject().addBuildListener(log);
- buildRule.getProject().executeTarget("timed.test.put.older");
- assertEquals(1, log.getCount());
- }
-
- /**
- * Tests the combination of the newer parameter and the
- * serverTimezoneConfig parameter in the GET action. The default
- * configuration is an ftp server on localhost which formats
- * timestamps as GMT.
- */
- @Test
- public void testTimezoneGet() {
- CountLogListener log = new CountLogListener("(\\d+) files? retrieved");
- buildRule.getProject().executeTarget("timed.test.setup");
- buildRule.getProject().addBuildListener(log);
- buildRule.getProject().executeTarget("timed.test.get.older");
- assertEquals(3, log.getCount());
- }
-
-
- /**
- * Tests that the presence of one of the server config params forces
- * the system type to Unix if not specified.
- */
- @Test
- public void testConfiguration1() {
- int[] expectedCounts = {
- 1,1,0,1,0,0,0
- };
- performConfigTest("configuration.1", expectedCounts);
-
- }
-
- /**
- * Tests the systemTypeKey attribute.
- */
- @Test
- public void testConfiguration2() {
- int[] expectedCounts = {
- 1,0,0,1,1,0,0
- };
- performConfigTest("configuration.2", expectedCounts);
-
- }
-
- /**
- * Tests the systemTypeKey attribute with UNIX specified.
- */
- @Test
- public void testConfiguration3() {
- int[] expectedCounts = {
- 1,0,1,0,0,1,0
- };
- performConfigTest("configuration.3", expectedCounts);
-
- }
-
- @Test
- public void testConfigurationLang() {
- int[] expectedCounts = {
- 1,1,0,0,0,0,1
- };
- performConfigTest("configuration.lang.good", expectedCounts);
-
- try {
- performConfigTest("configuration.lang.bad", expectedCounts);
- fail("BuildException Expected");
- } catch (Exception bx) {
- assertTrue(bx instanceof BuildException);
- }
- }
- /**
- * Tests the systemTypeKey attribute.
- */
- @Test
- public void testConfigurationNone() {
- int[] expectedCounts = {
- 0,0,0,0,0,0,0
- };
- performConfigTest("configuration.none", expectedCounts);
-
- }
-
- private void performConfigTest(String target, int[] expectedCounts) {
- String[] messages = new String[]{
- "custom configuration",
- "custom config: system key = default (UNIX)",
- "custom config: system key = UNIX",
- "custom config: server time zone ID = " + buildRule.getProject().getProperty("ftp.server.timezone"),
- "custom config: system key = WINDOWS",
- "custom config: default date format = yyyy/MM/dd HH:mm",
- "custom config: server language code = de"
-
- };
- LogCounter counter = new LogCounter();
- for (int i=0; i < messages.length; i++) {
- counter.addLogMessageToSearch(messages[i]);
- }
-
- buildRule.getProject().addBuildListener(counter);
- buildRule.getProject().executeTarget(target);
- for (int i=0; i < messages.length; i++) {
- assertEquals("target "+target+":message "+ i, expectedCounts[i], counter.getMatchCount(messages[i]));
- }
-
- }
-
-
- /**
- * this test is inspired by a user reporting that deletions of directories with the ftp task do not work
- */
- @Test
- public void testFTPDelete() {
- buildRule.getProject().executeTarget("ftp-delete");
- }
-
- private void compareFiles(DirectoryScanner ds, String[] expectedFiles,
- String[] expectedDirectories) {
- String includedFiles[] = ds.getIncludedFiles();
- String includedDirectories[] = ds.getIncludedDirectories();
- assertEquals("file present: ", expectedFiles.length,
- includedFiles.length);
- assertEquals("directories present: ", expectedDirectories.length,
- includedDirectories.length);
-
- for (int counter=0; counter < includedFiles.length; counter++) {
- includedFiles[counter] = includedFiles[counter].replace(File.separatorChar, '/');
- }
- Arrays.sort(includedFiles);
- for (int counter=0; counter < includedDirectories.length; counter++) {
- includedDirectories[counter] = includedDirectories[counter]
- .replace(File.separatorChar, '/');
- }
- Arrays.sort(includedDirectories);
- for (int counter=0; counter < includedFiles.length; counter++) {
- assertEquals(expectedFiles[counter], includedFiles[counter]);
- }
- for (int counter=0; counter < includedDirectories.length; counter++) {
- assertEquals(expectedDirectories[counter], includedDirectories[counter]);
- counter++;
- }
- }
- private static class myFTP extends FTP {
- public FTP.FTPDirectoryScanner newScanner(FTPClient client) {
- return new FTP.FTPDirectoryScanner(client);
- }
- // provide public visibility
- public String resolveFile(String file) {
- return super.resolveFile(file);
- }
- }
-
-
- public abstract static class myRetryableFTP extends FTP {
- private final int numberOfFailuresToSimulate;
- private int simulatedFailuresLeft;
-
- protected myRetryableFTP(int numberOfFailuresToSimulate) {
- this.numberOfFailuresToSimulate = numberOfFailuresToSimulate;
- this.simulatedFailuresLeft = numberOfFailuresToSimulate;
- }
-
- protected void getFile(FTPClient ftp, String dir, String filename)
- throws IOException, BuildException
- {
- if (this.simulatedFailuresLeft > 0) {
- this.simulatedFailuresLeft--;
- throw new IOException("Simulated failure for testing");
- }
- super.getFile(ftp, dir, filename);
- }
- protected void executeRetryable(RetryHandler h, Retryable r,
- String filename) throws IOException
- {
- this.simulatedFailuresLeft = this.numberOfFailuresToSimulate;
- super.executeRetryable(h, r, filename);
- }
- }
- public static class oneFailureFTP extends myRetryableFTP {
- public oneFailureFTP() {
- super(1);
- }
- }
- public static class twoFailureFTP extends myRetryableFTP {
- public twoFailureFTP() {
- super(2);
- }
- }
- public static class threeFailureFTP extends myRetryableFTP {
- public threeFailureFTP() {
- super(3);
- }
- }
-
- public static class randomFailureFTP extends myRetryableFTP {
- public randomFailureFTP() {
- super(new Random().nextInt(Short.MAX_VALUE));
- }
- }
- public void testGetWithSelectorRetryable1() {
- buildRule.getProject().addTaskDefinition("ftp", oneFailureFTP.class);
- try {
- buildRule.getProject().executeTarget("ftp-get-with-selector-retryable");
- } catch (BuildException bx) {
- fail("Two retries expected, failed after one.");
- }
- }
-
- @Test
- public void testGetWithSelectorRetryable2() {
- buildRule.getProject().addTaskDefinition("ftp", twoFailureFTP.class);
- try {
- buildRule.getProject().executeTarget("ftp-get-with-selector-retryable");
- } catch (BuildException bx) {
- fail("Two retries expected, failed after two.");
- }
- }
-
- @Test
- public void testGetWithSelectorRetryable3() {
- buildRule.getProject().addTaskDefinition("ftp", threeFailureFTP.class);
- try {
- buildRule.getProject().executeTarget("ftp-get-with-selector-retryable");
- fail("Two retries expected, continued after two.");
- } catch (BuildException bx) {
- }
- }
-
- @Test
- public void testGetWithSelectorRetryableRandom() {
- buildRule.getProject().addTaskDefinition("ftp", randomFailureFTP.class);
- try {
- buildRule.getProject().setProperty("ftp.retries", "forever");
- buildRule.getProject().executeTarget("ftp-get-with-selector-retryable");
- } catch (BuildException bx) {
- fail("Retry forever specified, but failed.");
- }
- }
-
- @Test
- public void testInitialCommand() {
- performCommandTest("test-initial-command", new int[] { 1,0 });
- }
-
- @Test
- public void testSiteAction() {
- performCommandTest("test-site-action", new int[] { 1,0 });
- }
-
- private void performCommandTest(String target, int[] expectedCounts) {
- String[] messages = new String[]{
- "Doing Site Command: umask 222",
- "Failed to issue Site Command: umask 222",
-
- };
- LogCounter counter = new LogCounter();
- for (int i=0; i < messages.length; i++) {
- counter.addLogMessageToSearch(messages[i]);
- }
-
- buildRule.getProject().addBuildListener(counter);
- buildRule.getProject().executeTarget(target);
- for (int i=0; i < messages.length; i++) {
- assertEquals("target "+target+":message "+ i, expectedCounts[i], counter.getMatchCount(messages[i]));
- }
-
- }
-
-}