use strict;
use Test::More tests => 16;
use Test::Exception;
use Convert::PEM;
use Math::BigInt;
my $objfile = "./object.pem";
my $pem = Convert::PEM->new(
Name => 'TEST OBJECT',
ASN => qq(
TestObject SEQUENCE {
int INTEGER
}
));
isa_ok $pem, 'Convert::PEM';
my($obj, $obj2);
$obj = { TestObject => { int => 4 } };
lives_ok { $pem->write( Filename => $objfile, Content => $obj) } 'can write';
ok -e $objfile, 'output file exists';
lives_ok { $obj2 = $pem->read( Filename => $objfile ) } 'can read';
is $obj->{TestObject}{int}, $obj2->{TestObject}{int}, 'input matches output';
unlink $objfile;
lives_ok { $pem->write( Filename => $objfile, Content => $obj, Password => 'xx' ) } 'can write';
ok -e $objfile, 'output file exists';
lives_ok { $obj2 = $pem->read( Filename => $objfile ) } 'can read';
ok !defined $obj2, 'cannot read encrypted file';
like $pem->errstr, qr/^Decryption failed/, 'errstr matches decryption failed';
lives_ok { $obj2 = $pem->read( Filename => $objfile, Password => 'xx') } 'can read';
is $obj->{TestObject}{int}, $obj2->{TestObject}{int}, 'input matches output';
unlink $objfile;
$obj->{TestObject}{int} = Math::BigInt->new("110982309809809850938509");
lives_ok { $pem->write( Filename => $objfile, Content => $obj) } 'can write';
ok -e $objfile, 'output file exists';
lives_ok { $obj2 = $pem->read( Filename => $objfile ) } 'can read';
is $obj->{TestObject}{int}, $obj2->{TestObject}{int}, 'input matches output';
unlink $objfile;