X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=rt%2Ft%2Fmail%2Fcrypt-gnupg.t;h=567573e934d5336bcc973aebcfcdaef98053f9ee;hb=HEAD;hp=ffb059706713275e0e0c5dbc4578ca613ce53acd;hpb=3d0a1bb06b895c5be6e3f0517d355442a6b1e125;p=freeside.git diff --git a/rt/t/mail/crypt-gnupg.t b/rt/t/mail/crypt-gnupg.t index ffb059706..567573e93 100644 --- a/rt/t/mail/crypt-gnupg.t +++ b/rt/t/mail/crypt-gnupg.t @@ -10,9 +10,10 @@ BEGIN { qw/data gnupg keyrings/ ); } -use RT::Test::GnuPG tests => 96, gnupg_options => { homedir => $homedir }; +use RT::Test::GnuPG tests => 100, gnupg_options => { homedir => $homedir }; use Test::Warn; +use_ok('RT::Crypt'); use_ok('MIME::Entity'); diag 'only signing. correct passphrase'; @@ -22,10 +23,12 @@ diag 'only signing. correct passphrase'; Subject => 'test', Data => ['test'], ); - my %res = RT::Crypt::GnuPG::SignEncrypt( Entity => $entity, Encrypt => 0, Passphrase => 'test' ); + my %res = RT::Crypt->SignEncrypt( Entity => $entity, Encrypt => 0, Passphrase => 'test' ); ok( $entity, 'signed entity'); ok( !$res{'logger'}, "log is here as well" ) or diag $res{'logger'}; - my @status = RT::Crypt::GnuPG::ParseStatus( $res{'status'} ); + my @status = RT::Crypt->ParseStatus( + Protocol => $res{'Protocol'}, Status => $res{'status'} + ); is( scalar @status, 2, 'two records: passphrase, signing'); is( $status[0]->{'Operation'}, 'PassphraseCheck', 'operation is correct'); is( $status[0]->{'Status'}, 'DONE', 'good passphrase'); @@ -36,15 +39,17 @@ diag 'only signing. correct passphrase'; ok( $entity->is_multipart, 'signed message is multipart' ); is( $entity->parts, 2, 'two parts' ); - my @parts = RT::Crypt::GnuPG::FindProtectedParts( Entity => $entity ); + my @parts = RT::Crypt->FindProtectedParts( Entity => $entity ); is( scalar @parts, 1, 'one protected part' ); is( $parts[0]->{'Type'}, 'signed', "have signed part" ); is( $parts[0]->{'Format'}, 'RFC3156', "RFC3156 format" ); is( $parts[0]->{'Top'}, $entity, "it's the same entity" ); - my @res = RT::Crypt::GnuPG::VerifyDecrypt( Entity => $entity ); + my @res = RT::Crypt->VerifyDecrypt( Entity => $entity ); is scalar @res, 1, 'one operation'; - @status = RT::Crypt::GnuPG::ParseStatus( $res[0]{'status'} ); + @status = RT::Crypt->ParseStatus( + Protocol => $res[0]{'Protocol'}, Status => $res[0]{'status'} + ); is( scalar @status, 1, 'one record'); is( $status[0]->{'Operation'}, 'Verify', 'operation is correct'); is( $status[0]->{'Status'}, 'DONE', 'good passphrase'); @@ -60,7 +65,7 @@ diag 'only signing. missing passphrase'; ); my %res; warning_like { - %res = RT::Crypt::GnuPG::SignEncrypt( + %res = RT::Crypt->SignEncrypt( Entity => $entity, Encrypt => 0, Passphrase => '' @@ -69,7 +74,9 @@ diag 'only signing. missing passphrase'; ok( $res{'exit_code'}, "couldn't sign without passphrase"); ok( $res{'error'} || $res{'logger'}, "error is here" ); - my @status = RT::Crypt::GnuPG::ParseStatus( $res{'status'} ); + my @status = RT::Crypt->ParseStatus( + Protocol => $res{'Protocol'}, Status => $res{'status'} + ); is( scalar @status, 1, 'one record'); is( $status[0]->{'Operation'}, 'PassphraseCheck', 'operation is correct'); is( $status[0]->{'Status'}, 'MISSING', 'missing passphrase'); @@ -85,7 +92,7 @@ diag 'only signing. wrong passphrase'; my %res; warning_like { - %res = RT::Crypt::GnuPG::SignEncrypt( + %res = RT::Crypt->SignEncrypt( Entity => $entity, Encrypt => 0, Passphrase => 'wrong', @@ -95,7 +102,9 @@ diag 'only signing. wrong passphrase'; ok( $res{'exit_code'}, "couldn't sign with bad passphrase"); ok( $res{'error'} || $res{'logger'}, "error is here" ); - my @status = RT::Crypt::GnuPG::ParseStatus( $res{'status'} ); + my @status = RT::Crypt->ParseStatus( + Protocol => $res{'Protocol'}, Status => $res{'status'} + ); is( scalar @status, 1, 'one record'); is( $status[0]->{'Operation'}, 'PassphraseCheck', 'operation is correct'); is( $status[0]->{'Status'}, 'BAD', 'wrong passphrase'); @@ -109,18 +118,20 @@ diag 'encryption only'; Subject => 'test', Data => ['test'], ); - my %res = RT::Crypt::GnuPG::SignEncrypt( Entity => $entity, Sign => 0 ); + my %res = RT::Crypt->SignEncrypt( Entity => $entity, Sign => 0 ); ok( !$res{'exit_code'}, "successful encryption" ); ok( !$res{'logger'}, "no records in logger" ); - my @status = RT::Crypt::GnuPG::ParseStatus( $res{'status'} ); + my @status = RT::Crypt->ParseStatus( + Protocol => $res{'Protocol'}, Status => $res{'status'} + ); is( scalar @status, 1, 'one record'); is( $status[0]->{'Operation'}, 'Encrypt', 'operation is correct'); is( $status[0]->{'Status'}, 'DONE', 'done'); ok($entity, 'get an encrypted part'); - my @parts = RT::Crypt::GnuPG::FindProtectedParts( Entity => $entity ); + my @parts = RT::Crypt->FindProtectedParts( Entity => $entity ); is( scalar @parts, 1, 'one protected part' ); is( $parts[0]->{'Type'}, 'encrypted', "have encrypted part" ); is( $parts[0]->{'Format'}, 'RFC3156', "RFC3156 format" ); @@ -138,7 +149,7 @@ diag 'encryption only, bad recipient'; my %res; warning_like { - %res = RT::Crypt::GnuPG::SignEncrypt( + %res = RT::Crypt->SignEncrypt( Entity => $entity, Sign => 0, ); @@ -147,7 +158,9 @@ diag 'encryption only, bad recipient'; ok( $res{'exit_code'}, 'no way to encrypt without keys of recipients'); ok( $res{'logger'}, "errors are in logger" ); - my @status = RT::Crypt::GnuPG::ParseStatus( $res{'status'} ); + my @status = RT::Crypt->ParseStatus( + Protocol => $res{'Protocol'}, Status => $res{'status'} + ); is( scalar @status, 1, 'one record'); is( $status[0]->{'Keyword'}, 'INV_RECP', 'invalid recipient'); } @@ -160,11 +173,13 @@ diag 'encryption and signing with combined method'; Subject => 'test', Data => ['test'], ); - my %res = RT::Crypt::GnuPG::SignEncrypt( Entity => $entity, Passphrase => 'test' ); + my %res = RT::Crypt->SignEncrypt( Entity => $entity, Passphrase => 'test' ); ok( !$res{'exit_code'}, "successful encryption with signing" ); ok( !$res{'logger'}, "no records in logger" ); - my @status = RT::Crypt::GnuPG::ParseStatus( $res{'status'} ); + my @status = RT::Crypt->ParseStatus( + Protocol => $res{'Protocol'}, Status => $res{'status'} + ); is( scalar @status, 3, 'three records: passphrase, sign and encrypt'); is( $status[0]->{'Operation'}, 'PassphraseCheck', 'operation is correct'); is( $status[0]->{'Status'}, 'DONE', 'done'); @@ -175,7 +190,7 @@ diag 'encryption and signing with combined method'; ok($entity, 'get an encrypted and signed part'); - my @parts = RT::Crypt::GnuPG::FindProtectedParts( Entity => $entity ); + my @parts = RT::Crypt->FindProtectedParts( Entity => $entity ); is( scalar @parts, 1, 'one protected part' ); is( $parts[0]->{'Type'}, 'encrypted', "have encrypted part" ); is( $parts[0]->{'Format'}, 'RFC3156', "RFC3156 format" ); @@ -190,14 +205,14 @@ diag 'encryption and signing with cascading, sign on encrypted'; Subject => 'test', Data => ['test'], ); - my %res = RT::Crypt::GnuPG::SignEncrypt( Entity => $entity, Sign => 0 ); + my %res = RT::Crypt->SignEncrypt( Entity => $entity, Sign => 0 ); ok( !$res{'exit_code'}, 'successful encryption' ); ok( !$res{'logger'}, "no records in logger" ); - %res = RT::Crypt::GnuPG::SignEncrypt( Entity => $entity, Encrypt => 0, Passphrase => 'test' ); + %res = RT::Crypt->SignEncrypt( Entity => $entity, Encrypt => 0, Passphrase => 'test' ); ok( !$res{'exit_code'}, 'successful signing' ); ok( !$res{'logger'}, "no records in logger" ); - my @parts = RT::Crypt::GnuPG::FindProtectedParts( Entity => $entity ); + my @parts = RT::Crypt->FindProtectedParts( Entity => $entity ); is( scalar @parts, 1, 'one protected part, top most' ); is( $parts[0]->{'Type'}, 'signed', "have signed part" ); is( $parts[0]->{'Format'}, 'RFC3156', "RFC3156 format" ); @@ -212,7 +227,7 @@ diag 'find signed/encrypted part deep inside'; Subject => 'test', Data => ['test'], ); - my %res = RT::Crypt::GnuPG::SignEncrypt( Entity => $entity, Sign => 0 ); + my %res = RT::Crypt->SignEncrypt( Entity => $entity, Sign => 0 ); ok( !$res{'exit_code'}, "success" ); $entity->make_multipart( 'mixed', Force => 1 ); $entity->attach( @@ -220,7 +235,7 @@ diag 'find signed/encrypted part deep inside'; Data => ['-'x76, 'this is mailing list'], ); - my @parts = RT::Crypt::GnuPG::FindProtectedParts( Entity => $entity ); + my @parts = RT::Crypt->FindProtectedParts( Entity => $entity ); is( scalar @parts, 1, 'one protected part' ); is( $parts[0]->{'Type'}, 'encrypted', "have encrypted part" ); is( $parts[0]->{'Format'}, 'RFC3156', "RFC3156 format" ); @@ -236,7 +251,7 @@ diag 'wrong signed/encrypted parts: no protocol'; Data => ['test'], ); - my %res = RT::Crypt::GnuPG::SignEncrypt( + my %res = RT::Crypt->SignEncrypt( Entity => $entity, Sign => 0, ); @@ -245,11 +260,12 @@ diag 'wrong signed/encrypted parts: no protocol'; $entity->head->mime_attr( 'Content-Type.protocol' => undef ); my @parts; - warning_like { - @parts = RT::Crypt::GnuPG::FindProtectedParts( Entity => $entity ); - } qr{Entity is 'multipart/encrypted', but has no protocol defined. Skipped}; - - is( scalar @parts, 0, 'no protected parts' ); + warning_like { @parts = RT::Crypt->FindProtectedParts( Entity => $entity ) } + qr{Entity is 'multipart/encrypted', but has no protocol defined. Checking for PGP part}; + is( scalar @parts, 1, 'one protected part' ); + is( $parts[0]->{'Type'}, 'encrypted', "have encrypted part" ); + is( $parts[0]->{'Format'}, 'RFC3156', "RFC3156 format" ); + is( $parts[0]->{'Top'}, $entity, "it's the same entity" ); } diag 'wrong signed/encrypted parts: not enought parts'; @@ -261,7 +277,7 @@ diag 'wrong signed/encrypted parts: not enought parts'; Data => ['test'], ); - my %res = RT::Crypt::GnuPG::SignEncrypt( + my %res = RT::Crypt->SignEncrypt( Entity => $entity, Sign => 0, ); @@ -271,7 +287,7 @@ diag 'wrong signed/encrypted parts: not enought parts'; my @parts; warning_like { - @parts = RT::Crypt::GnuPG::FindProtectedParts( Entity => $entity ); + @parts = RT::Crypt->FindProtectedParts( Entity => $entity ); } qr/Encrypted or signed entity must has two subparts. Skipped/; is( scalar @parts, 0, 'no protected parts' ); } @@ -284,11 +300,11 @@ diag 'wrong signed/encrypted parts: wrong proto'; Subject => 'test', Data => ['test'], ); - my %res = RT::Crypt::GnuPG::SignEncrypt( Entity => $entity, Sign => 0 ); + my %res = RT::Crypt->SignEncrypt( Entity => $entity, Sign => 0 ); ok( !$res{'exit_code'}, 'success' ); $entity->head->mime_attr( 'Content-Type.protocol' => 'application/bad-proto' ); - my @parts = RT::Crypt::GnuPG::FindProtectedParts( Entity => $entity ); + my @parts = RT::Crypt->FindProtectedParts( Entity => $entity ); is( scalar @parts, 0, 'no protected parts' ); } @@ -300,11 +316,11 @@ diag 'wrong signed/encrypted parts: wrong proto'; Subject => 'test', Data => ['test'], ); - my %res = RT::Crypt::GnuPG::SignEncrypt( Entity => $entity, Encrypt => 0, Passphrase => 'test' ); + my %res = RT::Crypt->SignEncrypt( Entity => $entity, Encrypt => 0, Passphrase => 'test' ); ok( !$res{'exit_code'}, 'success' ); $entity->head->mime_attr( 'Content-Type.protocol' => 'application/bad-proto' ); - my @parts = RT::Crypt::GnuPG::FindProtectedParts( Entity => $entity ); + my @parts = RT::Crypt->FindProtectedParts( Entity => $entity ); is( scalar @parts, 0, 'no protected parts' ); } @@ -314,7 +330,7 @@ diag 'verify inline and in attachment signatures'; my $parser = new MIME::Parser; my $entity = $parser->parse( $fh ); - my @parts = RT::Crypt::GnuPG::FindProtectedParts( Entity => $entity ); + my @parts = RT::Crypt->FindProtectedParts( Entity => $entity ); is( scalar @parts, 2, 'two protected parts' ); is( $parts[1]->{'Type'}, 'signed', "have signed part" ); is( $parts[1]->{'Format'}, 'Inline', "inline format" ); @@ -325,8 +341,10 @@ diag 'verify inline and in attachment signatures'; is( $parts[0]->{'Data'}, $entity->parts(1), "data in second part" ); is( $parts[0]->{'Signature'}, $entity->parts(2), "file's signature in third part" ); - my @res = RT::Crypt::GnuPG::VerifyDecrypt( Entity => $entity ); - my @status = RT::Crypt::GnuPG::ParseStatus( $res[0]->{'status'} ); + my @res = RT::Crypt->VerifyDecrypt( Entity => $entity ); + my @status = RT::Crypt->ParseStatus( + Protocol => $res[0]{'Protocol'}, Status => $res[0]{'status'} + ); is( scalar @status, 1, 'one record'); is( $status[0]->{'Operation'}, 'Verify', 'operation is correct'); is( $status[0]->{'Status'}, 'DONE', 'good passphrase');