File: munin_master_processmanager.t

package info (click to toggle)
munin 1.4.5-3%2Bdeb6u1
  • links: PTS, VCS
  • area: main
  • in suites: squeeze-lts
  • size: 4,988 kB
  • ctags: 806
  • sloc: perl: 8,936; sh: 3,105; java: 1,754; makefile: 585; python: 143
file content (117 lines) | stat: -rw-r--r-- 1,995 bytes parent folder | download | duplicates (3)
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();
}