[BACK]Return to keyring.t CVS log [TXT][DIR] Up to [local] / palm / Palm-Keyring / t

Diff for /palm/Palm-Keyring/t/keyring.t between version 1.19 and 1.20

version 1.19, 2008/09/18 03:02:50 version 1.20, 2008/09/18 07:06:11
Line 1 
Line 1 
 #!/usr/bin/perl -T  #!/usr/bin/perl -T
 # $RedRiver: keyring.t,v 1.18 2008/09/18 01:53:27 andrew Exp $  # $RedRiver: keyring.t,v 1.19 2008/09/18 02:02:50 andrew Exp $
 use strict;  use strict;
 use warnings;  use warnings;
   
 use Test::More tests => 52;  use Test::More tests => 198;
 use Data::Dumper;  use Data::Dumper;
   
 BEGIN {  BEGIN {
Line 62 
Line 62 
     },      },
 };  };
   
   my $bad_cipher      = 999;
   my %crypt_1_details = (
       'default_iter'   => 1000,
       'keylen'         => 24,
       'blocksize'      => 8,
       'name'           => 'DES_EDE3',
       'alias'          => 'DES-EDE3',
       'DES_odd_parity' => 1
   );
   
   my $bad_label       = 999;
   my $bad_label_name  = 'not_a_label_name';
   my %label_1_details = (
       id   => 1,
       name => 'account',
   );
   my %label_not_found_details = (
       id   => $bad_label,
       name => undef,
   );
   
   # Crypts
   is_deeply( Palm::Keyring::crypts(1), \%crypt_1_details, 'Got crypt 1' );
   is_deeply( Palm::Keyring::crypts('DES-EDE3'),
       \%crypt_1_details, 'Got crypt DES-EDE3' );
   is( Palm::Keyring::crypts(), undef, "Didn't get crypt empty cipher" );
   is( Palm::Keyring::crypts($bad_cipher),
       undef, "Didn't get crypt $bad_cipher" );
   
   # Bad Cipher
   eval { Palm::Keyring->new( { version => 5, cipher => $bad_cipher } ) };
   like(
       $@,
       qr/^Unknown \s cipher \s $bad_cipher/xms,
       "Failed to create keyring with cipher $bad_cipher"
   );
   
   # Labels
   is_deeply( Palm::Keyring::labels(1), \%label_1_details, 'Got label 1' );
   is_deeply( Palm::Keyring::labels('account'),
       \%label_1_details, 'Got label account' );
   is( Palm::Keyring::labels(), undef, "Didn't get label empty label" );
   is_deeply( Palm::Keyring::labels($bad_label),
       \%label_not_found_details, "Got default label for $bad_label" );
   is( Palm::Keyring::labels($bad_label_name), undef, "Didn't get label for
       $bad_label_name"
   );
   
   my $pdb;
   eval { $pdb = new Palm::Keyring( -file => 't/Keys-invalid_version.pdb' ) };
   like(
       $@,
       qr/^Unsupported \s Version \s 999/xms,
       'Couldn\'t load pdb with invalid version'
   );
   
   eval { $pdb = new Palm::Keyring( -file => 't/Keys-invalid_cipher.pdb' ) };
   like(
       $@,
       qr/^Unknown \s cipher \s 999/xms,
       'Couldn\'t load pdb with Unknown Cipher'
   );
   
   ok( $pdb = new Palm::Keyring( -file => 't/Keys-no_data.pdb' ),
       'Loaded Palm::Keyring file with no data' );
   
   my $record;
   ok( $record = $pdb->append_Record(), 'Append Record' );
   ok( $pdb->Encrypt( $record, $password, $acct ),
       'Encrypt account into record' );
   my $record2;
   ok( $record2 = $pdb->append_Record(), 'Append Record' );
   
   ok( $pdb->PackRecord($record), 'Pack Proper Record');
   eval{ $pdb->PackRecord($record2) };
   like(
       $@,
       qr/^No \s encrypted \s content \s to \s pack/xms,
       'Fail to pack record without encrypted content'
   );
   
   $record2->{encrypted} = '';
   eval{ $pdb->PackRecord($record2) };
   like(
       $@,
       qr/^No \s ivec/xms,
       'Fail to pack record without ivec'
   );
   
   $record2->{ivec} = 1;
   ok( $pdb->PackRecord($record2), 'Pack Proper Record');
   
   ok( $record = $pdb->ParseRecord(%{ $record }), 'Parse Proper Packed');
   
   $pdb->{version} = 999;
   eval{ $pdb->PackRecord($record) };
   like( $@,
       qr/^Unsupported \s Version \s 999/xms,
       'Couldn\'t PackRecord with Invalid Version'
   );
   
   eval{ $pdb->ParseRecord(%{ $record2 }) };
   like( $@,
       qr/^Unsupported \s Version \s 999/xms,
       'Couldn\'t ParseRecord with Invalid Version'
   );
   
   $pdb = undef;
   
   unlink $file;
   
 foreach my $options (@o) {  foreach my $options (@o) {
     my $pdb;      foreach my $config_type ( 'hashref', 'cgi-style', 'list' ) {
     my $record;  
     my $decrypted;  
   
     my $Num_Tests_Left = 25;          my $pdb;
 SKIP: {          my $record;
         if ( defined $options->{cipher} && $options->{cipher} > 0 ) {          my $decrypted;
             my $crypt = Palm::Keyring::crypts( $options->{cipher} );  
             skip 'Crypt::CBC not installed', $Num_Tests_Left  
                 unless eval "require Crypt::CBC";  
             skip 'Crypt::' . $crypt->{name} . ' not installed',  
                 $Num_Tests_Left  
                 unless eval "require Crypt::$crypt->{name}";  
         }  
   
         if ( $options->{version} == 4 ) {          my $Num_Tests_Left = 25;
             skip 'Crypt::DES not installed', $Num_Tests_Left      SKIP: {
                 unless eval "require Crypt::DES ";              if ( defined $options->{cipher} && $options->{cipher} > 0 ) {
             skip 'Digest::MD5 not installed', $Num_Tests_Left                  my $crypt = Palm::Keyring::crypts( $options->{cipher} );
                 unless eval "require Digest::MD5 ";                  skip 'Crypt::CBC not installed', $Num_Tests_Left
         }                      unless eval "require Crypt::CBC";
         elsif ( $options->{version} == 5 ) {                  if ($crypt) {
             skip 'Digest::HMAC_SHA1 not installed', $Num_Tests_Left                      skip 'Crypt::' . $crypt->{name} . ' not installed',
                 unless eval "require Digest::HMAC_SHA1 ";                          $Num_Tests_Left
         }                          unless eval "require Crypt::$crypt->{name}";
                   }
                   else {
                       skip 'Unknown Crypt: ' . $options->{cipher},
                           $Num_Tests_Left;
                   }
               }
   
         ok( $pdb = new Palm::Keyring($options),              if ( $options->{version} == 4 ) {
             'new Palm::Keyring v' . $options->{version}                  skip 'Crypt::DES not installed', $Num_Tests_Left
         );                      unless eval "require Crypt::DES ";
                   skip 'Digest::MD5 not installed', $Num_Tests_Left
                       unless eval "require Digest::MD5 ";
               }
               elsif ( $options->{version} == 5 ) {
                   skip 'Digest::HMAC_SHA1 not installed', $Num_Tests_Left
                       unless eval "require Digest::HMAC_SHA1 ";
               }
   
         ok( $record = $pdb->append_Record(), 'Append Record' );              my @options = ($options);
               if ( $config_type eq 'cgi-style' ) {
                   @options = (
                       '-version'  => $options->{version},
                       '-password' => $options->{password},
                   );
                   if ( $options->{cipher} ) {
                       push @options, '-cipher', $options->{cipher};
                   }
               }
               elsif ( $config_type eq 'list' ) {
                   @options = ( $options->{password}, $options->{version} );
                   if ( $options->{cipher} ) {
                       push @options, $options->{cipher};
                   }
               }
   
         ok( $pdb->Encrypt( $record, $password, $acct ),              ok( $pdb = new Palm::Keyring(@options),
             'Encrypt account into record' );                  'new Palm::Keyring v' . $options->{version}
               );
   
         ok( $pdb->Write($file), 'Write file' );              ok( $pdb->Write($file), 'Write "empty" file' );
   
         $pdb = undef;              ok( $record = $pdb->append_Record(), 'Append Record' );
   
         ok( $pdb = new Palm::Keyring(), 'new Palm::Keyring' );              ok( $pdb->Encrypt( $record, $password, $acct ),
                   'Encrypt account into record' );
   
         ok( $pdb->Load($file), 'Load File' );              ok( $pdb->Write($file), 'Write file' );
   
         ok( $pdb->Password($password), 'Verify Password' );              $pdb = undef;
   
         my $rec_num = 0;              ok( $pdb = new Palm::Keyring(), 'new Palm::Keyring' );
         ok( $decrypted = $pdb->Decrypt( $pdb->{records}->[$rec_num] ),  
             'Decrypt record' );  
   
         is( $decrypted->{2}->{data}, $password, 'Got password' );              ok( $pdb->Load($file), 'Load File' );
   
         is_deeply( $decrypted, $acct, 'Account Matches' );              ok( $pdb->Password($password), 'Verify Password' );
   
         my $old_date = $decrypted->{3}->{data};              my $rec_num = 0;
               ok( $decrypted = $pdb->Decrypt( $pdb->{records}->[$rec_num] ),
                   'Decrypt record' );
   
         ok( $pdb->Password( $password, $new_password ),              is( $decrypted->{2}->{data}, $password, 'Got password' );
             'Change PDB Password' );  
   
         ok( $decrypted = $pdb->Decrypt( $pdb->{'records'}->[$rec_num] ),              is_deeply( $decrypted, $acct, 'Account Matches' );
             'Decrypt with new password' );  
   
         my $new_date = $decrypted->{3}->{data};              my $old_date = $decrypted->{3}->{data};
   
         is_deeply( $old_date, $new_date, 'Date didn\'t change' );              ok( $pdb->Password( $password, $new_password ),
                   'Change PDB Password' );
   
         $decrypted->{2}->{data} = $new_password;              ok( $decrypted = $pdb->Decrypt( $pdb->{'records'}->[$rec_num] ),
                   'Decrypt with new password' );
   
         $pdb->{records}->[$rec_num]->{plaintext} = $decrypted;              my $new_date = $decrypted->{3}->{data};
   
         ok( $pdb->Encrypt( $pdb->{'records'}->[$rec_num] ), 'Change record' );              is_deeply( $old_date, $new_date, 'Date didn\'t change' );
   
         ok( $decrypted = $pdb->Decrypt( $pdb->{'records'}->[$rec_num] ),              $decrypted->{2}->{data} = $new_password;
             'Decrypt new record' );  
   
         $new_date = $decrypted->{3}->{data};              $pdb->{records}->[$rec_num]->{plaintext} = $decrypted;
   
         my $od = join '/', map { $old_date->{$_} } sort keys %{$old_date};              ok( $pdb->Encrypt( $pdb->{'records'}->[$rec_num] ),
         my $nd = join '/', map { $new_date->{$_} } sort keys %{$new_date};                  'Change record' );
   
         isnt( $od, $nd, 'Date changed' );              ok( $decrypted = $pdb->Decrypt( $pdb->{'records'}->[$rec_num] ),
                   'Decrypt new record' );
   
         is( $decrypted->{2}->{data}, $new_password, 'Got new password' );              $new_date = $decrypted->{3}->{data};
   
         my $last_decrypted = $decrypted;              my $od = join '/', map { $old_date->{$_} } sort keys %{$old_date};
               my $nd = join '/', map { $new_date->{$_} } sort keys %{$new_date};
   
         $decrypted = {};              isnt( $od, $nd, 'Date changed' );
         ok( $pdb->Password(), 'Forget password' );  
   
         eval { $decrypted = $pdb->Decrypt( $pdb->{'records'}->[$rec_num] ) };              is( $decrypted->{2}->{data}, $new_password, 'Got new password' );
         ok( $@, 'Don\'t decrypt' );  
   
         isnt( $decrypted->{password},              my $last_decrypted = $decrypted;
             $new_password, 'Didn\'t get new password' );  
   
         ok( $pdb->Unlock($new_password), 'Unlock' );              $decrypted = {};
               ok( $pdb->Password(), 'Forget password' );
   
         my @plaintext = map { $_->{plaintext} } @{ $pdb->{records} };              eval {
                   $decrypted = $pdb->Decrypt( $pdb->{'records'}->[$rec_num] );
               };
               ok( $@, 'Don\'t decrypt' );
   
         is_deeply( $plaintext[0], $last_decrypted, 'Account Matches' );              isnt( $decrypted->{password},
                   $new_password, 'Didn\'t get new password' );
   
         ok( $pdb->Lock(), 'Lock' );              ok( $pdb->Unlock($new_password), 'Unlock' );
   
         my $cleared_decrypted = {};              my @plaintext = map { $_->{plaintext} } @{ $pdb->{records} };
         $cleared_decrypted->{0} = $last_decrypted->{0};  
         @plaintext = map { $_->{plaintext} } @{ $pdb->{records} };  
   
         is_deeply( $plaintext[0], $cleared_decrypted, 'Cleared records' );              is_deeply( $plaintext[0], $last_decrypted, 'Account Matches' );
   
         ok( unlink($file), 'Remove test pdb v' . $options->{version} );              ok( $pdb->Lock(), 'Lock' );
   
               my $cleared_decrypted = {};
               $cleared_decrypted->{0} = $last_decrypted->{0};
               @plaintext = map { $_->{plaintext} } @{ $pdb->{records} };
   
               is_deeply( $plaintext[0], $cleared_decrypted, 'Cleared records' );
   
               $pdb->{records}->[0]->{data} = undef;
               ok( $pdb->Write($file), 'Write file' );
               ok( $pdb->Load($file),  'Load File' );
   
               $pdb->{version} = 999;
               eval { $pdb->Write($file) };
               like(
                   $@,
                   qr/^Unsupported \s Version \s 999/xms,
                   'Couldn\'t Write file with unsupported version'
               );
   
               ok( unlink($file), 'Remove test pdb v' . $options->{version} );
   
           }
     }      }
 }  }
   

Legend:
Removed from v.1.19  
changed lines
  Added in v.1.20

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>