The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use Test::More;

use File::Spec;
use File::Temp 'tempdir';

use ExclusiveLock::Guard;

my $tmpdir  = tempdir( CLEANUP => 1 );
my $tmpfile = File::Spec->catfile( $tmpdir, 'test.lock' );

my $pid = fork;
die "fork failed: $!" unless defined $pid;
if ($pid) {
    # parent
    sleep 1;

    ok( -f $tmpfile );
    do {
        my $lock1 = ExclusiveLock::Guard->new($tmpfile, nonblocking => 1);
        ok( not $lock1->is_locked);
    };
    ok( -f $tmpfile );

    sleep 2;

    ok( not -f $tmpfile );
    my $lock2 = ExclusiveLock::Guard->new($tmpfile, nonblocking => 1);
    ok($lock2->is_locked);
    ok( -f $tmpfile );

    waitpid $pid, 0;
} else {
    # chiled
    do {
        my $lock = ExclusiveLock::Guard->new($tmpfile);
        sleep 2;
    };
    exit;
}

ok( not -f $tmpfile );

done_testing;