1use strict; 2use warnings; 3 4use Test::More; 5 6use File::Temp; 7use POSIX ":sys_wait_h"; 8 9use Search::Elasticsearch; 10use Search::Elasticsearch::TestServer; 11 12my @pids; 13 14SKIP: { 15 skip 'ES_HOME not set', 7 unless $ENV{ES_HOME}; 16 17 my $tempdir = File::Temp->newdir( 'testserver-XXXXX', DIR => '/tmp' ); 18 my $server = Search::Elasticsearch::TestServer->new; 19 20 my $nodes = $server->start(); 21 22 ok( $nodes, "server->start returned nodes" ) 23 or diag explain { server => $server }; 24 ok( defined( $server->pids ), "server->pids defined" ); 25 cmp_ok( scalar @{ $server->pids }, '>', 0, "more than 0 pids" ); 26 @pids = @{ $server->pids }; 27 28 subtest 'ES pids are alive' => sub { 29 verify_pids_alive(@pids); 30 }; 31 32 $server->shutdown; 33 34 note 'sleep to give ES time to die'; 35 sleep 5; 36 37 subtest 'ES pids are dead after shutdown' => sub { 38 verify_pids_dead(@pids); 39 }; 40 41 eval { $server->shutdown }; 42 is( $@, '', "second shutdown did not set error" ); 43 44 subtest 'ES pids are dead after second shutdown' => sub { 45 verify_pids_dead(@pids); 46 }; 47} 48 49done_testing; 50 51#important to waitpid or kill0 will return true for zombies. 52sub verify_pids_alive { 53 for my $pid (@_) { 54 waitpid( $pid, WNOHANG ); 55 ok( kill( 0, $pid ), "pid $pid is alive" ); 56 } 57} 58 59sub verify_pids_dead { 60 for my $pid (@_) { 61 waitpid( $pid, WNOHANG ); 62 ok( !kill( 0, $pid ), "pid $pid is dead" ); 63 } 64} 65