1 #! /usr/bin/perl -w -I ..
2 #
3 # Ping Response Tests via check_icmp
4 #
5 # $Id$
6 #
8 use strict;
9 use Test::More;
10 use NPTest;
12 my $allow_sudo = getTestParameter( "NP_ALLOW_SUDO",
13 "If sudo is setup for this user to run any command as root ('yes' to allow)",
14 "no" );
16 if ($allow_sudo eq "yes") {
17 plan tests => 10;
18 } else {
19 plan skip_all => "Need sudo to test check_icmp";
20 }
22 my $successOutput = '/OK - .*?: rta [\d\.]+ms, lost \d%/';
23 my $failureOutput = '/(WARNING|CRITICAL) - .*?: rta [\d\.]+ms, lost \d%/';
25 my $host_responsive = getTestParameter( "NP_HOST_RESPONSIVE",
26 "The hostname of system responsive to network requests",
27 "localhost" );
29 my $host_nonresponsive = getTestParameter( "NP_HOST_NONRESPONSIVE",
30 "The hostname of system not responsive to network requests",
31 "10.0.0.1" );
33 my $hostname_invalid = getTestParameter( "NP_HOSTNAME_INVALID",
34 "An invalid (not known to DNS) hostname",
35 "nosuchhost" );
37 my $res;
39 $res = NPTest->testCmd(
40 "sudo ./check_icmp -H $host_responsive -w 10000ms,100% -c 10000ms,100%"
41 );
42 is( $res->return_code, 0, "Syntax ok" );
43 like( $res->output, $successOutput, "Output OK" );
45 $res = NPTest->testCmd(
46 "sudo ./check_icmp -H $host_responsive -w 0ms,0% -c 10000ms,100%"
47 );
48 is( $res->return_code, 1, "Syntax ok, with forced warning" );
49 like( $res->output, $failureOutput, "Output OK" );
51 $res = NPTest->testCmd(
52 "sudo ./check_icmp -H $host_responsive -w 0,0% -c 0,0%"
53 );
54 is( $res->return_code, 2, "Syntax ok, with forced critical" );
55 like( $res->output, $failureOutput, "Output OK" );
57 $res = NPTest->testCmd(
58 "sudo ./check_icmp -H $host_nonresponsive -w 10000ms,100% -c 10000ms,100%"
59 );
60 is( $res->return_code, 2, "Timeout - host nonresponsive" );
61 like( $res->output, '/100%/', "Error contains '100%' string (for 100% packet loss)" );
63 $res = NPTest->testCmd(
64 "sudo ./check_icmp -w 10000ms,100% -c 10000ms,100%"
65 );
66 is( $res->return_code, 3, "No hostname" );
67 like( $res->output, '/No hosts to check/', "Output with appropriate error message");