]> Sergey Matveev's repositories - public-inbox.git/blobdiff - t/imapd.t
imap: remove dummies from sequence number FETCH
[public-inbox.git] / t / imapd.t
index 017bfa0b27bb3b6610b3b294eb27376822d65029..233be9f2c0a796b469d99dcd2ddfbe94deb12692 100644 (file)
--- a/t/imapd.t
+++ b/t/imapd.t
@@ -17,7 +17,7 @@ if ($can_compress) { # hope this gets fixed upstream, soon
 }
 
 require_ok 'PublicInbox::IMAP';
-my $first_range = '1-'.PublicInbox::IMAP::UID_BLOCK();
+my $first_range = '0';
 
 my $level = '-Lbasic';
 SKIP: {
@@ -100,7 +100,7 @@ like($raw[0], qr/\A\*\x20STATUS\x20inbox\.i1\.$first_range\x20
        \(MESSAGES\x20\d+\x20UIDNEXT\x20\d+\x20UIDVALIDITY\x20\d+\)\r\n/sx);
 like($raw[1], qr/\A\S+ OK /, 'finished status response');
 
-@raw = $mic->list;
+my @orig_list = @raw = $mic->list;
 like($raw[0], qr/^\* LIST \(.*?\) "\." inbox/,
        'got an inbox');
 like($raw[-1], qr/^\S+ OK /, 'response ended with OK');
@@ -326,6 +326,12 @@ Content-Type: message/rfc822\r
 Content-Disposition: attachment; filename="embed2x\.eml"\r
 \r
 EOF
+
+       my @hits = $mic->search('SENTON' => '18-Apr-2020');
+       is_deeply(\@hits, [ $uidnext ], 'search with date condition works');
+       ok($mic->examine($ng), 'EXAMINE on dummy');
+       @hits = $mic->search('SENTSINCE' => '18-Apr-2020');
+       is_deeply(\@hits, [], 'search on dummy with condition works');
 }); # each_inbox
 
 # message sequence numbers :<
@@ -342,8 +348,7 @@ is(scalar keys %$ret, 3, 'got all 3 messages');
        run_script(\@cmd, $env, $rdr) or BAIL_OUT('-learn rm');
 }
 my $r2 = $mic->fetch_hash('1:*', 'BODY.PEEK[]') or BAIL_OUT "FETCH $@";
-is(scalar keys %$r2, 3, 'still got all 3 messages');
-like($r2->{1}->{'BODY[]'}, qr/dummy message #1/, 'got dummy message 1');
+is(scalar keys %$r2, 2, 'did not get all 3 messages');
 is($r2->{2}->{'BODY[]'}, $ret->{2}->{RFC822}, 'message 2 unchanged');
 is($r2->{3}->{'BODY[]'}, $ret->{3}->{RFC822}, 'message 3 unchanged');
 $r2 = $mic->fetch_hash(2, 'BODY.PEEK[HEADER.FIELDS (message-id)]')
@@ -351,15 +356,38 @@ $r2 = $mic->fetch_hash(2, 'BODY.PEEK[HEADER.FIELDS (message-id)]')
 is($r2->{2}->{'BODY[HEADER.FIELDS (MESSAGE-ID)]'},
        'Message-ID: <20200418222508.GA13918@dcvr>'."\r\n\r\n",
        'BODY.PEEK[HEADER.FIELDS ...] drops .PEEK');
+
+{
+       my @new_list = $mic->list;
+       # tag differs in [-1]
+       like($orig_list[-1], qr/\A\S+ OK List done\r\n/, 'orig LIST');
+       like($new_list[-1], qr/\A\S+ OK List done\r\n/, 'new LIST');
+       pop @new_list;
+       pop @orig_list;
+       # TODO: not sure if sort order matters, imapd_refresh_finalize
+       # sorts, for now, but maybe clients don't care...
+       is_deeply(\@new_list, \@orig_list, 'LIST identical');
+}
 ok($mic->close, 'CLOSE works');
 ok(!$mic->close, 'CLOSE not idempotent');
 ok($mic->logout, 'logged out');
 
+{
+       my $c = tcp_connect($sock);
+       $c->autoflush(1);
+       like(<$c>, qr/\* OK/, 'got a greeting');
+       print $c "\r\n";
+       like(<$c>, qr/\A\* BAD Error in IMAP command/, 'empty line');
+       print $c "tagonly\r\n";
+       like(<$c>, qr/\Atagonly BAD Error in IMAP command/, 'tag-only line');
+}
+
 $td->kill;
 $td->join;
 is($?, 0, 'no error in exited process');
 open my $fh, '<', $err or BAIL_OUT("open $err failed: $!");
 my $eout = do { local $/; <$fh> };
 unlike($eout, qr/wide/i, 'no Wide character warnings');
+unlike($eout, qr/uninitialized/i, 'no uninitialized warnings');
 
 done_testing;