1#!perl -w
2
3#use Test::More qw(no_plan);
4use Test::More tests => 45;
5
6#-----------------------------------------------------------------
7# Return a fully qualified name of the given file in the test
8# directory "t/data" - if such file really exists. With no arguments,
9# it returns the path of the test directory itself.
10# -----------------------------------------------------------------
11use FindBin qw( $Bin );
12use File::Spec;
13sub test_file {
14    my $file = File::Spec->catfile ('t', 'data', @_);
15    return $file if -e $file;
16    $file = File::Spec->catfile ($Bin, 'data', @_);
17    return $file if -e $file;
18    return File::Spec->catfile (@_);
19}
20
21#-----------------------------------------------------------------
22# Return a configuration extracted from the given file.
23# -----------------------------------------------------------------
24sub get_config {
25    my $filename = shift;
26    my $config_file = test_file ($filename);
27    my $config = Monitor::Simple::Config->get_config ($config_file);
28    ok ($config, "Failed configuration taken from '$config_file'");
29    return $config;
30}
31
32# -----------------------------------------------------------------
33# Tests start here...
34# -----------------------------------------------------------------
35ok(1);
36use Monitor::Simple;
37use Monitor::Simple::Notifier;
38diag( "Testing notifiers" );
39
40# instantiate a notifier
41{
42    my $notifier = Monitor::Simple::Notifier->new (a => 1, b => 2, c => 3);
43    is ($notifier->{a}, 1, "Init arguments for a notifier (a)");
44    is ($notifier->{b}, 2, "Init arguments for a notifier (b)");
45    is ($notifier->{c}, 3, "Init arguments for a notifier (c)");
46}
47
48# matching codes
49{
50    my $notifier = Monitor::Simple::Notifier->new();
51    my $c_and_u = Monitor::Simple::NOTIFY_CRITICAL . ',' . Monitor::Simple::NOTIFY_UNKNOWN;
52
53    my @combos = (
54        # [0]code_from_config (string)     [1]code_from_result (number)      [2]matches
55        # -----------------------------    -----------------------------     ----------
56        [Monitor::Simple::NOTIFY_OK,       Monitor::Simple::RETURN_OK,       1],
57        [Monitor::Simple::NOTIFY_OK,       Monitor::Simple::RETURN_WARNING,  0],
58        [Monitor::Simple::NOTIFY_OK,       Monitor::Simple::RETURN_CRITICAL, 0],
59        [Monitor::Simple::NOTIFY_OK,       Monitor::Simple::RETURN_UNKNOWN,  0],
60
61        [Monitor::Simple::NOTIFY_WARNING,  Monitor::Simple::RETURN_OK,       0],
62        [Monitor::Simple::NOTIFY_WARNING,  Monitor::Simple::RETURN_WARNING,  1],
63        [Monitor::Simple::NOTIFY_WARNING,  Monitor::Simple::RETURN_CRITICAL, 0],
64        [Monitor::Simple::NOTIFY_WARNING,  Monitor::Simple::RETURN_UNKNOWN,  0],
65
66        [Monitor::Simple::NOTIFY_CRITICAL, Monitor::Simple::RETURN_OK,       0],
67        [Monitor::Simple::NOTIFY_CRITICAL, Monitor::Simple::RETURN_WARNING,  0],
68        [Monitor::Simple::NOTIFY_CRITICAL, Monitor::Simple::RETURN_CRITICAL, 1],
69        [Monitor::Simple::NOTIFY_CRITICAL, Monitor::Simple::RETURN_UNKNOWN,  0],
70
71        [Monitor::Simple::NOTIFY_UNKNOWN,  Monitor::Simple::RETURN_OK,       0],
72        [Monitor::Simple::NOTIFY_UNKNOWN,  Monitor::Simple::RETURN_WARNING,  0],
73        [Monitor::Simple::NOTIFY_UNKNOWN,  Monitor::Simple::RETURN_CRITICAL, 0],
74        [Monitor::Simple::NOTIFY_UNKNOWN,  Monitor::Simple::RETURN_UNKNOWN,  1],
75
76        [Monitor::Simple::NOTIFY_ALL,      Monitor::Simple::RETURN_OK,       1],
77        [Monitor::Simple::NOTIFY_ALL,      Monitor::Simple::RETURN_WARNING,  1],
78        [Monitor::Simple::NOTIFY_ALL,      Monitor::Simple::RETURN_CRITICAL, 1],
79        [Monitor::Simple::NOTIFY_ALL,      Monitor::Simple::RETURN_UNKNOWN,  1],
80
81        [Monitor::Simple::NOTIFY_ERRORS,   Monitor::Simple::RETURN_OK,       0],
82        [Monitor::Simple::NOTIFY_ERRORS,   Monitor::Simple::RETURN_WARNING,  1],
83        [Monitor::Simple::NOTIFY_ERRORS,   Monitor::Simple::RETURN_CRITICAL, 1],
84        [Monitor::Simple::NOTIFY_ERRORS,   Monitor::Simple::RETURN_UNKNOWN,  1],
85
86        [Monitor::Simple::NOTIFY_NONE,     Monitor::Simple::RETURN_OK,       0],
87        [Monitor::Simple::NOTIFY_NONE,     Monitor::Simple::RETURN_WARNING,  0],
88        [Monitor::Simple::NOTIFY_NONE,     Monitor::Simple::RETURN_CRITICAL, 0],
89        [Monitor::Simple::NOTIFY_NONE,     Monitor::Simple::RETURN_UNKNOWN,  0],
90
91        [$c_and_u,                         Monitor::Simple::RETURN_OK,       0],
92        [$c_and_u,                         Monitor::Simple::RETURN_WARNING,  0],
93        [$c_and_u,                         Monitor::Simple::RETURN_CRITICAL, 1],
94        [$c_and_u,                         Monitor::Simple::RETURN_UNKNOWN,  1],
95        );
96    my $count = 0;
97    foreach my $combo (@combos) {
98        $count++;
99        is ($notifier->matching_code ($combo->[1], $combo->[0]),
100            $combo->[2],
101            "Matching codes ($count): Result = " . $combo->[1] . ", Config = " . $combo->[0]);
102    }
103}
104
105my $config = get_config ('notifiers.xml');
106my $notifier = Monitor::Simple::Notifier->new (config => $config);
107
108# get relevant notifiers
109my $result = { service => 'date1',
110               code    => Monitor::Simple::RETURN_OK,
111               msg     => 'Notifying you...' };
112my @relevant_for_1 = $notifier->get_relevant_notifiers ($result);
113is (scalar @relevant_for_1, 2, "Number of relevant notifiers for service $result->{service}");
114
115$result->{service} = 'date2';
116my @relevant_for_2 = $notifier->get_relevant_notifiers ($result);
117is (scalar @relevant_for_2, 1, "Number of relevant notifiers for service $result->{service}");
118
119# extract emails
120my @emails = ();
121foreach $element (@relevant_for_1) {
122    my $extracted = $notifier->extract_emails ($element);
123    push (@emails, $extracted);
124}
125is (scalar @emails, 2,         "Extracted emails 1");
126is (scalar @{ $emails[0] }, 1, "Extracted emails 2");
127is (scalar @{ $emails[1] }, 3, "Extracted emails 2");
128# is_deeply (\@emails,
129#            [
130#             ['guest6@localhost'],
131#             ['guest3@localhost','guest2@localhost','guest@localhost',]
132#            ],
133#            "Extracted emails");
134
135# creation of the arguments for notifiers
136use Data::Dumper;
137$result->{service} = 'date3';
138$result->{code} = Monitor::Simple::RETURN_WARNING;
139my @relevant_for_3 = $notifier->get_relevant_notifiers ($result);
140is (scalar @relevant_for_3, 1, "Number of relevant notifiers for service $result->{service}");
141{
142    my @args = $notifier->create_notifier_args ($relevant_for_3[0], 'msg.file');
143    is_deeply (\@args,
144               [
145                '-file',
146                'testing simple monitor',
147                '-service',
148                'date3',
149                '-msg',
150                'msg.file'
151               ],
152               "Create notifier arguments");
153}
154{
155    my @args = $notifier->create_notifier_args ($relevant_for_1[1], 'msg.file');
156    is (scalar @args, 6,"Create notifier arguments with emails");
157    # is_deeply (\@args,
158    #            [
159    #             '-emails',
160    #             'guest3@localhost,guest2@localhost,guest@localhost',
161    #             '-service',
162    #             'date1',
163    #             '-msg',
164    #             'msg.file'
165    #            ],
166    #            "Create notifier arguments with emails");
167}
168
169__END__
170