#!/usr/bin/perl use strict; use warnings; use English qw(-no_match_vars); use File::Temp; use IPC::Run qw(run); use Test::More; plan tests => 4; $ENV{ACCOUNTMANAGER_CONFIG} = 't/manager.conf'; 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'; local $ENV{QUERY_STRING} = 'action=select_sp'; 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{<select id="entityid" name="entityid" class="required">}, 'page content contains SP list' ); is($err, '', 'empty stderr'); }; 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); }