From 71abf270f5b11f147be839a9b057e106d0f8509f Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Tue, 1 Apr 2014 23:07:38 +0000 Subject: flesh out MDA and simplify config setup We will be reusing the config parsing code for the CGI script, too. --- t/mda.t | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 t/mda.t (limited to 't/mda.t') diff --git a/t/mda.t b/t/mda.t new file mode 100644 index 00000000..9f918d35 --- /dev/null +++ b/t/mda.t @@ -0,0 +1,83 @@ +# Copyright (C) 2014, Eric Wong and all contributors +# License: AGPLv3 or later (https://www.gnu.org/licenses/agpl-3.0.txt) +use strict; +use warnings; +use Test::More; +use Email::MIME; +use File::Temp qw/tempdir/; +use Cwd; +use IPC::Run qw(run); + +my $mda = "blib/script/public-inbox-mda"; +my $tmpdir = tempdir(CLEANUP => 1); +my $home = "$tmpdir/pi-home"; +my $pi_home = "$home/.public-inbox"; +my $pi_config = "$pi_home/config"; +my $maindir = "$tmpdir/main.git"; +my $faildir = "$tmpdir/fail.git"; +my $main_bin = getcwd()."/t/main-bin"; +my $main_path = "$main_bin:$ENV{PATH}"; # for spamc ham mock +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"; + +{ + ok(-x "$main_bin/spamc", + "spamc ham mock found (run in top of source tree"); + ok(-x "$fail_bin/spamc", + "spamc mock found (run in top of source tree"); + ok(-x $mda, "$mda is executable"); + is(1, mkdir($home, 0755), "setup ~/ for testing"); + is(1, mkdir($pi_home, 0755), "setup ~/.public-inbox"); + is(0, system(qw(git init -q --bare), $maindir), "git init (main)"); + is(0, system(qw(git init -q --bare), $faildir), "git init (fail)"); + + my %cfg = ( + "$cfgpfx.address" => $addr, + "$cfgpfx.mainrepo" => $maindir, + "$cfgpfx.failrepo" => $faildir, + ); + while (my ($k,$v) = each %cfg) { + is(0, system(qw(git config --file), $pi_config, $k, $v), + "setup $k"); + } +} + +{ + my $failbox = "$home/fail.mbox"; + local $ENV{PI_FAILBOX} = $failbox; + local $ENV{HOME} = $home; + local $ENV{RECIPIENT} = $addr; + my $simple = Email::Simple->new(< +To: You +Cc: $addr +Message-Id: +Subject: hihi +Date: Thu, 01 Jan 1970 00:00:00 +0000 + +EOF + my $in = $simple->as_string; + + # ensure successful message delivery + { + local $ENV{PATH} = $main_path; + run([$mda], \$in); + local $ENV{GIT_DIR} = $maindir; + my $rev = `git rev-list HEAD`; + like($rev, qr/\A[a-f0-9]{40}/, "good revision committed"); + } + + # ensure failures work + { + local $ENV{PATH} = $fail_path; + run([$mda], \$in); + local $ENV{GIT_DIR} = $faildir; + my $rev = `git rev-list HEAD`; + like($rev, qr/\A[a-f0-9]{40}/, "bad revision committed"); + } + ok(!-e $failbox, "nothing in PI_FAILBOX"); +} + +done_testing(); -- cgit v1.2.3-24-ge0c7