X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=t%2Fdir_idle.t;h=19e54967bf8066af57f5cddb5d8c24936a8277fa;hb=refs%2Fheads%2Fmaster;hp=587599e83fffc56718b5821470f76dfefbfe6431;hpb=b2b1006759730507731fcd3fc3e0de68239e3b92;p=public-inbox.git diff --git a/t/dir_idle.t b/t/dir_idle.t index 587599e8..19e54967 100644 --- a/t/dir_idle.t +++ b/t/dir_idle.t @@ -1,6 +1,44 @@ #!perl -w -# Copyright (C) 2020 all contributors +# 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($cb); +$di->add_watches(["$tmpdir/a", "$tmpdir/c"], 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::event_loop(); +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::event_loop(); +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::event_loop(); +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;