diff options
author | Eric Wong <normalperson@yhbt.net> | 2014-03-24 20:17:11 +0000 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2014-03-24 20:29:47 +0000 |
commit | cf0a2370a57fe49d0fca149409f98d2907efeb15 (patch) | |
tree | e881a59c9a301a553b6faad7ca38240f72aa5c49 /t | |
parent | b5f82d05569c228544f31627a03477f2a464f74f (diff) | |
download | public-inbox-cf0a2370a57fe49d0fca149409f98d2907efeb15.tar.gz |
This should make it easier for non-ssoma users to follow.
Diffstat (limited to 't')
-rw-r--r-- | t/feed.t | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/t/feed.t b/t/feed.t new file mode 100644 index 00000000..d16373ae --- /dev/null +++ b/t/feed.t @@ -0,0 +1,111 @@ +# Copyright (C) 2014, Eric Wong <normalperson@yhbt.net> 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::Simple; +use PublicInbox::Feed; +use File::Temp qw/tempdir/; +my $have_xml_feed = eval { require XML::Feed; 1 }; + +my $tmpdir = tempdir(CLEANUP => 1); +my $git_dir = "$tmpdir/gittest"; + +{ + is(0, system(qw(git init -q --bare), $git_dir), "git init"); + local $ENV{GIT_DIR} = $git_dir; + + foreach my $i (1..6) { + my $pid = open(my $pipe, "|-"); + defined $pid or die "fork/pipe failed: $!\n"; + if ($pid == 0) { + exec("ssoma-mda", $git_dir); + } + + my $simple = Email::Simple->new(<<EOF); +From: ME <me\@example.com> +To: U <u\@example.com> +Message-Id: <$i\@example.com> +Subject: zzz #$i +Date: Thu, 01 Jan 1970 00:00:00 +0000 + +> drop me + +msg $i + +> drop me again + +keep me +EOF + print $pipe $simple->as_string or die "print failed: $!\n"; + close $pipe or die "close pipe failed: $!\n"; + } + + # check initial feed + { + my $feed = PublicInbox::Feed->generate($git_dir, 3); + if ($have_xml_feed) { + my $p = XML::Feed->parse(\$feed); + is($p->format, "Atom", "parsed atom feed"); + is(scalar $p->entries, 3, "parsed three entries"); + } + unlike($feed, qr/drop me/, "quoted text dropped"); + like($feed, qr/keep me/, "unquoted text saved"); + } + + # add a new spam message + my $spam; + { + my $pid = open(my $pipe, "|-"); + defined $pid or die "fork/pipe failed: $!\n"; + if ($pid == 0) { + exec("ssoma-mda", $git_dir); + } + + $spam = Email::Simple->new(<<EOF); +From: SPAMMER <spammer\@example.com> +To: U <u\@example.com> +Message-Id: <this-is-spam\@example.com> +Subject: SPAM!!!!!!!! +Date: Thu, 01 Jan 1970 00:00:00 +0000 + +EOF + print $pipe $spam->as_string or die "print failed: $!\n"; + close $pipe or die "close pipe failed: $!\n"; + } + + # check spam shows up + { + my $spammy_feed = PublicInbox::Feed->generate($git_dir, 3); + if ($have_xml_feed) { + my $p = XML::Feed->parse(\$spammy_feed); + is($p->format, "Atom", "parsed atom feed"); + is(scalar $p->entries, 3, "parsed three entries"); + } + like($spammy_feed, qr/SPAM/s, "spam showed up :<"); + } + + # nuke spam + { + my $pid = open(my $pipe, "|-"); + defined $pid or die "fork/pipe failed: $!\n"; + if ($pid == 0) { + exec("ssoma-rm", $git_dir); + } + print $pipe $spam->as_string or die "print failed: $!\n"; + close $pipe or die "close pipe failed: $!\n"; + } + + # spam no longer shows up + { + my $feed = PublicInbox::Feed->generate($git_dir, 3); + if ($have_xml_feed) { + my $p = XML::Feed->parse(\$feed); + is($p->format, "Atom", "parsed atom feed"); + is(scalar $p->entries, 3, "parsed three entries"); + } + unlike($feed, qr/SPAM/, "spam gone :>"); + } +} + +done_testing(); |