From 2b673b707edc91f505836e567b690d0acd1120ff Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sat, 9 Apr 2016 00:28:07 +0000 Subject: import: initial module + test case This will allow us to write fast importers for existing archives as well as eventually removing the ssoma dependency for performance and ease-of-installation. --- t/import.t | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 t/import.t (limited to 't') diff --git a/t/import.t b/t/import.t new file mode 100644 index 00000000..6918484e --- /dev/null +++ b/t/import.t @@ -0,0 +1,65 @@ +# Copyright (C) 2016 all contributors +# License: AGPL-3.0+ +use strict; +use warnings; +use Test::More; +use Email::MIME; +use PublicInbox::Git; +use PublicInbox::Import; +use File::Temp qw/tempdir/; +my $dir = tempdir('pi-import-XXXXXX', TMPDIR => 1, CLEANUP => 1); + +is(system(qw(git init -q --bare), $dir), 0, 'git init successful'); +my $git = PublicInbox::Git->new($dir); + +my $im = PublicInbox::Import->new($git, 'testbox', 'test@example'); +my $mime = Email::MIME->create( + header => [ + From => 'a@example.com', + To => 'b@example.com', + 'Content-Type' => 'text/plain', + Subject => 'this is a subject', + 'Message-ID' => '', + ], + body => "hello world\n", +); +like($im->add($mime), qr/\A:\d+\z/, 'added one message'); +$im->done; +my @revs = $git->qx(qw(rev-list HEAD)); +is(scalar @revs, 1, 'one revision created'); + +$mime->header_set('Message-ID', ''); +$mime->header_set('Subject', 'msg2'); +like($im->add($mime), qr/\A:\d+\z/, 'added 2nd message'); +$im->done; +@revs = $git->qx(qw(rev-list HEAD)); +is(scalar @revs, 2, '2 revisions exist'); + +is($im->add($mime), undef, 'message only inserted once'); +$im->done; +@revs = $git->qx(qw(rev-list HEAD)); +is(scalar @revs, 2, '2 revisions exist'); + +foreach my $c ('c'..'z') { + $mime->header_set('Message-ID', "<$c\@example.com>"); + $mime->header_set('Subject', "msg - $c"); + like($im->add($mime), qr/\A:\d+\z/, "added $c message"); +} +$im->done; +@revs = $git->qx(qw(rev-list HEAD)); +is(scalar @revs, 26, '26 revisions exist after mass import'); +my ($mark, $msg) = $im->remove($mime); +like($mark, qr/\A:\d+\z/, 'got mark'); +is(ref($msg), 'Email::MIME', 'got old message deleted'); + +is(undef, $im->remove($mime), 'remove is idempotent'); + +# mismatch on identical Message-ID +$mime->header_set('Message-ID', ''); +($mark, $msg) = $im->remove($mime); +is($mark, -1, 'mark == -1 on mismatch'); +is($msg->header('Message-ID'), '', 'Message-ID matches'); +isnt($msg->header('Subject'), $mime->header('Subject'), 'subject mismatch'); + +$im->done; +done_testing(); -- cgit v1.2.3-24-ge0c7