Merge pull request #2044 from RincewindsHat/fix/fedora-rpm-build
[monitoring-plugins.git] / plugins / t / check_tcp.t
blobcb4de53df1997562bf894e2560d12ce3260330df
1 #! /usr/bin/perl -w -I ..
3 # TCP Connection Based Tests via check_tcp
7 use strict;
8 use Test;
10 use vars qw($tests $has_ipv6);
11 BEGIN {
12 use NPTest;
13 $has_ipv6 = NPTest::has_ipv6();
14 $tests = $has_ipv6 ? 14 : 11;
18 my $host_tcp_http = getTestParameter("NP_HOST_TCP_HTTP", "A host providing the HTTP Service (a web server)", "localhost");
19 my $host_tls_http = getTestParameter("NP_HOST_TLS_HTTP", "A host providing the HTTPS Service (a tls web server)", "localhost");
20 my $host_nonresponsive = getTestParameter("NP_HOST_NONRESPONSIVE", "The hostname of system not responsive to network requests", "10.0.0.1");
21 my $hostname_invalid = getTestParameter("NP_HOSTNAME_INVALID", "An invalid (not known to DNS) hostname", "nosuchhost");
22 my $internet_access = getTestParameter("NP_INTERNET_ACCESS", "Is this system directly connected to the internet?", "yes");
24 my $successOutput = '/^TCP OK\s-\s+[0-9]?\.?[0-9]+ second response time on port [0-9]+/';
26 my $failedExpect = '/^TCP WARNING\s-\sUnexpected response from host/socket on port [0-9]+/';
28 my $t;
30 $tests = $tests - 4 if $internet_access eq "no";
31 plan tests => $tests;
33 $t += checkCmd( "./check_tcp $host_tcp_http -p 80 -wt 300 -ct 600", 0, $successOutput );
34 $t += checkCmd( "./check_tcp $host_tcp_http -p 81 -wt 0 -ct 0 -to 1", 2 ); # use invalid port for this test
35 $t += checkCmd( "./check_tcp $host_nonresponsive -p 80 -wt 0 -ct 0 -to 1", 2 );
36 $t += checkCmd( "./check_tcp $hostname_invalid -p 80 -wt 0 -ct 0 -to 1", 2 );
37 if($internet_access ne "no") {
38 $t += checkCmd( "./check_tcp -S -D 1 -H $host_tls_http -p 443", 0 );
39 $t += checkCmd( "./check_tcp -S -D 9000,1 -H $host_tls_http -p 443", 1 );
40 $t += checkCmd( "./check_tcp -S -D 9000 -H $host_tls_http -p 443", 1 );
41 $t += checkCmd( "./check_tcp -S -D 9000,8999 -H $host_tls_http -p 443", 2 );
44 # Need the \r\n to make it more standards compliant with web servers. Need the various quotes
45 # so that perl doesn't interpret the \r\n and is passed onto command line correctly
46 $t += checkCmd( "./check_tcp $host_tcp_http -p 80 -E -s ".'"GET / HTTP/1.1\r\n\r\n"'." -e 'ThisShouldntMatch' -j", 1, $failedExpect );
48 # IPv6 checks
49 if($has_ipv6) {
50 $t += checkCmd( "./check_tcp $host_tcp_http -p 80 -wt 300 -ct 600 -6 ", 0, $successOutput );
51 $t += checkCmd( "./check_tcp -6 -p 80 www.heise.de", 0 );
54 exit(0) if defined($Test::Harness::VERSION);
55 exit($tests - $t);