| Plack-App-Proxy documentation | Contained in the Plack-App-Proxy distribution. |
Plack::App::Proxy::Test - Is utilities to test Plack::App::Proxy.
test_proxy(
app => $backend_app,
proxy => sub { Plack::App::Proxy->new(remote => "http://$_[0]:$_[1]") },
client => sub {
my $cb = shift;
my $res = $cb->(GET '/');
ok $res->is_success, "Check the status line.";
},
);
Plack::App::Proxy::Test provids test_proxy function which wraps test_psgi of Plack::Test simply.
test_proxy app => $app,
proxy => $proxy_cb->($app_host, $app_port),
client => $client_cb->($cb);
test_proxy runs two servers, 'app' as an origin server and the proxy server.
In 'proxy' callback, you should create the proxy server instance to send
requests to 'app' server. Then 'client' callback is called to run your
tests. In 'client' callback, all HTTP requests are sent to 'proxy'
server. (And the proxy server will proxy your request to the app server.)
Masahiro Honma <hiratara@cpan.org>
| Plack-App-Proxy documentation | Contained in the Plack-App-Proxy distribution. |
package Plack::App::Proxy::Test; use strict; use warnings; use Carp; use Plack::Loader; use Plack::Test; use Test::More; use Test::TCP; use LWP::UserAgent; use base Exporter::; our @EXPORT = qw(test_proxy); BEGIN { # disable HTTP proxy when testing since we are connecting to localhost delete $ENV{http_proxy}; } our @BACKENDS = qw/LWP AnyEvent::HTTP/; sub test_proxy { my %args = @_; local $Plack::Test::Impl = 'Server'; my $client = delete $args{client} or croak "client test code needed"; my $app = delete $args{app} or croak "app needed"; my $proxy = delete $args{proxy} or croak "proxy needed"; my $host = delete $args{host} || '127.0.0.1'; for my $backend (@BACKENDS) { local $ENV{PLACK_PROXY_BACKEND} = $backend; test_tcp( client => sub { my $port = shift; test_psgi( app => $proxy->( $host, $port ), client => $client, host => $host, # disable the auto redirection of LWP::UA ua => LWP::UserAgent->new( max_redirect => 0 ), ); }, server => sub { my $port = shift; # Use an ordinary server. local $ENV{PLACK_SERVER} = 'Standalone'; my $server = Plack::Loader->auto(port => $port, host => $host); $server->run($app); }, ); } } 1; __END__