summaryrefslogtreecommitdiffstats
path: root/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'plugins')
-rwxr-xr-xplugins/tests/check_curl.t66
1 files changed, 20 insertions, 46 deletions
diff --git a/plugins/tests/check_curl.t b/plugins/tests/check_curl.t
index 374c74b3..248eb4c5 100755
--- a/plugins/tests/check_curl.t
+++ b/plugins/tests/check_curl.t
@@ -27,7 +27,7 @@ use HTTP::Daemon::SSL;
27 27
28$ENV{'LC_TIME'} = "C"; 28$ENV{'LC_TIME'} = "C";
29 29
30my $common_tests = 75; 30my $common_tests = 95;
31my $ssl_only_tests = 8; 31my $ssl_only_tests = 8;
32# Check that all dependent modules are available 32# Check that all dependent modules are available
33eval "use HTTP::Daemon 6.01;"; 33eval "use HTTP::Daemon 6.01;";
@@ -211,19 +211,6 @@ sub run_server {
211 $content .= " query: ${query}\n"; 211 $content .= " query: ${query}\n";
212 $content .= " fragment: ${fragment}\n"; 212 $content .= " fragment: ${fragment}\n";
213 213
214 # Sets and returns the scheme-specific part of the $uri (everything between the scheme and the fragment) as an escaped string.
215 #my $opaque = $uri->opaque;
216 #$content .= " opaque: ${opaque}\n";
217
218 # group 1 is captured: anything that is not '/' : ([^/]*)
219 # / matches the / directly
220 # group 2 is captured: anything : (.*)
221 #my ($before_slash, $after_slash) = $opaque =~ m{^/([^/]*)/(.*)$};
222 #$before_slash //= '';
223 #$after_slash //= '';
224 #$content .= " before_slash: ${before_slash}\n";
225 #$content .= " after_slash: ${after_slash}\n";
226
227 # split the URI part and parameters. URI package cannot do this 214 # split the URI part and parameters. URI package cannot do this
228 # group 1 is captured: anything without a semicolon: ([^;]*) 215 # group 1 is captured: anything without a semicolon: ([^;]*)
229 # group 2 is uncaptured: (?:;(.*))? 216 # group 2 is uncaptured: (?:;(.*))?
@@ -257,20 +244,6 @@ sub run_server {
257 $content .= " query: ${key} -> ${value}\n"; 244 $content .= " query: ${key} -> ${value}\n";
258 } 245 }
259 246
260 # fragment: try to split into key=value pairs on ';' or '&' if present
261 my @fragment_pairs;
262 my $fragment_separator = '';
263 if ($fragment ne '') {
264 $fragment_separator = ($fragment =~ /&/ ? '&' : ';');
265 for my $f (split /[&;]/, $fragment) {
266 next unless length $f;
267 my ($key,$value) = split /=/, $f, 2;
268 $value //= '';
269 push @fragment_pairs, [ $key, $value ];
270 $content .= " fragment: ${key} -> ${value}\n";
271 }
272 }
273
274 # helper to increment value 247 # helper to increment value
275 my $increment = sub { 248 my $increment = sub {
276 my ($v) = @_; 249 my ($v) = @_;
@@ -296,10 +269,6 @@ sub run_server {
296 $pair->[1] = $increment->($pair->[1]); 269 $pair->[1] = $increment->($pair->[1]);
297 $content .= " query parameter new: " . $pair->[0] . " -> " . $pair->[1] . "\n"; 270 $content .= " query parameter new: " . $pair->[0] . " -> " . $pair->[1] . "\n";
298 } 271 }
299 for my $pair (@fragment_pairs) {
300 $pair->[1] = $increment->($pair->[1]);
301 $content .= " fragment new: " . $pair->[0] . " -> " . $pair->[1] . "\n";
302 }
303 272
304 # rebuild strings 273 # rebuild strings
305 my $new_parameter_str = join(';', map { $_->[0] . '=' . $_->[1] } @parameter_pairs); 274 my $new_parameter_str = join(';', map { $_->[0] . '=' . $_->[1] } @parameter_pairs);
@@ -309,9 +278,13 @@ sub run_server {
309 my @new_query_form; 278 my @new_query_form;
310 for my $p (@query_parameter_pairs) { push @new_query_form, $p->[0], $p->[1] } 279 for my $p (@query_parameter_pairs) { push @new_query_form, $p->[0], $p->[1] }
311 280
312 my $new_fragment_str = ''; 281 my $new_fragment_str = '';
313 if (@fragment_pairs) { 282 for my $pair (@parameter_pairs) {
314 $new_fragment_str = join($fragment_separator, map { $_->[0] . '=' . $_->[1] } @fragment_pairs); 283 my $key = $pair->[0];
284 my $value = $pair->[1];
285 if ($key eq "fragment") {
286 $new_fragment_str = $value
287 }
315 } 288 }
316 $content .= " new_fragment_str: ${new_fragment_str}\n"; 289 $content .= " new_fragment_str: ${new_fragment_str}\n";
317 290
@@ -635,57 +608,58 @@ sub run_common_tests {
635 # The server at this point has dynamic redirection. It tries to increment values that it sees in these fields, then redirects. 608 # The server at this point has dynamic redirection. It tries to increment values that it sees in these fields, then redirects.
636 # It also appends some debug log and writes it into HTTP content, pass the -vvv parameter to see them. 609 # It also appends some debug log and writes it into HTTP content, pass the -vvv parameter to see them.
637 610
638 $cmd = "$command -p $port_http -u '/redirect_with_increment/path1/path2/path3/path4' --onredirect=follow -vvv"; 611 $cmd = "$command -u '/redirect_with_increment/path1/path2/path3/path4' --onredirect=follow -vvv";
639 $result = NPTest->testCmd( "$cmd" ); 612 $result = NPTest->testCmd( "$cmd" );
640 is( $result->return_code, 1, $cmd); 613 is( $result->return_code, 1, $cmd);
641 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 ); 614 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 );
642 615
643 # redirect_count=0 is parsed as a parameter and incremented. When it goes up to 3, the redirection returns HTTP OK 616 # redirect_count=0 is parsed as a parameter and incremented. When it goes up to 3, the redirection returns HTTP OK
644 $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"; 617 $cmd = "$command -u '/redirect_with_increment/path1/path2;redirect_count=0;p1=1;p2=ab?qp1=10&qp2=kl#f1=test' --onredirect=follow -vvv";
645 $result = NPTest->testCmd( "$cmd" ); 618 $result = NPTest->testCmd( "$cmd" );
646 is( $result->return_code, 0, $cmd); 619 is( $result->return_code, 0, $cmd);
647 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 ); 620 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 );
648 621
649 # location_redirect_count=0 goes up to 3, which uses the HTTP 302 style of redirection with 'Location' header 622 # location_redirect_count=0 goes up to 3, which uses the HTTP 302 style of redirection with 'Location' header
650 $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"; 623 $cmd = "$command -u '/redirect_with_increment/path1/path2;location_redirect_count=0;p1=1;p2=ab?qp1=10&qp2=kl#f1=test' --onredirect=follow -vvv";
651 $result = NPTest->testCmd( "$cmd" ); 624 $result = NPTest->testCmd( "$cmd" );
652 is( $result->return_code, 0, $cmd); 625 is( $result->return_code, 0, $cmd);
653 like( $result->output, '/.*HTTP/1.1 200 OK - \d+ bytes in [\d\.]+ second.*/', "Output correct, location_redirect_count went up to 3: ".$result->output ); 626 like( $result->output, '/.*HTTP/1.1 200 OK - \d+ bytes in [\d\.]+ second.*/', "Output correct, location_redirect_count went up to 3: ".$result->output );
654 627
655 # fail_count parameter may also go up to 3, which returns a HTTP 403 628 # fail_count parameter may also go up to 3, which returns a HTTP 403
656 $cmd = "$command -p $port_http -u '/redirect_with_increment/path1/path2;redirect_count=0;fail_count=2' --onredirect=follow -vvv"; 629 $cmd = "$command -u '/redirect_with_increment/path1/path2;redirect_count=0;fail_count=2' --onredirect=follow -vvv";
657 $result = NPTest->testCmd( "$cmd" ); 630 $result = NPTest->testCmd( "$cmd" );
658 is( $result->return_code, 1, $cmd); 631 is( $result->return_code, 1, $cmd);
659 like( $result->output, '/.*HTTP/1.1 403 Forbidden - \d+ bytes in [\d\.]+ second.*/', "Output correct, early due to fail_count reaching 3: ".$result->output ); 632 like( $result->output, '/.*HTTP/1.1 403 Forbidden - \d+ bytes in [\d\.]+ second.*/', "Output correct, early due to fail_count reaching 3: ".$result->output );
660 633
661 # 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 634 # 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
662 # Last visited URI returns HTTP OK instead of redirect, and the one before that contains the new_uri in its content 635 # Last visited URI returns HTTP OK instead of redirect, and the one before that contains the new_uri in its content
663 $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"; 636 $cmd = "$command -u '/redirect_with_increment/path1/path2;redirect_count=0;p1=1;p2=ab?qp1=10&qp2=kl#f1=test' --onredirect=follow -vvv";
664 $result = NPTest->testCmd( "$cmd" ); 637 $result = NPTest->testCmd( "$cmd" );
665 is( $result->return_code, 0, $cmd); 638 is( $result->return_code, 0, $cmd);
666 like( $result->output, '/.*redirect_count=3;p1=4;p2=de\?*/', "Output correct, parsed and incremented both parameters p1 and p2 : ".$result->output ); 639 like( $result->output, '/.*redirect_count=3;p1=4;p2=de\?*/', "Output correct, parsed and incremented both parameters p1 and p2 : ".$result->output );
667 like( $result->output, '/.*HTTP/1.1 200 OK - \d+ bytes in [\d\.]+ second.*/', "Output correct, location_redirect_count went up to 3: ".$result->output ); 640 like( $result->output, '/.*HTTP/1.1 200 OK - \d+ bytes in [\d\.]+ second.*/', "Output correct, location_redirect_count went up to 3: ".$result->output );
668 641
669 # Same incrementation as before, uses the query parameters that come after the first '?' : qp1 and qp2 642 # Same incrementation as before, uses the query parameters that come after the first '?' : qp1 and qp2
670 $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"; 643 $cmd = "$command -u '/redirect_with_increment/path1/path2;redirect_count=0;p1=1;p2=ab?qp1=10&qp2=kl#f1=test' --onredirect=follow -vvv";
671 $result = NPTest->testCmd( "$cmd" ); 644 $result = NPTest->testCmd( "$cmd" );
672 is( $result->return_code, 0, $cmd); 645 is( $result->return_code, 0, $cmd);
673 like( $result->output, '/.*\?qp1=13&qp2=no*/', "Output correct, parsed and incremented both query parameters qp1 and qp2 : ".$result->output ); 646 like( $result->output, '/.*\?qp1=13&qp2=no*/', "Output correct, parsed and incremented both query parameters qp1 and qp2 : ".$result->output );
674 like( $result->output, '/.*HTTP/1.1 200 OK - \d+ bytes in [\d\.]+ second.*/', "Output correct, location_redirect_count went up to 3: ".$result->output ); 647 like( $result->output, '/.*HTTP/1.1 200 OK - \d+ bytes in [\d\.]+ second.*/', "Output correct, location_redirect_count went up to 3: ".$result->output );
675 648
676 # Check if the query parameter order is kept intact 649 # Check if the query parameter order is kept intact
677 $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"; 650 $cmd = "$command -u '/redirect_with_increment;redirect_count=0;?qp0=0&qp1=1&qp2=2&qp3=3&qp4=4&qp5=5' --onredirect=follow -vvv";
678 $result = NPTest->testCmd( "$cmd" ); 651 $result = NPTest->testCmd( "$cmd" );
679 is( $result->return_code, 0, $cmd); 652 is( $result->return_code, 0, $cmd);
680 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 ); 653 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 );
681 like( $result->output, '/.*HTTP/1.1 200 OK - \d+ bytes in [\d\.]+ second.*/', "Output correct, location_redirect_count went up to 3: ".$result->output ); 654 like( $result->output, '/.*HTTP/1.1 200 OK - \d+ bytes in [\d\.]+ second.*/', "Output correct, location_redirect_count went up to 3: ".$result->output );
682 655
683 # The fragment is a single item, and it should be kept during redirections as well. 656 # The fragment is passed as another parameter.
684 # Increase the chars in strings. 'test' => 'uftu' => 'vguv' => 'whvw' 657 # During the server redirects the fragment will be set to its value, if such a key is present.
685 $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"; 658 # 'ebiil' => 'fcjjm' => 'gdkkn' => 'hello'
659 $cmd = "$command -u '/redirect_with_increment/path1/path2;redirect_count=0;fragment=ebiil?qp1=0' --onredirect=follow -vvv";
686 $result = NPTest->testCmd( "$cmd" ); 660 $result = NPTest->testCmd( "$cmd" );
687 is( $result->return_code, 0, $cmd); 661 is( $result->return_code, 0, $cmd);
688 like( $result->output, '/.*#f1=whvw*/', "Output correct, parsed and incremented fragment f1 : ".$result->output ); 662 like( $result->output, '/.*redirect_count=3;fragment=hello\?qp1=3#hello*/', "Output correct, fragments are specified by server and followed by check_curl: ".$result->output );
689 like( $result->output, '/.*HTTP/1.1 200 OK - \d+ bytes in [\d\.]+ second.*/', "Output correct, location_redirect_count went up to 3: ".$result->output ); 663 like( $result->output, '/.*HTTP/1.1 200 OK - \d+ bytes in [\d\.]+ second.*/', "Output correct, location_redirect_count went up to 3: ".$result->output );
690 664
691 # These tests may block 665 # These tests may block