X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=t%2Finbox_idle.t;fp=t%2Finbox_idle.t;h=6bd561136021a12a65b579cb025681ce2ee46471;hb=34c1a6c16733adee3acfe5861096692f3ea55378;hp=0000000000000000000000000000000000000000;hpb=90f11ce471c53365a77896c847d0a39b0995b5b5;p=public-inbox.git diff --git a/t/inbox_idle.t b/t/inbox_idle.t new file mode 100644 index 00000000..6bd56113 --- /dev/null +++ b/t/inbox_idle.t @@ -0,0 +1,72 @@ +#!perl -w +# Copyright (C) 2020 all contributors +# License: AGPL-3.0+ +use Test::More; +use PublicInbox::TestCommon; +use PublicInbox::Config; +require_mods(qw(DBD::SQLite)); +require PublicInbox::SearchIdx; +use_ok 'PublicInbox::InboxIdle'; +require_git('2.6'); +use PublicInbox::InboxWritable; +my ($tmpdir, $for_destroy) = tmpdir(); + +for my $V (1, 2) { + my $inboxdir = "$tmpdir/$V"; + mkdir $inboxdir or BAIL_OUT("mkdir: $!"); + my %opt = ( + inboxdir => $inboxdir, + name => 'inbox-idle', + version => $V, + -primary_address => 'test@example.com', + indexlevel => 'basic', + ); + my $ibx = PublicInbox::Inbox->new({ %opt }); + $ibx = PublicInbox::InboxWritable->new($ibx); + my $obj = InboxIdleTestObj->new; + $ibx->init_inbox(0); + my $im = $ibx->importer(0); + if ($V == 1) { + my $sidx = PublicInbox::SearchIdx->new($ibx, 1); + $sidx->_xdb_acquire; + $sidx->set_indexlevel; + $sidx->_xdb_release; # allow watching on lockfile + } + my $pi_config = PublicInbox::Config->new(\<each_inbox(sub { shift->subscribe_unlock($ident, $obj) }); + my $ii = PublicInbox::InboxIdle->new($pi_config); + ok($ii, 'InboxIdle created'); + SKIP: { + skip('inotify or kqueue missing', 1) unless $ii->{sock}; + ok(fileno($ii->{sock}) >= 0, 'fileno() gave valid FD'); + } + ok($im->add(eml_load('t/utf8.eml')), "$V added"); + $im->done; + PublicInbox::SearchIdx->new($ibx)->index_sync if $V == 1; + $ii->event_step; + is(scalar @{$obj->{called}}, 1, 'called on unlock'); + $pi_config->each_inbox(sub { shift->unsubscribe_unlock($ident) }); + ok($im->add(eml_load('t/data/0001.patch')), "$V added #2"); + $im->done; + PublicInbox::SearchIdx->new($ibx)->index_sync if $V == 1; + $ii->event_step; + is(scalar @{$obj->{called}}, 1, 'not called when unsubbed'); + $ii->close; +} + +done_testing; + +package InboxIdleTestObj; +use strict; + +sub new { bless {}, shift } + +sub on_inbox_unlock { + my ($self, $ibx) = @_; + push @{$self->{called}}, $ibx; +}