Skip to content

Commit

Permalink
Separate test cases for run_job
Browse files Browse the repository at this point in the history
  • Loading branch information
moznion committed Apr 24, 2014
1 parent beb5824 commit b68a7ee
Show file tree
Hide file tree
Showing 4 changed files with 177 additions and 89 deletions.
File renamed without changes.
90 changes: 90 additions & 0 deletions t/manager/run_job/exceptional.t
@@ -0,0 +1,90 @@
#!perl

use strict;
use warnings;
no warnings qw/redefine once/;
use utf8;
use AnyEvent;
use Coro::AnyEvent;
use File::Temp qw/tempdir tempfile/;
use Ukigumo::Client;
use Ukigumo::Agent::Logger;
use Ukigumo::Agent;

use Test::More;

my $cv;
my $tmpfilename = '';

*Ukigumo::Client::new = sub {
bless {}, 'Ukigumo::Client';
};

my $original_agent__take_a_break = *Ukigumo::Agent::Manager::_take_a_break{CODE};
*Ukigumo::Agent::Manager::_take_a_break = sub {
my ($self) = @_;
$original_agent__take_a_break->($self);
Coro::AnyEvent::sleep 1; # to buffer
$cv->send;
};

*Ukigumo::Agent::Logger::infof = sub {
my ($self, @info) = @_;
open my $fh, '>>', $tmpfilename;
print $fh "@info" . "\n";
};

*Ukigumo::Agent::Logger::warnf = sub {
my ($self, @warn) = @_;
open my $fh, '>>', $tmpfilename;
print $fh "@warn" . "\n";
};

subtest 'exceptional' => sub {
my $manager = Ukigumo::Agent::Manager->new(
work_dir => tempdir(CLEANUP => 1),
server_url => '127.0.0.1',
);

subtest 'client died' => sub {
*Ukigumo::Client::run = sub { die };

my $fh;
($fh, $tmpfilename) = tempfile();

$cv = AE::cv;

$manager->register_job({
repository => 'repos',
branch => 'branch',
});

$cv->wait;

my $got = do { local $/; <$fh>; };
like $got, qr!
Spawned\ (\d+)\n
\[child]\ error:\ Died\ at\ t/manager/run_job/exceptional\.t\ line\ \d+\.\n
\n
\[child]\ finished\ to\ work\n
\[child\ exit]\ pid:\ \1,\ status:\ 0\n
\[child\ exit]\ There\ is\ no\ jobs\.\ sleep\.\.\.\n
!x;

close $fh;
};

subtest 'lack arguments' => sub {
eval{ $manager->register_job() };
ok $@;

eval{ $manager->register_job({repository => 'repos'}) };
ok $@;

eval{ $manager->register_job({branch => 'branch'}) };
ok $@;
};
};

done_testing;

89 changes: 0 additions & 89 deletions t/manager/11_run_job.t → t/manager/run_job/normal.t
Expand Up @@ -134,94 +134,5 @@ subtest 'normal case' => sub {
};
};

subtest 'timeout' => sub {
my $fh;
($fh, $tmpfilename) = tempfile();

*Ukigumo::Client::run = sub { sleep 10 };

my $manager = Ukigumo::Agent::Manager->new(
work_dir => tempdir(CLEANUP => 1),
server_url => '127.0.0.1',
max_children => 1,
timeout => 1,
);

$cv = AE::cv;

$manager->register_job({
repository => 'repos',
branch => 'branch',
});

*Ukigumo::Client::run = sub {}; # Do nothing

$manager->register_job({
repository => 'repos',
branch => 'branch',
});

$cv->wait;

my $got = do { local $/; <$fh>; };

like $got, qr/
Spawned\ (\d+)\n
\[child]\ timeout\n
\[child\ exit]\ pid:\ \1,\ status:\ 15\n
\[child\ exit]\ run\ new\ job\n
Spawned\ (\d+)\n
\[child]\ finished\ to\ work\n
\[child\ exit]\ pid:\ \2,\ status:\ 0\n
\[child\ exit]\ There\ is\ no\ jobs\.\ sleep\.\.\.\n
/x;
};

