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