Module: monitoring-plugins
 Branch: master
 Commit: 737af667a212f7058143b34770f7f0af70aa8d9b
 Author: Ahmet Oeztuerk <[email protected]>
   Date: Thu Dec 11 10:05:25 2025 +0100
    URL: 
https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=737af667

clairfy new check_curl tests

use the parameters in the last redirected URI that that server returns
HTTP OK to. matches the incrementation count of redirection_count from 0
to 3, as they also get incremented three times alongside it. add
comments about what is happening in the test cases, no need to
understand the endpoint completely

---

 plugins/tests/check_curl.t | 34 ++++++++++++++++++++++++----------
 1 file changed, 24 insertions(+), 10 deletions(-)

diff --git a/plugins/tests/check_curl.t b/plugins/tests/check_curl.t
index af01c97e..374c74b3 100755
--- a/plugins/tests/check_curl.t
+++ b/plugins/tests/check_curl.t
@@ -224,12 +224,13 @@ sub run_server {
                                #$content .= " before_slash: ${before_slash}\n";
                                #$content .= " after_slash: ${after_slash}\n";
 
-                # split the uri part and parameters. uri package cannot do this
-                               # group 1 is captured: anything without a 
semicolon: ([^;])
-                               # group 2 is uncaptured: (?:;(.*))?
-                               # (? )? prevents the capture
-                               # in between the ';' matches the first ever 
semicolon
+                # split the URI part and parameters. URI package cannot do this
+                # group 1 is captured: anything without a semicolon: ([^;]*)
+                # group 2 is uncaptured: (?:;(.*))?
+                # (?: ... )? prevents capturing the parameter section
+                               # inside group 2, ';' matches the first ever 
semicolon
                                # group3 is captured: any character string : 
(.*)
+                               # \? matches an actual ? mark, which starts the 
query parameters
                 my ($before_params, $params) = $uri =~ m{^([^;]*)(?:;(.*))?\?};
                                $before_params //= '';
                                $params //= '';
@@ -639,40 +640,53 @@ sub run_common_tests {
        is( $result->return_code, 1, $cmd);
        like( $result->output, '/.*HTTP/1.1 403 Forbidden - \d+ bytes in 
[\d\.]+ second.*/', "Output correct, redirect_count was not present, got 
redirected to / : ".$result->output );
 
+       # redirect_count=0 is parsed as a parameter and incremented. When it 
goes up to 3, the redirection returns HTTP OK
        $cmd = "$command -p $port_http -u 
'/redirect_with_increment/path1/path2;redirect_count=0;p1=1;p2=ab?qp1=10&qp2=kl#f1=test'
 --onredirect=follow -vvv";
        $result = NPTest->testCmd( "$cmd" );
        is( $result->return_code, 0, $cmd);
-       like( $result->output, '/.*HTTP/1.1 200 OK - \d+ bytes in [\d\.]+ 
second.*/', "Output correct, redirect_count went up to 3: ".$result->output );
+       like( $result->output, '/.*HTTP/1.1 200 OK - \d+ bytes in [\d\.]+ 
second.*/', "Output correct, redirect_count went up to 3, and returned OK: 
".$result->output );
 
+       # location_redirect_count=0 goes up to 3, which uses the HTTP 302 style 
of redirection with 'Location' header
        $cmd = "$command -p $port_http -u 
'/redirect_with_increment/path1/path2;location_redirect_count=0;p1=1;p2=ab?qp1=10&qp2=kl#f1=test'
 --onredirect=follow -vvv";
        $result = NPTest->testCmd( "$cmd" );
        is( $result->return_code, 0, $cmd);
        like( $result->output, '/.*HTTP/1.1 200 OK - \d+ bytes in [\d\.]+ 
second.*/', "Output correct, location_redirect_count went up to 3: 
".$result->output );
 
+       # fail_count parameter may also go up to 3, which returns a HTTP 403
        $cmd = "$command -p $port_http -u 
'/redirect_with_increment/path1/path2;redirect_count=0;fail_count=2' 
--onredirect=follow -vvv";
        $result = NPTest->testCmd( "$cmd" );
        is( $result->return_code, 1, $cmd);
        like( $result->output, '/.*HTTP/1.1 403 Forbidden - \d+ bytes in 
[\d\.]+ second.*/', "Output correct, early due to fail_count reaching 3: 
".$result->output );
 
+       # redirect_count=0, p1=1 , p2=ab => redirect_count=1, p1=2 , p2=bc => 
redirect_count=2, p1=3 , p2=cd => redirect_count=3 , p1=4 , p2=de
+       # Last visited URI returns HTTP OK instead of redirect, and the one 
before that contains the new_uri in its content
        $cmd = "$command -p $port_http -u 
'/redirect_with_increment/path1/path2;redirect_count=0;p1=1;p2=ab?qp1=10&qp2=kl#f1=test'
 --onredirect=follow -vvv";
        $result = NPTest->testCmd( "$cmd" );
        is( $result->return_code, 0, $cmd);
-       like( $result->output, '/.*;p1=3;p2=cd\?*/', "Output correct, parsed 
and incremented both parameters p1 and p2 : ".$result->output );
+       like( $result->output, '/.*redirect_count=3;p1=4;p2=de\?*/', "Output 
correct, parsed and incremented both parameters p1 and p2 : ".$result->output );
+       like( $result->output, '/.*HTTP/1.1 200 OK - \d+ bytes in [\d\.]+ 
second.*/', "Output correct, location_redirect_count went up to 3: 
".$result->output );
 
+       # Same incrementation as before, uses the query parameters that come 
after the first '?' : qp1 and qp2
        $cmd = "$command -p $port_http -u 
'/redirect_with_increment/path1/path2;redirect_count=0;p1=1;p2=ab?qp1=10&qp2=kl#f1=test'
 --onredirect=follow -vvv";
        $result = NPTest->testCmd( "$cmd" );
        is( $result->return_code, 0, $cmd);
-       like( $result->output, '/.*\?qp1=12&qp2=mn*/', "Output correct, parsed 
and incremented both query parameters qp1 and qp2 : ".$result->output );
+       like( $result->output, '/.*\?qp1=13&qp2=no*/', "Output correct, parsed 
and incremented both query parameters qp1 and qp2 : ".$result->output );
+       like( $result->output, '/.*HTTP/1.1 200 OK - \d+ bytes in [\d\.]+ 
second.*/', "Output correct, location_redirect_count went up to 3: 
".$result->output );
 
+       # Check if the query parameter order is kept intact
        $cmd = "$command -p $port_http -u 
'/redirect_with_increment;redirect_count=0;?qp0=0&qp1=1&qp2=2&qp3=3&qp4=4&qp5=5'
 --onredirect=follow -vvv";
        $result = NPTest->testCmd( "$cmd" );
        is( $result->return_code, 0, $cmd);
-       like( $result->output, '/.*\?qp0=2&qp1=3&qp2=4&qp3=5&qp4=6&qp5=7*/', 
"Output correct, parsed and incremented query parameters qp1,qp2,qp3,qp4,qp5 in 
order : ".$result->output );
+       like( $result->output, '/.*\?qp0=3&qp1=4&qp2=5&qp3=6&qp4=7&qp5=8*/', 
"Output correct, parsed and incremented query parameters qp1,qp2,qp3,qp4,qp5 in 
order : ".$result->output );
+       like( $result->output, '/.*HTTP/1.1 200 OK - \d+ bytes in [\d\.]+ 
second.*/', "Output correct, location_redirect_count went up to 3: 
".$result->output );
 
+       # The fragment is a single item, and it should be kept during 
redirections as well.
+       # Increase the chars in strings. 'test' => 'uftu' => 'vguv' => 'whvw'
        $cmd = "$command -p $port_http -u 
'/redirect_with_increment/path1/path2;redirect_count=0;p1=1;p2=ab?qp1=10&qp2=kl#f1=test'
 --onredirect=follow -vvv";
        $result = NPTest->testCmd( "$cmd" );
        is( $result->return_code, 0, $cmd);
-       like( $result->output, '/.*#f1=vguv*/', "Output correct, parsed and 
incremented fragment f1 : ".$result->output );
+       like( $result->output, '/.*#f1=whvw*/', "Output correct, parsed and 
incremented fragment f1 : ".$result->output );
+       like( $result->output, '/.*HTTP/1.1 200 OK - \d+ bytes in [\d\.]+ 
second.*/', "Output correct, location_redirect_count went up to 3: 
".$result->output );
 
        # These tests may block
        # stickyport - on full urlS port is set back to 80 otherwise

Reply via email to