use strict; use warnings; use Test::More tests => 13; use constant SOCKPATH => 't/keyedmutexd.sock'; BEGIN { use_ok('KeyedMutex'); } my($km, $km2, $server_pid); unlink SOCKPATH; eval { $km = KeyedMutex->new({ sock => SOCKPATH, }); }; ok(! $km, 'connect to a nonexistent unix domain socket, should fail'); # fire up the server if ($server_pid = fork) { die 'fork failed' if $server_pid == -1; } else { close STDOUT; open STDOUT, '>', '/dev/null' or die 'failed to reopen stdout'; exec 'keyedmutexd/keyedmutexd -f -s ' . SOCKPATH; die 'failed to exec keyedmutexd'; } sleep 5; # establish two connections eval { $km = KeyedMutex->new({ sock => SOCKPATH, }); }; ok($km, 'instantiation'); eval { $km2 = KeyedMutex->new({ sock => SOCKPATH, }); }; ok($km2, 'instantiate another'); # lock tests ok(! $km->locked, 'not holding a lock'); is($km->lock('test'), 1, 'acquire lock'); ok($km->locked, 'holding a lock'); ok($km->release, 'release'); ok(! $km->locked, 'not holding a lock'); is($km->lock('test'), 1, 'acquire once more'); ok($km->locked, 'holding a lock again'); ok($km->release, 'release'); ok(! $km->locked, 'not holding a lock'); # kill server kill 15, $server_pid;