Newer
Older
#!/usr/bin/perl
use strict;
use warnings;
use English qw(-no_match_vars);
use File::Temp;
use IPC::Run qw(run);
use Test::More;
my $has_database =
$ENV{TEST_DB_TYPE} &&
$ENV{TEST_DB_HOST} &&
$ENV{TEST_DB_NAME} &&
$ENV{TEST_DB_USER} &&
$ENV{TEST_DB_PASSWORD};
subtest start_page => sub {
plan tests => 4;
local $ENV{REQUEST_METHOD} = 'GET';
local $ENV{QUERY_STRING} = '';
my ($out, $err, $rc) = run_executable('account-manager.cgi');
diag($out) if $ENV{TEST_DEBUG};
like(
$out,
qr{^Content-Type: text/html; charset=utf8\r\n\r\n},
'HTTP headers'
);
like(
$out,
qr{<title>eduGAIN Access Check</title>},
'page title'
);
like(
$out,
qr{<a href="\?action=select_sp" class="button">Get started</a>},
'start button'
);
is($err, '', 'empty stderr');
};
subtest sp_selection_page => sub {
plan tests => 4;
local $ENV{REQUEST_METHOD} = 'GET';
my ($out, $err, $rc) = run_executable('account-manager.cgi');
diag($out) if $ENV{TEST_DEBUG};
like(
$out,
qr{^Content-Type: text/html; charset=utf8\r\n\r\n},
qr{<select id="entityid" name="entityid" class="required">},
subtest email_selection_page_missing_parameter => sub {
plan tests => 4;
local $ENV{REQUEST_METHOD} = 'GET';
local $ENV{QUERY_STRING} = 'action=select_email';
my ($out, $err, $rc) = run_executable('account-manager.cgi');
diag($out) if $ENV{TEST_DEBUG};
like(
$out,
qr{^Content-Type: text/html; charset=utf8\r\n\r\n},
'HTTP headers'
);
like(
$out,
qr{<title>eduGAIN Access Check</title>},
'page title'
);
like(
$out,
qr{Error:[\n\s]+missing parameter 'entityid'},
'page content contains expected error message'
);
my $error = $has_database ? qr{^$} : qr{^DBI connect\(\S+\) failed:};
like($err, $error, 'expected log message');
};
subtest email_selection_page_wrong_parameter => sub {
plan tests => 4;
local $ENV{REQUEST_METHOD} = 'GET';
local $ENV{QUERY_STRING} = 'action=select_email&entityid=foo';
my ($out, $err, $rc) = run_executable('account-manager.cgi');
diag($out) if $ENV{TEST_DEBUG};
like(
$out,
qr{^Content-Type: text/html; charset=utf8\r\n\r\n},
'HTTP headers'
);
like(
$out,
qr{<title>eduGAIN Access Check</title>},
'page title'
);
like(
$out,
qr{Error:[\n\s]+format_entityid},
'page content contains expected error message'
);
my $error = $has_database ? qr{^$} : qr{^DBI connect\(\S+\) failed:};
like($err, $error, 'expected log message');
};
sub run_executable {
my ($executable, $args) = @_;
my @args = $args ? split(/\s+/, $args) : ();
run(
[ $EXECUTABLE_NAME, '-I', 'lib', 'bin/' . $executable, @args ],
\my ($in, $out, $err)
);
return ($out, $err, $CHILD_ERROR >> 8);
}