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 = *