AnyEvent-SCGI
view release on metacpan or search on metacpan
CONTENT_LENGTH => 27,
REQUEST_URI => '/deepthought',
},
);
run_test(
"CONTENT_LENGTH${z}0${z}SCGI${z}1${z}". # headers
"REQUEST_METHOD${z}GET${z}".
"REQUEST_URI${z}/deepthought${z}",
undef, # content empty since C-L is zero
{ # expected env
SCGI => 1,
REQUEST_METHOD => 'GET',
CONTENT_LENGTH => 0,
REQUEST_URI => '/deepthought',
},
);
sub run_test {
my $headers = shift;
my $content = shift;
my $expected_env = shift;
my ($server_fh,$scgi_fh) = portable_socketpair();
ok $server_fh && $scgi_fh, 'set up socketpair';
my $server_done = AE::cv;
my $server = AnyEvent::Handle->new(
fh => $server_fh,
no_delay => 1,
on_error => sub {
$server_done->croak("server error $_[1]");
},
on_eof => sub { $server_done->send },
);
ok $server, 'made a server handle';
{
my $netstring = length($headers).":$headers,";
$netstring .= $content if $content;
$server->push_write($netstring);
}
{
$server->push_read(line => "\r\n", sub {
is $_[1], 'any old response', 'expected response';
$server_done->send;
});
pass 'set up server read';
}
{
AnyEvent::SCGI::handle_scgi($scgi_fh, "foo", "666", sub {
my ($h, $env, $content_ref, $fatal, $error) = @_;
ok (!$error, 'no error') or diag "server got error '$error'";
is_deeply $env, $expected_env, 'correctly decoded env';
is $$content_ref, $content, 'correct content';
$h->push_write("any old response\r\n");
$h->push_shutdown;
});
pass 'set up callback';
}
$server_done->recv;
pass 'all finished';
}
exit 0;
( run in 1.209 second using v1.01-cache-2.11-cpan-39bf76dae61 )