blob: ed8c94a1849905556d451fb9c0cc4d4c9e947814 [file] [log] [blame]
use strict;
use Apache::testold;
use Apache::src ();
use Cwd qw(fastcwd);
my $Is_dougm = (defined($ENV{USER}) && ($ENV{USER} eq "dougm"));
skip_test unless have_module "Apache::Request", '0.20';
unless (Apache::src->mmn_eq) {
skip_test if not $Is_dougm;
}
require HTTP::Request::Common;
require CGI;
$HTTP::Request::Common::VERSION ||= '1.00'; #-w
unless ($CGI::VERSION >= 2.39 and
$HTTP::Request::Common::VERSION >= 1.08) {
print "CGI.pm: $CGI::VERSION\n";
print "HTTP::Request::Common: $HTTP::Request::Common::VERSION\n";
skip_test;
}
my $PWD = fastcwd;
my @binary = "$PWD/docs/book.gif";
my $test_pods = $ENV{UPLOAD_PODS} || ($Is_dougm ? 20 : 3);
my $tests = 2;
unless ($USE_SFIO) {
$tests += ($test_pods * 2) + (@binary * 2);
}
print "1..$tests\n";
my $i = 0;
my $ua = LWP::UserAgent->new;
use DirHandle ();
for my $cv (\&post_test, \&get_test) {
$cv->();
}
exit(0) if $USE_SFIO;
if ($Is_dougm) {
for (@binary) {
upload_test($_);
}
#try various sizes
my $dir = "";
for my $path (@INC, $ENV{PERL_POD_LIB}) {
last if -d ($dir = "$path/pod");
}
my $dh = DirHandle->new($dir) or die $!;
my $num = $test_pods;
for ($dh->read) {
next unless /\.pod$/;
last unless $num-- > 0;
upload_test($_);
}
}
else {
for (qw(perlfunc.pod perlpod.pod perlxs.pod), @binary) {
upload_test($_);
}
}
sub post_test {
my $enc = 'application/x-www-form-urlencoded';
param_test(sub {
my($url, $data) = @_;
HTTP::Request::Common::POST($url,
Content_Type => $enc,
Content => $data,
);
});
}
sub get_test {
my $enc = 'application/x-www-form-urlencoded';
param_test(sub {
my($url, $data) = @_;
HTTP::Request::Common::GET("$url?$data");
});
}
sub param_test {
my $cv = shift;
my $url = "http://$net::httpserver$net::perldir/request-param.pl";
my $data =
"ONE=ONE_value&TWO=TWO_value&" .
"THREE=M1&THREE=M2&THREE=M3";
my $response = $ua->request($cv->($url, $data));
my $page = $response->content;
print $response->as_string unless $response->is_success;
my $expect = <<EOF;
param ONE => ONE_value
param TWO => TWO_value
param THREE => M1,M2,M3
EOF
my $ok = $page eq $expect;
test ++$i, $ok;
print $response->as_string unless $ok;
}
sub upload_test {
my $podfile = shift || "func";
my $url = "http://$net::httpserver$net::perldir/request-upload.pl";
my $file = "";
if (-e $podfile) {
$file = $podfile;
}
else {
for my $path (@INC) {
last if -e ($file = "$path/pod/$podfile");
}
}
$file = $0 unless -e $file;
my $lines = 0;
local *FH;
open FH, $file or die "open $file $!";
binmode FH; #for win32
++$lines while defined <FH>;
close FH;
my(@headers);
if ($Is_dougm) {
my $dir = "$ENV{HOME}/public_html/tmp/uploads";
mkdir $dir, 0755;
push @headers, "X-Upload-Tmp" => $dir if -d $dir;
}
my $response = $ua->request(HTTP::Request::Common::POST($url,
@headers,
Content_Type => 'multipart/form-data',
Content => [count => 'count lines',
filename => [$file],
]));
my $page = $response->content;
print $response->as_string unless $response->is_success;
test ++$i, ($page =~ m/Lines:\s+(\d+)/m);
print "$file should have $lines lines (request-upload.pl says: $1)\n"
unless $1 == $lines;
test ++$i, $1 == $lines;
}