Skip Menu |

This queue is for tickets about the Proc-PID-File CPAN distribution.

Report information
The Basics
Id: 104691
Status: new
Priority: 0/
Queue: Proc-PID-File

People
Owner: Nobody in particular
Requestors: CHORNY [...] cpan.org
Cc:
AdminCc:

Bug Information
Severity: Normal
Broken in: 1.27
Fixed in: (no value)



Subject: patch for Windows
Win32::Process is bundled in both Strawberry and ActivePerl. -- Alexandr Ciornii, http://chorny.net
Subject: test.pl
#!/usr/bin/perl -w # # Proc::PID::File - test suite # Copyright (C) 2001-2003 Erick Calder # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # use strict; use warnings; # make sure this script can find the module # without being run by 'make test' (see --deamon switch below). use lib "blib/lib"; use Proc::PID::File; use Test::Simple tests => 12; use Config; use File::Spec; my $devnull = File::Spec->devnull; $|++; $\ = "\n"; my %args = (name => "test", dir => ".", debug => $ENV{DEBUG} || ""); my $cmd = shift || ""; # - deamon ------------------------------------------------------------------- if ($cmd eq "--daemon") { print "-- daemon --"; $args{verify} = 1; die "Already running!" if Proc::PID::File->running(%args); sleep(5); print "-- deamon: exiting --"; exit(); } exit() if $cmd eq "--short"; my $pid; our $ProcessObj; sub rundaemon { my $pipes = $args{debug} =~ /D/ ? "" : "> $devnull 2>&1"; if ($^O eq 'MSWin32') { require Win32::Process; require Win32; $ProcessObj->Kill(0) if $ProcessObj; Win32::Process::Create($ProcessObj, "$^X", "$^X $0 --daemon $pipes", 0, 32 + 134217728, #NORMAL_PRIORITY_CLASS + CREATE_NO_WINDOW ".") || die $^E; } else { system qq|$^X $0 --daemon $pipes &|; } sleep 1; open my $fh, '<', "$args{dir}/$args{name}.pid" or die "Error reading $args{dir}/$args{name}.pid - $!"; my $pid=<$fh>; chomp($pid); } # - thread-safety test ------------------------------------------------------- ok(1, "SKIPPED - simple: thread safe") unless $] >= 5.008001 && $Config{"useithreads"} && eval { require threads; Proc::PID::File->running(%args); threads->create(sub {})->join(); sleep(2); ok(-f "test.pid", "simple: thread safe"); }; # - basic run test ----------------------------------------------------------- unlink("test.pid") || die $! if -e "test.pid"; rundaemon(); my $rc = Proc::PID::File->running(%args); ok($rc, "simple: running"); # - verification tests ------------------------------------------------------- ok(1, "SKIPPED - simple: verified (real)") unless $^O =~ /linux|freebsd|cygwin/i && eval { $rc = Proc::PID::File->running(%args, verify => 1); ok($rc, "simple: verified (real)"); }; ok(1, "SKIPPED - simple: verified (false)") unless $^O =~ /linux|freebsd|cygwin/i && eval { # WARNING: the following test takes over the pidfile from # the daemon such that he cannot clean it up. this is as # it should be since no one but us should occupy our pidfile $rc = Proc::PID::File->running(%args, verify => "falsetest"); ok(! $rc, "simple: verified (false)"); }; # - single instance test ----------------------------------------------------- if ($ProcessObj) { $ProcessObj->Wait(6000) or $ProcessObj->Kill(0); $ProcessObj = undef; } else { sleep 1 while kill 0, $pid; } $rc = Proc::PID::File->running(%args); ok(! $rc, "simple: single instance"); # - destroy test ------------------------------------------------------------- system qq|$^X $0 --short > $devnull 2>&1|; ok(-f "test.pid", "simple: destroy"); # - OO Interface tests ------------------------------------------------------- my $c1 = Proc::PID::File->new(%args); ok($c1->{path}, "oo: object initialised"); $c1->touch(); ok(-f $c1->{path}, "oo: file touched"); ok(!$c1->alive(), "oo: alive (with current process)"); unlink("test.pid") || die $! if -e "test.pid"; rundaemon(); ok($c1->alive(), "oo: alive (with daemon)"); ok(1, "SKIPPED - oo: alive (verified)") unless $^O =~ /linux|freebsd|cygwin/i && eval { ok($c1->alive(verify => 1), "oo: alive (verified)"); }; $c1->release(); ok(! -f $c1->{path}, "oo: released"); # - wait for daemon to exit -------------------------------------------------- $\ = undef; print "#waiting for daemon death\n"; if ($ProcessObj) { $ProcessObj->Wait(1000) or $ProcessObj->Kill(0); } else { sleep 1, print "." while kill 0, $pid; } #print "\ndone\n"; #exit 0;
Subject: test.pl.patch
--- test.pl 2009-10-04 05:00:56.000000000 +0300 +++ D:\OSS\repo\win32\1\Proc-PID-File-1.27\test.pl 2015-05-25 20:49:12.703125000 +0300 @@ -30,6 +30,8 @@ use Proc::PID::File; use Test::Simple tests => 12; use Config; +use File::Spec; +my $devnull = File::Spec->devnull; $|++; $\ = "\n"; my %args = (name => "test", dir => ".", debug => $ENV{DEBUG} || ""); @@ -49,11 +51,26 @@ exit() if $cmd eq "--short"; my $pid; +our $ProcessObj; sub rundaemon { - my $pipes = $args{debug} =~ /D/ ? "" : "> /dev/null 2>&1"; + my $pipes = $args{debug} =~ /D/ ? "" : "> $devnull 2>&1"; + if ($^O eq 'MSWin32') { + require Win32::Process; + require Win32; + $ProcessObj->Kill(0) if $ProcessObj; + Win32::Process::Create($ProcessObj, + "$^X", + "$^X $0 --daemon $pipes", + 0, + 32 + 134217728, #NORMAL_PRIORITY_CLASS + CREATE_NO_WINDOW + ".") || die $^E; + } else { system qq|$^X $0 --daemon $pipes &|; + } sleep 1; - chomp($pid = qx|cat $args{dir}/$args{name}.pid|); + open my $fh, '<', "$args{dir}/$args{name}.pid" or die "Error reading $args{dir}/$args{name}.pid - $!"; + my $pid=<$fh>; + chomp($pid); } # - thread-safety test ------------------------------------------------------- @@ -98,14 +115,19 @@ # - single instance test ----------------------------------------------------- +if ($ProcessObj) { + $ProcessObj->Wait(6000) or $ProcessObj->Kill(0); + $ProcessObj = undef; +} else { sleep 1 while kill 0, $pid; +} $rc = Proc::PID::File->running(%args); ok(! $rc, "simple: single instance"); # - destroy test ------------------------------------------------------------- -system qq|$^X $0 --short > /dev/null 2>&1|; +system qq|$^X $0 --short > $devnull 2>&1|; ok(-f "test.pid", "simple: destroy"); # - OO Interface tests ------------------------------------------------------- @@ -134,7 +156,11 @@ # - wait for daemon to exit -------------------------------------------------- $\ = undef; -print "waiting for daemon death"; +print "#waiting for daemon death\n"; +if ($ProcessObj) { + $ProcessObj->Wait(1000) or $ProcessObj->Kill(0); +} else { sleep 1, print "." while kill 0, $pid; -print "\ndone\n"; -exit 0; +} +#print "\ndone\n"; +#exit 0;