X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=t%2Fdir_idle.t;h=0bb3b7585328dc2308c315019b80320c53e4508c;hb=76f5361d8b8d2bea828ac66dc98a0de24b761b3d;hp=d62eb5a26faa65be72bb0b47221fb7d23b4ced33;hpb=9dfc0b670fc634b54998c3020f173b82de1915ac;p=public-inbox.git diff --git a/t/dir_idle.t b/t/dir_idle.t index d62eb5a2..0bb3b758 100644 --- a/t/dir_idle.t +++ b/t/dir_idle.t @@ -1,6 +1,43 @@ #!perl -w # Copyright (C) 2020-2021 all contributors # License: AGPL-3.0+ -use Test::More; +use v5.10.1; use strict; use PublicInbox::TestCommon; +use PublicInbox::DS qw(now); +use File::Path qw(make_path); use_ok 'PublicInbox::DirIdle'; +my ($tmpdir, $for_destroy) = tmpdir(); +make_path("$tmpdir/a/b", "$tmpdir/c"); +my @x; +my $cb = sub { push @x, \@_ }; +my $di = PublicInbox::DirIdle->new(["$tmpdir/a", "$tmpdir/c"], $cb, 1); +PublicInbox::DS->SetLoopTimeout(1000); +my $end = 3 + now; +PublicInbox::DS->SetPostLoopCallback(sub { scalar(@x) == 0 && now < $end }); +tick(0.011); +rmdir("$tmpdir/a/b") or xbail "rmdir $!"; +PublicInbox::DS->EventLoop; +is(scalar(@x), 1, 'got an event') and + is($x[0]->[0]->fullname, "$tmpdir/a/b", 'got expected fullname') and + ok($x[0]->[0]->IN_DELETE, 'IN_DELETE set'); + +tick(0.011); +rmdir("$tmpdir/a") or xbail "rmdir $!"; +@x = (); +$end = 3 + now; +PublicInbox::DS->EventLoop; +is(scalar(@x), 1, 'got an event') and + is($x[0]->[0]->fullname, "$tmpdir/a", 'got expected fullname') and + ok($x[0]->[0]->IN_DELETE_SELF, 'IN_DELETE_SELF set'); + +tick(0.011); +rename("$tmpdir/c", "$tmpdir/j") or xbail "rmdir $!"; +@x = (); +$end = 3 + now; +PublicInbox::DS->EventLoop; +is(scalar(@x), 1, 'got an event') and + is($x[0]->[0]->fullname, "$tmpdir/c", 'got expected fullname') and + ok($x[0]->[0]->IN_DELETE_SELF || $x[0]->[0]->IN_MOVE_SELF, + 'IN_DELETE_SELF set on move'); + +PublicInbox::DS->Reset; done_testing;