about summary refs log tree commit homepage
path: root/t
diff options
context:
space:
mode:
authorEric Wong <e@yhbt.net>2020-06-10 07:04:02 +0000
committerEric Wong <e@yhbt.net>2020-06-13 07:55:45 +0000
commitacb6cf984053115ed6dc5ed673786ed99e1f098d (patch)
tree5de449195d81dcec869f730c9a76ac80d6862634 /t
parent34c1a6c16733adee3acfe5861096692f3ea55378 (diff)
downloadpublic-inbox-acb6cf984053115ed6dc5ed673786ed99e1f098d.tar.gz
It seems to be working as far as Mail::IMAPClient is concerned.
Diffstat (limited to 't')
-rw-r--r--t/imapd.t28
1 files changed, 26 insertions, 2 deletions
diff --git a/t/imapd.t b/t/imapd.t
index f28a663b..359c4c03 100644
--- a/t/imapd.t
+++ b/t/imapd.t
@@ -3,8 +3,10 @@
 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
 use strict;
 use Test::More;
+use Time::HiRes ();
 use PublicInbox::TestCommon;
-require_mods(qw(DBD::SQLite Mail::IMAPClient));
+use PublicInbox::Config;
+require_mods(qw(DBD::SQLite Mail::IMAPClient Linux::Inotify2));
 my $level = '-Lbasic';
 SKIP: {
         require_mods('Search::Xapian', 1);
@@ -12,7 +14,7 @@ SKIP: {
 };
 
 my @V = (1);
-#push(@V, 2) if require_git('2.6', 1);
+push(@V, 2) if require_git('2.6', 1);
 
 my ($tmpdir, $for_destroy) = tmpdir();
 my $home = "$tmpdir/home";
@@ -139,6 +141,28 @@ is_deeply([$mic->has_capability('COMPRESS')], ['DEFLATE'], 'deflate cap');
 ok($mic->compress, 'compress enabled');
 $compress_logout->($mic);
 
+my $pi_config = PublicInbox::Config->new;
+$pi_config->each_inbox(sub {
+        my ($ibx) = @_;
+        my $name = $ibx->{name};
+        my $ng = $ibx->{newsgroup};
+        my $mic = Mail::IMAPClient->new(%mic_opt);
+        ok($mic && $mic->login && $mic->IsAuthenticated, "authed $name");
+        is_deeply([$mic->has_capability('IDLE')], ['IDLE'], "IDLE capa $name");
+        ok(!$mic->idle, "IDLE fails w/o SELECT/EXAMINE $name");
+        ok($mic->examine($ng), "EXAMINE $ng succeeds");
+        ok($mic->idle, "IDLE succeeds on $ng");
+
+        open(my $fh, '<', 't/data/message_embed.eml') or BAIL_OUT("open: $!");
+        my $env = { ORIGINAL_RECIPIENT => $ibx->{-primary_address} };
+        run_script(['-mda', '--no-precheck'], $env, { 0 => $fh }) or
+                BAIL_OUT('-mda delivery');
+        my $t0 = Time::HiRes::time();
+        ok(my @res = $mic->idle_data(11), "IDLE succeeds on $ng");
+        ok(grep(/\A\* [0-9] EXISTS\b/, @res), 'got EXISTS message');
+        ok((Time::HiRes::time() - $t0) < 10, 'IDLE client notified');
+});
+
 $td->kill;
 $td->join;
 is($?, 0, 'no error in exited process');