public-inbox.git  about / heads / tags
an "archives first" approach to mailing lists
blob 1e190316cd0eeedb4bb7ee07e7e936aaf29ba690 1798 bytes (raw)
$ git show HEAD:t/lei-auto-watch.t	# shows this blob on the CLI

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
 
#!perl -w
# Copyright all contributors <meta@public-inbox.org>
# License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
use strict; use v5.10.1; use PublicInbox::TestCommon;
use File::Basename qw(basename);
plan skip_all => "TEST_FLAKY not enabled for $0" if !$ENV{TEST_FLAKY};
my $have_fast_inotify = eval { require PublicInbox::Inotify } ||
	eval { require IO::KQueue };
$have_fast_inotify or
	diag("$0 IO::KQueue or inotify 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') or
		diag explain($ins);
});

done_testing;

git clone https://public-inbox.org/public-inbox.git
git clone http://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/public-inbox.git