22http.t   [plain text]


use strict;
use vars qw( @requests );

# here are all the requests the client will try
BEGIN {
    @requests = (
        [ 'http://www.mongueurs.net/',    200 ],
        [ 'http://httpd.apache.org/docs', 301 ],
        [ 'http://www.google.com/testing/', 404 ],
        [ 'http://www.error.zzz/',        500 ],
    );
}

use Test::More tests => @requests + 1;
use t::Utils;
use LWP::UserAgent;
use HTTP::Proxy;

# we skip the tests if the network is not available

SKIP: {
    skip "Web does not seem to work", @requests + 1 unless web_ok();

    my $test = Test::Builder->new;

    # this is to work around tests in forked processes
    $test->use_numbers(0);
    $test->no_ending(1);

    my $proxy = HTTP::Proxy->new( port => 0, max_connections => scalar @requests );
    $proxy->init;    # required to access the url later

    # fork a HTTP proxy
    my $pid = fork_proxy(
        $proxy,
        sub {
            ok( $proxy->conn == @requests,
                "Served the correct number of requests" );
        }
    );

    # run a client
    my $ua = LWP::UserAgent->new;
    $ua->proxy( http => $proxy->url );

    for (@requests) {
        my $req = HTTP::Request->new( GET => $_->[0] );
        my $rep = $ua->simple_request($req);
        is( $rep->code, $_->[1], "Got an answer (@{[$rep->code]})" );
    }

    # make sure the kid is dead
    wait;
}