mirror of
https://git.proxmox.com/git/proxmox-spamassassin
synced 2025-04-29 01:20:33 +00:00
86 lines
2.0 KiB
Perl
Executable File
86 lines
2.0 KiB
Perl
Executable File
#!/usr/bin/perl -T
|
|
|
|
use constant HAVE_DEVEL_CYCLE => eval { require Devel::Cycle; };
|
|
|
|
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 lib '.'; use lib 't';
|
|
use SATest; sa_t_init("memory_cycles");
|
|
|
|
use Test::More;
|
|
plan skip_all => "Devel::Cycle module required for this test" unless HAVE_DEVEL_CYCLE;
|
|
plan tests => 4;
|
|
|
|
use strict;
|
|
use Mail::SpamAssassin;
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
my $spamtest = Mail::SpamAssassin->new({
|
|
rules_filename => "$prefix/t/log/test_rules_copy",
|
|
site_rules_filename => "$prefix/t/log/test_default.cf",
|
|
userprefs_filename => "$prefix/masses/spamassassin/user_prefs",
|
|
local_tests_only => 1,
|
|
debug => 0,
|
|
dont_copy_prefs => 1,
|
|
});
|
|
|
|
$spamtest->init(0); # parse rules
|
|
ok($spamtest);
|
|
|
|
open (IN, "<data/spam/009");
|
|
my $dataref = [<IN>];
|
|
close IN;
|
|
my $mail = $spamtest->parse($dataref);
|
|
my $status = $spamtest->check($mail);
|
|
my $output = $status->get_report();
|
|
|
|
$status->finish();
|
|
ok (check_for_cycles($status));
|
|
|
|
$mail->finish();
|
|
ok (check_for_cycles($mail));
|
|
|
|
$spamtest->finish();
|
|
ok (check_for_cycles($spamtest));
|
|
|
|
exit;
|
|
|
|
############################################################################
|
|
# Test::Memory::Cycle would be a nice way to do this -- but it relies
|
|
# on Test::More. so just do it ourselves.
|
|
|
|
our $cycles;
|
|
|
|
sub check_for_cycles {
|
|
my $obj = shift;
|
|
$cycles = 0;
|
|
Devel::Cycle::find_cycle ($obj, \&cyclecb);
|
|
if ($cycles) {
|
|
print "found $cycles cycles! dump to follow:\n";
|
|
Devel::Cycle::find_cycle ($obj); # with default output-to-stdout callback
|
|
return 0;
|
|
} else {
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
sub cyclecb {
|
|
my $aryref = shift;
|
|
$cycles += scalar @{$aryref};
|
|
}
|
|
|