summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--plugins/check_tcp.c6
-rw-r--r--plugins/t/check_udp.t67
2 files changed, 50 insertions, 23 deletions
diff --git a/plugins/check_tcp.c b/plugins/check_tcp.c
index 5c287b7a..d8fc26e7 100644
--- a/plugins/check_tcp.c
+++ b/plugins/check_tcp.c
@@ -198,13 +198,17 @@ main (int argc, char **argv)
198 198
199 if(flags & FLAG_VERBOSE) { 199 if(flags & FLAG_VERBOSE) {
200 printf("Using service %s\n", SERVICE); 200 printf("Using service %s\n", SERVICE);
201 printf("Port: %d\n", PORT); 201 printf("Port: %d\n", server_port);
202 printf("flags: 0x%x\n", (int)flags); 202 printf("flags: 0x%x\n", (int)flags);
203 } 203 }
204 204
205 if(EXPECT && !server_expect_count) 205 if(EXPECT && !server_expect_count)
206 server_expect_count++; 206 server_expect_count++;
207 207
208 if(PROTOCOL==IPPROTO_UDP && !(server_expect_count && server_send)){
209 usage(_("With UDP checks, a send/expect string must be specified."));
210 }
211
208 /* set up the timer */ 212 /* set up the timer */
209 signal (SIGALRM, socket_timeout_alarm_handler); 213 signal (SIGALRM, socket_timeout_alarm_handler);
210 alarm (socket_timeout); 214 alarm (socket_timeout);
diff --git a/plugins/t/check_udp.t b/plugins/t/check_udp.t
index c80e08ad..c9228adc 100644
--- a/plugins/t/check_udp.t
+++ b/plugins/t/check_udp.t
@@ -6,28 +6,51 @@
6# 6#
7 7
8use strict; 8use strict;
9use Test; 9use Test::More;
10use NPTest; 10use NPTest;
11 11
12use vars qw($tests); 12my $res;
13BEGIN {$tests = 3; plan tests => $tests} #TODO# Update to 4 when the commented out test is fixed 13
14plan tests => 14;
15
16$res = NPTest->testCmd( "./check_udp2 -H localhost -p 3333" );
17cmp_ok( $res->return_code, '==', 3, "Need send/expect string");
18like ( $res->output, '/With UDP checks, a send/expect string must be specified./', "Output OK");
19
20$res = NPTest->testCmd( "./check_udp2 -H localhost -p 3333 -s send" );
21cmp_ok( $res->return_code, '==', 3, "Need expect string");
22like ( $res->output, '/With UDP checks, a send/expect string must be specified./', "Output OK");
23
24$res = NPTest->testCmd( "./check_udp2 -H localhost -p 3333 -e expect" );
25cmp_ok( $res->return_code, '==', 3, "Need send string");
26like ( $res->output, '/With UDP checks, a send/expect string must be specified./', "Output OK");
27
28$res = NPTest->testCmd( "./check_udp2 -H localhost -p 3333 -s foo -e bar" );
29cmp_ok( $res->return_code, '==', 2, "Errors correctly because no udp service running" );
30like ( $res->output, '/No data received from host/', "Output OK");
31
32SKIP: {
33 skip "No netcat available", 6 unless (system("which nc > /dev/null") == 0);
34 open (NC, "echo 'barbar' | nc -l -p 3333 -u |");
35 sleep 1;
36 $res = NPTest->testCmd( "./check_udp2 -H localhost -p 3333 -s '' -e barbar -4" );
37 cmp_ok( $res->return_code, '==', 0, "Got barbar response back" );
38 like ( $res->output, '/\[barbar\]/', "Output OK");
39 close NC;
40
41 my $pid = open(NC, "nc -l -p 3333 -u |"); # Start up a udp server listening on port 3333
42 alarm(7);
43 sleep 1;
44 $SIG{ALRM} = sub { kill 'INT', $pid };
45 my $start = time;
46 $res = NPTest->testCmd( "./check_udp2 -H localhost -p 3333 -s foofoo -e barbar -t 5 -4" );
47 my $duration = time - $start;
48 cmp_ok( $res->return_code, '==', '2', "Hung waiting for response");
49 like ( $res->output, '/Socket timeout after 5 seconds/', "Timeout message");
50 cmp_ok( $duration, '==', 5, "Timeout exactly right");
51 my $read_nc = <NC>;
52 # nc gets killed here - I think expects a linefeed from stdin, so doesn't exit itself
53 close NC;
54 cmp_ok( $read_nc, 'eq', "foofoo", "Data received correctly" );
55}
14 56
15my $host_udp_time = getTestParameter( "host_udp_time", "NP_HOST_UDP_TIME", "localhost",
16 "A host providing the UDP Time Service" );
17
18my $host_nonresponsive = getTestParameter( "host_nonresponsive", "NP_HOST_NONRESPONSIVE", "10.0.0.1",
19 "The hostname of system not responsive to network requests" );
20
21my $hostname_invalid = getTestParameter( "hostname_invalid", "NP_HOSTNAME_INVALID", "nosuchhost",
22 "An invalid (not known to DNS) hostname" );
23
24my $successOutput = '/^Connection accepted on port [0-9]+ - [0-9]+ second response time$/';
25
26my $t;
27
28$t += checkCmd( "./check_udp -H $host_udp_time -p 37 -wt 300 -ct 600", 0, $successOutput );
29$t += checkCmd( "./check_udp $host_nonresponsive -p 37 -wt 0 -ct 0 -to 1", 2 );
30#TODO# $t += checkCmd( "./check_udp $hostname_invalid -p 37 -wt 0 -ct 0 -to 1", 2 ); # Currently returns 0 (ie success)
31
32exit(0) if defined($Test::Harness::VERSION);
33exit($tests - $t);