#!/usr/local/bin/perl -w
#
# Check POST via HTTP.
#

use Config;

my $num_tests = 5;
my(@test_scripts) = qw(test);

#if($Config{usesfio} eq "true" or $] >= 5.003_93) {
if($] >= 5.003_93) {
    $num_tests += 2;
    push @test_scripts, qw(io/perlio.pl);
}

print "1..$num_tests\n";

use Apache::testold;
require LWP::UserAgent;

my $ua = new LWP::UserAgent;    # create a useragent to test

my($request,$response,$str,$form);

foreach $script (@test_scripts) {
    $netloc = $net::httpserver;
    $script = $PERL_DIR . "/$script";

    $ua = new LWP::UserAgent;    # create a useragent to test

    $url = new URI::URL("http://$netloc$script");

    $form = 'searchtype=Substring';

    $request = new HTTP::Request('POST', $url, undef, $form);
    $request->header('Content-Type', 'application/x-www-form-urlencoded');

    $response = $ua->request($request, undef, undef);

    $str = $response->as_string;
    print "$str\n";

    die "$1\n" if $str =~ /(Internal Server Error)/;

    test ++$i, ($response->is_success and $str =~ /^REQUEST_METHOD=POST$/m);
    test ++$i, ($str =~ /^CONTENT_LENGTH=(\d+)$/m && $1 == length($form));
}

print "pounding a bit...\n";
for (1..3) {
    test ++$i, ($ua->request($request, undef, undef)->is_success);
}


# avoid -w warning
$dummy = $net::httpserver;
$dummy = $net::perldir;
