Skip to content
Snippets Groups Projects
account-manager.cgi.t 3.32 KiB
Newer Older
Guillaume ROUSSE's avatar
Guillaume ROUSSE committed
#!/usr/bin/perl

use strict;
use warnings;

use English qw(-no_match_vars);
use File::Temp;
use IPC::Run qw(run);
use Test::More;

Guillaume ROUSSE's avatar
Guillaume ROUSSE committed
plan tests => 4;
Guillaume ROUSSE's avatar
Guillaume ROUSSE committed

$ENV{ACCOUNTMANAGER_CONFIG} = 't/manager.conf';

Guillaume ROUSSE's avatar
Guillaume ROUSSE committed
my $has_database =
    $ENV{TEST_DB_TYPE} &&
    $ENV{TEST_DB_HOST} &&
    $ENV{TEST_DB_NAME} &&
    $ENV{TEST_DB_USER} &&
    $ENV{TEST_DB_PASSWORD};

Guillaume ROUSSE's avatar
Guillaume ROUSSE committed
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},
Guillaume ROUSSE's avatar
Guillaume ROUSSE committed
        '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>},
Guillaume ROUSSE's avatar
Guillaume ROUSSE committed
        'start button'
    );
    is($err, '', 'empty stderr');
};

subtest sp_selection_page => sub {

    plan tests => 4;

    local $ENV{REQUEST_METHOD} = 'GET';
Guillaume ROUSSE's avatar
Guillaume ROUSSE committed
    local $ENV{QUERY_STRING}   = 'action=select_sp';
Guillaume ROUSSE's avatar
Guillaume ROUSSE committed

    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},
Guillaume ROUSSE's avatar
Guillaume ROUSSE committed
        'HTTP headers'
    );
    like(
        $out,
Guillaume ROUSSE's avatar
Guillaume ROUSSE committed
        qr{<title>eduGAIN Access Check</title>},
Guillaume ROUSSE's avatar
Guillaume ROUSSE committed
        'page title'
    );
    like(
        $out,
        qr{<select id="entityid" name="entityid" class="required">},
Guillaume ROUSSE's avatar
Guillaume ROUSSE committed
        'page content contains SP list'
Guillaume ROUSSE's avatar
Guillaume ROUSSE committed
    );
    is($err, '', 'empty stderr');
};

Guillaume ROUSSE's avatar
Guillaume ROUSSE committed
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},
Guillaume ROUSSE's avatar
Guillaume ROUSSE committed
        '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},
Guillaume ROUSSE's avatar
Guillaume ROUSSE committed
        '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');
};

Guillaume ROUSSE's avatar
Guillaume ROUSSE committed
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);
}