diff options
| -rw-r--r-- | TODO | 2 | ||||
| -rw-r--r-- | configure.ac | 1 | ||||
| -rw-r--r-- | tests/TESTS | 1 | ||||
| -rw-r--r-- | tests/client/prompt-t.in | 79 | ||||
| -rw-r--r-- | tests/data/README | 5 | 
5 files changed, 86 insertions, 2 deletions
| @@ -2,8 +2,6 @@  Release 1.0: -* Add a test suite for the wallet -u option. -  * Rewrite the server checks to avoid using IO::String, since one of the    tests already requires Perl 5.8's internal string handling. diff --git a/configure.ac b/configure.ac index 708d5d4..ebff04f 100644 --- a/configure.ac +++ b/configure.ac @@ -64,6 +64,7 @@ AC_CONFIG_FILES([Makefile perl/Makefile.PL tests/data/full.conf])  AC_CONFIG_FILES([tests/client/basic-t], [chmod +x tests/client/basic-t])  AC_CONFIG_FILES([tests/client/full-t], [chmod +x tests/client/full-t])  AC_CONFIG_FILES([tests/client/pod-t], [chmod +x tests/client/pod-t]) +AC_CONFIG_FILES([tests/client/prompt-t], [chmod +x tests/client/prompt-t])  AC_CONFIG_FILES([tests/data/cmd-wrapper], [chmod +x tests/data/cmd-wrapper])  AC_CONFIG_FILES([tests/kasetkey/basic-t], [chmod +x tests/kasetkey/basic-t])  AC_CONFIG_FILES([tests/server/admin-t], [chmod +x tests/server/admin-t]) diff --git a/tests/TESTS b/tests/TESTS index 4ff4a3b..a446643 100644 --- a/tests/TESTS +++ b/tests/TESTS @@ -1,6 +1,7 @@  client/basic  client/full  client/pod +client/prompt  portable/asprintf  portable/snprintf  portable/strlcat diff --git a/tests/client/prompt-t.in b/tests/client/prompt-t.in new file mode 100644 index 0000000..2d6097d --- /dev/null +++ b/tests/client/prompt-t.in @@ -0,0 +1,79 @@ +#!/usr/bin/perl -w +# $Id$ +# +# tests/client/prompt-t -- Password prompting tests for the wallet client. +# +# Written by Russ Allbery <rra@stanford.edu> +# Copyright 2008 Board of Trustees, Leland Stanford Jr. University +# +# See LICENSE for licensing terms. + +BEGIN { our $total = 5 } +use Test::More tests => $total; + +use lib '@abs_top_srcdir@/perl'; +use Wallet::Admin; + +use lib '@abs_top_srcdir@/perl/t/lib'; +use Util; + +# cd to the correct directory. +chdir '@abs_top_srcdir@/tests' +    or die "Cannot chdir to @abs_top_srcdir@/tests: $!\n"; + +SKIP: { +    skip 'no password configuration', $total +        unless -f '@abs_top_builddir@/tests/data/test.password'; +    my $remctld = '@REMCTLD@'; +    skip 'remctld not found', $total unless $remctld; +    eval { require Expect }; +    skip 'Exepct module not found', $total if $@; + +    # Disable sending of wallet's output to our standard output.  Do this +    # twice to avoid Perl warnings. +    $Expect::Log_Stdout = 0; +    $Expect::Log_Stdout = 0; + +    # Spawn remctld and set up with a different ticket cache. +    unlink ('krb5cc_test', 'test-pid'); +    my $principal = contents ('@abs_top_builddir@/tests/data/test.principal'); +    remctld_spawn ($remctld, $principal, +                   '@abs_top_builddir@/tests/data/test.keytab', +                   '@abs_top_builddir@/tests/data/basic.conf'); +    $ENV{KRB5CCNAME} = 'krb5cc_test'; + +    # Read in the principal and password. +    open (PASS, '<', '@abs_top_builddir@/tests/data/test.password') +        or die "Cannot open @abs_top_builddir@/tests/data/test.password: $!\n"; +    my $user = <PASS>; +    my $password = <PASS>; +    close PASS; +    chomp ($user, $password); + +    # Spawn wallet and check an invalid password. +    my $wallet = Expect->spawn ('@abs_top_builddir@/client/wallet', '-k', +                                $principal, '-p', 14373, '-s', 'localhost', +                                '-c', 'fake-wallet', '-u', $user, 'get', +                                'keytab', 'service/fake-output'); +    is ($wallet->expect (2, '-re', 'Password.*: '), 1, 'Saw password prompt'); +    $wallet->send ("invalid-$password\n"); +    is ($wallet->expect (2, 'wallet: authentication failed: '), 1, +        ' and saw error message from an invalid password'); +    $wallet->soft_close; + +    # Now check a valid password. +    $wallet = Expect->spawn ('@abs_top_builddir@/client/wallet', '-k', +                             $principal, '-p', 14373, '-s', 'localhost', +                             '-c', 'fake-wallet', '-u', $user, 'get', +                             'keytab', 'service/fake-output'); +    is ($wallet->expect (2, '-re', 'Password.*: '), 1, 'Saw password prompt'); +    $wallet->send ("$password\n"); +    is ($wallet->expect (2, 'This is a fake keytab'), 1, +        ' and saw the right output'); +    $wallet->soft_close; +    ok (!-f 'krb5cc_test', ' and no ticket cache is left behind'); + +    # All done. +    remctld_stop; +    unlink 'test-pid'; +} diff --git a/tests/data/README b/tests/data/README index 9187035..f5ebf07 100644 --- a/tests/data/README +++ b/tests/data/README @@ -12,6 +12,11 @@ If your krb5.conf file is not in /etc or /usr/local/etc, put a copy of  your krb5.conf file in this directory.  The tests need to generate a  modified copy in order to test some behavior. +To enable tests of password prompting, create a file named test.password +that contains two lines.  The first line should be a test principal and +the second line should be the password for that principal.  The newline is +not taken to be part of the password. +  To enable tests of kasetkey (assuming that you've configured wallet with  --with-afs), create a K4 srvtab with ADMIN access to an AFS kaserver and  put it in test.srvtab.  Then, put the fully-qualified K4 principal name | 
