aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2004-11-25 22:21:49 +0000
committerDaniel Stenberg <daniel@haxx.se>2004-11-25 22:21:49 +0000
commitbf51f05a50a63ade21316a18d2bf1801767ab234 (patch)
tree1099f9ac4115a3c55df744f1a0961ed657e6929e /tests
parent5d94ff5974aea670ca21fb7bf70cada78884e71f (diff)
FTP improvements:
If EPSV, EPRT or LPRT is tried and doesn't work, it will not be retried on the same server again even if a following request is made using a persistent connection. If a second request is made to a server, requesting a file from the same directory as the previous request operated on, libcurl will no longer make that long series of CWD commands just to end up on the same spot. Note that this is only for *exactly* the same dir. There is still room for improvements to optimize the CWD-sending when the dirs are only slightly different. Added test 210, 211 and 212 to verify these changes. Had to improve the test script too and added a new primitive to the test file format.
Diffstat (limited to 'tests')
-rw-r--r--tests/FILEFORMAT5
-rw-r--r--tests/data/Makefile.am2
-rw-r--r--tests/data/test21043
-rw-r--r--tests/data/test21147
-rw-r--r--tests/data/test21257
-rwxr-xr-xtests/runtests.pl20
6 files changed, 173 insertions, 1 deletions
diff --git a/tests/FILEFORMAT b/tests/FILEFORMAT
index a3b8a5511..b65b6b2ca 100644
--- a/tests/FILEFORMAT
+++ b/tests/FILEFORMAT
@@ -86,6 +86,7 @@ netrc_debug
large_file
idn
getrlimit
+ipv6
</features>
<killserver>
@@ -165,6 +166,10 @@ One regex per line that is removed from the protocol dumps before the
comparison is made. This is very useful to remove dependencies on dynamicly
changing protocol data such as port numbers or user-agent strings.
</strip>
+<strippart>
+One perl op per line that operates on the protocol dump. This is pretty
+advanced. Example: "s/^EPRT .*/EPRT stripped/"
+</strippart>
<protocol [nonewline=yes]>
the protocol dump curl should transmit, if 'nonewline' is set, we will cut
off the trailing newline of this given data before comparing with the one
diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am
index 16841cf71..e7a5fce85 100644
--- a/tests/data/Makefile.am
+++ b/tests/data/Makefile.am
@@ -28,7 +28,7 @@ EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46 \
test513 test514 test178 test179 test180 test181 test182 test183 \
test184 test185 test186 test187 test188 test189 test191 test192 \
test193 test194 test195 test196 test197 test198 test515 test516 \
- test517 test518
+ test517 test518 test210 test211 test212
# The following tests have been removed from the dist since they no longer
# work. We need to fix the test suite's FTPS server first, then bring them
diff --git a/tests/data/test210 b/tests/data/test210
new file mode 100644
index 000000000..723508086
--- /dev/null
+++ b/tests/data/test210
@@ -0,0 +1,43 @@
+# Server-side
+<reply>
+<data>
+data blobb
+</data>
+<datacheck>
+data blobb
+data blobb
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+Get two FTP files from the same remote dir: no second CWD
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/a/path/210 ftp://%HOSTIP:%FTPPORT/a/path/210
+</command>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS curl_by_daniel@haxx.se
+PWD
+CWD a
+CWD path
+EPSV
+TYPE I
+SIZE 210
+RETR 210
+EPSV
+TYPE I
+SIZE 210
+RETR 210
+QUIT
+</protocol>
+</verify>
diff --git a/tests/data/test211 b/tests/data/test211
new file mode 100644
index 000000000..c59da0b1e
--- /dev/null
+++ b/tests/data/test211
@@ -0,0 +1,47 @@
+# Server-side
+<reply>
+<data>
+data blobb
+</data>
+<datacheck>
+data blobb
+data blobb
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+Get two FTP files with no remote EPSV support
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/a/path/211 ftp://%HOSTIP:%FTPPORT/a/path/211
+</command>
+<file name="log/ftpserver.cmd">
+REPLY EPSV 500 no such command
+</file>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS curl_by_daniel@haxx.se
+PWD
+CWD a
+CWD path
+EPSV
+PASV
+TYPE I
+SIZE 211
+RETR 211
+PASV
+TYPE I
+SIZE 211
+RETR 211
+QUIT
+</protocol>
+</verify>
diff --git a/tests/data/test212 b/tests/data/test212
new file mode 100644
index 000000000..cae7baff6
--- /dev/null
+++ b/tests/data/test212
@@ -0,0 +1,57 @@
+# Server-side
+<reply>
+<data>
+data blobb
+</data>
+<datacheck>
+data blobb
+data blobb
+</datacheck>
+</reply>
+
+# Client-side
+<client>
+<features>
+ipv6
+</features>
+<server>
+ftp
+</server>
+ <name>
+Get two FTP files with no remote EPRT or LPRT support
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/a/path/212 ftp://%HOSTIP:%FTPPORT/a/path/212 -P -
+</command>
+<file name="log/ftpserver.cmd">
+REPLY EPRT 500 no such command
+REPLY LPRT 500 no such command
+</file>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<strippart>
+s/^EPRT .*/EPRT stripped/
+s/^LPRT .*/LPRT stripped/
+s/^PORT .*/PORT stripped/
+</strippart>
+<protocol>
+USER anonymous
+PASS curl_by_daniel@haxx.se
+PWD
+CWD a
+CWD path
+EPRT stripped
+LPRT stripped
+PORT stripped
+TYPE I
+SIZE 212
+RETR 212
+PORT stripped
+TYPE I
+SIZE 212
+RETR 212
+QUIT
+</protocol>
+</verify>
diff --git a/tests/runtests.pl b/tests/runtests.pl
index 0acef67b4..aba8c7649 100755
--- a/tests/runtests.pl
+++ b/tests/runtests.pl
@@ -95,6 +95,7 @@ my $gdb = checkcmd("gdb");
my $ssl_version; # set if libcurl is built with SSL support
my $large_file; # set if libcurl is built with large file support
my $has_idn; # set if libcurl is built with IDN support
+my $has_ipv6; # set if libcurl is built with IPv6 support
my $has_getrlimit; # set if system has getrlimit()
my $skipped=0; # number of tests skipped; reported in main loop
@@ -758,6 +759,9 @@ sub checkcurl {
# IDN support
$has_idn=1;
}
+ if($feat =~ /IPv6/i) {
+ $has_ipv6 = 1;
+ }
}
}
if(!$curl) {
@@ -784,6 +788,7 @@ sub checkcurl {
print "********* System characteristics ******** \n",
"* $curl\n",
"* $libcurl\n",
+ "* Features: $feat\n"
"* Host: $hostname",
"* System: $hosttype";
@@ -873,6 +878,11 @@ sub singletest {
next;
}
}
+ elsif($f eq "ipv6") {
+ if($has_ipv6) {
+ next;
+ }
+ }
elsif($f eq "getrlimit") {
if($has_getrlimit) {
next;
@@ -1259,6 +1269,16 @@ sub singletest {
@protstrip= striparray( $_, \@protstrip);
}
+ # what parts to cut off from the protocol
+ my @strippart = getpart("verify", "strippart");
+ my $strip;
+ for $strip (@strippart) {
+ chomp $strip;
+ for(@out) {
+ eval $strip;
+ }
+ }
+
$res = compare("protocol", \@out, \@protstrip);
if($res) {
return 1;