user/dev discussion of public-inbox itself
 help / color / mirror / code / Atom feed
From: Eric Wong <e@80x24.org>
To: meta@public-inbox.org
Subject: [PATCH 5/9] t/mda: use only Maildir for testing
Date: Wed, 15 Jun 2016 00:37:38 +0000	[thread overview]
Message-ID: <20160615003742.22538-6-e@80x24.org> (raw)
In-Reply-To: <20160615003742.22538-1-e@80x24.org>

Remove mbox tests since mbox is unreliable due to raciness
and incompatible implementations.  We will drop support for
mbox emergency destinations, soon.
---
 t/mda.t | 75 +++++++++++------------------------------------------------------
 1 file changed, 12 insertions(+), 63 deletions(-)

diff --git a/t/mda.t b/t/mda.t
index 66ba859..3456699 100644
--- a/t/mda.t
+++ b/t/mda.t
@@ -22,7 +22,7 @@ my $fail_bin = getcwd()."/t/fail-bin";
 my $fail_path = "$fail_bin:$ENV{PATH}"; # for spamc spam mock
 my $addr = 'test-public@example.com';
 my $cfgpfx = "publicinbox.test";
-my $failbox = "$home/fail.mbox";
+my $faildir = "$home/faildir/";
 my $mime;
 
 {
@@ -72,7 +72,7 @@ die $@ if $@;
 
 {
 	my $good_rev;
-	local $ENV{PI_EMERGENCY} = $failbox;
+	local $ENV{PI_EMERGENCY} = $faildir;
 	local $ENV{HOME} = $home;
 	local $ENV{ORIGINAL_RECIPIENT} = $addr;
 	my $simple = Email::Simple->new(<<EOF);
@@ -103,12 +103,14 @@ EOF
 
 	# ensure failures work, fail with bad spamc
 	{
-		ok(!-e $failbox, "nothing in PI_EMERGENCY before");
+		my @prev = <$faildir/new/*>;
+		is(scalar @prev, 0 , "nothing in PI_EMERGENCY before");
 		local $ENV{PATH} = $fail_path;
 		run([$mda], \$in);
 		my @revs = `git --git-dir=$maindir rev-list HEAD`;
 		is(scalar @revs, 1, "bad revision not committed");
-		ok(-s $failbox > 0, "PI_EMERGENCY is written to");
+		my @new = <$faildir/new/*>;
+		is(scalar @new, 1, "PI_EMERGENCY is written to");
 	}
 
 	fail_bad_header($good_rev, "bad recipient", <<"");
@@ -158,7 +160,7 @@ Date: deadbeef
 
 # spam training
 {
-	local $ENV{PI_EMERGENCY} = $failbox;
+	local $ENV{PI_EMERGENCY} = $faildir;
 	local $ENV{HOME} = $home;
 	local $ENV{ORIGINAL_RECIPIENT} = $addr;
 	local $ENV{PATH} = $main_path;
@@ -193,7 +195,7 @@ EOF
 
 # train ham message
 {
-	local $ENV{PI_EMERGENCY} = $failbox;
+	local $ENV{PI_EMERGENCY} = $faildir;
 	local $ENV{HOME} = $home;
 	local $ENV{ORIGINAL_RECIPIENT} = $addr;
 	local $ENV{PATH} = $main_path;
@@ -263,72 +265,19 @@ EOF
 	}
 }
 
-# faildir - emergency destination is maildir
-{
-	my $faildir= "$home/faildir/";
-	local $ENV{PI_EMERGENCY} = $faildir;
-	local $ENV{HOME} = $home;
-	local $ENV{ORIGINAL_RECIPIENT} = $addr;
-	local $ENV{PATH} = $fail_path;
-	my $in = <<EOF;
-From: Faildir <faildir\@example.com>
-To: You <you\@example.com>
-Cc: $addr
-Message-ID: <faildir\@example.com>
-Subject: faildir subject
-Date: Thu, 01 Jan 1970 00:00:00 +0000
-
-EOF
-	run([$mda], \$in);
-	ok(-d $faildir, "emergency exists");
-	my @new = glob("$faildir/new/*");
-	is(scalar(@new), 1, "message delivered");
-	is(unlink(@new), 1, "removed emergency message");
-
-	local $ENV{PATH} = $main_path;
-	$in = <<EOF;
-From: Faildir <faildir\@example.com>
-To: $addr
-Content-Type: text/html
-Message-ID: <faildir\@example.com>
-Subject: faildir subject
-Date: Thu, 01 Jan 1970 00:00:00 +0000
-
-<html><body>bad</body></html>
-EOF
-	my $out = '';
-	my $err = '';
-	run([$mda], \$in, \$out, \$err);
-	isnt($?, 0, "mda exited with failure");
-	is(length $out, 0, 'nothing in stdout');
-	isnt(length $err, 0, 'error message in stderr');
-
-	@new = glob("$faildir/new/*");
-	is(scalar(@new), 0, "new message did not show up");
-
-	# reject multipart again
-	$in = $mime->as_string;
-	$err = '';
-	run([$mda], \$in, \$out, \$err);
-	isnt($?, 0, "mda exited with failure");
-	is(length $out, 0, 'nothing in stdout');
-	isnt(length $err, 0, 'error message in stderr');
-	@new = glob("$faildir/new/*");
-	is(scalar(@new), 0, "new message did not show up");
-}
-
 done_testing();
 
 sub fail_bad_header {
 	my ($good_rev, $msg, $in) = @_;
-	open my $fh, '>', $failbox or die "failed to open $failbox: $!\n";
-	close $fh or die "failed to close $failbox: $!\n";
+	my @f = glob("$faildir/*/*");
+	unlink @f if @f;
 	my ($out, $err) = ("", "");
 	local $ENV{PATH} = $main_path;
 	run([$mda], \$in, \$out, \$err);
 	my $rev = `git --git-dir=$maindir rev-list HEAD`;
 	chomp $rev;
 	is($rev, $good_rev, "bad revision not commited ($msg)");
-	ok(-s $failbox > 0, "PI_EMERGENCY is written to ($msg)");
+	@f = glob("$faildir/*/*");
+	is(scalar @f, 1, "faildir written to");
 	[ $in, $out, $err ];
 }

  parent reply	other threads:[~2016-06-15  0:37 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-15  0:37 [PATCH 0/9] big mda filter changes Eric Wong
2016-06-15  0:37 ` [PATCH 1/9] drop dependency on File::Path::Expand Eric Wong
2016-06-15  0:37 ` [PATCH 2/9] t/feed.t: make IPC::Run usage optional Eric Wong
2016-06-15  0:37 ` [PATCH 3/9] learn: remove IPC::Run dependency Eric Wong
2016-06-15  0:37 ` [PATCH 4/9] t/mda.t: remove senseless use of Email::Filter Eric Wong
2016-06-15  0:37 ` Eric Wong [this message]
2016-06-15  0:37 ` [PATCH 6/9] mda: precheck no longer depends on Email::Filter Eric Wong
2016-06-15  0:37 ` [PATCH 7/9] filter: begin work on a new filter API Eric Wong
2016-06-15  0:37 ` [PATCH 8/9] emergency: implement new emergency Maildir delivery Eric Wong
2016-06-15  0:37 ` [PATCH 9/9] mda: hook up new filter functionality Eric Wong

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://public-inbox.org/README

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160615003742.22538-6-e@80x24.org \
    --to=e@80x24.org \
    --cc=meta@public-inbox.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/public-inbox.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).