| #!/usr/bin/perl -w -T |
| |
| BEGIN { |
| if (-e 't/test_dir') { # if we are running "t/rule_tests.t", kluge around ... |
| chdir 't'; |
| } |
| |
| if (-e 'test_dir') { # running from test directory, not .. |
| unshift(@INC, '../blib/lib'); |
| } |
| } |
| |
| my $prefix = '.'; |
| if (-e 'test_dir') { # running from test directory, not .. |
| $prefix = '..'; |
| } |
| |
| use strict; |
| |
| use lib '.'; use lib 't'; |
| use SATest; sa_t_init("missing_hb_separator"); |
| use Mail::SpamAssassin; |
| |
| use Test::More tests => 13; |
| |
| # initialize SpamAssassin |
| my $sa = create_saobj({ |
| dont_copy_prefs => 1, |
| post_config_text => q{ |
| score X_MESSAGE_INFO 0.1 |
| score MISSING_HB_SEP 0.1 |
| }, |
| }); |
| |
| $sa->init(0); # parse rules |
| |
| my @msg; |
| my $mail; |
| my $status; |
| my $result; |
| |
| ##### |
| |
| # make sure we catch w/out body, and that we catch the last header |
| |
| @msg = ("Content-Type: text/plain; boundary=foo\n","X-Message-Info: foo\n"); |
| $mail = $sa->parse(\@msg, 1); |
| $status = $sa->check($mail); |
| |
| $result = 0; |
| foreach (@{$status->{test_names_hit}}) { |
| print "test hit: $_\n"; |
| $result++ if ($_ eq 'MISSING_HB_SEP' || $_ eq 'X_MESSAGE_INFO'); |
| } |
| |
| ok ( $result == 2 ); |
| ok ( $mail->{pristine_body} eq "" ); |
| |
| $status->finish(); |
| $mail->finish(); |
| |
| ##### |
| |
| # we should also catch no separator before the mime part boundary, and the |
| # last header |
| |
| @msg = ("Content-Type: text/plain;\n"," boundary=foo\n","X-Message-Info: foo\n","--foo\n"); |
| $mail = $sa->parse(\@msg, 1); |
| $status = $sa->check($mail); |
| |
| $result = 0; |
| foreach (@{$status->{test_names_hit}}) { |
| $result++ if ($_ eq 'MISSING_HB_SEP' || $_ eq 'X_MESSAGE_INFO'); |
| } |
| |
| ok ( $result == 2 ); |
| ok ( $mail->{pristine_body} eq "--foo\n" ); |
| |
| $status->finish(); |
| $mail->finish(); |
| |
| ##### |
| |
| @msg = ("X-Message-Info: foo\n", "Content-Type: text/plain; boundary=foo\n","--foo\n"); |
| $mail = $sa->parse(\@msg, 1); |
| $status = $sa->check($mail); |
| |
| $result = 0; |
| foreach (@{$status->{test_names_hit}}) { |
| $result++ if ($_ eq 'MISSING_HB_SEP' || $_ eq 'X_MESSAGE_INFO'); |
| } |
| |
| ok ( $result == 2 ); |
| ok ( $mail->{pristine_body} eq "--foo\n" ); |
| |
| $status->finish(); |
| $mail->finish(); |
| |
| |
| ##### |
| |
| @msg = ("Subject:x\n", "one\n", "two\n", "three\n", "X-Message-Info:foo\n", |
| "\n", "test body\n"); |
| $mail = $sa->parse(\@msg, 1); |
| $status = $sa->check($mail); |
| |
| $result = 0; |
| foreach (@{$status->{test_names_hit}}) { |
| # print "test hit: $_\n"; |
| $result++ if ($_ eq 'MISSING_HB_SEP' || $_ eq 'X_MESSAGE_INFO'); |
| } |
| |
| ok ( $result == 1 ); |
| ok ( $mail->{pristine_body} eq "test body\n" ); |
| |
| $status->finish(); |
| $mail->finish(); |
| |
| |
| ##### |
| |
| @msg = ("Subject:x\n", "one\n", "two\n", "three\n", "four\n", |
| "X-Message-Info:foo\n", "\n", "test\n"); |
| $mail = $sa->parse(\@msg, 1); |
| $status = $sa->check($mail); |
| |
| $result = 0; |
| foreach (@{$status->{test_names_hit}}) { |
| # print "test hitH: $_\n"; |
| $result++ if ($_ eq 'MISSING_HB_SEP' || $_ eq 'X_MESSAGE_INFO'); |
| } |
| |
| ok ( $result == 1 ); |
| |
| $status->finish(); |
| $mail->finish(); |
| |
| |
| ##### |
| |
| @msg = ('Content-Type: multipart/related; boundary="foobar:"'."\n", |
| "--foobar:\n", |
| "Content-Type: text/plain\n", |
| "XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X\n", |
| "--foobar:--\n"); |
| $mail = $sa->parse(\@msg, 1); |
| $status = $sa->check($mail); |
| |
| $result = 0; |
| foreach (@{$status->{test_names_hit}}) { |
| $result++ if ($_ eq 'MISSING_HB_SEP' || $_ eq 'GTUBE'); |
| } |
| |
| ok ( $result == 2 ); |
| ok ( $mail->{body_parts}->[0]->{rendered} eq "XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X" ); |
| |
| $status->finish(); |
| $mail->finish(); |
| |
| |
| ##### |
| |
| # A normal message, should not trigger |
| |
| @msg = ("Content-Type: text/plain;\n", " boundary=foo\n","\n","--foo\n"); |
| $mail = $sa->parse(\@msg, 1); |
| $status = $sa->check($mail); |
| |
| $result = 1; |
| foreach (@{$status->{test_names_hit}}) { |
| $result = 0 if ($_ eq 'MISSING_HB_SEP'); |
| } |
| |
| ok ( $result && $mail->{pristine_body} eq "--foo\n" ); |
| ok ( $mail->{pristine_body} eq "--foo\n" ); |
| |
| $status->finish(); |
| $mail->finish(); |