1#!/usr/bin/perl -wT 2 3# Before `make install' is performed this script should be runnable with 4# `make test'. After `make install' it should work as `perl Mail-OpenDKIM.t' 5 6######################### 7 8use Test::More tests => 15; 9use Error qw(:try); 10BEGIN { use_ok('Mail::OpenDKIM') }; 11 12######################### 13 14OpenDKIM: { 15 16my $msg = <<'EOF'; 17From: Nigel Horne <njh@example.com> 18To: Self <njh@example.com> 19Subject: Testing 20 21Can you hear me, Mother? 22EOF 23 24 my $o = new_ok('Mail::OpenDKIM'); 25 ok($o->dkim_init()); 26 27 my $d; 28 29 try { 30 $d = $o->dkim_sign({ 31 id => 'MLM', 32 secretkey => '11111', 33 selector => 'example', 34 domain => 'example.com', 35 hdrcanon_alg => DKIM_CANON_RELAXED, 36 bodycanon_alg => DKIM_CANON_RELAXED, 37 sign_alg => DKIM_SIGN_RSASHA1, 38 length => -1, 39 }); 40 41 ok(defined($d)); 42 43 # d is a Mail::OpenDKIM::DKIM object 44 } catch Error with { 45 my $ex = shift; 46 fail($ex->stringify); 47 }; 48 49 isa_ok($d, 'Mail::OpenDKIM::DKIM'); 50 51 $msg =~ s/\n/\r\n/g; 52 53 ok($d->dkim_chunk({ chunkp => $msg, len => length($msg) }) == DKIM_STAT_OK); 54 55 # Flag no more data to come 56 ok($d->dkim_chunk({ chunkp => '', len => 0 }) == DKIM_STAT_OK); 57 58 # Will fail because the secret key isn't valid 59 ok($d->dkim_eom() == DKIM_STAT_NORESOURCE); 60 61 ok($d->dkim_geterror() eq 'd2i_PrivateKey_bio() failed'); 62 63 my $args = { 64 buf => 0 x 256, 65 len => 10, 66 initial => 0 67 }; 68 69 my $version = Mail::OpenDKIM::dkim_libversion(); 70 71 if($version >= 0x2040000) { 72 # Will fail because the private key failed to load 73 ok($d->dkim_getsighdr($args) == DKIM_STAT_INVALID); 74 } else { 75 # 10 characters isn't long enough for a DKIM_SIGNATURE header 76 ok($d->dkim_getsighdr($args) == DKIM_STAT_NORESOURCE); 77 } 78 79 $args->{len} = 256; 80 81 if($version >= 2040000) { 82 # Will fail because the private key failed to load 83 ok($d->dkim_getsighdr($args) == DKIM_STAT_INVALID); 84 like($d->dkim_geterror(), qr/private key load failure/); 85 ok(1); 86 } else { 87 ok($d->dkim_getsighdr($args) == DKIM_STAT_OK); 88 89 # diag("Buf = $$args{buf}"); 90 91 like($$args{buf}, qr/a=rsa-sha1/); 92 like($$args{buf}, qr/d=example.com/); 93 } 94 95 ok($d->dkim_free() == DKIM_STAT_OK); 96 97 $o->dkim_close(); 98 99 try { 100 $o->dkim_close(); 101 fail(); 102 } catch Error with { 103 my $ex = shift; 104 like($ex, qr/dkim_close called before dkim_init/); 105 }; 106} 107