This commit was generated by cvs2svn to compensate for changes in r8690,
[freeside.git] / rt / t / mail / gnupg-reverification.t
1 #!/usr/bin/perl
2 use strict;
3 use warnings;
4
5 use RT::Test tests => 120;
6
7 plan skip_all => 'GnuPG required.'
8     unless eval 'use GnuPG::Interface; 1';
9 plan skip_all => 'gpg executable is required.'
10     unless RT::Test->find_executable('gpg');
11
12
13 use File::Temp qw(tempdir);
14 my $homedir = tempdir( CLEANUP => 1 );
15
16 RT->Config->Set( 'GnuPG',
17                  Enable => 1,
18                  OutgoingMessagesFormat => 'RFC' );
19
20 RT->Config->Set( 'GnuPGOptions',
21                  homedir => $homedir,
22                  passphrase => 'rt-test',
23                  'no-permission-warning' => undef);
24
25 RT->Config->Set( 'MailPlugins' => 'Auth::MailFrom', 'Auth::GnuPG' );
26
27
28 diag "load Everyone group" if $ENV{'TEST_VERBOSE'};
29 my $everyone;
30 {
31     $everyone = RT::Group->new( $RT::SystemUser );
32     $everyone->LoadSystemInternalGroup('Everyone');
33     ok $everyone->id, "loaded 'everyone' group";
34 }
35
36 RT::Test->set_rights(
37     Principal => $everyone,
38     Right => ['CreateTicket'],
39 );
40
41
42 my ($baseurl, $m) = RT::Test->started_ok;
43 ok $m->login, 'we get log in';
44
45 RT::Test->import_gnupg_key('rt-recipient@example.com');
46
47 my @ticket_ids;
48
49 my $emaildatadir = RT::Test::get_relocatable_dir(File::Spec->updir(),
50     qw(data gnupg emails));
51 my @files = glob("$emaildatadir/*-signed-*");
52 foreach my $file ( @files ) {
53     diag "testing $file" if $ENV{'TEST_VERBOSE'};
54
55     my ($eid) = ($file =~ m{(\d+)[^/\\]+$});
56     ok $eid, 'figured id of a file';
57
58     my $email_content = RT::Test->file_content( $file );
59     ok $email_content, "$eid: got content of email";
60
61     my ($status, $id) = RT::Test->send_via_mailgate( $email_content );
62     is $status >> 8, 0, "$eid: the mail gateway exited normally";
63     ok $id, "$eid: got id of a newly created ticket - $id";
64
65     my $ticket = RT::Ticket->new( $RT::SystemUser );
66     $ticket->Load( $id );
67     ok $ticket->id, "$eid: loaded ticket #$id";
68     is $ticket->Subject, "Test Email ID:$eid", "$eid: correct subject";
69
70     $m->goto_ticket( $id );
71     $m->content_like(
72         qr/Not possible to check the signature, the reason is missing public key/is,
73         "$eid: signature is not verified",
74     );
75     $m->content_like(qr/This is .*ID:$eid/ims, "$eid: content is there and message is decrypted");
76
77     push @ticket_ids, $id;
78 }
79
80 diag "import key into keyring" if $ENV{'TEST_VERBOSE'};
81 RT::Test->import_gnupg_key('rt-test@example.com', 'public');
82
83 foreach my $id ( @ticket_ids ) {
84     diag "testing ticket #$id" if $ENV{'TEST_VERBOSE'};
85
86     $m->goto_ticket( $id );
87     $m->content_like(
88         qr/The signature is good/is,
89         "signature is re-verified and now good",
90     );
91 }
92