aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/data/Makefile.am2
-rw-r--r--tests/data/test12633
-rw-r--r--tests/ftpserver.pl35
3 files changed, 61 insertions, 9 deletions
diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am
index 71e0a60f5..575c1ecb9 100644
--- a/tests/data/Makefile.am
+++ b/tests/data/Makefile.am
@@ -14,4 +14,4 @@ test103 test112 test121 test17 test22 test300 test401 test8 \
test104 test113 test122 test18 test23 test301 test402 test9 \
test105 test114 test123 test19 test24 test302 test43 \
test106 test115 test124 test190 test25 test303 test44 \
-test107 test116 test125 test2 test26 test33 test45
+test107 test116 test125 test2 test26 test33 test45 test126
diff --git a/tests/data/test126 b/tests/data/test126
new file mode 100644
index 000000000..55abb5af6
--- /dev/null
+++ b/tests/data/test126
@@ -0,0 +1,33 @@
+# Server-side
+<reply>
+<data>
+this is file contents
+</data>
+</reply>
+
+# Client-side
+<client>
+ <name>
+FTP download with multiple replies at once in RETR
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/blalbla/lululul/126
+</command>
+<file name="log/ftpserver.cmd">
+RETRWEIRDO
+</file>
+</test>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS curl_by_daniel@haxx.se
+PWD
+CWD blalbla/lululul
+EPSV
+TYPE I
+SIZE 126
+RETR 126
+</protocol>
+</verify>
diff --git a/tests/ftpserver.pl b/tests/ftpserver.pl
index beae5fa14..c0094b3a9 100644
--- a/tests/ftpserver.pl
+++ b/tests/ftpserver.pl
@@ -26,6 +26,7 @@ sub logmsg { print FTPLOG "$$: "; print FTPLOG @_; }
sub ftpmsg { print INPUT @_; }
my $verbose=0; # set to 1 for debugging
+my $retrweirdo=0;
my $port = 8921; # just a default
do {
@@ -226,16 +227,30 @@ sub RETR_command {
logmsg "REST $rest was removed from size, makes $size left\n";
$rest = 0; # reset REST offset again
}
- print "150 Binary data connection for $testno () ($size bytes).\r\n";
- logmsg "150 Binary data connection for $testno ($size bytes).\n";
-
- for(@data) {
- my $send = $_;
- print SOCK $send;
+ if($retrweirdo) {
+ print "150 Binary data connection for $testno () ($size bytes).\r\n",
+ "226 File transfer complete\r\n";
+ logmsg "150+226 in one shot!\n";
+
+ for(@data) {
+ my $send = $_;
+ print SOCK $send;
+ }
+ close(SOCK);
+ $retrweirdo=0; # switch off the weirdo again!
}
- close(SOCK);
+ else {
+ print "150 Binary data connection for $testno () ($size bytes).\r\n";
+ logmsg "150 Binary data connection for $testno ($size bytes).\n";
- print "226 File transfer complete\r\n";
+ for(@data) {
+ my $send = $_;
+ print SOCK $send;
+ }
+ close(SOCK);
+
+ print "226 File transfer complete\r\n";
+ }
}
else {
print "550 $testno: No such file or directory.\r\n";
@@ -367,6 +382,10 @@ sub customize {
elsif($_ =~ /DELAY ([A-Z]+) (\d*)/) {
$delayreply{$1}=$2;
}
+ elsif($_ =~ /RETRWEIRDO/) {
+ print "instructed to use RETRWEIRDO\n";
+ $retrweirdo=1;
+ }
}
close(CUSTOM);
}