diff options
| author | Holger Weiss <holger@zedat.fu-berlin.de> | 2018-11-06 12:49:18 +0100 |
|---|---|---|
| committer | Holger Weiss <holger@zedat.fu-berlin.de> | 2018-11-06 12:49:18 +0100 |
| commit | 0863a4cb93a069523b7fca8a29e60e27070125e8 (patch) | |
| tree | 44d15f8f27f38e5e6b60f49a9fa2eab2d266772b /plugins | |
| parent | 82a634f7bfa433b78560be45ae6b52e1d101a26a (diff) | |
| parent | 198611a3c2bd89562af87d8bf0c7584fce1ce037 (diff) | |
| download | monitoring-plugins-0863a4c.tar.gz | |
Merge remote-tracking branch 'monitoring-plugins/pr/1476'
* monitoring-plugins/pr/1476:
test: Add proxy tests via proxy
Allow user to specify HTTP method after proxy CONNECT
Diffstat (limited to 'plugins')
| -rw-r--r-- | plugins/check_http.c | 17 | ||||
| -rw-r--r-- | plugins/t/NPTest.cache.travis | 2 | ||||
| -rw-r--r-- | plugins/t/check_http.t | 26 |
3 files changed, 41 insertions, 4 deletions
diff --git a/plugins/check_http.c b/plugins/check_http.c index 86a36c20..1e2a54c8 100644 --- a/plugins/check_http.c +++ b/plugins/check_http.c | |||
| @@ -126,6 +126,7 @@ int max_page_len = 0; | |||
| 126 | int redir_depth = 0; | 126 | int redir_depth = 0; |
| 127 | int max_depth = 15; | 127 | int max_depth = 15; |
| 128 | char *http_method; | 128 | char *http_method; |
| 129 | char *http_method_proxy; | ||
| 129 | char *http_post_data; | 130 | char *http_post_data; |
| 130 | char *http_content_type; | 131 | char *http_content_type; |
| 131 | char buffer[MAX_INPUT_BUFFER]; | 132 | char buffer[MAX_INPUT_BUFFER]; |
| @@ -446,6 +447,12 @@ process_arguments (int argc, char **argv) | |||
| 446 | if (http_method) | 447 | if (http_method) |
| 447 | free(http_method); | 448 | free(http_method); |
| 448 | http_method = strdup (optarg); | 449 | http_method = strdup (optarg); |
| 450 | char *tmp; | ||
| 451 | if ((tmp = strstr(http_method, ":")) > 0) { | ||
| 452 | tmp[0] = '\0'; | ||
| 453 | http_method = http_method; | ||
| 454 | http_method_proxy = ++tmp; | ||
| 455 | } | ||
| 449 | break; | 456 | break; |
| 450 | case 'd': /* string or substring */ | 457 | case 'd': /* string or substring */ |
| 451 | strncpy (header_expect, optarg, MAX_INPUT_BUFFER - 1); | 458 | strncpy (header_expect, optarg, MAX_INPUT_BUFFER - 1); |
| @@ -566,6 +573,9 @@ process_arguments (int argc, char **argv) | |||
| 566 | if (http_method == NULL) | 573 | if (http_method == NULL) |
| 567 | http_method = strdup ("GET"); | 574 | http_method = strdup ("GET"); |
| 568 | 575 | ||
| 576 | if (http_method_proxy == NULL) | ||
| 577 | http_method_proxy = strdup ("GET"); | ||
| 578 | |||
| 569 | if (client_cert && !client_privkey) | 579 | if (client_cert && !client_privkey) |
| 570 | usage4 (_("If you use a client certificate you must also specify a private key file")); | 580 | usage4 (_("If you use a client certificate you must also specify a private key file")); |
| 571 | 581 | ||
| @@ -950,7 +960,7 @@ check_http (void) | |||
| 950 | 960 | ||
| 951 | if ( server_address != NULL && strcmp(http_method, "CONNECT") == 0 | 961 | if ( server_address != NULL && strcmp(http_method, "CONNECT") == 0 |
| 952 | && host_name != NULL && use_ssl == TRUE) | 962 | && host_name != NULL && use_ssl == TRUE) |
| 953 | asprintf (&buf, "%s %s %s\r\n%s\r\n", "GET", server_url, host_name ? "HTTP/1.1" : "HTTP/1.0", user_agent); | 963 | asprintf (&buf, "%s %s %s\r\n%s\r\n", http_method_proxy, server_url, host_name ? "HTTP/1.1" : "HTTP/1.0", user_agent); |
| 954 | else | 964 | else |
| 955 | asprintf (&buf, "%s %s %s\r\n%s\r\n", http_method, server_url, host_name ? "HTTP/1.1" : "HTTP/1.0", user_agent); | 965 | asprintf (&buf, "%s %s %s\r\n%s\r\n", http_method, server_url, host_name ? "HTTP/1.1" : "HTTP/1.0", user_agent); |
| 956 | 966 | ||
| @@ -1581,7 +1591,7 @@ print_help (void) | |||
| 1581 | printf (" %s\n", _("URL to GET or POST (default: /)")); | 1591 | printf (" %s\n", _("URL to GET or POST (default: /)")); |
| 1582 | printf (" %s\n", "-P, --post=STRING"); | 1592 | printf (" %s\n", "-P, --post=STRING"); |
| 1583 | printf (" %s\n", _("URL encoded http POST data")); | 1593 | printf (" %s\n", _("URL encoded http POST data")); |
| 1584 | printf (" %s\n", "-j, --method=STRING (for example: HEAD, OPTIONS, TRACE, PUT, DELETE, CONNECT)"); | 1594 | printf (" %s\n", "-j, --method=STRING (for example: HEAD, OPTIONS, TRACE, PUT, DELETE, CONNECT, CONNECT:POST)"); |
| 1585 | printf (" %s\n", _("Set HTTP method.")); | 1595 | printf (" %s\n", _("Set HTTP method.")); |
| 1586 | printf (" %s\n", "-N, --no-body"); | 1596 | printf (" %s\n", "-N, --no-body"); |
| 1587 | printf (" %s\n", _("Don't wait for document body: stop reading after headers.")); | 1597 | printf (" %s\n", _("Don't wait for document body: stop reading after headers.")); |
| @@ -1668,7 +1678,8 @@ print_help (void) | |||
| 1668 | printf (" %s\n", _("all these options are needed: -I <proxy> -p <proxy-port> -u <check-url> -S(sl) -j CONNECT -H <webserver>")); | 1678 | printf (" %s\n", _("all these options are needed: -I <proxy> -p <proxy-port> -u <check-url> -S(sl) -j CONNECT -H <webserver>")); |
| 1669 | printf (" %s\n", _("a STATE_OK will be returned. When the server returns its content but exceeds")); | 1679 | printf (" %s\n", _("a STATE_OK will be returned. When the server returns its content but exceeds")); |
| 1670 | printf (" %s\n", _("the 5-second threshold, a STATE_WARNING will be returned. When an error occurs,")); | 1680 | printf (" %s\n", _("the 5-second threshold, a STATE_WARNING will be returned. When an error occurs,")); |
| 1671 | printf (" %s\n", _("a STATE_CRITICAL will be returned.")); | 1681 | printf (" %s\n", _("a STATE_CRITICAL will be returned. By adding a colon to the method you can set the method used")); |
| 1682 | printf (" %s\n", _("inside the proxied connection: -j CONNECT:POST")); | ||
| 1672 | 1683 | ||
| 1673 | #endif | 1684 | #endif |
| 1674 | 1685 | ||
diff --git a/plugins/t/NPTest.cache.travis b/plugins/t/NPTest.cache.travis index e9705f3b..28437a00 100644 --- a/plugins/t/NPTest.cache.travis +++ b/plugins/t/NPTest.cache.travis | |||
| @@ -59,4 +59,6 @@ | |||
| 59 | 'host_udp_time' => 'none', | 59 | 'host_udp_time' => 'none', |
| 60 | 'host_tls_http' => 'localhost', | 60 | 'host_tls_http' => 'localhost', |
| 61 | 'host_tls_cert' => 'localhost', | 61 | 'host_tls_cert' => 'localhost', |
| 62 | 'NP_HOST_TCP_PROXY' => 'localhost', | ||
| 63 | 'NP_PORT_TCP_PROXY' => '3128', | ||
| 62 | } | 64 | } |
diff --git a/plugins/t/check_http.t b/plugins/t/check_http.t index 8bd484a0..416fbbcb 100644 --- a/plugins/t/check_http.t +++ b/plugins/t/check_http.t | |||
| @@ -9,7 +9,7 @@ use Test::More; | |||
| 9 | use POSIX qw/mktime strftime/; | 9 | use POSIX qw/mktime strftime/; |
| 10 | use NPTest; | 10 | use NPTest; |
| 11 | 11 | ||
| 12 | plan tests => 49; | 12 | plan tests => 55; |
| 13 | 13 | ||
| 14 | my $successOutput = '/OK.*HTTP.*second/'; | 14 | my $successOutput = '/OK.*HTTP.*second/'; |
| 15 | 15 | ||
| @@ -42,6 +42,14 @@ my $host_tcp_http2 = getTestParameter( "NP_HOST_TCP_HTTP2", | |||
| 42 | "A host providing an index page containing the string 'monitoring'", | 42 | "A host providing an index page containing the string 'monitoring'", |
| 43 | "test.monitoring-plugins.org" ); | 43 | "test.monitoring-plugins.org" ); |
| 44 | 44 | ||
| 45 | my $host_tcp_proxy = getTestParameter( "NP_HOST_TCP_PROXY", | ||
| 46 | "A host providing a HTTP proxy with CONNECT support", | ||
| 47 | "localhost"); | ||
| 48 | |||
| 49 | my $port_tcp_proxy = getTestParameter( "NP_PORT_TCP_PROXY", | ||
| 50 | "Port of the proxy with HTTP and CONNECT support", | ||
| 51 | "3128"); | ||
| 52 | |||
| 45 | my $faketime = -x '/usr/bin/faketime' ? 1 : 0; | 53 | my $faketime = -x '/usr/bin/faketime' ? 1 : 0; |
| 46 | 54 | ||
| 47 | 55 | ||
| @@ -198,3 +206,19 @@ SKIP: { | |||
| 198 | $res = NPTest->testCmd( "./check_http -H www.mozilla.com --extended-perfdata" ); | 206 | $res = NPTest->testCmd( "./check_http -H www.mozilla.com --extended-perfdata" ); |
| 199 | like ( $res->output, '/time_connect=[\d\.]+/', 'Extended Performance Data Output OK' ); | 207 | like ( $res->output, '/time_connect=[\d\.]+/', 'Extended Performance Data Output OK' ); |
| 200 | } | 208 | } |
| 209 | |||
| 210 | SKIP: { | ||
| 211 | skip "No internet access or proxy configured", 6 if $internet_access eq "no" or ! $host_tcp_proxy; | ||
| 212 | |||
| 213 | $res = NPTest->testCmd( "./check_http -I $host_tcp_proxy -p $port_tcp_proxy -u http://$host_tcp_http -e 200,301,302"); | ||
| 214 | is( $res->return_code, 0, "Proxy HTTP works"); | ||
| 215 | like($res->output, qr/OK: Status line output matched/, "Proxy HTTP Output is sufficent"); | ||
| 216 | |||
| 217 | $res = NPTest->testCmd( "./check_http -I $host_tcp_proxy -p $port_tcp_proxy -H $host_tls_http -S -j CONNECT"); | ||
| 218 | is( $res->return_code, 0, "Proxy HTTP CONNECT works"); | ||
| 219 | like($res->output, qr/HTTP OK:/, "Proxy HTTP CONNECT output sufficent"); | ||
| 220 | |||
| 221 | $res = NPTest->testCmd( "./check_http -I $host_tcp_proxy -p $port_tcp_proxy -H $host_tls_http -S -j CONNECT:HEAD"); | ||
| 222 | is( $res->return_code, 0, "Proxy HTTP CONNECT works with override method"); | ||
| 223 | like($res->output, qr/HTTP OK:/, "Proxy HTTP CONNECT output sufficent"); | ||
| 224 | } | ||
