diff --git a/lemonldap-ng-portal/t/30-Auth-and-issuer-SAML-Redirect-MultipleSP.t b/lemonldap-ng-portal/t/30-Auth-and-issuer-SAML-Redirect-MultipleSP.t index c549a6a44..cf73f336c 100644 --- a/lemonldap-ng-portal/t/30-Auth-and-issuer-SAML-Redirect-MultipleSP.t +++ b/lemonldap-ng-portal/t/30-Auth-and-issuer-SAML-Redirect-MultipleSP.t @@ -11,9 +11,9 @@ BEGIN { require 't/saml-lib.pm'; } -my $maintests = 23; +my $maintests = 30; my $debug = 'error'; -my ( $issuer, $sp, $sp2, $res ); +my ( $issuer, $sp, $sp2, $sp3, $res ); # Redefine LWP methods for tests LWP::Protocol::PSGI->register( @@ -38,6 +38,8 @@ SKIP: { $sp2 = register( 'sp2', \&sp2 ); + $sp3 = register( 'sp3', \&sp3 ); + # Simple SP access my $res; ok( @@ -163,6 +165,52 @@ SKIP: { expectOK($res); expectAuthenticatedAs( $res, 'fa@badwolf.org@idp' ); + # Simple SP3 access + switch ('sp3'); + ok( + $res = $sp3->_get( + '/', + accept => 'text/html', + query => 'url=aHR0cDovL3Rlc3QxLmV4YW1wbGUuY29tLw==' + ), + 'Unauth SP3 request' + ); + + ( $url, $query ) = expectRedirection( $res, + qr#^http://auth.idp.com(/saml/singleSignOn)\?(SAMLRequest=.+)# ); + + # Push SAML request to IdP + switch ('issuer'); + ok( + $res = $issuer->_get( + $url, + query => $query, + accept => 'text/html', + cookie => "lemonldap=$idpId", + ), + 'Launch SAML request to IdP' + ); + ( $host, $url, $query ) = + expectForm( $res, 'auth.sp3.com', '/saml/proxySingleSignOnPost', + 'SAMLResponse', 'RelayState' ); + + # Post SAML response to SP3 + switch ('sp3'); + ok( + $res = $sp3->_post( + $url, IO::String->new($query), + accept => 'text/html', + length => length($query), + ), + 'Post SAML response to SP3' + ); + my $sp3Id = expectCookie($res); + expectRedirection( $res, 'http://test1.example.com/' ); + + ok( $res = $sp3->_get( '/', cookie => "lemonldap=$spId" ), 'Get / on SP3' ); + expectOK($res); + expectAuthenticatedAs( $res, 'fa@badwolf.org@idp' ); + # Logout initiated by SP ok( $res = $sp->_get( @@ -194,12 +242,14 @@ SKIP: { my $relaypage = $res; - ok( $res->[2]->[0] =~ - m%