App-HTTP_Proxy_IMP
view release on metacpan or search on metacpan
t/02_leak.t view on Meta::CPAN
Listen => 10,
LocalAddr => '127.0.0.1:0'
) or die "failed to create server: $!";
my $saddr = $socket->sockhost.':'.$socket->sockport;
defined( $server_pid = fork() ) or die "failed to fork";
if ( $server_pid ) {
close($socket);
return $saddr;
}
while (1) {
my $cl = $socket->accept or next;
while (<$cl>) {
last if m{^\s*$};
}
print $cl "HTTP/1.0 200 ok\r\n\r\n"
}
exit;
}
# create server in child process
sub create_proxy {
my $saddr = shift;
my $socket = IO::Socket::INET->new(
Listen => 10,
LocalAddr => '127.0.0.1:0'
) or die "failed to create listener for proxy: $!";
my $paddr = $socket->sockhost.':'.$socket->sockport;
my ($lh,$lf) = tempfile();
defined( $proxy_pid = fork() ) or die "failed to fork";
if ( $proxy_pid ) {
close($socket);
close($lh);
return ($paddr,$lf);
}
open(STDERR,'>&',$lh);
STDERR->autoflush;
Devel::TrackObjects->import( qr/IMP/ );
require App::HTTP_Proxy_IMP; # load after Devel::TrackObjects
App::HTTP_Proxy_IMP->start({
impns => ['App::HTTP_Proxy_IMP::IMP'],
filter => [ DummyFilter->new_factory ],
addr => [[ $socket,$saddr ]],
});
die "proxy exit";
exit;
}
{
package DummyFilter;
use base 'Net::IMP::HTTP::Request';
use Net::IMP;
sub RTYPES { (IMP_PASS) }
sub new_analyzer {
Devel::TrackObjects->show_tracked;
my $self = shift;
my $obj = $self->SUPER::new_analyzer(@_);
$obj->run_callback(
[ IMP_PASS,0,IMP_MAXOFFSET ],
[ IMP_PASS,1,IMP_MAXOFFSET ],
);
return $obj;
}
sub request_hdr {}
sub request_body {}
sub response_hdr {}
sub response_body {}
sub any_data {}
}
( run in 1.578 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )