diff options
Diffstat (limited to 'perl/t/duo.t')
-rwxr-xr-x | perl/t/duo.t | 157 |
1 files changed, 0 insertions, 157 deletions
diff --git a/perl/t/duo.t b/perl/t/duo.t deleted file mode 100755 index 4229afe..0000000 --- a/perl/t/duo.t +++ /dev/null @@ -1,157 +0,0 @@ -#!/usr/bin/perl -# -# Tests for the Duo integration object implementation. -# -# Written by Russ Allbery <eagle@eyrie.org> -# Copyright 2014 -# The Board of Trustees of the Leland Stanford Junior University -# -# See LICENSE for licensing terms. - -use strict; -use warnings; - -use POSIX qw(strftime); -use Test::More; - -BEGIN { - eval 'use Net::Duo'; - plan skip_all => 'Net::Duo required for testing duo' - if $@; - eval 'use Net::Duo::Mock::Agent'; - plan skip_all => 'Net::Duo::Mock::Agent required for testing duo' - if $@; -} - -BEGIN { - use_ok('Wallet::Admin'); - use_ok('Wallet::Config'); - use_ok('Wallet::Object::Duo'); -} - -use lib 't/lib'; -use Util; - -# Some global defaults to use. -my $user = 'admin@EXAMPLE.COM'; -my $host = 'localhost'; -my @trace = ($user, $host, time); -my $date = strftime ('%Y-%m-%d %H:%M:%S', localtime $trace[2]); - -# Flush all output immediately. -$| = 1; - -# Use Wallet::Admin to set up the database. -db_setup; -my $admin = eval { Wallet::Admin->new }; -is ($@, '', 'Database connection succeeded'); -is ($admin->reinitialize ($user), 1, 'Database initialization succeeded'); -my $schema = $admin->schema; - -# Create a mock object to use for Duo calls. -my $mock = Net::Duo::Mock::Agent->new ({ key_file => 't/data/duo/keys.json' }); - -# Test error handling in the absence of configuration. -my $object = eval { - Wallet::Object::Duo->new ('duo', 'test', $schema); -}; -is ($object, undef, 'Wallet::Object::Duo new with no config failed'); -is ($@, "duo object implementation not configured\n", '...with correct error'); -$object = eval { - Wallet::Object::Duo->create ('duo', 'test', $schema, @trace); -}; -is ($object, undef, 'Wallet::Object::Duo creation with no config failed'); -is ($@, "duo object implementation not configured\n", '...with correct error'); - -# Set up the Duo configuration. -$Wallet::Config::DUO_AGENT = $mock; -$Wallet::Config::DUO_KEY_FILE = 't/data/duo/keys.json'; - -# Test creating an integration. -note ('Test creating an integration'); -my $expected = { - name => 'test', - notes => 'Managed by wallet', - type => 'unix', -}; -$mock->expect ( - { - method => 'POST', - uri => '/admin/v1/integrations', - content => $expected, - response_file => 't/data/duo/integration.json', - } -); -$object = Wallet::Object::Duo->create ('duo', 'test', $schema, @trace); -isa_ok ($object, 'Wallet::Object::Duo'); - -# Check the metadata about the new wallet object. -$expected = <<"EOO"; - Type: duo - Name: test - Duo key: DIRWIH0ZZPV4G88B37VQ - Created by: $user - Created from: $host - Created on: $date -EOO -is ($object->show, $expected, 'Show output is correct'); - -# Test retrieving the integration information. -note ('Test retrieving an integration'); -$mock->expect ( - { - method => 'GET', - uri => '/admin/v1/integrations/DIRWIH0ZZPV4G88B37VQ', - response_file => 't/data/duo/integration.json', - } -); -my $data = $object->get (@trace); -ok (defined ($data), 'Retrieval succeeds'); -$expected = <<'EOO'; -[duo] -ikey = DIRWIH0ZZPV4G88B37VQ -skey = QO4ZLqQVRIOZYkHfdPDORfcNf8LeXIbCWwHazY7o -host = example-admin.duosecurity.com -EOO -is ($data, $expected, '...and integration data is correct'); - -# Ensure that we can't retrieve the object when locked. -is ($object->flag_set ('locked', @trace), 1, - 'Setting object to locked succeeds'); -is ($object->get, undef, '...and now get fails'); -is ($object->error, 'cannot get duo:test: object is locked', - '...with correct error'); -is ($object->flag_clear ('locked', @trace), 1, - '...and clearing locked flag works'); - -# Create a new object by wallet type and name. -$object = Wallet::Object::Duo->new ('duo', 'test', $schema); - -# Test deleting an integration. We can't test this entirely properly because -# currently Net::Duo::Mock::Agent doesn't support stacking multiple expected -# calls and delete makes two calls. -note ('Test deleting an integration'); -$mock->expect ( - { - method => 'GET', - uri => '/admin/v1/integrations/DIRWIH0ZZPV4G88B37VQ', - response_file => 't/data/duo/integration.json', - } -); -TODO: { - local $TODO = 'Net::Duo::Mock::Agent not yet capable'; - - is ($object->destroy (@trace), 1, 'Duo object deletion succeeded'); - $object = eval { Wallet::Object::Duo->new ('duo', 'test', $schema) }; - is ($object, undef, '...and now object cannot be retrieved'); - is ($@, "cannot find duo:test\n", '...with correct error'); -} - -# Clean up. -$admin->destroy; -END { - unlink ('wallet-db'); -} - -# Done testing. -done_testing (); |