#!perl -w # Copyright all contributors # License: AGPL-3.0+ use strict; use v5.10.1; use PublicInbox::TestCommon; use File::Basename qw(basename); my $have_fast_inotify = eval { require Linux::Inotify2 } || eval { require IO::KQueue }; $have_fast_inotify or diag("$0 IO::KQueue or Linux::Inotify2 missing, test will be slow"); test_lei(sub { my ($ro_home, $cfg_path) = setup_public_inboxes; my $x = "$ENV{HOME}/x"; my $y = "$ENV{HOME}/y"; lei_ok qw(add-external), "$ro_home/t1"; lei_ok qw(q mid:testmessage@example.com -o), $x; lei_ok qw(q mid:testmessage@example.com -o), $y; my @x = glob("$x/cur/*"); my @y = glob("$y/cur/*"); scalar(@x) == 1 or xbail 'expected 1 file', \@x; scalar(@y) == 1 or xbail 'expected 1 file', \@y; my $oid = '9bf1002c49eb075df47247b74d69bcd555e23422'; lei_ok qw(inspect), "blob:$oid"; my $ins = json_utf8->decode($lei_out); my $exp = { "maildir:$x" => [ map { basename($_) } @x ], "maildir:$y" => [ map { basename($_) } @y ] }; is_deeply($ins->{'mail-sync'}, $exp, 'inspect as expected'); lei_ok qw(add-watch), $x; my $dst = $x[0] . 'S'; rename($x[0], $dst) or xbail "rename($x[0], $dst): $!"; my $ys = "$y[0]S"; for (0..50) { last if -f $ys; tick; # wait for inotify or kevent } my @y2 = glob("$y/*/*"); is_deeply(\@y2, [ $ys ], "`seen' kw propagated to `y' dir"); lei_ok qw(note-event done); lei_ok qw(inspect), "blob:$oid"; $ins = json_utf8->decode($lei_out); $exp = { "maildir:$x" => [ map { basename($_) } glob("$x/*/*") ], "maildir:$y" => [ map { basename($_) } glob("$y/*/*") ] }; is_deeply($ins->{'mail-sync'}, $exp, 'mail_sync matches FS'); }); done_testing;