106 lines
2.8 KiB
Perl
106 lines
2.8 KiB
Perl
# vim:syntax=perl
|
|
#-------------------------------------------------------------------
|
|
# WebGUI is Copyright 2001-2009 Plain Black Corporation.
|
|
#-------------------------------------------------------------------
|
|
# Please read the legal notices (docs/legal.txt) and the license
|
|
# (docs/license.txt) that came with this distribution before using
|
|
# this software.
|
|
#------------------------------------------------------------------
|
|
# http://www.plainblack.com info@plainblack.com
|
|
#------------------------------------------------------------------
|
|
|
|
# WebGUI::Fork tests
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
use FindBin;
|
|
use lib "$FindBin::Bin/lib";
|
|
use lib "$FindBin::Bin/../lib";
|
|
|
|
use Test::More;
|
|
use Test::Deep;
|
|
use Data::Dumper;
|
|
use JSON;
|
|
|
|
use WebGUI::Test;
|
|
use WebGUI::Session;
|
|
use WebGUI::Fork;
|
|
|
|
my $class = 'WebGUI::Fork';
|
|
my $testClass = 'WebGUI::Test::Fork';
|
|
my $pipe = $class->init();
|
|
my $session = WebGUI::Test->session;
|
|
|
|
# test simplest (non-forking) case
|
|
|
|
my $process = $class->create($session);
|
|
my $request = $process->request( $testClass, 'simple', ['data'] );
|
|
|
|
cmp_bag(
|
|
[ keys %$request ],
|
|
[qw(webguiRoot configFile sessionId id module subname data)],
|
|
'request hash has the right keys'
|
|
);
|
|
|
|
my $now = time;
|
|
|
|
$class->runRequest($request);
|
|
ok $process->isFinished, 'finished';
|
|
my $error = $process->getError;
|
|
ok( !$error, 'no errors' ) or diag " Expected nothing, got: $error\n";
|
|
$process->setWait(0);
|
|
is $process->getStatus, 'data', 'proper status';
|
|
my $started = $process->startTime;
|
|
ok( ( $started >= $now ), 'sane startTime' );
|
|
ok( ( $process->endTime >= $started ), 'sane endTime' );
|
|
|
|
$process->delete;
|
|
|
|
note "Testing error case\n";
|
|
$process = $class->create($session);
|
|
$request = $process->request( $testClass, 'error', ['error'] );
|
|
$class->runRequest($request);
|
|
ok $process->isFinished, 'finished';
|
|
is $process->getError, "error\n", 'has error code';
|
|
$process->setWait(0);
|
|
my $status = $process->getStatus;
|
|
ok( !$status, 'no discernable status' ) or diag $status;
|
|
ok( ( $process->endTime >= $started ), 'sane endTime' );
|
|
|
|
my $forkCount = 0;
|
|
my $forkAndExec = $class->can('forkAndExec');
|
|
my $replace = sub {
|
|
my $self = shift;
|
|
$forkCount++;
|
|
$self->$forkAndExec(@_);
|
|
};
|
|
|
|
{
|
|
no strict 'refs';
|
|
no warnings 'redefine';
|
|
*{ $class . '::forkAndExec' } = $replace;
|
|
}
|
|
|
|
sub backgroundTest {
|
|
note "$_[0]\n";
|
|
$process = $class->start( $session, $testClass, 'complex', ['data'] );
|
|
my $sleeping;
|
|
while ( !$process->isFinished && $sleeping++ < 10 ) {
|
|
sleep 1;
|
|
}
|
|
ok $process->isFinished, 'finished';
|
|
is $process->getStatus, 'baz', 'correct status'
|
|
or diag $process->getError . "\n";
|
|
|
|
$process->delete;
|
|
}
|
|
backgroundTest('talk to background');
|
|
is $forkCount, 0, 'we did not fork';
|
|
close $pipe;
|
|
backgroundTest('On-demand fork');
|
|
is $forkCount, 1, 'we did fork';
|
|
|
|
done_testing;
|
|
|
|
#vim:ft=perl
|