Plack::App::Proxy::Test - Is utilities to test Plack::App::Proxy.


Plack-App-Proxy documentation Contained in the Plack-App-Proxy distribution.

Index


Code Index:

NAME

Top

Plack::App::Proxy::Test - Is utilities to test Plack::App::Proxy.

SYNOPSIS

Top

  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.";
      },
  );

DESCRIPTION

Top

Plack::App::Proxy::Test provids test_proxy function which wraps test_psgi of Plack::Test simply.

FUNCTIONS

Top

test_proxy
  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.)

AUTHOR

Top

Masahiro Honma <hiratara@cpan.org>

SEE ALSO

Top

Plack::App::Proxy Plack::Test


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__