diff options
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/check_ping.c | 7 | ||||
-rw-r--r-- | plugins/t/check_ping.t | 30 |
2 files changed, 34 insertions, 3 deletions
diff --git a/plugins/check_ping.c b/plugins/check_ping.c index 9ddc252..211f74e 100644 --- a/plugins/check_ping.c +++ b/plugins/check_ping.c | |||
@@ -103,8 +103,13 @@ main (int argc, char **argv) | |||
103 | usage4 (_("Cannot catch SIGALRM")); | 103 | usage4 (_("Cannot catch SIGALRM")); |
104 | } | 104 | } |
105 | 105 | ||
106 | /* handle timeouts gracefully */ | 106 | /* If ./configure finds ping has timeout values, set plugin alarm slightly |
107 | * higher so that we can use response from command line ping */ | ||
108 | #ifdef PING_PACKETS_FIRST && PING_HAS_TIMEOUT | ||
107 | alarm (timeout_interval + 1); | 109 | alarm (timeout_interval + 1); |
110 | #else | ||
111 | alarm (timeout_interval); | ||
112 | #endif | ||
108 | 113 | ||
109 | for (i = 0 ; i < n_addresses ; i++) { | 114 | for (i = 0 ; i < n_addresses ; i++) { |
110 | 115 | ||
diff --git a/plugins/t/check_ping.t b/plugins/t/check_ping.t index b8323a0..c9a0904 100644 --- a/plugins/t/check_ping.t +++ b/plugins/t/check_ping.t | |||
@@ -9,7 +9,7 @@ use strict; | |||
9 | use Test::More; | 9 | use Test::More; |
10 | use NPTest; | 10 | use NPTest; |
11 | 11 | ||
12 | plan tests => 18; | 12 | plan tests => 20; |
13 | 13 | ||
14 | my $successOutput = '/PING (ok|OK) - Packet loss = +[0-9]{1,2}\%, +RTA = [\.0-9]+ ms/'; | 14 | my $successOutput = '/PING (ok|OK) - Packet loss = +[0-9]{1,2}\%, +RTA = [\.0-9]+ ms/'; |
15 | my $failureOutput = '/Packet loss = +[0-9]{1,2}\%, +RTA = [\.0-9]+ ms/'; | 15 | my $failureOutput = '/Packet loss = +[0-9]{1,2}\%, +RTA = [\.0-9]+ ms/'; |
@@ -58,12 +58,38 @@ $res = NPTest->testCmd( | |||
58 | is( $res->return_code, 2, "Old syntax, with forced critical" ); | 58 | is( $res->return_code, 2, "Old syntax, with forced critical" ); |
59 | like( $res->output, $failureOutput, "Output OK" ); | 59 | like( $res->output, $failureOutput, "Output OK" ); |
60 | 60 | ||
61 | |||
62 | # check_ping results will depend on whether the ping command discovered by | ||
63 | # ./configure has a timeout option. If it does, then the timeout will | ||
64 | # be set, so check_ping will always get a response. If it doesn't | ||
65 | # then check_ping will timeout. We do 2 tests for check_ping's timeout | ||
66 | # - 1 second | ||
67 | # - 15 seconds | ||
68 | # The latter should be higher than normal ping timeouts, so should always give a packet loss result | ||
69 | open(F, "../config.h") or die "Cannot open ../config.h"; | ||
70 | @_ = grep /define PING_HAS_TIMEOUT 1|define PING_PACKETS_FIRST 1/, <F>; | ||
71 | my $has_timeout; | ||
72 | $has_timeout = 1 if (scalar @_ == 2); # Need both defined | ||
73 | close F; | ||
61 | $res = NPTest->testCmd( | 74 | $res = NPTest->testCmd( |
62 | "./check_ping -H $host_nonresponsive -w 10,100% -c 10,100% -p 1 -t 1" | 75 | "./check_ping -H $host_nonresponsive -w 10,100% -c 10,100% -p 1 -t 1" |
63 | ); | 76 | ); |
64 | is( $res->return_code, 2, "Timeout - host nonresponsive" ); | 77 | is( $res->return_code, 2, "Timeout 1 second - host nonresponsive" ); |
78 | if ($has_timeout) { | ||
79 | like( $res->output, '/100%/', "Error contains '100%' string (for 100% packet loss)" ); | ||
80 | } else { | ||
81 | like( $res->output, '/timed out/', "Error contains 'timed out' string" ); | ||
82 | } | ||
83 | |||
84 | $res = NPTest->testCmd( | ||
85 | "./check_ping -H $host_nonresponsive -w 10,100% -c 10,100% -p 1 -t 15" | ||
86 | ); | ||
87 | is( $res->return_code, 2, "Timeout 15 seconds - host nonresponsive" ); | ||
65 | like( $res->output, '/100%/', "Error contains '100%' string (for 100% packet loss)" ); | 88 | like( $res->output, '/100%/', "Error contains '100%' string (for 100% packet loss)" ); |
66 | 89 | ||
90 | |||
91 | |||
92 | |||
67 | $res = NPTest->testCmd( | 93 | $res = NPTest->testCmd( |
68 | "./check_ping $host_nonresponsive -p 1 -t 1 100 100 1000 10000" | 94 | "./check_ping $host_nonresponsive -p 1 -t 1 100 100 1000 10000" |
69 | ); | 95 | ); |