scohen 2005/05/21 19:58:47
Modified: src/testcases/org/apache/tools/ant/taskdefs/optional/net
FTPTest.java
src/etc/testcases/taskdefs/optional/net ftp.xml
Log:
Added tests for the "newer" attribute in conjunction with the
servertimezoneconfig attribute in the PUT and GET actions.
Revision Changes Path
1.16 +83 -0
ant/src/testcases/org/apache/tools/ant/taskdefs/optional/net/FTPTest.java
Index: FTPTest.java
===================================================================
RCS file:
/home/cvs/ant/src/testcases/org/apache/tools/ant/taskdefs/optional/net/FTPTest.java,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- FTPTest.java 30 Mar 2005 08:35:44 -0000 1.15
+++ FTPTest.java 22 May 2005 02:58:47 -0000 1.16
@@ -16,16 +16,23 @@
*/
package org.apache.tools.ant.taskdefs.optional.net;
+import org.apache.tools.ant.BuildEvent;
import org.apache.tools.ant.BuildFileTest;
+import org.apache.tools.ant.BuildListener;
+import org.apache.tools.ant.BuildLogger;
+import org.apache.tools.ant.DefaultLogger;
import org.apache.tools.ant.DirectoryScanner;
import org.apache.tools.ant.types.FileSet;
import org.apache.tools.ant.taskdefs.optional.net.FTP;
import org.apache.tools.ant.util.JavaEnvUtils;
+import org.apache.tools.ant.util.regexp.RegexpMatcher;
+import org.apache.tools.ant.util.regexp.RegexpMatcherFactory;
import org.apache.tools.ant.taskdefs.condition.Os;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
+import java.util.Vector;
import org.apache.commons.net.ftp.FTPClient;
@@ -537,6 +544,82 @@
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));
+ }
+ }
+
+ /**
+ * 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.
+ */
+ public void testTimezonePut() {
+ CountLogListener log = new CountLogListener("(\\d+) files? sent");
+ getProject().executeTarget("timed.test.setup");
+ getProject().addBuildListener(log);
+ 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.
+ */
+ public void testTimezoneGet() {
+ CountLogListener log = new CountLogListener("(\\d+) files?
retrieved");
+ getProject().executeTarget("timed.test.setup");
+ getProject().addBuildListener(log);
+ getProject().executeTarget("timed.test.get.older");
+ assertEquals(3, log.getCount());
+ }
+
/**
* this test is inspired by a user reporting that deletions of
directories with the ftp task do not work
*/
1.9 +88 -0 ant/src/etc/testcases/taskdefs/optional/net/ftp.xml
Index: ftp.xml
===================================================================
RCS file: /home/cvs/ant/src/etc/testcases/taskdefs/optional/net/ftp.xml,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- ftp.xml 21 May 2005 13:03:08 -0000 1.8
+++ ftp.xml 22 May 2005 02:58:47 -0000 1.9
@@ -9,6 +9,12 @@
<property name="ftp.filesep" value="/"/>
<property name="tmp.dir" location="tmp"/>
<property name="tmp.get.dir" location="tmp.get"/>
+ <property name="tmp.local" location="${tmp.get.dir}"/>
+ <property name="tmp.remote" location="${tmp.dir}"/>
+ <property name="tstamp.format" value="yyyy-MM-dd HH:mm"/>
+ <property name="server.timestamp.granularity.millis" value="60000"/>
+ <property name="ftp.server.timezone" value="GMT"/>
+
<fileset dir="${tmp.get.dir}" id="fileset-destination-with-selector">
<include name="alpha/**"/>
<filename name="**/alpha.xml" />
@@ -25,12 +31,23 @@
<fileset dir="${tmp.get.dir}" id="fileset-destination-nofollowsymlinks"
followsymlinks="false">
<include name="alpha/**"/>
</fileset>
+
+ <filelist dir="${tmp.local}" id="timed-files"
files="A.timed,B.timed,C.timed,D.timed"/>
+
+ <patternset id="timed-test-files">
+ <include name="A.timed"/>
+ <include name="B.timed"/>
+ <include name="C.timed"/>
+ <include name="D.timed"/>
+ </patternset>
+
<target name="setup">
<mkdir dir="${tmp.get.dir}"/>
<mkdir dir="${tmp.dir}/alpha/beta/gamma"/>
<touch file="${tmp.dir}/alpha/beta/gamma/gamma.xml"/>
<touch file="${tmp.dir}/alpha/beta/beta.xml"/>
</target>
+
<target name="ftp-get-with-selector">
<ftp action="get"
server="${ftp.host}"
@@ -104,5 +121,76 @@
<include name="**"/>
</fileset>
</ftp>
+ </target>
+
+ <target name="timed.test.setup">
+ <touch>
+ <filelist refid="timed-files"/>
+ </touch>
+ <ftp action="put"
+ server="${ftp.host}"
+ userid="${ftp.user}"
+ password="${ftp.password}"
+ separator="${ftp.filesep}"
+ remotedir="${tmp.remote}"
+ >
+ <fileset dir="${tmp.local}">
+ <patternset refid="timed-test-files"/>
+ </fileset>
+ </ftp>
+ </target>
+
+ <target name="timed.test.put.older">
+ <tstamp>
+ <format property="five.minutes.older" pattern="${tstamp.format}"
offset="-5" unit="minute"/>
+ </tstamp>
+
+ <touch datetime="${five.minutes.older}" pattern="${tstamp.format}"
verbose="true">
+ <fileset dir="${tmp.remote}">
+ <include name="A.timed"/>
+ </fileset>
+ </touch>
+ <ftp action="put"
+ server="${ftp.host}"
+ userid="${ftp.user}"
+ password="${ftp.password}"
+ separator="${ftp.filesep}"
+ remotedir="${tmp.remote}"
+ timediffmillis="${server.timestamp.granularity.millis}"
+ newer="true"
+ serverTimeZoneConfig="${ftp.server.timezone}"
+ >
+ <fileset dir="${tmp.local}">
+ <patternset refid="timed-test-files"/>
+ </fileset>
+ </ftp>
+ </target>
+ <target name="timed.test.get.older">
+ <tstamp>
+ <format property="five.minutes.older" pattern="${tstamp.format}"
offset="-5" unit="minute"/>
+ </tstamp>
+
+ <touch datetime="${five.minutes.older}" pattern="${tstamp.format}"
verbose="true">
+ <fileset dir="${tmp.local}">
+ <include name="A.timed"/>
+ <include name="C.timed"/>
+ <include name="D.timed"/>
+ </fileset>
+ </touch>
+ <ftp action="get"
+ server="${ftp.host}"
+ userid="${ftp.user}"
+ password="${ftp.password}"
+ separator="${ftp.filesep}"
+ remotedir="${tmp.remote}"
+ preservelastmodified="true"
+ newer="true"
+ serverTimeZoneConfig="${ftp.server.timezone}"
+ >
+ <fileset dir="${tmp.local}">
+ <patternset refid="timed-test-files"/>
+ </fileset>
+ </ftp>
</target>
+
</project>
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]