use Test::More; use JSON; use MIME::Base64; use LWP::UserAgent; BEGIN { require 't/test-psgi-lib.pm'; } init('Lemonldap::NG::Handler::Server'); my $res; # Authorized queries ok( $res = $client->_get( '/', undef, 'test3.example.com', "lemonldap=$sessionId", VHOSTTYPE => 'DevOps', ), 'Authorized query' ); ok( $res->[0] == 200, 'Code is 200' ) or explain( $res->[0], 200 ); my %headers = @{ $res->[1] }; ok( $headers{User} eq 'dwho', "'User' => 'dwho'" ) or explain( \%headers, 'dwho' ); ok( $headers{Name} eq '', "'Name' => ''" ) or explain( \%headers, 'No Name' ); ok( $headers{Mail} eq '', "'Mail' => ''" ) or explain( \%headers, 'No Mail' ); ok( keys %headers == 7, "Seven headers sent" ) or explain( \%headers, 'Seven headers' ); count(6); ok( $res = $client->_get( '/testyes', undef, 'test3.example.com', "lemonldap=$sessionId", VHOSTTYPE => 'DevOps', ), 'Authorized query' ); ok( $res->[0] == 200, 'Code is 200' ) or explain( $res->[0], 200 ); count(2); # Denied queries ok( $res = $client->_get( '/deny', undef, 'test3.example.com', "lemonldap=$sessionId", VHOSTTYPE => 'DevOps', ), 'Denied query' ); ok( $res->[0] == 403, 'Code is 403' ) or explain( $res->[0], 403 ); count(2); ok( $res = $client->_get( '/testno', undef, 'test3.example.com', "lemonldap=$sessionId", VHOSTTYPE => 'DevOps', ), 'Denied query' ); ok( $res->[0] == 403, 'Code is 403' ) or explain( $res->[0], 403 ); count(2); done_testing( count() ); clean(); # Redefine LWP methods for tests no warnings 'redefine'; sub LWP::UserAgent::request { my ( $self, $req ) = @_; ok( $req->header('host') eq 'test3.example.com', 'Host header found' ) or explain( $req->headers(), 'test3.example.com' ); ok( $req->as_string() =~ m#http://127.0.0.1:80/rules.json#, 'Rules file URL found' ) or explain( $req->as_string(), 'GET http://127.0.0.1:80/rules.json' ); count(2); my $httpResp; my $s = '{ "rules": { "^/deny": "deny", "^/testno": "$uid ne qq{dwho}", "^/testyes": "$uid eq qq{dwho}", "default": "accept" }, "headers": { "User": "$uid", "Mail": "$mail", "Name": "$cn" } }'; $httpResp = HTTP::Response->new( 200, 'OK' ); $httpResp->header( 'Content-Type', 'application/json' ); $httpResp->header( 'Content-Length', length($s) ); $httpResp->content($s); return $httpResp; }