1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
|
use warnings;
use strict;
use Test::More tests => 17;
use Time::HiRes qw(sleep);
use_ok('Munin::Master::ProcessManager');
### Uncomment to see log messages
#
#use Munin::Master::Logger;
#logger_debug();
#use Munin::Master::Config;
#my $config = Munin::Master::Config->instance();
#$config->{debug} = 1;
#
# Define some test workers
#
package Test::Worker;
use base q(Munin::Master::Worker);
sub do_work {
my ($self) = @_;
1 for (0 .. rand 1_000_000); # sleep and alarm does not mix ...
return $self->{ID};
}
package Test::NastyWorker;
use base q(Munin::Master::Worker);
use Carp;
sub do_work {
croak "I'm nasty!";
}
package Test::SpinningWorker;
use base q(Munin::Master::Worker);
sub do_work {
1 while (1);
}
package main;
#
# The tests
#
sub result_callback {
my ($res) = @_;
ok($res->[0] == 1 || $res->[0] == 2 || $res->[0] == 3, "$res->[0] in 1,2,3");
is_deeply($res, [$res->[0], $res->[0]], "\$res == [X,X], X <- $res->[0]");
}
{
my $pm = Munin::Master::ProcessManager->new(\&result_callback);
isa_ok($pm, 'Munin::Master::ProcessManager');
$pm->add_workers(
Test::Worker->new(1),
Test::Worker->new(2),
Test::Worker->new(3),
);
$pm->start_work();
}
{
my $pm = Munin::Master::ProcessManager->new(\&result_callback);
$pm->{max_concurrent} = 1;
$pm->add_workers(
Test::Worker->new(1),
Test::Worker->new(2),
Test::Worker->new(3),
);
$pm->start_work();
}
sub result_callback2 {
my ($res) = @_;
is($res->[1], 1, "Got 1");
}
sub error_callback2 {
my ($worker_id, $msg) = @_;
ok($msg eq 'Timed out' || $msg eq 'Died', "Got error msg $msg");
}
{
my $pm = Munin::Master::ProcessManager->new(\&result_callback2, \&error_callback2);
$pm->{worker_timeout} = 1;
$pm->add_workers(
Test::NastyWorker->new(),
Test::SpinningWorker->new(),
Test::Worker->new(1),
);
$pm->start_work();
}
|