Bio-Das-Lite
view release on metacpan or search on metacpan
t/21-proxy.t view on Meta::CPAN
$ENV{no_proxy} = 'ensembl.org, another.com';
$dl = Bio::Das::Lite->new($dsn);
$dl->features('1:1,2');
$status = $dl->statuscodes("$dsn/features?segment=1:1,2");
unlike($status, qr/PROXY/smx, 'no-proxy (environment) positive match');
};
} else {
fail("run test proxy server");
}
kill_child();
sub kill_child {
$child_pid && kill 9, $child_pid;
}
$SIG{INT} = \&kill_child;
sub setup_server {
# Set up a server and check it is listening.
my $port;
my $child_pid;
my $agent = WWW::Curl::Simple->new(timeout=>1);
for my $test_port (10000 .. 10010) {
$child_pid = fork_server($test_port);
my $resp;
eval {
$resp = $agent->get("http://127.0.0.1:$test_port");
};
if ($@) {
warn "Error from test server on port $test_port - ".$@;
} elsif (!$resp) {
warn "No response from test server on port $test_port";
} elsif ($resp->status_line() =~ m/^200 \(OK\) PROXY/) {
$port = $test_port;
last;
} else {
warn "Unexpected status from test server on port $test_port - ".$resp->status_line;
}
kill 9, $child_pid; wait;
undef $child_pid;
}
return ($child_pid, $port);
}
sub fork_server {
if (my $child_pid = fork) {
return $child_pid;
}
my $listen_port = shift;
eval {
# Child process runs a server
# (similar to http://poe.perl.org/?POE_Cookbook/Web_Server)
POE::Component::Server::TCP->new(
Port => $listen_port,
ClientFilter => 'POE::Filter::HTTPD',
ClientInput => sub {
my ($kernel, $heap, $req_or_resp) = @_[KERNEL, HEAP, ARG0];
# Errors appear as HTTP::Response objects (via filter)
if ($req_or_resp->isa(q[HTTP::Request])) {
my $auth = $req_or_resp->proxy_authorization_basic;
$req_or_resp = HTTP::Response->new(200, $auth ? 'PROXY ' . $auth : 'PROXY'); # OK
$req_or_resp->content('FAKE CONTENT');
}
$heap->{client}->put($req_or_resp);
$kernel->yield(q[shutdown]);
}
);
$poe_kernel->run();
};
}
( run in 1.504 second using v1.01-cache-2.11-cpan-39bf76dae61 )