diff --git a/t/account-manager.t b/t/account-manager.t index 15599567d412524b631d2dbdb7f18c1682aac384..498d9b07d36a153a4bfa0f1643f5950c9051e884 100755 --- a/t/account-manager.t +++ b/t/account-manager.t @@ -4,10 +4,11 @@ use strict; use warnings; use English qw(-no_match_vars); +use File::Temp; use IPC::Run qw(run); use Test::More; -plan tests => 6; +plan tests => 48; my ($out, $err, $rc); @@ -29,6 +30,128 @@ like( ); is($out, '', 'no action stdout'); +SKIP: { + skip 'live database required', 15 unless + $ENV{TEST_DB_TYPE} && + $ENV{TEST_DB_HOST} && + $ENV{TEST_DB_NAME} && + $ENV{TEST_DB_USER} && + $ENV{TEST_DB_PASSWORD}; + + my $configuration = File::Temp->new(UNLINK => $ENV{TEST_DEBUG} ? 0 : 1); + print {$configuration} <<EOF; +[database] +type = $ENV{TEST_DB_TYPE} +host = $ENV{TEST_DB_HOST} +name = $ENV{TEST_DB_NAME} +user = $ENV{TEST_DB_USER} +password = $ENV{TEST_DB_PASSWORD} +EOF + + # reset database content + ($out, $err, $rc) = run_executable('account-manager.pl', 'list_accounts --delete'); + ok($rc == 0, 'delete accounts exit status'); + is($err, '', 'delete accounts stderr output'); + + ($out, $err, $rc) = run_executable('account-manager.pl', 'list_tokens --delete'); + ok($rc == 0, 'delete tokens exit status'); + is($err, '', 'delete tokens stderr output'); + + ($out, $err, $rc) = run_executable('account-manager.pl', 'list_services --delete'); + ok($rc == 0, 'delete services exit status'); + is($err, '', 'delete services stderr output'); + + # accounts + + # initial list + ($out, $err, $rc) = run_executable('account-manager.pl', 'list_accounts'); + ok($rc == 0, 'list accounts exit status'); + is($out, "No matching test account in DB\n", 'list accounts stdin output'); + is($err, '', 'list accounts stderr output'); + + # creation failure + ($out, $err, $rc) = run_executable('account-manager.pl', 'add_account'); + ok($rc == 2, 'add account without mandatory option exit status'); + is($out, '', 'add account without mandatory option stdin output'); + like( + $err, + qr/missing profile option, aborting/, + 'add account without mandatory option stderr output' + ); + + # creation success + ($out, $err, $rc) = run_executable('account-manager.pl', 'add_account --profile foo --sp_entityid bar'); + ok($rc == 0, 'add account with mandatory option exit status'); + like($out, qr/Account created/, 'add account with mandatory option stdin output'); + is($err, '', 'add account with mandatory option stderr output'); + + # final list + ($out, $err, $rc) = run_executable('account-manager.pl', 'list_accounts'); + ok($rc == 0, 'list accounts exit status'); + like($out, qr/Account ID=\d+; password_hash=/, 'list accounts stdin output'); + is($err, '', 'list accounts stderr output'); + + # services + + # initial list + ($out, $err, $rc) = run_executable('account-manager.pl', 'list_services'); + ok($rc == 0, 'list services exit status'); + is($out, "No service provider in DB\n", 'list services stdin output'); + is($err, '', 'list services stderr output'); + + # creation failure + ($out, $err, $rc) = run_executable('account-manager.pl', 'add_service'); + ok($rc == 2, 'add service without mandatory option exit status'); + is($out, '', 'add service without mandatory option stdin output'); + like( + $err, + qr/missing sp_entityid option, aborting/, + 'add service without mandatory option stderr output' + ); + + # creation success + ($out, $err, $rc) = run_executable('account-manager.pl', 'add_service --sp_entityid bar --contacts joe,bob'); + ok($rc == 0, 'add service with mandatory option exit status'); + like($out, qr/Service Provider created/, 'add service with mandatory option stdin output'); + is($err, '', 'add service with mandatory option stderr output'); + + # final list + ($out, $err, $rc) = run_executable('account-manager.pl', 'list_services'); + ok($rc == 0, 'list services exit status'); + like($out, qr/Service ID=\d+; entityid=bar; displayname=; contacts=joe,bob/, 'list services stdin output'); + is($err, '', 'list services stderr output'); + + # tokens + + # initial list + ($out, $err, $rc) = run_executable('account-manager.pl', 'list_tokens'); + ok($rc == 0, 'list tokens exit status'); + is($out, "No corresponding token found in DB\n", 'list tokens stdin output'); + is($err, '', 'list tokens stderr output'); + + # creation failure + ($out, $err, $rc) = run_executable('account-manager.pl', 'add_token'); + ok($rc == 2, 'add token without mandatory option exit status'); + is($out, '', 'add token without mandatory option stdin output'); + like( + $err, + qr/missing email_address option, aborting/, + 'add token without mandatory option stderr output' + ); + + # creation success + ($out, $err, $rc) = run_executable('account-manager.pl', 'add_token --sp_entityid bar --email_address joe'); + ok($rc == 0, 'add token with mandatory option exit status'); + like($out, qr/Authentication token created/, 'add token with mandatory option stdin output'); + is($err, '', 'add token with mandatory option stderr output'); + + # final list + ($out, $err, $rc) = run_executable('account-manager.pl', 'list_tokens'); + ok($rc == 0, 'list tokens exit status'); + like($out, qr/Token ID=\d+; token=\w+; email_address=joe; sp_entityid=bar/, 'list tokens stdin output'); + is($err, '', 'list tokens stderr output'); +} + sub run_executable { my ($executable, $args) = @_;