You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by jm...@apache.org on 2007/01/26 14:20:01 UTC
svn commit: r500235 - in /spamassassin/trunk: MANIFEST.SKIP t/config.dist
t/saw_ampersand.t
Author: jm
Date: Fri Jan 26 05:20:01 2007
New Revision: 500235
URL: http://svn.apache.org/viewvc?view=rev&rev=500235
Log:
add new Devel::SawAmpersand-based test, which detects use of the dollar-ampersand perlvar -- this slows down every regexp match performed in the perl interpreter afterwards, so is better avoided in SpamAssassin. test is SVN-only and requires editing t/config to run
Added:
spamassassin/trunk/t/saw_ampersand.t (with props)
Modified:
spamassassin/trunk/MANIFEST.SKIP
spamassassin/trunk/t/config.dist
Modified: spamassassin/trunk/MANIFEST.SKIP
URL: http://svn.apache.org/viewvc/spamassassin/trunk/MANIFEST.SKIP?view=diff&rev=500235&r1=500234&r2=500235
==============================================================================
--- spamassassin/trunk/MANIFEST.SKIP (original)
+++ spamassassin/trunk/MANIFEST.SKIP Fri Jan 26 05:20:01 2007
@@ -64,6 +64,7 @@
^t/do_net$
^t/log/
^t/rule_tests.t$
+^t/saw_ampersand.t$
^t/sql_based_whitelist.cf$
^tasks/
^testmails.*$
Modified: spamassassin/trunk/t/config.dist
URL: http://svn.apache.org/viewvc/spamassassin/trunk/t/config.dist?view=diff&rev=500235&r1=500234&r2=500235
==============================================================================
--- spamassassin/trunk/t/config.dist (original)
+++ spamassassin/trunk/t/config.dist Fri Jan 26 05:20:01 2007
@@ -51,3 +51,9 @@
# TODO: we need a better way to test this.
run_rule_name_tests=n
+# ---------------------------------------------------------------------------
+
+# This test requires the Devel::SawAmpersand CPAN module, and may also fail
+# depending on changes in the third-party modules we import.
+run_saw_ampersand_test=n
+
Added: spamassassin/trunk/t/saw_ampersand.t
URL: http://svn.apache.org/viewvc/spamassassin/trunk/t/saw_ampersand.t?view=auto&rev=500235
==============================================================================
--- spamassassin/trunk/t/saw_ampersand.t (added)
+++ spamassassin/trunk/t/saw_ampersand.t Fri Jan 26 05:20:01 2007
@@ -0,0 +1,184 @@
+#!/usr/bin/perl
+
+# detect use of dollar-ampersand somewhere in the perl interpreter;
+# once it is used once, it slows down every regexp match thereafter.
+
+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');
+ unshift(@INC, '../lib');
+ }
+}
+
+my $prefix = '.';
+if (-e 'test_dir') { # running from test directory, not ..
+ $prefix = '..';
+}
+
+use lib '.'; use lib 't';
+use SATest; sa_t_init("saw_ampersand");
+use Test;
+use Carp qw(croak);
+
+our $RUN_THIS_TEST;
+
+BEGIN {
+ $RUN_THIS_TEST = conf_bool('run_saw_ampersand_test');
+ plan tests => (!$RUN_THIS_TEST ? 0 : 37)
+};
+
+print "NOTE: this test requires 'run_saw_ampersand_test' set to 'y'.\n";
+exit unless $RUN_THIS_TEST;
+
+# ---------------------------------------------------------------------------
+
+use strict;
+require Mail::SpamAssassin;
+require Devel::SawAmpersand;
+
+# it is important to order these from least-plugin-code-run to most.
+
+print "\ntrying local-tests-only with default plugins\n";
+tryone (1, "");
+
+print "\ntrying net with only local rule plugins\n";
+
+# TODO: unportable
+system "perl -pi.bak -e 's/^loadplugin/###loadplugin/g' ".
+ " log/localrules.tmp/*.pre log/test_rules_copy/*.pre";
+
+($? >> 8 != 0) and die "perl failed";
+
+my $plugins = q{
+ loadplugin Mail::SpamAssassin::Plugin::Check
+ loadplugin Mail::SpamAssassin::Plugin::HTTPSMismatch
+ loadplugin Mail::SpamAssassin::Plugin::URIDetail
+ loadplugin Mail::SpamAssassin::Plugin::Bayes
+ loadplugin Mail::SpamAssassin::Plugin::BodyEval
+ loadplugin Mail::SpamAssassin::Plugin::DNSEval
+ loadplugin Mail::SpamAssassin::Plugin::HTMLEval
+ loadplugin Mail::SpamAssassin::Plugin::HeaderEval
+ loadplugin Mail::SpamAssassin::Plugin::MIMEEval
+ loadplugin Mail::SpamAssassin::Plugin::RelayEval
+ loadplugin Mail::SpamAssassin::Plugin::URIEval
+ loadplugin Mail::SpamAssassin::Plugin::WLBLEval
+ loadplugin Mail::SpamAssassin::Plugin::VBounce
+};
+write_plugin_pre($plugins);
+tryone (0, "");
+
+print "\ntrying net with more local rule plugins\n";
+
+$plugins .= q{
+ loadplugin Mail::SpamAssassin::Plugin::SpamCop
+ loadplugin Mail::SpamAssassin::Plugin::AntiVirus
+ loadplugin Mail::SpamAssassin::Plugin::TextCat
+ loadplugin Mail::SpamAssassin::Plugin::AccessDB
+ loadplugin Mail::SpamAssassin::Plugin::WhiteListSubject
+ loadplugin Mail::SpamAssassin::Plugin::MIMEHeader
+ loadplugin Mail::SpamAssassin::Plugin::ReplaceTags
+ loadplugin Mail::SpamAssassin::Plugin::Shortcircuit
+ loadplugin Mail::SpamAssassin::Plugin::Rule2XSBody
+};
+write_plugin_pre($plugins);
+tryone (0, "");
+
+print "\ntrying net with DCC rule plugins\n";
+$plugins .= q{
+ loadplugin Mail::SpamAssassin::Plugin::DCC
+};
+write_plugin_pre($plugins);
+tryone (0, "");
+
+print "\ntrying net with Razor2 rule plugins\n";
+$plugins .= q{
+ loadplugin Mail::SpamAssassin::Plugin::Razor2
+};
+write_plugin_pre($plugins);
+tryone (0, "");
+
+print "\ntrying net with DK rule plugins\n";
+$plugins .= q{
+ loadplugin Mail::SpamAssassin::Plugin::DomainKeys
+};
+write_plugin_pre($plugins);
+tryone (0, "");
+
+print "\ntrying net with DKIM rule plugins\n";
+$plugins .= q{
+ loadplugin Mail::SpamAssassin::Plugin::DKIM
+};
+write_plugin_pre($plugins);
+tryone (0, "");
+
+print "\ntrying net with Pyzor rule plugins\n";
+$plugins .= q{
+ loadplugin Mail::SpamAssassin::Plugin::Pyzor
+};
+write_plugin_pre($plugins);
+tryone (0, "");
+
+print "\ntrying net with all default non-local rule plugins\n";
+
+# TODO: unportable
+system "perl -pi.bak -e 's/^###loadplugin/loadplugin/g' ".
+ " log/localrules.tmp/*.pre log/test_rules_copy/*.pre";
+
+($? >> 8 != 0) and die "perl failed";
+
+tryone (0, "");
+ok 1;
+
+exit;
+
+# ---------------------------------------------------------------------------
+
+sub write_plugin_pre {
+ my $cftext = shift;
+ open OUT, ">log/localrules.tmp/test.pre";
+ print OUT $cftext;
+ close OUT or die;
+}
+
+sub tryone {
+ my ($ltests, $cftext) = @_;
+
+ print " SawAmpersand test using local_tests_only=>$ltests,\n".
+ " post_config_text=>'$cftext'\n\n";
+
+ # note: do not use debug, that uses dollar-ampersand in rule debug output
+ # (hit_rule_plugin_code() in lib/Mail/SpamAssassin/Plugin/Check.pm)
+ my $sa = create_saobj({
+ 'dont_copy_prefs' => 1,
+ # 'debug' => 1,
+ 'local_tests_only' => $ltests,
+ 'post_config_text' => $cftext
+ });
+
+ $sa->init(1);
+ ok($sa);
+
+ open (IN, "<data/spam/009");
+ my $mail = $sa->parse(\*IN);
+ close IN;
+
+ my $status = $sa->check($mail);
+ my $rewritten = $status->rewrite_mail();
+ my $msg = $status->{msg};
+
+ ok $rewritten =~ /message\/rfc822; x-spam-type=original/;
+ ok $rewritten =~ /X-Spam-Flag: YES/;
+
+ print "saw ampersand?\n";
+ ok (!Devel::SawAmpersand::sawampersand());
+
+ # Devel::SawAmpersand::sawampersand() and croak("\$"."\& is in effect! dying");
+
+ $mail->finish();
+ $status->finish();
+}
+
Propchange: spamassassin/trunk/t/saw_ampersand.t
------------------------------------------------------------------------------
svn:executable = *