report_safe.t   [plain text]


#!/usr/bin/perl

use lib '.'; use lib 't';
use SATest; sa_t_init("report_safe");
use Test; BEGIN { plan tests => 8 };

# ---------------------------------------------------------------------------

# Use a slightly modified gtube ...
my $origtest = 'data/spam/gtube.eml';
my $test = 'log/report_safe.eml';
my $original = '';
if (open(OTEST, $origtest) && open(TEST, ">$test")) {
  local $/=undef;
  $original .= "X-Spam-Prev-Subject: this is a test\n";
  $original .= "X-Spam-Status: No, this should fail horribly!\n";
  $original .= <OTEST>;
  print TEST $original;
  close(TEST);
  close(OTEST);
}
else {
  die "can't open input files: $!";
}

# unfortunately, we can't use a regexp since quotemeta is used on patterns
sub safe {
    my ($boundary, $report_charset, $type, $description, $disposition) = @_;

    return <<"EOM";
Content-Type: $type; x-spam-type=original
Content-Description: $description
Content-Disposition: $disposition
Content-Transfer-Encoding: 8bit

$original
EOM
}

my $description = 'original message before SpamAssassin';
my $disposition = 'inline';
my $message;

%patterns = ('X-Spam-Status: Yes' => 'XSS_Yes', 'X-Spam-Prev-Subject: this is a test' => 'XSS_Prev_Subject');
%anti_patterns = ($original => P_1, 'X-Spam-Status: No' => 'XSS_No');
tstprefs ("report_safe 0\n");
sarun ("-L < $test", \&patterns_run_cb);
ok_all_patterns();

$message = safe($boundary, '', 'message/rfc822', $description, 'inline');
%patterns = ($message => P_2, 'X-Spam-Status: Yes' => 'XSS_Yes');
%anti_patterns = ();
tstprefs ("report_safe 1\n");
sarun ("-L < $test", \&patterns_run_cb);
ok_all_patterns();

$message = safe($boundary, '', 'text/plain', $description, 'inline');
%patterns = ($message => P_3, 'X-Spam-Status: Yes' => 'XSS_Yes');
%anti_patterns = ();
tstprefs ("report_safe 2\n");
sarun ("-L < $test", \&patterns_run_cb);
ok_all_patterns();