blob: 0f6a36355a886c49b98ce4f31725e6673e726f3f [file] [log] [blame]
#!/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();