X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=rt%2Ft%2Fweb%2Fcrypt-gnupg.t;h=995b45d991ad2a4650387e859f1edea9b0e75ca6;hb=4d5e45b24200386a7fc47f2cd69949e82e4bc9c3;hp=8c0eb570dac4ae31a251d20871c3f0eed92d274e;hpb=3185fe4edea62dd3fa9818cf80902e96fe2a2d21;p=freeside.git diff --git a/rt/t/web/crypt-gnupg.t b/rt/t/web/crypt-gnupg.t index 8c0eb570d..995b45d99 100644 --- a/rt/t/web/crypt-gnupg.t +++ b/rt/t/web/crypt-gnupg.t @@ -1,13 +1,14 @@ -#!/usr/bin/perl -w use strict; +use warnings; use RT::Test::GnuPG - tests => 102, + tests => undef, gnupg_options => { passphrase => 'recipient', 'trust-model' => 'always', }; use Test::Warn; +use MIME::Head; use RT::Action::SendEmail; @@ -16,9 +17,9 @@ RT->Config->Set( CorrespondAddress => 'general@example.com'); RT->Config->Set( DefaultSearchResultFormat => qq{ '__id__/TITLE:#', '__Subject__/TITLE:Subject', - 'OO-__OwnerName__-O', + 'OO-__Owner__-O', 'OR-__Requestors__-O', - 'KO-__KeyOwnerName__-K', + 'KO-__KeyOwner__-K', 'KR-__KeyRequestors__-K', Status}); @@ -70,8 +71,7 @@ $user->SetEmailAddress('general@example.com'); for my $mail (@mail) { unlike $mail, qr/Some content/, "outgoing mail was encrypted"; - my ($content_type) = $mail =~ /^(Content-Type: .*)/m; - my ($mime_version) = $mail =~ /^(MIME-Version: .*)/m; + my ($content_type, $mime_version) = get_headers($mail, "Content-Type", "MIME-Version"); my $body = strip_headers($mail); $mail = << "MAIL"; @@ -101,7 +101,7 @@ MAIL my ($msg, @attachments) = @{$txn->Attachments->ItemsArrayRef}; is( $msg->GetHeader('X-RT-Privacy'), - 'PGP', + 'GnuPG', "RT's outgoing mail has crypto" ); is( $msg->GetHeader('X-RT-Incoming-Encryption'), @@ -139,8 +139,7 @@ for my $mail (@mail) { like $mail, qr/Some other content/, "outgoing mail was not encrypted"; like $mail, qr/-----BEGIN PGP SIGNATURE-----[\s\S]+-----END PGP SIGNATURE-----/, "data has some kind of signature"; - my ($content_type) = $mail =~ /^(Content-Type: .*)/m; - my ($mime_version) = $mail =~ /^(MIME-Version: .*)/m; + my ($content_type, $mime_version) = get_headers($mail, "Content-Type", "MIME-Version"); my $body = strip_headers($mail); $mail = << "MAIL"; @@ -170,7 +169,7 @@ MAIL my ($msg, @attachments) = @{$txn->Attachments->ItemsArrayRef}; is( $msg->GetHeader('X-RT-Privacy'), - 'PGP', + 'GnuPG', "RT's outgoing mail has crypto" ); is( $msg->GetHeader('X-RT-Incoming-Encryption'), @@ -212,8 +211,7 @@ ok(@mail, "got some mail"); for my $mail (@mail) { unlike $mail, qr/Some other content/, "outgoing mail was encrypted"; - my ($content_type) = $mail =~ /^(Content-Type: .*)/m; - my ($mime_version) = $mail =~ /^(MIME-Version: .*)/m; + my ($content_type, $mime_version) = get_headers($mail, "Content-Type", "MIME-Version"); my $body = strip_headers($mail); $mail = << "MAIL"; @@ -243,7 +241,7 @@ MAIL my ($msg, @attachments) = @{$txn->Attachments->ItemsArrayRef}; is( $msg->GetHeader('X-RT-Privacy'), - 'PGP', + 'GnuPG', "RT's outgoing mail has crypto" ); is( $msg->GetHeader('X-RT-Incoming-Encryption'), @@ -279,8 +277,7 @@ ok(@mail, "got some mail"); for my $mail (@mail) { like $mail, qr/Thought you had me figured out didya/, "outgoing mail was unencrypted"; - my ($content_type) = $mail =~ /^(Content-Type: .*)/m; - my ($mime_version) = $mail =~ /^(MIME-Version: .*)/m; + my ($content_type, $mime_version) = get_headers($mail, "Content-Type", "MIME-Version"); my $body = strip_headers($mail); $mail = << "MAIL"; @@ -310,7 +307,7 @@ MAIL my ($msg, @attachments) = @{$txn->Attachments->ItemsArrayRef}; is( $msg->GetHeader('X-RT-Privacy'), - 'PGP', + 'GnuPG', "RT's outgoing mail has crypto" ); is( $msg->GetHeader('X-RT-Incoming-Encryption'), @@ -326,6 +323,20 @@ MAIL like($attachments[0]->Content, qr/$RT::rtname/, "RT's mail includes this instance's name"); } +sub get_headers { + my $mail = shift; + open my $fh, "<", \$mail or die $!; + my $head = MIME::Head->read($fh); + return @{[ + map { + my $hdr = "$_: " . $head->get($_); + chomp $hdr; + $hdr; + } + @_ + ]}; +} + sub strip_headers { my $mail = shift; @@ -340,8 +351,13 @@ $nokey->PrincipalObj->GrantRight(Right => 'CreateTicket'); $nokey->PrincipalObj->GrantRight(Right => 'OwnTicket'); my $tick = RT::Ticket->new( RT->SystemUser ); -$tick->Create(Subject => 'owner lacks pubkey', Queue => 'general', - Owner => $nokey); +warning_like { + $tick->Create(Subject => 'owner lacks pubkey', Queue => 'general', + Owner => $nokey); +} [ + qr/nokey\@example.com: skipped: public key not found/, + qr/Recipient 'nokey\@example.com' is unusable/, +]; ok(my $id = $tick->id, 'created ticket for owner-without-pubkey'); $tick = RT::Ticket->new( RT->SystemUser ); @@ -415,23 +431,36 @@ $m->get("$baseurl/Search/Simple.html?q=General"); my $content = $m->content; $content =~ s/(/(/g; $content =~ s/)/)/g; - -like($content, qr/OO-Nobody-O/, "original OwnerName untouched"); -like($content, qr/OO-nokey-O/, "original OwnerName untouched"); -like($content, qr/OO-root-O/, "original OwnerName untouched"); - -like($content, qr/OR-recipient\@example.com-O/, "original Requestors untouched"); -like($content, qr/OR-nokey\@example.com-O/, "original Requestors untouched"); - -like($content, qr/KO-root-K/, "KeyOwnerName does not issue no-pubkey warning for recipient"); -like($content, qr/KO-nokey \(no pubkey!\)-K/, "KeyOwnerName issues no-pubkey warning for root"); -like($content, qr/KO-Nobody \(no pubkey!\)-K/, "KeyOwnerName issues no-pubkey warning for nobody"); - -like($content, qr/KR-recipient\@example.com-K/, "KeyRequestors does not issue no-pubkey warning for recipient\@example.com"); - -like($content, qr/KR-general\@example.com-K/, "KeyRequestors does not issue no-pubkey warning for general\@example.com"); -like($content, qr/KR-nokey\@example.com \(no pubkey!\)-K/, "KeyRequestors DOES issue no-pubkey warning for nokey\@example.com"); +$content =~ s/<(a|span)\b[^>]+>//g; +$content =~ s/<\/(a|span)>//g; +$content =~ s/<//g; + +like($content, qr/OO-Nobody in particular-O/, + "original Owner untouched"); +like($content, qr/OO-nokey-O/, + "original Owner untouched"); +like($content, qr/OO-root \(Enoch Root\)-O/, + "original Owner untouched"); +like($content, qr/OR--O/, + "original Requestors untouched"); +like($content, qr/OR-nokey-O/, + "original Requestors untouched"); + +like($content, qr/KO-Nobody in particular \(no pubkey!\)-K/, + "KeyOwner issues no-pubkey warning for nobody"); +like($content, qr/KO-nokey \(no pubkey!\)-K/, + "KeyOwner issues no-pubkey warning for root"); +like($content, qr/KO-root \(Enoch Root\)-K/, + "KeyOwner does not issue no-pubkey warning for recipient"); +like($content, qr/KR--K/, + "KeyRequestors does not issue no-pubkey warning for recipient\@example.com"); +like($content, qr/KR-nokey \(no pubkey!\)-K/, + "KeyRequestors DOES issue no-pubkey warning for nokey\@example.com"); $m->next_warning_like(qr/public key not found/); $m->next_warning_like(qr/public key not found/); $m->no_leftover_warnings_ok; + +undef $m; +done_testing;