summaryrefslogtreecommitdiffstats
path: root/web/server/h2o/libh2o/misc/p5-Server-Starter/t/13-unix-daemonize.t
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--web/server/h2o/libh2o/misc/p5-Server-Starter/t/13-unix-daemonize.t68
1 files changed, 68 insertions, 0 deletions
diff --git a/web/server/h2o/libh2o/misc/p5-Server-Starter/t/13-unix-daemonize.t b/web/server/h2o/libh2o/misc/p5-Server-Starter/t/13-unix-daemonize.t
new file mode 100644
index 00000000..ab401dc3
--- /dev/null
+++ b/web/server/h2o/libh2o/misc/p5-Server-Starter/t/13-unix-daemonize.t
@@ -0,0 +1,68 @@
+use strict;
+use warnings;
+use utf8;
+use Test::More;
+use Server::Starter qw(start_server stop_server);
+use Server::Starter::Guard;
+use File::Temp qw(tempdir);
+
+plan tests => 1;
+
+my $dir = tempdir( CLEANUP => 1 );
+my $pidfile = "$dir/pid";
+my $sockfile = "$dir/server.sock";
+
+fork_ok(
+ child => sub {
+ start_server(
+ pid_file => $pidfile,
+ daemonize => 1,
+ path => $sockfile,
+ exec => [ $^X, qw(t/03-starter-unix-echod.pl) ],
+ );
+ },
+
+ parent => sub {
+ my $guard = Server::Starter::Guard->new(sub {
+ stop_server( pid_file => $pidfile );
+ });
+
+ wait_for(sub { -e $pidfile })
+ or BAIL_OUT("Pidfile '$pidfile' was not created in a timely fashion");
+
+ wait_for(sub { -e $sockfile })
+ or BAIL_OUT("Socket '$sockfile' was not created in a timely fashion");
+
+ ok(-e $sockfile, 'there is a socket');
+ },
+) or die "fork failed: $!";
+
+sub fork_ok {
+ my (%args) = @_;
+
+ my $pid = fork;
+ return unless defined $pid;
+ if ($pid == 0) {
+ $args{child}->();
+ }
+ else {
+ $args{parent}->($pid);
+ }
+
+ return 1;
+}
+
+sub wait_for {
+ my ($code, %opts) = @_;
+
+ my $times = $opts{times} || 10;
+ my $every = $opts{every} || 1;
+
+ while ( $times > 0 ) {
+ return 1 if $code->();
+ $times--;
+ sleep $every;
+ }
+
+ return 0;
+}