summaryrefslogtreecommitdiff
path: root/t/07ftp-upload.t
diff options
context:
space:
mode:
Diffstat (limited to 't/07ftp-upload.t')
-rw-r--r--t/07ftp-upload.t86
1 files changed, 86 insertions, 0 deletions
diff --git a/t/07ftp-upload.t b/t/07ftp-upload.t
new file mode 100644
index 0000000..27a57e2
--- /dev/null
+++ b/t/07ftp-upload.t
@@ -0,0 +1,86 @@
+#!perl
+
+use strict;
+use warnings;
+use Test::More skip_all => "Not performing ftp upload tests";
+
+BEGIN { use_ok( 'WWW::Curl::Easy' ); }
+
+my $count=1;
+
+
+# Read URL to get, defaulting to environment variable if supplied
+my $url=$ENV{CURL_TEST_URL_FTP} || "";
+if (!$url) {
+ print "1..0 # No test ftp URL supplied - skipping test\n";
+ exit;
+}
+
+print "1..8\n";
+
+# Init the curl session
+my $curl = WWW::Curl::Easy->new();
+if ($curl == 0) {
+ print "not ";
+}
+print "ok ".++$count."\n";
+
+$curl->setopt(CURLOPT_NOPROGRESS, 1);
+$curl->setopt(CURLOPT_FOLLOWLOCATION, 1);
+$curl->setopt(CURLOPT_TIMEOUT, 30);
+
+open HEAD, ">head.out";
+$curl->setopt(CURLOPT_WRITEHEADER, \*HEAD);
+print "ok ".++$count."\n";
+
+open BODY, ">body.out";
+$curl->setopt(CURLOPT_FILE, \*body);
+print "ok ".++$count."\n";
+
+$curl->setopt(CURLOPT_URL, $url);
+
+print "ok ".++$count."\n";
+
+# Now do an ftp upload:
+
+$curl->setopt(CURLOPT_UPLOAD, 1);
+
+
+my $read_max=1000;
+$curl->setopt(CURLOPT_INFILESIZE,$read_max );
+print "ok ".++$count."\n";
+
+sub read_callb
+{
+ my ($maxlen,$sv)=@_;
+ print "# perl read_callback has been called!\n";
+ print "# max data size: $maxlen - $read_max bytes needed\n";
+
+ if ($read_max > 0) {
+ my $len=int($read_max/3)+1;
+ my $data = chr(ord('A')+rand(26))x$len;
+ print "# generated max/3=", int($read_max/3)+1, " characters to be uploaded - $data.\n";
+ $read_max=$read_max-length($data);
+ return $data;
+ } else {
+ return "";
+ }
+}
+
+# Use perl read callback to read data to be uploaded
+$curl->setopt(CURLOPT_READFUNCTION, \&read_callb);
+
+# Use perl passwd callback to read password for login to ftp server
+$curl->setopt(CURLOPT_USERPWD, "ftp\@");
+
+print "ok ".++$count."\n";
+
+# Go get it
+my $code;
+if (($code=$curl->perform()) == 0) {
+ my $bytes=$curl->getinfo(CURLINFO_SIZE_UPLOAD);
+ print "ok ".++$count." $bytes bytes transferred\n";
+} else {
+ # We can acces the error message in $errbuf here
+ print "not ok ".++$count." ftpcode= $code, errbuf=".$curl->errbuf."\n";
+}