subtest 'exceptional' => sub {
my $manager = Ukigumo::Agent::Manager->new(
work_dir => tempdir(CLEANUP => 1),
server_url => '127.0.0.1',
);

subtest 'client died' => sub {
*Ukigumo::Client::run = sub { die };

my $fh;
($fh, $tmpfilename) = tempfile();

$cv = AE::cv;

$manager->register_job({
repository => 'repos',
branch => 'branch',
});

$cv->wait;

my $got = do { local $/; <$fh>; };
like $got, qr!
Spawned\ (\d+)\n
\[child]\ error:\ Died\ at\ t/manager/11_run_job\.t\ line\ \d+\.\n
\n
\[child]\ finished\ to\ work\n
\[child\ exit]\ pid:\ \1,\ status:\ 0\n
\[child\ exit]\ There\ is\ no\ jobs\.\ sleep\.\.\.\n
!x;

close $fh;
};

subtest 'lack arguments' => sub {
eval{ $manager->register_job() };
ok $@;

eval{ $manager->register_job({repository => 'repos'}) };
ok $@;

eval{ $manager->register_job({branch => 'branch'}) };
ok $@;
};
};

done_testing;

87 changes: 87 additions & 0 deletions t/manager/run_job/timeout.t
@@ -0,0 +1,87 @@
#!perl

use strict;
use warnings;
no warnings qw/redefine once/;
use utf8;
use AnyEvent;
use Coro::AnyEvent;
use File::Temp qw/tempdir tempfile/;
use Ukigumo::Client;
use Ukigumo::Agent::Logger;
use Ukigumo::Agent;

use Test::More;

my $cv;
my $tmpfilename = '';

*Ukigumo::Client::new = sub {
bless {}, 'Ukigumo::Client';
};

my $original_agent__take_a_break = *Ukigumo::Agent::Manager::_take_a_break{CODE};
*Ukigumo::Agent::Manager::_take_a_break = sub {
my ($self) = @_;
$original_agent__take_a_break->($self);
Coro::AnyEvent::sleep 1; # to buffer
$cv->send;
};

*Ukigumo::Agent::Logger::infof = sub {
my ($self, @info) = @_;
open my $fh, '>>', $tmpfilename;
print $fh "@info" . "\n";
};

*Ukigumo::Agent::Logger::warnf = sub {
my ($self, @warn) = @_;
open my $fh, '>>', $tmpfilename;
print $fh "@warn" . "\n";
};

subtest 'timeout' => sub {
my $fh;
($fh, $tmpfilename) = tempfile();

*Ukigumo::Client::run = sub { sleep 10 };

my $manager = Ukigumo::Agent::Manager->new(
work_dir => tempdir(CLEANUP => 1),
server_url => '127.0.0.1',
max_children => 1,
timeout => 1,
);

$cv = AE::cv;

$manager->register_job({
repository => 'repos',
branch => 'branch',
});

*Ukigumo::Client::run = sub {}; # Do nothing

$manager->register_job({
repository => 'repos',
branch => 'branch',
});

$cv->wait;

my $got = do { local $/; <$fh>; };

like $got, qr/
Spawned\ (\d+)\n
\[child]\ timeout\n
\[child\ exit]\ pid:\ \1,\ status:\ 15\n
\[child\ exit]\ run\ new\ job\n
Spawned\ (\d+)\n
\[child]\ finished\ to\ work\n
\[child\ exit]\ pid:\ \2,\ status:\ 0\n
\[child\ exit]\ There\ is\ no\ jobs\.\ sleep\.\.\.\n
/x;
};

done_testing;

0 comments on commit b68a7ee

Please sign in to comment.