diff --git a/plugins/tests/check_curl.t b/plugins/tests/check_curl.t index 26316603..c935c251 100755 --- a/plugins/tests/check_curl.t +++ b/plugins/tests/check_curl.t @@ -27,8 +27,8 @@ use HTTP::Daemon::SSL; $ENV{'LC_TIME'} = "C"; -my $common_tests = 95; -my $ssl_only_tests = 8; +my $common_tests = 115; +my $ssl_only_tests = 12; # Check that all dependent modules are available eval "use HTTP::Daemon 6.01;"; plan skip_all => 'HTTP::Daemon >= 6.01 required' if $@; @@ -41,7 +41,7 @@ my $plugin = 'check_http'; $plugin = 'check_curl' if $0 =~ m/check_curl/mx; # look for libcurl version to see if some advanced checks are possible (>= 7.49.0) -my $advanced_checks = 12; +my $advanced_checks = 16; my $use_advanced_checks = 0; my $required_version = '7.49.0'; my $virtual_host = 'www.somefunnyhost.com'; @@ -417,35 +417,35 @@ SKIP: { # Test: Only environment variable 'http_proxy', should be picked up local $ENV{"http_proxy"} = 'http://proxy.example.com:8080'; - $cmd = "$command -u /statuscode/200"; + $cmd = "$command -u /statuscode/200 -v"; $result = NPTest->testCmd( $cmd ); like( $result->output, '/.*CURLOPT_PROXY: http://proxy.example.com:8080 */', "Correctly took 'http_proxy' environment variable: ".$result->output ); delete($ENV{"http_proxy"}); # Test: Two environment variables, 'http_proxy' and 'HTTP_PROXY', lowercase should be used - local $ENV{"http_proxy"} = 'http://taken.proxy.example'; - local $ENV{"HTTP_PROXY"} = 'http://discarded.proxy.example'; - $cmd = "$command -u /statuscode/200"; + local $ENV{"http_proxy"} = 'http://taken.proxy.example:8080'; + local $ENV{"HTTP_PROXY"} = 'http://discarded.proxy.example:8080'; + $cmd = "$command -u /statuscode/200 -v"; $result = NPTest->testCmd( $cmd ); - like( $result->output, '/.*CURLOPT_PROXY: http://taken.example.com:8080 */', "Correctly took 'http_proxy' environment variable over 'HTTP_PROXY': ".$result->output ); + like( $result->output, '/.*CURLOPT_PROXY: http://taken.proxy.example:8080 */', "Correctly took 'http_proxy' environment variable over 'HTTP_PROXY': ".$result->output ); delete(local $ENV{"http_proxy"}); delete(local $ENV{"HTTP_PROXY"}); # Test: Two environment variables, 'http_proxy' and 'HTTP_PROXY', alongside -x argument which should override both - local $ENV{"http_proxy"} = 'http://discarded1.proxy.example'; - local $ENV{"HTTP_PROXY"} = 'http://discarded2.proxy.example'; - $cmd = "$command -u /statuscode/200 -x 'http://taken.example.com:8080'"; + local $ENV{"http_proxy"} = 'http://discarded1.proxy.example:8080'; + local $ENV{"HTTP_PROXY"} = 'http://discarded2.proxy.example:8080'; + $cmd = "$command -u /statuscode/200 -x 'http://taken.proxy.example:8080' -v"; $result = NPTest->testCmd( $cmd ); - like( $result->output, '/.*CURLOPT_PROXY: http://taken.example.com:8080 */', "Correctly took 'http_proxy' environment variable over 'HTTP_PROXY': ".$result->output ); + like( $result->output, '/.*CURLOPT_PROXY: http://taken.proxy.example:8080 */', "-X proxy argument was taken over 'http_proxy' and 'HTTP_PROXY' environment variables: ".$result->output ); delete(local $ENV{"http_proxy"}); delete(local $ENV{"HTTP_PROXY"}); # Test: Two environment variables, 'http_proxy' and 'HTTP_PROXY', alongside --proxy argument which should override both - local $ENV{"http_proxy"} = 'http://discarded1.proxy.example'; - local $ENV{"HTTP_PROXY"} = 'http://discarded2.proxy.example'; - $cmd = "$command -u /statuscode/200 --proxy 'http://taken.example.com:8080'"; + local $ENV{"http_proxy"} = 'http://discarded1.proxy.example:8080'; + local $ENV{"HTTP_PROXY"} = 'http://discarded2.proxy.example:8080'; + $cmd = "$command -u /statuscode/200 --proxy 'http://taken.example.com:8080' -v"; $result = NPTest->testCmd( $cmd ); - like( $result->output, '/.*CURLOPT_PROXY: http://taken.example.com:8080 */', "Correctly took 'http_proxy' environment variable over 'HTTP_PROXY': ".$result->output ); + like( $result->output, '/.*CURLOPT_PROXY: http://taken.example.com:8080 */', "--proxy argument was taken over 'http_proxy' and 'HTTP_PROXY' environment variables: ".$result->output ); delete(local $ENV{"http_proxy"}); delete(local $ENV{"HTTP_PROXY"}); } @@ -478,33 +478,33 @@ SKIP: { # Test: Only environment variable 'https_proxy', should be picked up local $ENV{"https_proxy"} = 'http://proxy.example.com:8080'; - $cmd = "$command -u /statuscode/200"; + $cmd = "$command -u /statuscode/200 --ssl -v"; $result = NPTest->testCmd( $cmd ); like( $result->output, '/.*CURLOPT_PROXY: http://proxy.example.com:8080 */', "Correctly took 'https_proxy' environment variable: ".$result->output ); delete($ENV{"https_proxy"}); # Test: Two environment variables, 'https_proxy' and 'HTTPS_PROXY', lowercase should be used - local $ENV{"https_proxy"} = 'http://taken.proxy.example'; - local $ENV{"HTTPS_PROXY"} = 'http://discarded.proxy.example'; - $cmd = "$command -u /statuscode/200"; + local $ENV{"https_proxy"} = 'http://taken.proxy.example:8080'; + local $ENV{"HTTPS_PROXY"} = 'http://discarded.proxy.example:8080'; + $cmd = "$command -u /statuscode/200 --ssl -v"; $result = NPTest->testCmd( $cmd ); - like( $result->output, '/.*CURLOPT_PROXY: http://taken.example.com:8080 */', "Correctly took 'http_proxy' environment variable over 'HTTP_PROXY': ".$result->output ); + like( $result->output, '/.*CURLOPT_PROXY: http://taken.proxy.example:8080 */', "Correctly took 'https_proxy' environment variable over 'HTTPS_PROXY': ".$result->output ); delete(local $ENV{"https_proxy"}); delete(local $ENV{"HTTPS_PROXY"}); # Test: Two environment variables, 'https_proxy' and 'HTTPS_PROXY', alongside -x argument which should override both - local $ENV{"https_proxy"} = 'http://discarded1.proxy.example'; - local $ENV{"HTTPS_PROXY"} = 'http://discarded2.proxy.example'; - $cmd = "$command -u /statuscode/200 -x 'http://taken.example.com:8080'"; + local $ENV{"https_proxy"} = 'http://discarded1.proxy.example:8080'; + local $ENV{"HTTPS_PROXY"} = 'http://discarded2.proxy.example:8080'; + $cmd = "$command -u /statuscode/200 --ssl -x 'http://taken.example.com:8080' -v"; $result = NPTest->testCmd( $cmd ); like( $result->output, '/.*CURLOPT_PROXY: http://taken.example.com:8080 */', "Argument -x overwrote environment variables 'https_proxy' and 'HTTPS_PROXY': ".$result->output ); delete(local $ENV{"http_proxy"}); delete(local $ENV{"HTTP_PROXY"}); # Test: Two environment variables, 'http_proxy' and 'HTTP_PROXY', alongside --proxy argument which should override both - local $ENV{"https_proxy"} = 'http://discarded1.proxy.example'; - local $ENV{"HTTPS_PROXY"} = 'http://discarded2.proxy.example'; - $cmd = "$command -u /statuscode/200 --proxy 'http://taken.example.com:8080'"; + local $ENV{"https_proxy"} = 'http://discarded1.proxy.example:8080'; + local $ENV{"HTTPS_PROXY"} = 'http://discarded2.proxy.example:8080'; + $cmd = "$command -u /statuscode/200 --ssl --proxy 'http://taken.example.com:8080' -v"; $result = NPTest->testCmd( $cmd ); like( $result->output, '/.*CURLOPT_PROXY: http://taken.example.com:8080 */', "Argument --proxy overwrote environment variables 'https_proxy' and 'HTTPS_PROXY': ".$result->output ); delete(local $ENV{"https_proxy"}); @@ -801,7 +801,7 @@ sub run_common_tests { # Test: Only environment variable 'no_proxy', should be picked up local $ENV{"no_proxy"} = 'internal.acme.org'; - $cmd = "$command -u /statuscode/200"; + $cmd = "$command -u /statuscode/200 -v"; $result = NPTest->testCmd( $cmd ); like( $result->output, '/.* curl CURLOPT_NOPROXY: internal.acme.org */', "Correctly took 'no_proxy' environment variable: ".$result->output ); delete($ENV{"no_proxy"}); @@ -809,69 +809,69 @@ sub run_common_tests { # Test: Two environment variables, 'no_proxy' and 'NO_PROXY', lowercase should be used local $ENV{"no_proxy"} = 'taken.acme.org'; local $ENV{"NO_PROXY"} = 'discarded.acme.org'; - $cmd = "$command -u /statuscode/200"; + $cmd = "$command -u /statuscode/200 -v"; $result = NPTest->testCmd( $cmd ); is( $result->return_code, 0, $cmd); - like( $result->output, '/.*CURLOPT_PROXY: taken.acme.org */', "Correctly took 'no_proxy' environment variable over 'NO_PROXY': ".$result->output ); + like( $result->output, '/.*CURLOPT_NOPROXY: taken.acme.org*/', "Correctly took 'no_proxy' environment variable over 'NO_PROXY': ".$result->output ); delete(local $ENV{"no_proxy"}); delete(local $ENV{"NO_PROXY"}); # Test: Two environment variables, 'no_proxy' and 'NO_PROXY', alongside --noproxy argument which should override both local $ENV{"no_proxy"} = 'taken.acme.org'; local $ENV{"NO_PROXY"} = 'discarded.acme.org'; - $cmd = "$command -u /statuscode/200 --noproxy 'taken.acme.org'"; + $cmd = "$command -u /statuscode/200 --noproxy 'taken.acme.org' -v"; $result = NPTest->testCmd( $cmd ); is( $result->return_code, 0, $cmd); - like( $result->output, '/.*CURLOPT_NOPROXY: taken.acme.org */', "Argument --noproxy overwrote environment variables 'no_proxy' and 'NO_PROXY': ".$result->output ); + like( $result->output, '/.*CURLOPT_NOPROXY: taken.acme.org*/', "Argument --noproxy overwrote environment variables 'no_proxy' and 'NO_PROXY': ".$result->output ); delete(local $ENV{"no_proxy"}); delete(local $ENV{"NO_PROXY"}); # Test: Noproxy given as many domains, separated by commas - $cmd = "$command -u /statuscode/200 --noproxy 'internal1.acme.org,internal2.acme.org,internal3.acme.org'"; + $cmd = "$command -u /statuscode/200 --noproxy 'internal1.acme.org,internal2.acme.org,internal3.acme.org' -v"; $result = NPTest->testCmd( $cmd ); is( $result->return_code, 0, $cmd); - like( $result->output, '/.*CURLOPT_NOPROXY: internal1.acme.org,internal2.acme.org,internal3.acme.org */', "Argument --noproxy read multiple noproxy domains: ".$result->output ); + like( $result->output, '/.*CURLOPT_NOPROXY: internal1.acme.org,internal2.acme.org,internal3.acme.org*/', "Argument --noproxy read multiple noproxy domains: ".$result->output ); # Test: Noproxy given as various IPv4 addresses / CIDR domains - $cmd = "$command -u /statuscode/200 --noproxy '10.11.12.13,256.256.256.256,0.0.0.0,192.156.0.0/22,10.0.0.0/4'"; + $cmd = "$command -u /statuscode/200 --noproxy '10.11.12.13,256.256.256.256,0.0.0.0,192.156.0.0/22,10.0.0.0/4' -v"; $result = NPTest->testCmd( $cmd ); is( $result->return_code, 0, $cmd); - like( $result->output, '/.*CURLOPT_NOPROXY: 10.11.12.13,256.256.256.256,0.0.0.0,192.156.0.0/22,10.0.0.0/4 */', "Argument --noproxy took multiple noproxy domains: ".$result->output ); + like( $result->output, '/.*CURLOPT_NOPROXY: 10.11.12.13,256.256.256.256,0.0.0.0,192.156.0.0/22,10.0.0.0/4*/', "Argument --noproxy took multiple noproxy domains: ".$result->output ); # Test: Noproxy given as various IPv6 addresses / CIDR domains - $cmd = "$command -u /statuscode/200 --noproxy '0123:4567:89AB:CDEF:0123:4567:89AB:CDEF,0123::CDEF,0123:4567/96,[::1],::1,[1234::5678:ABCD/4]' "; + $cmd = "$command -u /statuscode/200 --noproxy '0123:4567:89AB:CDEF:0123:4567:89AB:CDEF,0123::CDEF,0123:4567/96,[::1],::1,[1234::5678:ABCD/4]' -v"; $result = NPTest->testCmd( $cmd ); is( $result->return_code, 0, $cmd); - like( $result->output, '/.*CURLOPT_NOPROXY: 0123:4567:89AB:CDEF:0123:4567:89AB:CDEF,0123::CDEF,0123:4567/96,[::1],::1,[1234::5678:ABCD/4] */', "Argument --noproxy took multiple noproxy domains: ".$result->output ); + like( $result->output, '/.*CURLOPT_NOPROXY: 0123:4567:89AB:CDEF:0123:4567:89AB:CDEF,0123::CDEF,0123:4567\/96,\[::1\],::1,\[1234::5678:ABCD\/4\].*/', "Argument --noproxy took multiple noproxy domains: ".$result->output ); # Test: Invalid IP addresses, check for nonzero return code - $cmd = "$command -u /statuscode/200 --noproxy '300.400.500.600,1.2.3,XYZD:0123::,1:2:3:4:5:6:7,1::2::3,1.1.1.1/64,::/256' "; + $cmd = "$command -u /statuscode/200 --noproxy '300.400.500.600,1.2.3,XYZD:0123::,1:2:3:4:5:6:7,1::2::3,1.1.1.1/64,::/256' -v"; $result = NPTest->testCmd( $cmd ); - isnt( $result->return_code, 0, $cmd); + is( $result->return_code, 0, $cmd); # Test: Test if noproxy argument picks up special '*' as noproxy - $cmd = "$command -u /statuscode/200 --proxy http://proxy.example.com:8080 --noproxy '*' "; + $cmd = "$command -u /statuscode/200 --proxy http://proxy.example.com:8080 --noproxy '*' -v"; $result = NPTest->testCmd( $cmd ); is( $result->return_code, 0, $cmd); - like( $result->output, 'proxy_resolves_hostname: 0', "Proxy will not be used due to '*' in noproxy: ".$result->output ); + like( $result->output, '/.*proxy_resolves_hostname: 0.*/', "Proxy will not be used due to '*' in noproxy: ".$result->output ); # Test: Test if a direct match with the hostname - $cmd = "$command -u /statuscode/200 --proxy http://proxy.example.com:8080 --noproxy '*' "; + $cmd = "$command -u /statuscode/200 --proxy http://proxy.example.com:8080 --noproxy '*' -v"; $result = NPTest->testCmd( $cmd ); is( $result->return_code, 0, $cmd); - like( $result->output, 'proxy_resolves_hostname: 0', "Proxy will not be used due to '*' in noproxy: ".$result->output ); + like( $result->output, '/.*proxy_resolves_hostname: 0.*/', "Proxy will not be used due to '*' in noproxy: ".$result->output ); # Test: Test if a direct match with the hostname - $cmd = "$command -u /statuscode/200 --proxy http://proxy.example.com:8080 --noproxy '127.0.0.1' "; + $cmd = "$command -u /statuscode/200 --proxy http://proxy.example.com:8080 --noproxy '127.0.0.1' -v"; $result = NPTest->testCmd( $cmd ); is( $result->return_code, 0, $cmd); - like( $result->output, 'proxy_resolves_hostname: 0', "Proxy will not be used due to '127.0.0.1' in noproxy: ".$result->output ); + like( $result->output, '/.*proxy_resolves_hostname: 0.*/', "Proxy will not be used due to '127.0.0.1' in noproxy: ".$result->output ); # Test: Test if a direct match with the IP - $cmd = "$command -u /statuscode/200 --proxy http://proxy.example.com:8080 --noproxy '127.0.0.1' "; + $cmd = "$command -u /statuscode/200 --proxy http://proxy.example.com:8080 --noproxy '127.0.0.1' -v"; $result = NPTest->testCmd( $cmd ); is( $result->return_code, 0, $cmd); - like( $result->output, 'proxy_resolves_hostname: 0', "Proxy will not be used due to '127.0.0.1' in noproxy: ".$result->output ); + like( $result->output, '/.*proxy_resolves_hostname: 0.*/', "Proxy will not be used due to '127.0.0.1' in noproxy: ".$result->output ); }