summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Changes3
-rw-r--r--lib/Nagios/Plugin.pm9
-rw-r--r--lib/Nagios/Plugin/Base.pm45
-rw-r--r--lib/Nagios/Plugin/Performance.pm3
-rw-r--r--lib/Nagios/Plugin/Range.pm44
-rw-r--r--lib/Nagios/Plugin/Threshold.pm4
-rw-r--r--t/Nagios-Plugin-Performance.t9
-rw-r--r--t/Nagios-Plugin-Range.t153
-rw-r--r--t/Nagios-Plugin-Threshold.t150
-rw-r--r--t/Nagios-Plugin.t32
10 files changed, 394 insertions, 58 deletions
diff --git a/Changes b/Changes
index 71208fb..8bf43f1 100644
--- a/Changes
+++ b/Changes
@@ -1,5 +1,8 @@
1Revision history for Perl module Nagios::Plugin. 1Revision history for Perl module Nagios::Plugin.
2 2
30.13 ???
4 - Lots of extra tests and fixes from Nathan Vonnahme
5
30.12 15th June 2006 60.12 15th June 2006
4 - rrdlabel method available to get a performance label, 7 - rrdlabel method available to get a performance label,
5 converted to something rrd can use 8 converted to something rrd can use
diff --git a/lib/Nagios/Plugin.pm b/lib/Nagios/Plugin.pm
index 2acc6ea..4e95e98 100644
--- a/lib/Nagios/Plugin.pm
+++ b/lib/Nagios/Plugin.pm
@@ -23,7 +23,7 @@ use Exporter;
23our @ISA = qw(Exporter Nagios::__::Plugin); 23our @ISA = qw(Exporter Nagios::__::Plugin);
24our @EXPORT_OK = qw(%ERRORS); 24our @EXPORT_OK = qw(%ERRORS);
25 25
26our $VERSION = '0.12'; 26our $VERSION = '0.13';
27 27
28sub add_perfdata { 28sub add_perfdata {
29 my ($self, %args) = @_; 29 my ($self, %args) = @_;
@@ -59,7 +59,8 @@ Nagios::Plugin - Object oriented helper routines for your Nagios plugin
59 use Nagios::Plugin qw(%ERRORS); 59 use Nagios::Plugin qw(%ERRORS);
60 $p = Nagios::Plugin->new( shortname => "PAGESIZE" ); 60 $p = Nagios::Plugin->new( shortname => "PAGESIZE" );
61 61
62 $threshold = $p->set_thresholds( warning => "10:25", critical => "25:" ); 62 $threshold = $p->set_thresholds( warning => "10:25", critical => "~:25" );
63 # Critical if outside -INF to 25, ie > 25. Warn if outside 10-25, ie < 10
63 64
64 # ... collect current metric into $value 65 # ... collect current metric into $value
65 if ($trouble_getting_metric) { 66 if ($trouble_getting_metric) {
@@ -120,7 +121,7 @@ Initializes a new Nagios::Plugin object. Can specify the shortname here.
120 121
121=head1 OBJECT METHODS 122=head1 OBJECT METHODS
122 123
123=item set_thresholds( warning => "10:25", critical => "25:" ) 124=item set_thresholds( warning => "10:25", critical => "~:25" )
124 125
125Sets the thresholds, based on the range specification at 126Sets the thresholds, based on the range specification at
126http://nagiosplug.sourceforge.net/developer-guidelines.html#THRESHOLDFORMAT. 127http://nagiosplug.sourceforge.net/developer-guidelines.html#THRESHOLDFORMAT.
@@ -148,6 +149,8 @@ http://nagiosplug.sourceforge.net
148 149
149Ton Voon, E<lt>ton.voon@altinity.comE<gt> 150Ton Voon, E<lt>ton.voon@altinity.comE<gt>
150 151
152Thanks to Nathan Vonnahme for loads of extra tests and subsequent fixes.
153
151=head1 COPYRIGHT AND LICENSE 154=head1 COPYRIGHT AND LICENSE
152 155
153Copyright (C) 2006 by Nagios Plugin Development Team 156Copyright (C) 2006 by Nagios Plugin Development Team
diff --git a/lib/Nagios/Plugin/Base.pm b/lib/Nagios/Plugin/Base.pm
index f3a7f7c..d1678a5 100644
--- a/lib/Nagios/Plugin/Base.pm
+++ b/lib/Nagios/Plugin/Base.pm
@@ -5,6 +5,9 @@ package Nagios::Plugin::Base;
5use strict; 5use strict;
6use warnings; 6use warnings;
7 7
8use Nagios::Plugin;
9our ($VERSION) = $Nagios::Plugin::VERSION;
10
8use Exporter; 11use Exporter;
9our @ISA = qw(Exporter); 12our @ISA = qw(Exporter);
10our @EXPORT = qw(%ERRORS); 13our @EXPORT = qw(%ERRORS);
@@ -13,28 +16,38 @@ our %ERRORS=('OK'=>0,'WARNING'=>1,'CRITICAL'=>2,'UNKNOWN'=>3,'DEPENDENT'=>4);
13 16
14our %STATUS_TEXT = reverse %ERRORS; 17our %STATUS_TEXT = reverse %ERRORS;
15 18
19
16my $exit_on_die = 1; 20my $exit_on_die = 1;
17sub exit_on_die { shift; @_ ? $exit_on_die = shift : $exit_on_die }; 21sub exit_on_die { shift; @_ ? $exit_on_die = shift : $exit_on_die };
18my $print_on_die = 1; 22my $print_on_die = 1;
19sub print_on_die { shift; @_ ? $print_on_die = shift : $print_on_die }; 23sub print_on_die { shift; @_ ? $print_on_die = shift : $print_on_die };
20 24
21sub die { 25sub die {
22 my ($class, $args, $plugin) = @_; 26 my ($class, $args, $plugin) = @_;
23 my $return_code = $args->{return_code} || 3; 27 my $return_code;
24 my $message = $args->{message} || "Internal error"; 28
25 my $output = join(" ", $STATUS_TEXT{$return_code}, $message); 29 if ( exists $args->{return_code}
26 if ($plugin) { 30 && exists $STATUS_TEXT{$args->{return_code}}
27 $output = $plugin->shortname." $output" if $plugin->shortname; 31 ) {
28 $output .= " | ".$plugin->all_perfoutput if $plugin->perfdata; 32 $return_code = $args->{return_code};
29 } 33 }
30 if ($print_on_die) { 34 else {
31 print $output, $/; 35 $return_code = $ERRORS{UNKNOWN};
32 } 36 }
33 if ($exit_on_die) { 37 my $message = $args->{message} || "Internal error";
34 exit $return_code; 38 my $output = join(" ", $STATUS_TEXT{$return_code}, $message);
35 } else { 39 if ($plugin) {
36 return $output; 40 $output = $plugin->shortname." $output" if $plugin->shortname;
37 } 41 $output .= " | ".$plugin->all_perfoutput if $plugin->perfdata;
42 }
43 if ($print_on_die) {
44 print $output, $/;
45 }
46 if ($exit_on_die) {
47 exit $return_code;
48 } else {
49 return $output;
50 }
38} 51}
39 52
401; 531;
diff --git a/lib/Nagios/Plugin/Performance.pm b/lib/Nagios/Plugin/Performance.pm
index 45109ae..2af22bd 100644
--- a/lib/Nagios/Plugin/Performance.pm
+++ b/lib/Nagios/Plugin/Performance.pm
@@ -7,6 +7,9 @@ use warnings;
7 7
8use Carp; 8use Carp;
9use Nagios::Plugin::Threshold; 9use Nagios::Plugin::Threshold;
10use Nagios::Plugin;
11our ($VERSION) = $Nagios::Plugin::VERSION;
12
10use Class::Struct; 13use Class::Struct;
11struct "Nagios::Plugin::Performance" => { 14struct "Nagios::Plugin::Performance" => {
12 label => '$', 15 label => '$',
diff --git a/lib/Nagios/Plugin/Range.pm b/lib/Nagios/Plugin/Range.pm
index c03001a..c0c47e4 100644
--- a/lib/Nagios/Plugin/Range.pm
+++ b/lib/Nagios/Plugin/Range.pm
@@ -4,6 +4,10 @@ use 5.008004;
4 4
5use strict; 5use strict;
6use warnings; 6use warnings;
7use Carp;
8
9use Nagios::Plugin;
10our ($VERSION) = $Nagios::Plugin::VERSION;
7 11
8use overload 12use overload
9 '""' => sub { shift->stringify }; 13 '""' => sub { shift->stringify };
@@ -17,8 +21,8 @@ struct "Nagios::Plugin::Range" => {
17 alert_on => '$', # OUTSIDE 0, INSIDE 1, not defined == range not set 21 alert_on => '$', # OUTSIDE 0, INSIDE 1, not defined == range not set
18 }; 22 };
19 23
20my $outside = 0; 24use constant OUTSIDE => 0;
21my $inside = 1; 25use constant INSIDE => 1;
22 26
23sub stringify { 27sub stringify {
24 my $self = shift; 28 my $self = shift;
@@ -49,22 +53,32 @@ sub set_range_end {
49sub parse_range_string { 53sub parse_range_string {
50 my ($class, $string) = @_; 54 my ($class, $string) = @_;
51 my $valid = 0; 55 my $valid = 0;
52 my $range = $class->new( start => 0, start_infinity => 0, end => 0, end_infinity => 1, alert_on => $outside); 56 my $range = $class->new( start => 0, start_infinity => 0, end => 0, end_infinity => 1, alert_on => OUTSIDE);
57
58 $string =~ s/\s//g; # strip out any whitespace
59 # check for valid range definition
60 unless ( $string =~ /[\d~]/ && $string =~ m/^\@?(-?[\d.]+|~)?(:(-?[\d.]+)?)?$/ ) {
61 carp "invalid range definition '$string'";
62 return undef;
63 }
53 64
54 if ($string =~ s/^\@//) { 65 if ($string =~ s/^\@//) {
55 $range->alert_on($inside); 66 $range->alert_on(INSIDE);
56 } 67 }
57 if ($string =~ s/^~//) { 68
58 $range->start_infinity(1); 69 if ($string =~ s/^~//) { # '~:x'
70 $range->start_infinity(1);
59 } 71 }
60 if (($_) = $string =~ /^([-\d\.]+)?:/) { 72 if ( $string =~ m/^([\d\.-]+)?:/ ) { # '10:'
61 $range->set_range_start($_) if defined $_; 73 my $start = $1;
62 $string =~ s/^([-\d\.]+)?://; 74 $range->set_range_start($start) if defined $start;
63 $valid++ 75 $range->end_infinity(1); # overridden below if there's an end specified
76 $string =~ s/^([-\d\.]+)?://;
77 $valid++;
64 } 78 }
65 if ($string =~ /^([-\d\.]+)$/) { 79 if ($string =~ /^([-\d\.]+)$/) { # 'x:10' or '10'
66 $range->set_range_end($string); 80 $range->set_range_end($string);
67 $valid++; 81 $valid++;
68 } 82 }
69 83
70 if ($valid && ($range->start_infinity == 1 || $range->end_infinity == 1 || $range->start <= $range->end)) { 84 if ($valid && ($range->start_infinity == 1 || $range->end_infinity == 1 || $range->start <= $range->end)) {
@@ -78,7 +92,7 @@ sub check_range {
78 my ($self, $value) = @_; 92 my ($self, $value) = @_;
79 my $false = 0; 93 my $false = 0;
80 my $true = 1; 94 my $true = 1;
81 if ($self->alert_on == $inside) { 95 if ($self->alert_on == INSIDE) {
82 $false = 1; 96 $false = 1;
83 $true = 0; 97 $true = 0;
84 } 98 }
@@ -89,7 +103,7 @@ sub check_range {
89 return $true; 103 return $true;
90 } 104 }
91 } elsif ($self->start_infinity == 0 && $self->end_infinity == 1) { 105 } elsif ($self->start_infinity == 0 && $self->end_infinity == 1) {
92 if ($self->start <= $value) { 106 if ( $value >= $self->start ) {
93 return $false; 107 return $false;
94 } else { 108 } else {
95 return $true; 109 return $true;
diff --git a/lib/Nagios/Plugin/Threshold.pm b/lib/Nagios/Plugin/Threshold.pm
index 1b332b9..494383f 100644
--- a/lib/Nagios/Plugin/Threshold.pm
+++ b/lib/Nagios/Plugin/Threshold.pm
@@ -7,6 +7,8 @@ use warnings;
7 7
8use Nagios::Plugin::Range; 8use Nagios::Plugin::Range;
9use Nagios::Plugin::Base; 9use Nagios::Plugin::Base;
10use Nagios::Plugin;
11our ($VERSION) = $Nagios::Plugin::VERSION;
10 12
11use Class::Struct; 13use Class::Struct;
12struct "Nagios::Plugin::Threshold" => { 14struct "Nagios::Plugin::Threshold" => {
@@ -44,6 +46,7 @@ sub set_thresholds {
44 46
45sub get_status { 47sub get_status {
46 my ($self, $value) = @_; 48 my ($self, $value) = @_;
49
47 if ($self->critical->is_set) { 50 if ($self->critical->is_set) {
48 if ($self->critical->check_range($value) == 1) { 51 if ($self->critical->check_range($value) == 1) {
49 return $ERRORS{CRITICAL}; 52 return $ERRORS{CRITICAL};
@@ -54,6 +57,7 @@ sub get_status {
54 return $ERRORS{WARNING}; 57 return $ERRORS{WARNING};
55 } 58 }
56 } 59 }
60 return $ERRORS{OK};
57} 61}
58 62
591; 631;
diff --git a/t/Nagios-Plugin-Performance.t b/t/Nagios-Plugin-Performance.t
index b10a988..0f52de1 100644
--- a/t/Nagios-Plugin-Performance.t
+++ b/t/Nagios-Plugin-Performance.t
@@ -3,6 +3,8 @@ use strict;
3use Test::More tests => 49; 3use Test::More tests => 49;
4BEGIN { use_ok('Nagios::Plugin::Performance') }; 4BEGIN { use_ok('Nagios::Plugin::Performance') };
5 5
6diag "\nusing Nagios::Plugin::Performance revision ". $Nagios::Plugin::Performance::VERSION . "\n";
7
6use Nagios::Plugin::Base; 8use Nagios::Plugin::Base;
7Nagios::Plugin::Base->exit_on_die(0); 9Nagios::Plugin::Base->exit_on_die(0);
8 10
@@ -27,13 +29,16 @@ cmp_ok( $p[1]->threshold->critical->end, "==", 9448, "crit okay");
27ok( ! @p, "Errors correctly"); 29ok( ! @p, "Errors correctly");
28ok( ! Nagios::Plugin::Performance->parse_perfstring(""), "Errors on empty string"); 30ok( ! Nagios::Plugin::Performance->parse_perfstring(""), "Errors on empty string");
29 31
32
30@p = Nagios::Plugin::Performance->parse_perfstring( 33@p = Nagios::Plugin::Performance->parse_perfstring(
31 "time=0.001229s;0.000000;0.000000;0.000000;10.000000"); 34 "time=0.001229s;0.000000;0.000000;0.000000;10.000000");
32cmp_ok( $p[0]->label, "eq", "time", "label okay"); 35cmp_ok( $p[0]->label, "eq", "time", "label okay");
33cmp_ok( $p[0]->value, "==", 0.001229, "value okay"); 36cmp_ok( $p[0]->value, "==", 0.001229, "value okay");
34cmp_ok( $p[0]->uom, "eq", "s", "uom okay"); 37cmp_ok( $p[0]->uom, "eq", "s", "uom okay");
35cmp_ok( $p[0]->threshold->warning, "eq", "0", "warn okay"); 38 ok( $p[0]->threshold->warning->is_set, "warn okay");
36cmp_ok( $p[0]->threshold->critical, "eq", "0", "crit okay"); 39 ok( $p[0]->threshold->critical->is_set, "crit okay");
40
41
37 42
38@p = Nagios::Plugin::Performance->parse_perfstring( 43@p = Nagios::Plugin::Performance->parse_perfstring(
39 "load1=0.000;5.000;9.000;0; load5=0.000;5.000;9.000;0; load15=0.000;5.000;9.000;0;"); 44 "load1=0.000;5.000;9.000;0; load5=0.000;5.000;9.000;0; load15=0.000;5.000;9.000;0;");
diff --git a/t/Nagios-Plugin-Range.t b/t/Nagios-Plugin-Range.t
index 13667de..f01518d 100644
--- a/t/Nagios-Plugin-Range.t
+++ b/t/Nagios-Plugin-Range.t
@@ -1,10 +1,32 @@
1 1
2use strict; 2use strict;
3use Test::More tests => 60; 3use Test::More qw(no_plan); #tests => 123;
4
4BEGIN { use_ok('Nagios::Plugin::Range') }; 5BEGIN { use_ok('Nagios::Plugin::Range') };
5 6
7diag "\nusing Nagios::Plugin::Range revision ". $Nagios::Plugin::Range::VERSION . "\n";
8
9my $r;
10
11diag "'garbage in' checks -- you should see 7 invalid range definition warnings here:";
12
13foreach (qw(
14 :
15 1:~
16 foo
17 1-10
18 10:~
19 1-10:2.4
20
21), '1,10' # avoid warning about using , inside qw()
22) {
23 $r =Nagios::Plugin::Range->parse_range_string($_);
24 is $r, undef, "'$_' should not be a valid range" ;
25}
26
6 27
7my $r = Nagios::Plugin::Range->parse_range_string("6"); 28diag "range: 0..6 inclusive" if $ENV{TEST_VERBOSE};
29$r = Nagios::Plugin::Range->parse_range_string("6");
8isa_ok( $r, "Nagios::Plugin::Range"); 30isa_ok( $r, "Nagios::Plugin::Range");
9ok( defined $r, "'6' is valid range"); 31ok( defined $r, "'6' is valid range");
10cmp_ok( $r->start, '==', 0, "Start correct"); 32cmp_ok( $r->start, '==', 0, "Start correct");
@@ -13,6 +35,27 @@ cmp_ok( $r->end, '==', 6, "End correct");
13cmp_ok( $r->end_infinity, '==', 0, "Not using positive infinity"); 35cmp_ok( $r->end_infinity, '==', 0, "Not using positive infinity");
14cmp_ok( $r, 'eq', "6", "Stringification back to original"); 36cmp_ok( $r, 'eq', "6", "Stringification back to original");
15 37
38my $expected = {
39 -1 => 1, # 1 means it raises an alert because it's OUTSIDE the range
40 0 => 0, # 0 means it's inside the range (no alert)
41 4 => 0,
42 6 => 0,
43 6.1 => 1,
44 79.999999 => 1,
45};
46
47sub test_expected {
48 my $r = shift;
49 my $expected = shift;
50 foreach (sort {$a<=>$b} keys %$expected) {
51 is $r->check_range($_), $expected->{$_},
52 " $_ should " . ($expected->{$_} ? 'not ' : '') . "be in the range (line ".(caller)[2].")";
53 }
54}
55
56test_expected( $r, $expected );
57
58diag "range : -7..23, inclusive" if $ENV{TEST_VERBOSE};
16$r = Nagios::Plugin::Range->parse_range_string("-7:23"); 59$r = Nagios::Plugin::Range->parse_range_string("-7:23");
17ok( defined $r, "'-7:23' is valid range"); 60ok( defined $r, "'-7:23' is valid range");
18cmp_ok( $r->start, '==', -7, "Start correct"); 61cmp_ok( $r->start, '==', -7, "Start correct");
@@ -21,6 +64,20 @@ cmp_ok( $r->end, '==', 23, "End correct");
21cmp_ok( $r->end_infinity, '==', 0, "Not using positive infinity"); 64cmp_ok( $r->end_infinity, '==', 0, "Not using positive infinity");
22cmp_ok( $r, 'eq', "-7:23", "Stringification back to original"); 65cmp_ok( $r, 'eq', "-7:23", "Stringification back to original");
23 66
67$expected = {
68 -23 => 1,
69 -7 => 0,
70 -1 => 0,
71 0 => 0,
72 4 => 0,
73 23 => 0,
74 23.1 => 1,
75 79.999999 => 1,
76};
77test_expected( $r, $expected );
78
79
80diag "range : 0..5.75, inclusive" if $ENV{TEST_VERBOSE};
24$r = Nagios::Plugin::Range->parse_range_string(":5.75"); 81$r = Nagios::Plugin::Range->parse_range_string(":5.75");
25ok( defined $r, "':5.75' is valid range"); 82ok( defined $r, "':5.75' is valid range");
26cmp_ok( $r->start, '==', 0, "Start correct"); 83cmp_ok( $r->start, '==', 0, "Start correct");
@@ -28,21 +85,81 @@ cmp_ok( $r->start_infinity, '==', 0, "Not using negative infinity");
28cmp_ok( $r->end, '==', 5.75, "End correct"); 85cmp_ok( $r->end, '==', 5.75, "End correct");
29cmp_ok( $r->end_infinity, '==', 0, "Not using positive infinity"); 86cmp_ok( $r->end_infinity, '==', 0, "Not using positive infinity");
30cmp_ok( $r, 'eq', "5.75", "Stringification to simplification"); 87cmp_ok( $r, 'eq', "5.75", "Stringification to simplification");
88$expected = {
89 -1 => 1,
90 0 => 0,
91 4 => 0,
92 5.75 => 0,
93 5.7501 => 1,
94 6 => 1,
95 6.1 => 1,
96 79.999999 => 1,
97};
98test_expected( $r, $expected );
31 99
100
101
102diag "range : negative infinity .. -95.99, inclusive" if $ENV{TEST_VERBOSE};
32$r = Nagios::Plugin::Range->parse_range_string("~:-95.99"); 103$r = Nagios::Plugin::Range->parse_range_string("~:-95.99");
33ok( defined $r, "'~:-95.99' is valid range"); 104ok( defined $r, "'~:-95.99' is valid range");
34cmp_ok( $r->start_infinity, '==', 1, "Using negative infinity"); 105cmp_ok( $r->start_infinity, '==', 1, "Using negative infinity");
35cmp_ok( $r->end, '==', -95.99, "End correct"); 106cmp_ok( $r->end, '==', -95.99, "End correct");
36cmp_ok( $r->end_infinity, '==', 0, "Not using positive infinity"); 107cmp_ok( $r->end_infinity, '==', 0, "Not using positive infinity");
37cmp_ok( $r, 'eq', "~:-95.99", "Stringification back to original"); 108cmp_ok( $r, 'eq', "~:-95.99", "Stringification back to original");
109$expected = {
110 -1001341 => 0,
111 -96 => 0,
112 -95.999 => 0,
113 -95.99 => 0,
114 -95.989 => 1,
115 -95 => 1,
116 0 => 1,
117 5.7501 => 1,
118 79.999999 => 1,
119};
120test_expected( $r, $expected );
121
122diag "range 10..infinity , inclusive" if $ENV{TEST_VERBOSE};
123test_expected( $r, $expected );
124$r = Nagios::Plugin::Range->parse_range_string("10:");
125ok( defined $r, "'10:' is valid range");
126cmp_ok( $r->start, '==', 10, "Start correct");
127cmp_ok( $r->start_infinity, '==', 0, "Not using negative infinity");
128cmp_ok( $r->end_infinity, '==', 1, "Using positive infinity");
129cmp_ok( $r, 'eq', "10:", "Stringification back to original");
130$expected = {
131 -95.999 => 1,
132 -1 => 1,
133 0 => 1,
134 9.91 => 1,
135 10 => 0,
136 11.1 => 0,
137 123456789012346 => 0,
138};
139test_expected( $r, $expected );
140
38 141
142
143diag "range 123456789012345..infinity , inclusive" if $ENV{TEST_VERBOSE};
144test_expected( $r, $expected );
39$r = Nagios::Plugin::Range->parse_range_string("123456789012345:"); 145$r = Nagios::Plugin::Range->parse_range_string("123456789012345:");
40ok( defined $r, "'123456789012345:' is valid range"); 146ok( defined $r, "'123456789012345:' is valid range");
41cmp_ok( $r->start, '==', 123456789012345, "Start correct"); 147cmp_ok( $r->start, '==', 123456789012345, "Start correct");
42cmp_ok( $r->start_infinity, '==', 0, "Not using negative infinity"); 148cmp_ok( $r->start_infinity, '==', 0, "Not using negative infinity");
43cmp_ok( $r->end_infinity, '==', 1, "Using positive infinity"); 149cmp_ok( $r->end_infinity, '==', 1, "Using positive infinity");
44cmp_ok( $r, 'eq', "123456789012345:", "Stringification back to original"); 150cmp_ok( $r, 'eq', "123456789012345:", "Stringification back to original");
151$expected = {
152 -95.999 => 1,
153 -1 => 1,
154 0 => 1,
155 123456789012344.91 => 1,
156 123456789012345 => 0,
157 123456789012346 => 0,
158};
159test_expected( $r, $expected );
160
45 161
162diag "range: <= zero " if $ENV{TEST_VERBOSE};
46$r = Nagios::Plugin::Range->parse_range_string("~:0"); 163$r = Nagios::Plugin::Range->parse_range_string("~:0");
47ok( defined $r, "'~:0' is valid range"); 164ok( defined $r, "'~:0' is valid range");
48cmp_ok( $r->start_infinity, '==', 1, "Using negative infinity"); 165cmp_ok( $r->start_infinity, '==', 1, "Using negative infinity");
@@ -53,7 +170,17 @@ cmp_ok( $r, 'eq', "~:0", "Stringification back to original");
53ok( $r->check_range(0.5) == 1, "0.5 - alert"); 170ok( $r->check_range(0.5) == 1, "0.5 - alert");
54ok( $r->check_range(-10) == 0, "-10 - no alert"); 171ok( $r->check_range(-10) == 0, "-10 - no alert");
55ok( $r->check_range(0) == 0, "0 - no alert"); 172ok( $r->check_range(0) == 0, "0 - no alert");
173$expected = {
174 -123456789012344.91 => 0,
175 -1 => 0,
176 0 => 0,
177 .001 => 1,
178 123456789012345 => 1,
179};
180test_expected( $r, $expected );
181
56 182
183diag "range: OUTSIDE 0..657.8210567" if $ENV{TEST_VERBOSE};
57$r = Nagios::Plugin::Range->parse_range_string('@0:657.8210567'); 184$r = Nagios::Plugin::Range->parse_range_string('@0:657.8210567');
58ok( defined $r, '"@0:657.8210567" is a valid range'); 185ok( defined $r, '"@0:657.8210567" is a valid range');
59cmp_ok( $r->start, '==', 0, "Start correct"); 186cmp_ok( $r->start, '==', 0, "Start correct");
@@ -66,7 +193,19 @@ ok( $r->check_range(32.88) == 1, "32.88 - alert");
66ok( $r->check_range(-2) == 0, "-2 - no alert"); 193ok( $r->check_range(-2) == 0, "-2 - no alert");
67ok( $r->check_range(657.8210567) == 1, "657.8210567 - alert"); 194ok( $r->check_range(657.8210567) == 1, "657.8210567 - alert");
68ok( $r->check_range(0) == 1, "0 - alert"); 195ok( $r->check_range(0) == 1, "0 - alert");
196$expected = {
197 -134151 => 0,
198 -1 => 0,
199 0 => 1,
200 .001 => 1,
201 657.8210567 => 1,
202 657.9 => 0,
203 123456789012345 => 0,
204};
205test_expected( $r, $expected );
69 206
207
208diag "range: 1..1 inclusive (equals one)" if $ENV{TEST_VERBOSE};
70$r = Nagios::Plugin::Range->parse_range_string('1:1'); 209$r = Nagios::Plugin::Range->parse_range_string('1:1');
71ok( defined $r, '"1:1" is a valid range'); 210ok( defined $r, '"1:1" is a valid range');
72cmp_ok( $r->start, '==', 1, "Start correct"); 211cmp_ok( $r->start, '==', 1, "Start correct");
@@ -77,6 +216,16 @@ cmp_ok( $r, 'eq', "1:1", "Stringification to simplified version");
77ok( $r->check_range(0.5) == 1, "0.5 - alert"); 216ok( $r->check_range(0.5) == 1, "0.5 - alert");
78ok( $r->check_range(1) == 0, "1 - no alert"); 217ok( $r->check_range(1) == 0, "1 - no alert");
79ok( $r->check_range(5.2) == 1, "5.2 - alert"); 218ok( $r->check_range(5.2) == 1, "5.2 - alert");
219$expected = {
220 -1 => 1,
221 0 => 1,
222 .5 => 1,
223 1 => 0,
224 1.001 => 1,
225 5.2 => 1,
226};
227test_expected( $r, $expected );
228
80 229
81$r = Nagios::Plugin::Range->parse_range_string('2:1'); 230$r = Nagios::Plugin::Range->parse_range_string('2:1');
82ok( ! defined $r, '"2:1" is rejected'); 231ok( ! defined $r, '"2:1" is rejected');
diff --git a/t/Nagios-Plugin-Threshold.t b/t/Nagios-Plugin-Threshold.t
index 97d4fcc..bb8b578 100644
--- a/t/Nagios-Plugin-Threshold.t
+++ b/t/Nagios-Plugin-Threshold.t
@@ -1,32 +1,162 @@
1 1
2use strict; 2use strict;
3use Test::More tests => 18; 3use Test::More tests => 71;
4#use Test::Exception; # broken for now so we don't need this.
4BEGIN { use_ok('Nagios::Plugin::Threshold'); use_ok('Nagios::Plugin::Base') }; 5BEGIN { use_ok('Nagios::Plugin::Threshold'); use_ok('Nagios::Plugin::Base') };
5 6
7diag "\nusing Nagios::Plugin::Threshold revision ". $Nagios::Plugin::Threshold::VERSION . "\n";
8
6Nagios::Plugin::Base->exit_on_die(0); 9Nagios::Plugin::Base->exit_on_die(0);
7Nagios::Plugin::Base->print_on_die(0); 10Nagios::Plugin::Base->print_on_die(0);
11my %STATUS_TEXT = reverse %ERRORS;
8 12
13diag "threshold: critical if > 80" if $ENV{TEST_VERBOSE};
9my $t = Nagios::Plugin::Threshold->set_thresholds(critical => "80"); 14my $t = Nagios::Plugin::Threshold->set_thresholds(critical => "80");
10ok( defined $t, "Threshold ('', '80') set"); 15ok( defined $t, "Threshold ('', '80') set");
11ok( ! $t->warning->is_set, "Warning not set"); 16ok( ! $t->warning->is_set, "Warning not set");
12cmp_ok( $t->critical->end, '==', 80, "Critical set correctly"); 17cmp_ok( $t->critical->start, '==', 0, "Critical strat set correctly");
18cmp_ok( $t->critical->end, '==', 80, "Critical end set correctly");
19ok ! $t->critical->end_infinity, "not forever";
20
21my $expected = { qw(
22 -1 CRITICAL
23 4 OK
24 79.999999 OK
25 80 OK
26 80.1 CRITICAL
27 102321 CRITICAL
28) };
29
30sub test_expected_statuses {
31 my $t = shift;
32 my $expected = shift;
33 my $debug = shift;
13 34
35 foreach (sort {$a<=>$b} keys %$expected) {
36 is $STATUS_TEXT{$t->get_status($_)}, $expected->{$_}, " $_ - $expected->{$_}";
37 if ($debug) {
38 diag "val = $_; critical check = ".$t->critical->check_range($_).
39 "; warning check = ".$t->warning->check_range($_);
40 }
41 }
42 use Data::Dumper;
43 diag "thresh dump: ". Dumper $t if $debug;
44}
45test_expected_statuses( $t, $expected );
46
47diag "threshold: warn if less than 5 or more than 33." if $ENV{TEST_VERBOSE};
14$t = Nagios::Plugin::Threshold->set_thresholds(warning => "5:33", critical => ""); 48$t = Nagios::Plugin::Threshold->set_thresholds(warning => "5:33", critical => "");
15ok( defined $t, "Threshold ('5:33', '') set"); 49ok( defined $t, "Threshold ('5:33', '') set");
16cmp_ok( $t->warning->start, '==', 5, "Warning start set"); 50cmp_ok( $t->warning->start, '==', 5, "Warning start set");
17cmp_ok( $t->warning->end, '==', 33, "Warning end set"); 51cmp_ok( $t->warning->end, '==', 33, "Warning end set");
18ok( ! $t->critical->is_set, "Critical not set"); 52ok( ! $t->critical->is_set, "Critical not set");
19 53
20$t = Nagios::Plugin::Threshold->set_thresholds(warning => "30", critical => "60"); 54$expected = { qw(
21ok( defined $t, "Threshold ('30', '60') set"); 55 -1 WARNING
56 4 WARNING
57 4.999999 WARNING
58 5 OK
59 14.21 OK
60 33 OK
61 33.01 WARNING
62 10231 WARNING
63) };
64test_expected_statuses( $t, $expected );
65
66diag "threshold: warn if more than 30; critical if > 60" if $ENV{TEST_VERBOSE};
67$t = Nagios::Plugin::Threshold->set_thresholds(warning => "~:30", critical => "~:60");
68ok( defined $t, "Threshold ('~:30', '~:60') set");
22cmp_ok( $t->warning->end, '==', 30, "Warning end set"); 69cmp_ok( $t->warning->end, '==', 30, "Warning end set");
23cmp_ok( $t->critical->end, '==',60, "Critical end set"); 70cmp_ok( $t->critical->end, '==',60, "Critical end set");
24cmp_ok( $t->get_status(15.3), '==', $ERRORS{OK}, "15.3 - ok"); 71ok $t->critical->start_infinity, "Critical starts at negative infinity";
25cmp_ok( $t->get_status(30.0001), '==', $ERRORS{WARNING}, "30.0001 - warning");
26cmp_ok( $t->get_status(69), '==', $ERRORS{CRITICAL}, "69 - critical");
27 72
28$t = Nagios::Plugin::Threshold->set_thresholds(warning => "total", critical => "rubbish"); 73$expected = { qw(
29ok( defined $t, "Threshold object created although ..."); 74 -1 OK
75 4 OK
76 29.999999 OK
77 30 OK
78 30.1 WARNING
79 50.90 WARNING
80 59.9 WARNING
81 60 WARNING
82 60.00001 CRITICAL
83 10231 CRITICAL
84) };
85test_expected_statuses( $t, $expected );
86
87
88# "I'm going to die homeless, penniless, and 30 pounds overweight."
89# "...and that's...okay."
90
91# TODO: figure out why this doesn't work and fix the test.
92goto SKIP_DEATH;
93diag "threshold: test pure crap for arguments - default to OK." if $ENV{TEST_VERBOSE};
94diag "you should see one invalid range definition warning and an UNKNOWN line here:\n";
95Nagios::Plugin::Base->print_on_die(1);
96Nagios::Plugin::Base->exit_on_die(1);
97
98dies_ok( sub {
99 $t = Nagios::Plugin::Threshold->set_thresholds(
100 warning => "total",
101 critical => "rubbish"
102 )
103 }, "bad thresholds cause death"
104);
105Nagios::Plugin::Base->print_on_die(0);
106Nagios::Plugin::Base->exit_on_die(0);
107SKIP_DEATH:
108
109
110diag "threshold: critical if > 25 " if $ENV{TEST_VERBOSE};
111$t = Nagios::Plugin::Threshold->set_thresholds( critical => "~:25" );
112ok( defined $t, "Threshold ('', '~:25') set (".$t->critical->stringify().")" );
30ok( ! $t->warning->is_set, "Warning not set"); 113ok( ! $t->warning->is_set, "Warning not set");
31ok( ! $t->critical->is_set, "Critical not set"); 114cmp_ok( $t->critical->end, '==',25, "Critical end set");
115ok $t->critical->start_infinity, "Critical starts at negative infinity";
116
117$expected = { qw(
118 -1 OK
119 4 OK
120 10 OK
121 14.21 OK
122 25 OK
123 25.01 CRITICAL
124 31001 CRITICAL
125) };
126test_expected_statuses( $t, $expected);
127
128diag "threshold: warn if OUTSIDE {10..25} , critical if > 25 " if $ENV{TEST_VERBOSE};
129$t = Nagios::Plugin::Threshold->set_thresholds(warning => "10:25", critical => "~:25");
130ok( defined $t, "Threshold ('10:25', '~:25') set");
131cmp_ok( $t->warning->start, '==', 10, "Warning start set");
132cmp_ok( $t->warning->end, '==', 25, "Warning end set");
133cmp_ok( $t->critical->end, '==', 25, "Critical end set");
134
135$expected = { qw(
136 -1 WARNING
137 4 WARNING
138 9.999999 WARNING
139 10 OK
140 14.21 OK
141 25 OK
142 25.01 CRITICAL
143 31001 CRITICAL
144) };
145test_expected_statuses( $t, $expected );
146
147
148diag "warn if INSIDE {10..25} , critical if < 10 " if $ENV{TEST_VERBOSE};
149$t = Nagios::Plugin::Threshold->set_thresholds(warning => "\@10:25", critical => "10:");
150$expected = { qw(
151 -1 CRITICAL
152 4 CRITICAL
153 9.999999 CRITICAL
154 10 WARNING
155 14.21 WARNING
156 25 WARNING
157 25.01 OK
158 31001 OK
159) };
160test_expected_statuses( $t, $expected );
32 161
162ok 1, "sweet, made it to the end.";
diff --git a/t/Nagios-Plugin.t b/t/Nagios-Plugin.t
index 38e792d..ed25aca 100644
--- a/t/Nagios-Plugin.t
+++ b/t/Nagios-Plugin.t
@@ -1,18 +1,22 @@
1 1
2use strict; 2use strict;
3use Test::More tests => 5; 3use Test::More tests => 9;
4
4BEGIN { use_ok('Nagios::Plugin') }; 5BEGIN { use_ok('Nagios::Plugin') };
5 6
6use Nagios::Plugin::Base; 7use Nagios::Plugin::Base;
7Nagios::Plugin::Base->exit_on_die(0); 8Nagios::Plugin::Base->exit_on_die(0);
8Nagios::Plugin::Base->print_on_die(0); 9Nagios::Plugin::Base->print_on_die(0);
9 10
11diag "\nusing Nagios::Plugin revision ". $Nagios::Plugin::VERSION . "\n";
12
10my $p = Nagios::Plugin->new; 13my $p = Nagios::Plugin->new;
11isa_ok( $p, "Nagios::Plugin"); 14isa_ok( $p, "Nagios::Plugin");
12 15
13$p->shortname("PAGESIZE"); 16$p->shortname("PAGESIZE");
14 17
15my $t = $p->set_thresholds( warning => "10:25", critical => "25:" ); 18diag "warn if < 10, critical if > 25 " if $ENV{TEST_VERBOSE};
19my $t = $p->set_thresholds( warning => "10:25", critical => "~:25" );
16 20
17$p->add_perfdata( 21$p->add_perfdata(
18 label => "size", 22 label => "size",
@@ -21,12 +25,20 @@ $p->add_perfdata(
21 threshold => $t, 25 threshold => $t,
22 ); 26 );
23 27
24cmp_ok( $p->all_perfoutput, 'eq', "size=1kB;10:25;25:", "Perfdata correct"); 28cmp_ok( $p->all_perfoutput, 'eq', "size=1kB;10:25;~:25", "Perfdata correct");
25 29
26my $o = $p->die( return_code => $t->get_status(1), message => "page size at http://... was 1kB" ); 30my $expected = {qw(
27cmp_ok( $o, "eq", 'PAGESIZE CRITICAL page size at http://... was 1kB | size=1kB;10:25;25:', "Output okay"); 31 -1 WARNING
28 32 1 WARNING
29cmp_ok( $p->die( return_code => $t->get_status(30), message => "page size at http://... was 30kB" ), 33 20 OK
30 "eq", 'PAGESIZE WARNING page size at http://... was 30kB | size=1kB;10:25;25:', "Output okay"); 34 25 OK
31 35 26 CRITICAL
36 30 CRITICAL
37 )};
38
39foreach (sort {$a<=>$b} keys %$expected) {
40 like $p->die( return_code => $t->get_status($_), message => "page size at http://... was ${_}kB" ),
41 qr/$expected->{$_}/,
42 "Output okay. $_ = $expected->{$_}" ;
43}
32 44