diff options
Diffstat (limited to 'plugins/t/check_ssh.t')
| -rw-r--r-- | plugins/t/check_ssh.t | 114 |
1 files changed, 83 insertions, 31 deletions
diff --git a/plugins/t/check_ssh.t b/plugins/t/check_ssh.t index 907d33a8..8a20782e 100644 --- a/plugins/t/check_ssh.t +++ b/plugins/t/check_ssh.t | |||
| @@ -5,10 +5,10 @@ | |||
| 5 | # | 5 | # |
| 6 | 6 | ||
| 7 | use strict; | 7 | use strict; |
| 8 | use warnings; | ||
| 8 | use Test::More; | 9 | use Test::More; |
| 9 | use NPTest; | 10 | use NPTest; |
| 10 | 11 | use JSON; | |
| 11 | my $res; | ||
| 12 | 12 | ||
| 13 | # Required parameters | 13 | # Required parameters |
| 14 | my $ssh_host = getTestParameter("NP_SSH_HOST", | 14 | my $ssh_host = getTestParameter("NP_SSH_HOST", |
| @@ -23,30 +23,38 @@ my $hostname_invalid = getTestParameter("NP_HOSTNAME_INVALID", | |||
| 23 | "An invalid (not known to DNS) hostname", | 23 | "An invalid (not known to DNS) hostname", |
| 24 | "nosuchhost" ); | 24 | "nosuchhost" ); |
| 25 | 25 | ||
| 26 | my $outputFormat = '--output-format mp-test-json'; | ||
| 27 | |||
| 28 | plan tests => 24; | ||
| 26 | 29 | ||
| 27 | plan tests => 14 + 6; | 30 | my $output; |
| 31 | my $result; | ||
| 28 | 32 | ||
| 29 | SKIP: { | 33 | SKIP: { |
| 30 | skip "SSH_HOST must be defined", 6 unless $ssh_host; | 34 | skip "SSH_HOST must be defined", 6 unless $ssh_host; |
| 35 | |||
| 36 | |||
| 31 | my $result = NPTest->testCmd( | 37 | my $result = NPTest->testCmd( |
| 32 | "./check_ssh -H $ssh_host" | 38 | "./check_ssh -H $ssh_host" ." ". $outputFormat |
| 33 | ); | 39 | ); |
| 34 | cmp_ok($result->return_code, '==', 0, "Exit with return code 0 (OK)"); | 40 | cmp_ok($result->return_code, '==', 0, "Exit with return code 0 (OK)"); |
| 35 | like($result->output, '/^SSH OK - /', "Status text if command returned none (OK)"); | 41 | $output = decode_json($result->output); |
| 42 | is($output->{'state'}, "OK", "State was correct"); | ||
| 36 | 43 | ||
| 37 | 44 | ||
| 38 | $result = NPTest->testCmd( | 45 | $result = NPTest->testCmd( |
| 39 | "./check_ssh -H $host_nonresponsive -t 2" | 46 | "./check_ssh -H $host_nonresponsive -t 2" ." ". $outputFormat |
| 40 | ); | 47 | ); |
| 41 | cmp_ok($result->return_code, '==', 2, "Exit with return code 0 (OK)"); | 48 | cmp_ok($result->return_code, '==', 0, "Exit with return code 0 (OK)"); |
| 42 | like($result->output, '/^CRITICAL - Socket timeout after 2 seconds/', "Status text if command returned none (OK)"); | 49 | $output = decode_json($result->output); |
| 50 | is($output->{'state'}, "CRITICAL", "State was correct"); | ||
| 43 | 51 | ||
| 44 | 52 | ||
| 45 | 53 | ||
| 46 | $result = NPTest->testCmd( | 54 | $result = NPTest->testCmd( |
| 47 | "./check_ssh -H $hostname_invalid -t 2" | 55 | "./check_ssh -H $hostname_invalid -t 2" ." ". $outputFormat |
| 48 | ); | 56 | ); |
| 49 | cmp_ok($result->return_code, '==', 3, "Exit with return code 0 (OK)"); | 57 | cmp_ok($result->return_code, '==', 3, "Exit with return code 3 (UNKNOWN)"); |
| 50 | like($result->output, '/^check_ssh: Invalid hostname/', "Status text if command returned none (OK)"); | 58 | like($result->output, '/^check_ssh: Invalid hostname/', "Status text if command returned none (OK)"); |
| 51 | 59 | ||
| 52 | 60 | ||
| @@ -63,46 +71,80 @@ SKIP: { | |||
| 63 | # | 71 | # |
| 64 | # where `comments` is optional, protoversion is the SSH protocol version and | 72 | # where `comments` is optional, protoversion is the SSH protocol version and |
| 65 | # softwareversion is an arbitrary string representing the server software version | 73 | # softwareversion is an arbitrary string representing the server software version |
| 74 | |||
| 75 | my $found_version = 0; | ||
| 76 | |||
| 66 | open(NC, "echo 'SSH-2.0-nagiosplug.ssh.0.1' | nc ${nc_flags}|"); | 77 | open(NC, "echo 'SSH-2.0-nagiosplug.ssh.0.1' | nc ${nc_flags}|"); |
| 67 | sleep 0.1; | 78 | sleep 0.1; |
| 68 | $res = NPTest->testCmd( "./check_ssh -H localhost -p 5003" ); | 79 | $result = NPTest->testCmd( "./check_ssh -H localhost -p 5003" ." ". $outputFormat); |
| 69 | cmp_ok( $res->return_code, '==', 0, "Got SSH protocol version control string"); | 80 | cmp_ok($result->return_code, '==', 0, "Exit with return code 0 (OK)"); |
| 70 | like( $res->output, '/^SSH OK - nagiosplug.ssh.0.1 \(protocol 2.0\)/', "Output OK"); | 81 | $output = decode_json($result->output); |
| 82 | is($output->{'state'}, "OK", "State was correct"); | ||
| 83 | |||
| 84 | # looking for the version | ||
| 85 | for my $subcheck (@{$output->{'checks'}}) { | ||
| 86 | if ($subcheck->{'output'} =~ /.*nagiosplug.ssh.0.1 \(protocol version: 2.0\).*/ ){ | ||
| 87 | $found_version = 1; | ||
| 88 | } | ||
| 89 | } | ||
| 90 | cmp_ok($found_version, '==', 1, "Output OK"); | ||
| 71 | close NC; | 91 | close NC; |
| 72 | 92 | ||
| 73 | open(NC, "echo 'SSH-2.0-3.2.9.1' | nc ${nc_flags}|"); | 93 | open(NC, "echo 'SSH-2.0-3.2.9.1' | nc ${nc_flags}|"); |
| 74 | sleep 0.1; | 94 | sleep 0.1; |
| 75 | $res = NPTest->testCmd( "./check_ssh -H localhost -p 5003" ); | 95 | $result = NPTest->testCmd( "./check_ssh -H localhost -p 5003" ." ". $outputFormat); |
| 76 | cmp_ok( $res->return_code, "==", 0, "Got SSH protocol version control string with non-alpha softwareversion string"); | 96 | cmp_ok($result->return_code, '==', 0, "Exit with return code 0 (OK)"); |
| 77 | like( $res->output, '/^SSH OK - 3.2.9.1 \(protocol 2.0\)/', "Output OK for non-alpha softwareversion string"); | 97 | $output = decode_json($result->output); |
| 98 | is($output->{'state'}, "OK", "State was correct"); | ||
| 99 | |||
| 100 | $found_version = 0; | ||
| 101 | for my $subcheck (@{$output->{'checks'}}) { | ||
| 102 | if ($subcheck->{'output'} =~ /3.2.9.1 \(protocol version: 2.0\)/ ){ | ||
| 103 | $found_version = 1; | ||
| 104 | } | ||
| 105 | } | ||
| 106 | cmp_ok($found_version, '==', 1, "Output OK"); | ||
| 78 | close NC; | 107 | close NC; |
| 79 | 108 | ||
| 80 | open(NC, "echo 'SSH-2.0-nagiosplug.ssh.0.1 this is a comment' | nc ${nc_flags} |"); | 109 | open(NC, "echo 'SSH-2.0-nagiosplug.ssh.0.1 this is a comment' | nc ${nc_flags} |"); |
| 81 | sleep 0.1; | 110 | sleep 0.1; |
| 82 | $res = NPTest->testCmd( "./check_ssh -H localhost -p 5003 -r nagiosplug.ssh.0.1" ); | 111 | $result = NPTest->testCmd( "./check_ssh -H localhost -p 5003 -r nagiosplug.ssh.0.1" ." ". $outputFormat); |
| 83 | cmp_ok( $res->return_code, '==', 0, "Got SSH protocol version control string, and parsed comment appropriately"); | 112 | cmp_ok($result->return_code, '==', 0, "Exit with return code 0 (OK)"); |
| 84 | like( $res->output, '/^SSH OK - nagiosplug.ssh.0.1 \(protocol 2.0\)/', "Output OK"); | 113 | $output = decode_json($result->output); |
| 114 | is($output->{'state'}, "OK", "State was correct"); | ||
| 115 | |||
| 116 | # looking for the version | ||
| 117 | $found_version = 0; | ||
| 118 | for my $subcheck (@{$output->{'checks'}}) { | ||
| 119 | if ($subcheck->{'output'} =~ /nagiosplug.ssh.0.1 \(protocol version: 2.0\)/ ){ | ||
| 120 | $found_version = 1; | ||
| 121 | } | ||
| 122 | } | ||
| 123 | cmp_ok($found_version, '==', 1, "Output OK"); | ||
| 85 | close NC; | 124 | close NC; |
| 86 | 125 | ||
| 87 | open(NC, "echo 'SSH-' | nc ${nc_flags}|"); | 126 | open(NC, "echo 'SSH-' | nc ${nc_flags}|"); |
| 88 | sleep 0.1; | 127 | sleep 0.1; |
| 89 | $res = NPTest->testCmd( "./check_ssh -H localhost -p 5003" ); | 128 | $result = NPTest->testCmd( "./check_ssh -H localhost -p 5003" ." ". $outputFormat); |
| 90 | cmp_ok( $res->return_code, '==', 2, "Got invalid SSH protocol version control string"); | 129 | cmp_ok($result->return_code, '==', 0, "Exit with return code 0 (OK)"); |
| 91 | like( $res->output, '/^SSH CRITICAL/', "Output OK"); | 130 | $output = decode_json($result->output); |
| 131 | is($output->{'state'}, "CRITICAL", "Got invalid SSH protocol version control string"); | ||
| 92 | close NC; | 132 | close NC; |
| 93 | 133 | ||
| 94 | open(NC, "echo '' | nc ${nc_flags}|"); | 134 | open(NC, "echo '' | nc ${nc_flags}|"); |
| 95 | sleep 0.1; | 135 | sleep 0.1; |
| 96 | $res = NPTest->testCmd( "./check_ssh -H localhost -p 5003" ); | 136 | $result = NPTest->testCmd( "./check_ssh -H localhost -p 5003" ." ". $outputFormat); |
| 97 | cmp_ok( $res->return_code, '==', 2, "No version control string received"); | 137 | cmp_ok($result->return_code, '==', 0, "Exit with return code 0 (OK)"); |
| 98 | like( $res->output, '/^SSH CRITICAL - No version control string received/', "Output OK"); | 138 | $output = decode_json($result->output); |
| 139 | is($output->{'state'}, "CRITICAL", "No version control string received"); | ||
| 99 | close NC; | 140 | close NC; |
| 100 | 141 | ||
| 101 | open(NC, "echo 'Not a version control string' | nc ${nc_flags}|"); | 142 | open(NC, "echo 'Not a version control string' | nc ${nc_flags}|"); |
| 102 | sleep 0.1; | 143 | sleep 0.1; |
| 103 | $res = NPTest->testCmd( "./check_ssh -H localhost -p 5003" ); | 144 | $result = NPTest->testCmd( "./check_ssh -H localhost -p 5003" ." ". $outputFormat); |
| 104 | cmp_ok( $res->return_code, '==', 2, "No version control string received"); | 145 | cmp_ok($result->return_code, '==', 0, "Exit with return code 0 (OK)"); |
| 105 | like( $res->output, '/^SSH CRITICAL - No version control string received/', "Output OK"); | 146 | $output = decode_json($result->output); |
| 147 | is($output->{'state'}, "CRITICAL", "No version control string received"); | ||
| 106 | close NC; | 148 | close NC; |
| 107 | 149 | ||
| 108 | 150 | ||
| @@ -116,8 +158,18 @@ SKIP: { | |||
| 116 | echo 'Some\nPrepended\nData\nLines\n'; sleep 0.2; | 158 | echo 'Some\nPrepended\nData\nLines\n'; sleep 0.2; |
| 117 | echo 'SSH-2.0-nagiosplug.ssh.0.2';} | nc ${nc_flags}|"); | 159 | echo 'SSH-2.0-nagiosplug.ssh.0.2';} | nc ${nc_flags}|"); |
| 118 | sleep 0.1; | 160 | sleep 0.1; |
| 119 | $res = NPTest->testCmd( "./check_ssh -H localhost -p 5003" ); | 161 | $result = NPTest->testCmd( "./check_ssh -H localhost -p 5003" ." ". $outputFormat); |
| 120 | cmp_ok( $res->return_code, '==', 0, "Got delayed SSH protocol version control string"); | 162 | cmp_ok($result->return_code, '==', 0, "Exit with return code 0 (OK)"); |
| 121 | like( $res->output, '/^SSH OK - nagiosplug.ssh.0.2 \(protocol 2.0\)/', "Output OK"); | 163 | $output = decode_json($result->output); |
| 164 | is($output->{'state'}, "OK", "State was correct"); | ||
| 165 | |||
| 166 | # looking for the version | ||
| 167 | $found_version = 0; | ||
| 168 | for my $subcheck (@{$output->{'checks'}}) { | ||
| 169 | if ($subcheck->{'output'} =~ /nagiosplug.ssh.0.2 \(protocol version: 2.0\)/ ){ | ||
| 170 | $found_version = 1; | ||
| 171 | } | ||
| 172 | } | ||
| 173 | cmp_ok($found_version, '==', 1, "Output OK"); | ||
| 122 | close NC; | 174 | close NC; |
| 123 | } | 175 | } |
