#!/usr/bin/perl use strict; use warnings; use Test::More; use Test::WWW::Mechanize; use Test::Moose; use t::lib::utils; my $lighttpd; BEGIN { $lighttpd = utils::find_lighttpd(); plan skip_all => "A lighttpd binary must be available for this test" unless $lighttpd; plan tests => 27; use_ok('FCGI::Engine'); } use Cwd; use File::Spec::Functions; my $CWD = Cwd::cwd; $ENV{MX_DAEMON_STDOUT} = catfile($CWD, 'Out.txt'); $ENV{MX_DAEMON_STDERR} = catfile($CWD, 'Err.txt'); { package Counter; use Moose; my $count = 0; sub handler { print("Content-type: text/html\r\n\r\n"); print(++$count); } } my $SOCKET = ':10001'; my $PIDFILE = '/tmp/051_lighttpd_basic_tcp_test.pid'; @ARGV = ( '--listen' => $SOCKET, '--pidfile' => $PIDFILE, '--daemon' ); my $e = FCGI::Engine->new_with_options(handler_class => 'Counter'); isa_ok($e, 'FCGI::Engine'); does_ok($e, 'MooseX::Getopt'); ok($e->is_listening, '... we are listening'); is($e->listen, $SOCKET, '... we have the right socket location'); ok(!Scalar::Util::blessed($e->listen), '... this is a socket, not a Path::Class::File'); is($e->nproc, 1, '... we have the default 1 proc'); ok($e->has_pidfile, '... we have a pidfile'); isa_ok($e->pidfile, 'MooseX::Daemonize::Pid::File'); is($e->pidfile->file, $PIDFILE, '... we have the right pidfile'); ok($e->should_detach, '... we should daemonize'); is($e->manager, 'FCGI::Engine::ProcManager', '... we have the default manager (FCGI::ProcManager)'); ok(!$e->has_pre_fork_init, '... we dont have any pre-fork-init'); unless ( fork ) { $e->run; exit; } else { sleep(1); # 1 seconds should be enough for everything to happen ok(-f $PIDFILE, '... our pidfile was created'); my $pid = $e->pidfile; isa_ok($pid, 'MooseX::Daemonize::Pid::File'); ok($pid->is_running, '... our daemon is running (pid: ' . $pid->pid . ')'); utils::start_lighttpd('t/lighttpd_confs/051_lighttpd_basic_tcp_test.conf'); my $mech = Test::WWW::Mechanize->new; for (1 .. 5) { $mech->get_ok('http://localhost:3333/count', '... got the page okay'); $mech->content_is($_, '... got the content we expected'); } utils::stop_lighttpd(); kill TERM => $pid->pid; sleep(1); # give is a moment to die ... ok(!$pid->is_running, '... our daemon is no longer running (pid: ' . $pid->pid . ')'); unlink $SOCKET; } unlink $ENV{MX_DAEMON_STDOUT}; unlink $ENV{MX_DAEMON_STDERR};