diff options
Diffstat (limited to 't')
-rw-r--r-- | t/imap.t | 20 | ||||
-rw-r--r-- | t/imapd.t | 49 |
2 files changed, 21 insertions, 48 deletions
@@ -1,9 +1,29 @@ #!perl -w # Copyright (C) 2020 all contributors <meta@public-inbox.org> # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt> +# unit tests (no network) for IMAP, see t/imapd.t for end-to-end tests use strict; use Test::More; use PublicInbox::IMAP; +use PublicInbox::IMAPD; + +{ # make sure we get '%' globbing right + my @n = map { { newsgroup => $_ } } (qw(x.y.z x.z.y)); + my $self = { imapd => { grouplist => \@n } }; + PublicInbox::IMAPD::refresh_inboxlist($self->{imapd}); + my $res = PublicInbox::IMAP::cmd_list($self, 'tag', 'x', '%'); + is(scalar($$res =~ tr/\n/\n/), 2, 'only one result'); + like($$res, qr/ x\r\ntag OK/, 'saw expected'); + $res = PublicInbox::IMAP::cmd_list($self, 'tag', 'x.', '%'); + is(scalar($$res =~ tr/\n/\n/), 3, 'only one result'); + is(scalar(my @x = ($$res =~ m/ x\.[zy]\r\n/g)), 2, 'match expected'); + + $res = PublicInbox::IMAP::cmd_list($self, 't', 'x.(?{die "RCE"})', '%'); + like($$res, qr/\At OK /, 'refname does not match attempted RCE'); + $res = PublicInbox::IMAP::cmd_list($self, 't', '', '(?{die "RCE"})%'); + like($$res, qr/\At OK /, 'wildcard does not match attempted RCE'); +} + { my $partial_prepare = \&PublicInbox::IMAP::partial_prepare; my $x = {}; @@ -1,6 +1,7 @@ #!perl -w # Copyright (C) 2020 all contributors <meta@public-inbox.org> # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt> +# end-to-end IMAP tests, see unit tests in t/imap.t, too use strict; use Test::More; use Time::HiRes (); @@ -99,54 +100,6 @@ like($raw[0], qr/^\* LIST \(.*?\) "\." inbox/, 'got an inbox.i1'); like($raw[-1], qr/^\S+ OK /, 'response ended with OK'); -{ # make sure we get '%' globbing right - my @n = map { { newsgroup => $_ } } (qw(x.y.z x.z.y)); - my $self = { imapd => { grouplist => \@n } }; - PublicInbox::IMAPD::refresh_inboxlist($self->{imapd}); - my $res = PublicInbox::IMAP::cmd_list($self, 'tag', 'x', '%'); - is(scalar($$res =~ tr/\n/\n/), 2, 'only one result'); - like($$res, qr/ x\r\ntag OK/, 'saw expected'); - $res = PublicInbox::IMAP::cmd_list($self, 'tag', 'x.', '%'); - is(scalar($$res =~ tr/\n/\n/), 3, 'only one result'); - is(scalar(my @x = ($$res =~ m/ x\.[zy]\r\n/g)), 2, 'match expected'); - - $res = PublicInbox::IMAP::cmd_list($self, 't', 'x.(?{die "RCE"})', '%'); - like($$res, qr/\At OK /, 'refname does not match attempted RCE'); - $res = PublicInbox::IMAP::cmd_list($self, 't', '', '(?{die "RCE"})%'); - like($$res, qr/\At OK /, 'wildcard does not match attempted RCE'); -} - -if ($ENV{TEST_BENCHMARK}) { - use Benchmark qw(:all); - my @n = map { { newsgroup => "inbox.comp.foo.bar.$_" } } (0..50000); - push @n, map { { newsgroup => "xobni.womp.foo.bar.$_" } } (0..50000); - my $self = { imapd => { grouplist => \@n } }; - PublicInbox::IMAPD::refresh_inboxlist($self->{imapd}); - - my $n = scalar @n; - open my $null, '>', '/dev/null' or die; - my $ds = { sock => $null }; - my $nr = 200; - diag "starting benchmark..."; - my $t = timeit(1, sub { - for (0..$nr) { - my $res = PublicInbox::IMAP::cmd_list($self, 'tag', - '', '*'); - PublicInbox::DS::write($ds, $res); - } - }); - diag timestr($t). "list all for $n inboxes $nr times"; - $nr = 20; - $t = timeit(1, sub { - for (0..$nr) { - my $res = PublicInbox::IMAP::cmd_list($self, 'tag', - 'inbox.', '%'); - PublicInbox::DS::write($ds, $res); - } - }); - diag timestr($t). "list partial for $n inboxes $nr times"; -} - my $ret = $mic->search('all') or BAIL_OUT "SEARCH FAIL $@"; is_deeply($ret, [ 1 ], 'search all works'); $ret = $mic->search('uid 1') or BAIL_OUT "SEARCH FAIL $@"; |