You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by bo...@apache.org on 2017/12/01 15:49:40 UTC
[17/23] ant git commit: Normalise tabulation and line breaks (cf
master)
http://git-wip-us.apache.org/repos/asf/ant/blob/0ed7f4ab/src/tests/junit/org/apache/tools/ant/taskdefs/optional/net/FTPTest.java
----------------------------------------------------------------------
diff --git a/src/tests/junit/org/apache/tools/ant/taskdefs/optional/net/FTPTest.java b/src/tests/junit/org/apache/tools/ant/taskdefs/optional/net/FTPTest.java
index 954a75b..c7fab26 100644
--- a/src/tests/junit/org/apache/tools/ant/taskdefs/optional/net/FTPTest.java
+++ b/src/tests/junit/org/apache/tools/ant/taskdefs/optional/net/FTPTest.java
@@ -1,879 +1,879 @@
-/*
- * 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]));
- }
-
- }
-
-}
+/*
+ * 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]));
+ }
+
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/ant/blob/0ed7f4ab/src/tests/junit/org/apache/tools/ant/taskdefs/optional/script/ScriptDefTest.java
----------------------------------------------------------------------
diff --git a/src/tests/junit/org/apache/tools/ant/taskdefs/optional/script/ScriptDefTest.java b/src/tests/junit/org/apache/tools/ant/taskdefs/optional/script/ScriptDefTest.java
index 77c7036..5d4d4cf 100644
--- a/src/tests/junit/org/apache/tools/ant/taskdefs/optional/script/ScriptDefTest.java
+++ b/src/tests/junit/org/apache/tools/ant/taskdefs/optional/script/ScriptDefTest.java
@@ -1,146 +1,146 @@
-/*
- * 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.script;
-
-import org.apache.tools.ant.AntAssert;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.BuildFileRule;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.FileSet;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-
-import java.io.File;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-/**
- * Tests the examples of the <scriptdef> task.
- *
- * @since Ant 1.6
- */
-public class ScriptDefTest {
-
- @Rule
- public BuildFileRule buildRule = new BuildFileRule();
-
- @Before
- public void setUp() {
- buildRule.configureProject("src/etc/testcases/taskdefs/optional/script/scriptdef.xml");
- }
-
- @Test
- public void testSimple() {
- buildRule.executeTarget("simple");
- // get the fileset and its basedir
- Project p = buildRule.getProject();
- FileSet fileset = (FileSet) p.getReference("testfileset");
- File baseDir = fileset.getDir(p);
- String log = buildRule.getLog();
- assertTrue("Expecting attribute value printed",
- log.indexOf("Attribute attr1 = test") != -1);
-
- assertTrue("Expecting nested element value printed",
- log.indexOf("Fileset basedir = " + baseDir.getAbsolutePath()) != -1);
- }
-
- @Test
- public void testNoLang() {
- try {
- buildRule.executeTarget("nolang");
- fail("Absence of language attribute not detected");
- } catch(BuildException ex) {
- AntAssert.assertContains("requires a language attribute", ex.getMessage());
- }
- }
-
- @Test
- public void testNoName() {
- try {
- buildRule.executeTarget("noname");
- fail("Absence of name attribute not detected");
- } catch(BuildException ex) {
- AntAssert.assertContains("scriptdef requires a name attribute", ex.getMessage());
- }
- }
-
- @Test
- public void testNestedByClassName() {
- buildRule.executeTarget("nestedbyclassname");
- // get the fileset and its basedir
- Project p = buildRule.getProject();
- FileSet fileset = (FileSet) p.getReference("testfileset");
- File baseDir = fileset.getDir(p);
- String log = buildRule.getLog();
- assertTrue("Expecting attribute value to be printed",
- log.indexOf("Attribute attr1 = test") != -1);
-
- assertTrue("Expecting nested element value to be printed",
- log.indexOf("Fileset basedir = " + baseDir.getAbsolutePath()) != -1);
- }
-
- @Test
- public void testNoElement() {
- buildRule.executeTarget("noelement");
- assertEquals("Attribute attr1 = test", buildRule.getOutput().trim());
- }
-
- @Test
- public void testException() {
- try {
- buildRule.executeTarget("exception");
- fail("Should have thrown an exception in the script");
- } catch(BuildException ex) {
- AntAssert.assertContains("TypeError", ex.getMessage());
- }
- }
-
- @Test
- public void testDoubleDef() {
- buildRule.executeTarget("doubledef");
- String log = buildRule.getLog();
- assertTrue("Task1 did not execute",
- log.indexOf("Task1") != -1);
- assertTrue("Task2 did not execute",
- log.indexOf("Task2") != -1);
- }
-
- @Test
- public void testDoubleAttribute() {
- try {
- buildRule.executeTarget("doubleAttributeDef");
- fail("Should have detected duplicate attirbute definition");
- } catch(BuildException ex) {
- AntAssert.assertContains("attr1 attribute more than once", ex.getMessage());
- }
- }
-
- @Test
- public void testProperty() {
- buildRule.executeTarget("property");
- // get the fileset and its basedir
- String log = buildRule.getLog();
- assertTrue("Expecting property in attribute value replaced",
- log.indexOf("Attribute value = test") != -1);
- }
-
-
-}
+/*
+ * 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.script;
+
+import org.apache.tools.ant.AntAssert;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.BuildFileRule;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.types.FileSet;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+
+import java.io.File;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+/**
+ * Tests the examples of the <scriptdef> task.
+ *
+ * @since Ant 1.6
+ */
+public class ScriptDefTest {
+
+ @Rule
+ public BuildFileRule buildRule = new BuildFileRule();
+
+ @Before
+ public void setUp() {
+ buildRule.configureProject("src/etc/testcases/taskdefs/optional/script/scriptdef.xml");
+ }
+
+ @Test
+ public void testSimple() {
+ buildRule.executeTarget("simple");
+ // get the fileset and its basedir
+ Project p = buildRule.getProject();
+ FileSet fileset = (FileSet) p.getReference("testfileset");
+ File baseDir = fileset.getDir(p);
+ String log = buildRule.getLog();
+ assertTrue("Expecting attribute value printed",
+ log.indexOf("Attribute attr1 = test") != -1);
+
+ assertTrue("Expecting nested element value printed",
+ log.indexOf("Fileset basedir = " + baseDir.getAbsolutePath()) != -1);
+ }
+
+ @Test
+ public void testNoLang() {
+ try {
+ buildRule.executeTarget("nolang");
+ fail("Absence of language attribute not detected");
+ } catch(BuildException ex) {
+ AntAssert.assertContains("requires a language attribute", ex.getMessage());
+ }
+ }
+
+ @Test
+ public void testNoName() {
+ try {
+ buildRule.executeTarget("noname");
+ fail("Absence of name attribute not detected");
+ } catch(BuildException ex) {
+ AntAssert.assertContains("scriptdef requires a name attribute", ex.getMessage());
+ }
+ }
+
+ @Test
+ public void testNestedByClassName() {
+ buildRule.executeTarget("nestedbyclassname");
+ // get the fileset and its basedir
+ Project p = buildRule.getProject();
+ FileSet fileset = (FileSet) p.getReference("testfileset");
+ File baseDir = fileset.getDir(p);
+ String log = buildRule.getLog();
+ assertTrue("Expecting attribute value to be printed",
+ log.indexOf("Attribute attr1 = test") != -1);
+
+ assertTrue("Expecting nested element value to be printed",
+ log.indexOf("Fileset basedir = " + baseDir.getAbsolutePath()) != -1);
+ }
+
+ @Test
+ public void testNoElement() {
+ buildRule.executeTarget("noelement");
+ assertEquals("Attribute attr1 = test", buildRule.getOutput().trim());
+ }
+
+ @Test
+ public void testException() {
+ try {
+ buildRule.executeTarget("exception");
+ fail("Should have thrown an exception in the script");
+ } catch(BuildException ex) {
+ AntAssert.assertContains("TypeError", ex.getMessage());
+ }
+ }
+
+ @Test
+ public void testDoubleDef() {
+ buildRule.executeTarget("doubledef");
+ String log = buildRule.getLog();
+ assertTrue("Task1 did not execute",
+ log.indexOf("Task1") != -1);
+ assertTrue("Task2 did not execute",
+ log.indexOf("Task2") != -1);
+ }
+
+ @Test
+ public void testDoubleAttribute() {
+ try {
+ buildRule.executeTarget("doubleAttributeDef");
+ fail("Should have detected duplicate attirbute definition");
+ } catch(BuildException ex) {
+ AntAssert.assertContains("attr1 attribute more than once", ex.getMessage());
+ }
+ }
+
+ @Test
+ public void testProperty() {
+ buildRule.executeTarget("property");
+ // get the fileset and its basedir
+ String log = buildRule.getLog();
+ assertTrue("Expecting property in attribute value replaced",
+ log.indexOf("Attribute value = test") != -1);
+ }
+
+
+}