90 lines
2.3 KiB
Perl
90 lines
2.3 KiB
Perl
package Lemonldap::NG::Handler::Test;
|
|
use File::Temp;
|
|
use HTTP::Request::Common;
|
|
use Lemonldap::NG::Handler::Server;
|
|
use LWP::UserAgent;
|
|
use LWP::Protocol::PSGI;
|
|
use Plack::Test;
|
|
our ( $in, $out, $rin, $rout, $server );
|
|
*in = *main::in;
|
|
*out = *main::out;
|
|
*rin = *main::rin;
|
|
*rout = *main::rout;
|
|
|
|
sub init {
|
|
my $tdir = File::Temp::tempdir( CLEANUP => 1 );
|
|
|
|
my $h = Lemonldap::NG::Handler::Server->new( {} );
|
|
$h->init( {
|
|
configStorage => {
|
|
type => 'File',
|
|
dirName => 't',
|
|
},
|
|
cookieName => 'lemonldap',
|
|
securedCookie => 0,
|
|
https => 0,
|
|
logger => 'Lemonldap::NG::Common::Logger::Std',
|
|
domain => 'idp.com',
|
|
logLevel => $main::debug,
|
|
portal => 'http://auth.idp.com',
|
|
configStorage => {
|
|
type => 'File',
|
|
dirName => 't',
|
|
},
|
|
localSessionStorage => 'Cache::FileCache',
|
|
localSessionStorageOptions => {
|
|
namespace => 'lemonldap-ng-session',
|
|
cache_root => $tdir,
|
|
cache_depth => 0,
|
|
},
|
|
}
|
|
);
|
|
$server = Plack::Test->create( $h->run );
|
|
}
|
|
|
|
# Redefine LWP methods for tests
|
|
LWP::Protocol::PSGI->register(
|
|
sub {
|
|
my ($env) = @_;
|
|
my $req = Plack::Request->new($env);
|
|
my $method = $req->method;
|
|
my $url = $req->request_uri;
|
|
my $content = $req->content;
|
|
print $rin JSON::to_json( [ $method => $url, [], $content ] ) . "\n";
|
|
my $res;
|
|
$res = <$rout>, 'Get portal response';
|
|
return JSON::from_json($res);
|
|
}
|
|
);
|
|
|
|
sub run {
|
|
while (<$in>) {
|
|
chomp;
|
|
if (/^END/) {
|
|
return;
|
|
}
|
|
next unless $_;
|
|
my ( $req, $res );
|
|
$req = HTTP::Request->new( @{ JSON::from_json($_) } );
|
|
$res = $server->request($req);
|
|
my @flatten = &flatten($res);
|
|
print $out JSON::to_json(
|
|
[ $res->code, [@flatten], [ $res->content ] ] )
|
|
. "\n";
|
|
}
|
|
}
|
|
|
|
# Copy from HTTP::Headers code
|
|
sub flatten {
|
|
my ($self) = @_;
|
|
(
|
|
map {
|
|
my $k = $_;
|
|
map { ( $k => $_ ) } $self->header($_);
|
|
} $self->header_field_names
|
|
);
|
|
}
|
|
|
|
1;
|
|
|