use strict;
use warnings;
use Test::More;
use Test::TCP;
use HTTP::Engine;
eval "use POE;use POE::Session;";
plan skip_all => "this test requires POE" if $@;
eval "use POE::Component::Client::HTTP;";
plan skip_all => "this test requires POE::Component::Client::HTTP" if $@;
plan tests => 3;
use_ok 'HTTP::Engine::Interface::POE';
my $port = empty_port;
HTTP::Engine::Interface::POE->new(
request_handler => sub {
my $req = shift;
HTTP::Engine::Response->new(
status => 200,
body => $req->proxy_request,
);
},
port => $port,
)->run;
POE::Component::Client::HTTP->spawn(
Alias => 'ua',
Proxy => "http://localhost:$port",
);
POE::Session->create(
inline_states => {
_start => sub {
my ($kernel, ) = @_[POE::Session::KERNEL()];
my $req = HTTP::Request->new(
'GET',
'http://example.com/foo?bar=baz',
);
$kernel->post(
'ua',
'request',
'response',
$req,
);
},
'response' => sub {
my ($kernel, ) = @_[POE::Session::KERNEL()];
my $req = @_[POE::Session::ARG0()]->[0];
my $res = @_[POE::Session::ARG1()]->[0];
is $res->code , 200;
is $res->content, 'http://example.com/foo?bar=baz';
$kernel->stop;
},
},
);
POE::Kernel->run;