Use macros for the magic numbers in decompress_iob().
[privoxy.git] / tools / privoxy-regression-test.pl
index 920b218..b51a165 100755 (executable)
@@ -7,7 +7,7 @@
 # A regression test "framework" for Privoxy. For documentation see:
 # perldoc privoxy-regression-test.pl
 #
-# $Id: privoxy-regression-test.pl,v 1.176 2009/05/27 20:26:59 fk Exp fk $
+# $Id: privoxy-regression-test.pl,v 1.182 2009/06/01 13:21:48 fk Exp $
 #
 # Wish list:
 #
@@ -69,13 +69,12 @@ use constant {
 
     # Internal use, don't modify
     # Available debug bits:
-    LL_ERROR            =>  1,
+    LL_SOFT_ERROR       =>  1,
     LL_VERBOSE_FAILURE  =>  2,
     LL_PAGE_FETCHING    =>  4,
     LL_FILE_LOADING     =>  8,
     LL_VERBOSE_SUCCESS  => 16,
     LL_STATUS           => 32,
-    LL_SOFT_ERROR       => 64,
 
     CLIENT_HEADER_TEST  =>  1,
     SERVER_HEADER_TEST  =>  2,
@@ -109,9 +108,8 @@ sub get_default_log_level () {
     $log_level |= LL_VERBOSE_SUCCESS if DEBUG_LEVEL_VERBOSE_SUCCESS;
     $log_level |= LL_STATUS          if DEBUG_LEVEL_STATUS;
 
-    # These are intended to be always on.
+    # This one is supposed to be always on.
     $log_level |= LL_SOFT_ERROR;
-    $log_level |= LL_ERROR;
 
     return $log_level;
 }
@@ -141,13 +139,13 @@ sub parse_tag ($) {
 sub check_for_forbidden_characters ($) {
 
     my $string = shift;
-    my $allowed = '[-=\dA-Za-z~{}:./();\s,+@"_%?&*^]';
+    my $allowed = '[-=\dA-Za-z~{}:./();\,+@"_%?&*^]';
 
     unless ($string =~ m/^$allowed*$/o) {
         my $forbidden = $string;
         $forbidden =~ s@^$allowed*(.).*@$1@;
 
-        l(LL_ERROR, "'" . $string . "' contains character '" . $forbidden. "' which is unacceptable.");
+        log_and_die("'" . $string . "' contains character '" . $forbidden. "' which is unacceptable.");
     }
 }
 
@@ -166,6 +164,10 @@ sub load_regressions_tests () {
 
     l(LL_STATUS, "Asking Privoxy for the number of action files available ...");
 
+    # Dear Privoxy, please reload the config file if necessary ...
+    get_cgi_page_or_else($curl_url);
+
+    # ... so we get the latest one here.
     foreach (@{get_cgi_page_or_else($curl_url)}) {
 
         chomp;
@@ -366,9 +368,8 @@ sub load_action_files ($) {
                 # Will be used by each following Sticky URL.
                 $sticky_actions = $value;
                 if ($sticky_actions =~ /{[^}]*\s/) {
-                    l(LL_ERROR,
-                      "'Sticky Actions' with whitespace inside the " .
-                      "action parameters are currently unsupported.");
+                    log_and_die("'Sticky Actions' with whitespace inside the " .
+                                "action parameters are currently unsupported.");
                 }
             }
             
@@ -434,7 +435,7 @@ sub load_action_files ($) {
                     l(LL_FILE_LOADING, "Sticky actions: " . $sticky_actions);
                     $regression_tests[$si][$ri]{'sticky-actions'} = $sticky_actions;
                 } else {
-                    l(LL_ERROR, "Sticky URL without Sticky Actions: $value");
+                    log_and_die("Sticky URL without Sticky Actions: $value");
                 }
 
             } else {
@@ -491,21 +492,7 @@ sub execute_regression_tests () {
                 die "Regression test id mismatch" if ($r != $regression_tests[$s][$r]{'regression-test-id'});
 
                 my $number = $regression_tests[$s][$r]{'number'};
-                my $skip_reason = undef;
-
-                if ($regression_tests[$s][$r]{'ignore'}) {
-
-                    $skip_reason = "Ignore flag is set";
-
-                } elsif (cli_option_is_set('test-number')
-                         and get_cli_option('test-number') != $number) {
-
-                    $skip_reason = "Only executing test " . get_cli_option('test-number');
-
-                } else {
-
-                    $skip_reason = level_is_unacceptable($regression_tests[$s][$r]{'level'});
-                }
+                my $skip_reason = get_skip_reason($regression_tests[$s][$r]);
 
                 if (defined $skip_reason) {
 
@@ -542,6 +529,27 @@ sub execute_regression_tests () {
     }
 }
 
+sub get_skip_reason ($) {
+    my $test = shift;
+    my $skip_reason = undef;
+
+    if ($test->{'ignore'}) {
+
+        $skip_reason = "Ignore flag is set";
+
+    } elsif (cli_option_is_set('test-number') and
+             get_cli_option('test-number') != $test->{'number'}) {
+
+        $skip_reason = "Only executing test " . get_cli_option('test-number');
+
+    } else {
+
+        $skip_reason = level_is_unacceptable($test->{'level'});
+    }
+
+    return $skip_reason;
+}
+
 sub level_is_unacceptable ($) {
     my $level = shift;
     my $min_level = get_cli_option('min-level');
@@ -622,6 +630,10 @@ sub register_dependency ($$) {
     } elsif ($dependency =~ /feature status\s+(.*)/) {
 
         $dependencies{$level}{'feature status'} = $1;
+
+    } else {
+
+        log_and_die("Didn't recognize dependency: $dependency.");
     }
 }
 
@@ -1006,7 +1018,7 @@ sub get_server_header ($$) {
     my $header_to_get;
 
     # XXX: Should be caught before starting to test.
-    l(LL_ERROR, "No expect header for test " . $test{'number'})
+    log_and_die("No expect header for test " . $test{'number'})
         unless defined $expect_header;
 
     if ($expect_header eq 'REMOVAL'
@@ -1047,7 +1059,7 @@ sub get_status_code ($) {
 
             return '123' if cli_option_is_set('fuzzer-feeding');
             chomp;
-            l(LL_ERROR, 'Unexpected buffer line: "' . $_ . '"');
+            log_and_die('Unexpected buffer line: "' . $_ . '"');
         }
     }
 }
@@ -1101,7 +1113,7 @@ sub fuzz_header($) {
 
 sub check_for_curl () {
     my $curl = CURL;
-    l(LL_ERROR, "No curl found.") unless (`which $curl`);
+    log_and_die("No curl found.") unless (`which $curl`);
 }
 
 sub get_cgi_page_or_else ($) {
@@ -1123,7 +1135,7 @@ sub get_cgi_page_or_else ($) {
 
         } else {
 
-            l(LL_ERROR, $log_message);
+            log_and_die($log_message);
         }
     }
     
@@ -1219,9 +1231,8 @@ sub get_page_with_curl ($) {
     } while ($? && --$retries_left);
 
     unless ($retries_left) {
-        l(LL_ERROR,
-          "Running curl failed " . get_cli_option('retries') .
-          " times in a row. Last error: '" . $failure_reason . "'.");
+        log_and_die("Running curl failed " . get_cli_option('retries') .
+                    " times in a row. Last error: '" . $failure_reason . "'.");
     }
 
     return \@buffer;
@@ -1256,17 +1267,14 @@ sub l ($$) {
     my $this_level = shift;
     my $message = shift;
 
-    return unless ($log_level & $this_level);
-
-    if (LL_ERROR & $this_level) {
-        $message = 'Oh noes. ' . $message . ' Fatal error. Exiting.';
-    }
+    log_message($message) if ($log_level & $this_level);
+}
 
-    log_message($message);
+sub log_and_die ($) {
+    my $message = shift;
 
-    if (LL_ERROR & $this_level) {
-        exit;
-    }
+    log_message('Oh noes. ' . $message . ' Fatal error. Exiting.');
+    exit;
 }
 
 sub log_message ($) {
@@ -1503,7 +1511,7 @@ sub init_proxy_settings($) {
 sub start_forks($) {
     my $forks = shift;
 
-    l(LL_ERROR, "Invalid --fork value: " . $forks . ".") if ($forks < 0); 
+    log_and_die("Invalid --fork value: " . $forks . ".") if ($forks < 0);
 
     foreach my $fork (1 .. $forks) {
         log_message("Starting fork $fork");