Feersum
view release on metacpan or search on metacpan
t/51-psgi-streaming.t view on Meta::CPAN
$cv->end;
undef $h;
};
$cv->recv;
pass "all done app 1";
}
my $APP2 = <<'EOAPP';
my $app2 = sub {
my $env = shift;
unless ($env->{'psgi.streaming'}) {
die "This application needs psgi.streaming support";
}
Test::More::pass "called app2";
return sub {
Test::More::pass "called streamer2";
my $respond = shift;
wait_for_new_message(sub {
my $message = shift;
Test::More::pass "sending response2";
my $w = $respond->([200, ['Content-Type', 'application/json']]);
Test::More::pass "started response2";
$w->write($message->to_json);
Test::More::pass "done response2";
$w->close;
undef $env;
});
};
};
EOAPP
my $app2 = eval $APP2;
ok $app2, 'got app 2' || diag $@;
$evh->psgi_request_handler($app2);
using_writer: {
my $cv = AE::cv;
$cv->begin;
my $h; $h = simple_client GET => '/', sub {
my ($body, $headers) = @_;
is $headers->{'Status'}, 200, "Response OK";
is $headers->{'content-type'}, 'application/json', "... is JSON";
is $headers->{'transfer-encoding'}, 'chunked', '... was chunked';
is $headers->{'connection'}, 'close', '... close';
is $body, q({"message":"O hai 2"}), "... correct de-chunked body";
$cv->end;
undef $h;
};
$cv->recv;
}
using_writer_and_1_0: {
my $cv = AE::cv;
$cv->begin;
my $h2; $h2 = simple_client GET => '/', proto => '1.0', sub {
my ($body, $headers) = @_;
is $headers->{'Status'}, 200, "Response OK";
is $headers->{'content-type'}, 'application/json', "... is JSON";
ok !$headers->{'transfer-encoding'}, '... was not chunked';
isnt $headers->{'connection'}, 'keep-alive', '... got close';
is $body, q({"message":"O hai 3"}), "... correct body";
$cv->end;
undef $h2;
};
$cv->recv;
}
$evh->set_keepalive(1);
using_writer_and_1_1: {
my $cv = AE::cv;
$cv->begin;
my $h2; $h2 = simple_client GET => '/', proto => '1.1', keepalive => 1, sub {
my ($body, $headers) = @_;
is $headers->{'Status'}, 200, "Response OK";
is $headers->{'content-type'}, 'application/json', "... is JSON";
ok $headers->{'transfer-encoding'}, '... not chunked';
isnt $headers->{'connection'}, 'close', '... keep';
is $body, q({"message":"O hai 4"}), "... correct de-chunked body";
$cv->end;
undef $h2;
};
$cv->recv;
}
pass "all done app 2";
( run in 2.267 seconds using v1.01-cache-2.11-cpan-a49fcb8fa48 )