51simple2.t   [plain text]


use Test::More tests => 2;
use strict;
use HTTP::Proxy;
use HTTP::Proxy::HeaderFilter::simple;
use t::Utils;

# create the filter
my $sub = sub {
    my ( $self, $headers, $message) = @_;
    $headers->header( X_Foo => 'Bar' );
};

my $filter = HTTP::Proxy::HeaderFilter::simple->new($sub);

# create the proxy
my $proxy = HTTP::Proxy->new(
    port     => 0,
    max_clients => 0,
    max_connections  => 2,
);

# prepare the proxy and server
$proxy->init;
$proxy->agent->proxy( http => "" );
$proxy->push_filter( response => $filter );
my $url = $proxy->url;

my $server = server_start();
my $serverurl = $server->url;

# fork the proxy
my @pids;
push @pids, fork_proxy($proxy);

# fork the HTTP server
my $pid = fork;
die "Unable to fork web server" if not defined $pid;

if ( $pid == 0 ) {
    server_next($server) for 1 .. 2;
    exit 0;
}
push @pids, $pid;

#
# check that the correct transformation is applied
#

# for GET requests
my $ua = LWP::UserAgent->new();
$ua->proxy( http => $url );
my $response = $ua->request( HTTP::Request->new( GET => $serverurl ) );
is( $response->header( "X-Foo" ), "Bar", "Proxy applied the transformation" );

# for HEAD requests
$ua = LWP::UserAgent->new();
$ua->proxy( http => $url );
$response = $ua->request( HTTP::Request->new( HEAD => $serverurl ) );
is( $response->header( "X-Foo" ), "Bar", "Proxy applied the transformation" );

# wait for kids
wait for @pids;