# -*-perl-*- # testscript for Crypt::PWSafe3 Classes by Thomas Linden # # needs to be invoked using the command "make test" from # the Crypt::PWSafe3 source directory. # # Under normal circumstances every test should succeed. use Data::Dumper; #use Test::More tests => 57; use Test::More qw(no_plan); ### 1 # load module BEGIN { use_ok "Crypt::PWSafe3"}; require_ok( 'Crypt::PWSafe3' ); ### 2 # open vault and read in all records eval { my $vault = new Crypt::PWSafe3(file => 't/tom.psafe3', password => 'tom'); my @r = $vault->getrecords; my $got = 0; foreach my $rec (@r) { if ($rec->uuid) { $got++; } } if (! $got) { die "No records found in test database"; } }; ok(!$@, "open a pwsafe3 database"); ### 3 # modify an existing record my $uuid3; my %rdata3; my $rec3; my %data3 = ( user => 'u3', passwd => 'p3', group => 'g3', title => 't3', notes => 'n3' ); eval { my $vault3 = new Crypt::PWSafe3(file => 't/tom.psafe3', password => 'tom'); foreach my $uuid ($vault3->looprecord) { $uuid3 = $uuid; $vault3->modifyrecord($uuid3, %data3); last; } $vault3->save(file=>'t/3.out'); my $rvault3 = new Crypt::PWSafe3(file => 't/3.out', password => 'tom'); $rec3 = $rvault3->getrecord($uuid3); foreach my $name (keys %data3) { $rdata3{$name} = $rec3->$name(); } }; ok(!$@, "read a pwsafe3 database and change a record ($@)"); is_deeply(\%data3, \%rdata3, "Change a record an check if changes persist after saving"); ### 4 # re-use $rec3 and change it the oop way my $rec4; eval { my $vault4 = new Crypt::PWSafe3(file => 't/3.out', password => 'tom'); $rec4 = $vault4->getrecord($uuid3); $rec4->user("u4"); $rec4->passwd("p4"); $vault4->addrecord($rec4); $vault4->markmodified(); $vault4->save(file=>'t/4.out'); my $rvault4 = new Crypt::PWSafe3(file => 't/4.out', password => 'tom'); $rec4 = $rvault4->getrecord($uuid3); if ($rec4->user ne 'u4') { die "oop way record change failed"; } }; ok(!$@, "re-use record and change it the oop way\n" . $@ . "\n"); ### 5 modify some header fields eval { my $vault5 = new Crypt::PWSafe3(file => 't/tom.psafe3', password => 'tom'); my $h3 = new Crypt::PWSafe3::HeaderField(name => 'savedonhost', value => 'localhost'); $vault5->addheader($h3); $vault5->markmodified(); $vault5->save(file=>'t/5.out'); my $rvault5 = new Crypt::PWSafe3(file => 't/5.out', password => 'tom'); if ($rvault5->getheader('savedonhost')->value() ne 'localhost') { die "header savedonhost not correct"; } }; ok(!$@, "modify some header fields ($@)");