#! /usr/bin/env perl
#
# $Id$
#
# Perl unit tests for Lasso library
#
* Copyright (C) 2004-2007 Entr'ouvert
# http://lasso.entrouvert.org
#
# Authors: See AUTHORS file in top-level directory.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
# To use this program, first install Lasso Perl binding, by executing the
# command:
# su -c "cd ..; make install-perl"
use lasso;
sub test01 {
print "Create and delete nodes.";
my $authnRequest = new lasso::LibAuthnRequest;
undef $authnRequest;
print "..OK\n";
}
sub test02 {
print "Get & set simple attributes of nodes.";
my $authnRequest = new lasso::LibAuthnRequest;
# Test a string attribute.
$authnRequest->{consent} eq undef or die "Assertion failed\n";
$authnRequest->{consent} = $lasso::LIB_CONSENT_OBTAINED;
$authnRequest->{consent} eq $lasso::LIB_CONSENT_OBTAINED or die "Assertion failed\n";
$authnRequest->{consent} = undef;
$authnRequest->{consent} eq undef or die "Assertion failed\n";
# Test a renamed string attribute.
$authnRequest->{relayState} eq undef or die "Assertion failed\n";
$authnRequest->{relayState} = 'Hello World!';
$authnRequest->{relayState} eq 'Hello World!' or die "Assertion failed\n";
$authnRequest->{relayState} = undef;
$authnRequest->{relayState} eq undef or die "Assertion failed\n";
# Test an integer attribute.
$authnRequest->{majorVersion} eq 0 or die "Assertion failed\n";
$authnRequest->{majorVersion} = 314;
$authnRequest->{majorVersion} eq 314 or die "Assertion failed\n";
undef $authnRequest;
print "..OK\n";
}
sub test03 {
print "Get & set attributes of nodes of type string list.";
my $authnRequest = new lasso::LibAuthnRequest;
$authnRequest->{respondWith} eq undef or die "Assertion failed\n";
my $respondWith = new lasso::StringList;
$respondWith->length eq 0 or die "Assertion failed\n";
$respondWith->append('first string');
$respondWith->length eq 1 or die "Assertion failed\n";
$respondWith->getItem(0) eq 'first string' or die "Assertion failed\n";
$respondWith->getItem(0) eq 'first string' or die "Assertion failed\n";
$respondWith->append('second string');
$respondWith->length eq 2 or die "Assertion failed\n";
$respondWith->getItem(0) eq 'first string' or die "Assertion failed\n";
$respondWith->getItem(1) eq 'second string' or die "Assertion failed\n";
$respondWith->append('third string');
$respondWith->length eq 3 or die "Assertion failed\n";
$respondWith->getItem(0) eq 'first string' or die "Assertion failed\n";
$respondWith->getItem(1) eq 'second string' or die "Assertion failed\n";
$respondWith->getItem(2) eq 'third string' or die "Assertion failed\n";
$authnRequest->{respondWith} = $respondWith;
$authnRequest->{respondWith}->getItem(0) eq 'first string' or die "Assertion failed\n";
$authnRequest->{respondWith}->getItem(1) eq 'second string' or die "Assertion failed\n";
$authnRequest->{respondWith}->getItem(2) eq 'third string' or die "Assertion failed\n";
$respondWith->getItem(0) eq 'first string' or die "Assertion failed\n";
$respondWith->getItem(1) eq 'second string' or die "Assertion failed\n";
$respondWith->getItem(2) eq 'third string' or die "Assertion failed\n";
undef $respondWith;
$authnRequest->{respondWith}->getItem(0) eq 'first string' or die "Assertion failed\n";
$authnRequest->{respondWith}->getItem(1) eq 'second string' or die "Assertion failed\n";
$authnRequest->{respondWith}->getItem(2) eq 'third string' or die "Assertion failed\n";
$respondWith = $authnRequest->{respondWith};
$respondWith->getItem(0) eq 'first string' or die "Assertion failed\n";
$respondWith->getItem(1) eq 'second string' or die "Assertion failed\n";
$respondWith->getItem(2) eq 'third string' or die "Assertion failed\n";
undef $respondWith;
$authnRequest->{respondWith}->getItem(0) eq 'first string' or die "Assertion failed\n";
$authnRequest->{respondWith}->getItem(1) eq 'second string' or die "Assertion failed\n";
$authnRequest->{respondWith}->getItem(2) eq 'third string' or die "Assertion failed\n";
$authnRequest->{respondWith} = undef;
$authnRequest->{respondWith} eq undef or die "Assertion failed\n";
undef $authnRequest;
print "..OK\n";
}
sub test04 {
print "Get & set attributes of nodes of type node list.";
my $response = new lasso::SamlpResponse;
$response->{assertion} eq undef or die "Assertion failed\n";
my $assertions = new lasso::NodeList;
$assertions->length eq 0 or die "Assertion failed\n";
my $assertion1 = new lasso::SamlAssertion;
$assertion1->{assertionId} = 'assertion 1';
$assertions->append($assertion1);
$assertions->length eq 1 or die "Assertion failed\n";
$assertions->getItem(0)->{assertionId} eq 'assertion 1' or die "Assertion failed\n";
$assertions->getItem(0)->{assertionId} eq 'assertion 1' or die "Assertion failed\n";
my $assertion2 = new lasso::SamlAssertion;
$assertion2->{assertionId} = 'assertion 2';
$assertions->append($assertion2);
$assertions->length eq 2 or die "Assertion failed\n";
$assertions->getItem(0)->{assertionId} eq 'assertion 1' or die "Assertion failed\n";
$assertions->getItem(1)->{assertionId} eq 'assertion 2' or die "Assertion failed\n";
my $assertion3 = new lasso::SamlAssertion;
$assertion3->{assertionId} = 'assertion 3';
$assertions->append($assertion3);
$assertions->length eq 3 or die "Assertion failed\n";
$assertions->getItem(0)->{assertionId} eq 'assertion 1' or die "Assertion failed\n";
$assertions->getItem(1)->{assertionId} eq 'assertion 2' or die "Assertion failed\n";
$assertions->getItem(2)->{assertionId} eq 'assertion 3' or die "Assertion failed\n";
$response->{assertion} = $assertions;
$response->{assertion}->getItem(0)->{assertionId} eq 'assertion 1' or die "Assertion failed\n";
$response->{assertion}->getItem(1)->{assertionId} eq 'assertion 2' or die "Assertion failed\n";
$response->{assertion}->getItem(2)->{assertionId} eq 'assertion 3' or die "Assertion failed\n";
$assertions->getItem(0)->{assertionId} eq 'assertion 1' or die "Assertion failed\n";
$assertions->getItem(1)->{assertionId} eq 'assertion 2' or die "Assertion failed\n";
$assertions->getItem(2)->{assertionId} eq 'assertion 3' or die "Assertion failed\n";
undef $assertions;
$response->{assertion}->getItem(0)->{assertionId} eq 'assertion 1' or die "Assertion failed\n";
$response->{assertion}->getItem(1)->{assertionId} eq 'assertion 2' or die "Assertion failed\n";
$response->{assertion}->getItem(2)->{assertionId} eq 'assertion 3' or die "Assertion failed\n";
$assertions = $response->{assertion};
$assertions->getItem(0)->{assertionId} eq 'assertion 1' or die "Assertion failed\n";
$assertions->getItem(1)->{assertionId} eq 'assertion 2' or die "Assertion failed\n";
$assertions->getItem(2)->{assertionId} eq 'assertion 3' or die "Assertion failed\n";
undef $assertions;
$response->{assertion}->getItem(0)->{assertionId} eq 'assertion 1' or die "Assertion failed\n";
$response->{assertion}->getItem(1)->{assertionId} eq 'assertion 2' or die "Assertion failed\n";
$response->{assertion}->getItem(2)->{assertionId} eq 'assertion 3' or die "Assertion failed\n";
$response->{assertion} = undef;
$response->{assertion} eq undef or die "Assertion failed\n";
undef $response;
print "..OK\n";
}
sub test05 {
print "Get & set attributes of nodes of type XML list.";
my $authnRequest = new lasso::LibAuthnRequest;
$authnRequest->{extension} eq undef or die "Assertion failed\n";
my $actionString1 = '
do 1
';
my $actionString2 = '
do 2
';
my $actionString3 = '
do 3
';
my $extension = new lasso::StringList;
$extension->length eq 0 or die "Assertion failed\n";
$extension->append($actionString1);
$extension->length eq 1 or die "Assertion failed\n";
$extension->getItem(0) eq $actionString1 or die "Assertion failed\n";
$extension->getItem(0) eq $actionString1 or die "Assertion failed\n";
$extension->append($actionString2);
$extension->length eq 2 or die "Assertion failed\n";
$extension->getItem(0) eq $actionString1 or die "Assertion failed\n";
$extension->getItem(1) eq $actionString2 or die "Assertion failed\n";
$extension->append($actionString3);
$extension->length eq 3 or die "Assertion failed\n";
$extension->getItem(0) eq $actionString1 or die "Assertion failed\n";
$extension->getItem(1) eq $actionString2 or die "Assertion failed\n";
$extension->getItem(2) eq $actionString3 or die "Assertion failed\n";
$authnRequest->{extension} = $extension;
$authnRequest->{extension}->getItem(0) eq $actionString1 or die "Assertion failed\n";
$authnRequest->{extension}->getItem(1) eq $actionString2 or die "Assertion failed\n";
$authnRequest->{extension}->getItem(2) eq $actionString3 or die "Assertion failed\n";
$extension->getItem(0) eq $actionString1 or die "Assertion failed\n";
$extension->getItem(1) eq $actionString2 or die "Assertion failed\n";
$extension->getItem(2) eq $actionString3 or die "Assertion failed\n";
undef $extension;
$authnRequest->{extension}->getItem(0) eq $actionString1 or die "Assertion failed\n";
$authnRequest->{extension}->getItem(1) eq $actionString2 or die "Assertion failed\n";
$authnRequest->{extension}->getItem(2) eq $actionString3 or die "Assertion failed\n";
$extension = $authnRequest->{extension};
$extension->getItem(0) eq $actionString1 or die "Assertion failed\n";
$extension->getItem(1) eq $actionString2 or die "Assertion failed\n";
$extension->getItem(2) eq $actionString3 or die "Assertion failed\n";
undef $extension;
$authnRequest->{extension}->getItem(0) eq $actionString1 or die "Assertion failed\n";
$authnRequest->{extension}->getItem(1) eq $actionString2 or die "Assertion failed\n";
$authnRequest->{extension}->getItem(2) eq $actionString3 or die "Assertion failed\n";
$authnRequest->{extension} = undef;
$authnRequest->{extension} eq undef or die "Assertion failed\n";
undef $authnRequest;
print "..OK\n";
}
sub test06 {
print "Get & set attributes of nodes of type node.";
my $login = new lasso::Login(new lasso::Server);
$login->{request} eq undef or die "Assertion failed\n";
$login->{request} = new lasso::LibAuthnRequest;
$login->{request}->{consent} = $lasso::LIB_CONSENT_OBTAINED;
$login->{request}->{consent} eq $lasso::LIB_CONSENT_OBTAINED or die "Assertion failed\n";
undef $login->{request};
$login->{request} eq undef or die "Assertion failed\n";
undef $login;
print "..OK\n";
}
lasso::init;
test01;
test02;
test03;
test04;
test05;
test06;
lasso::shutdown();