On Tue, 26 Jun 2001, Doug MacEachern wrote:

> patch looks good stas, but for some reason it now tries to run modules/cgi
> a bunch of times, which doesn't happen with any other tests:
>
> modules/cgi..........ok 2/6Confused test output: test 2 answered after
> test 2
> modules/cgi..........ok 2/6Confused test output: test 2 answered after
> test 2
> modules/cgi..........NOK 5Use of uninitialized value in string eq at
> modules/cgi.t line 28.
> modules/cgi..........dubious
>         Test returned status 9 (wstat 2304, 0x900)
> DIED. FAILED tests 3-6
>         Failed 4/6 tests, 33.33% okay
> modules/cgiupload....FAILED tests 1-2
>         Failed 2/2 tests, 0.00% okay
>

I've seen this too. Are you sure it has anything to do with the patch?
the patch just shuffles the tests. This error seem to be of a different
source. Can you reproduce this behavior on demand? Once I've restarted the
server I didn't see this error anymore, after many different tries.

Also I've attached a similar patch with a better randomizer sub (IMHO).

_____________________________________________________________________
Stas Bekman              JAm_pH     --   Just Another mod_perl Hacker
http://stason.org/       mod_perl Guide  http://perl.apache.org/guide
mailto:[EMAIL PROTECTED]   http://apachetoday.com http://eXtropia.com/
http://singlesheaven.com http://perl.apache.org http://perlmonth.com/

Index: Apache-Test/lib/Apache/TestHarness.pm
===================================================================
RCS file: /home/cvs/modperl-2.0/Apache-Test/lib/Apache/TestHarness.pm,v
retrieving revision 1.1
diff -b -u -r1.1 TestHarness.pm
--- Apache-Test/lib/Apache/TestHarness.pm       2001/04/02 08:53:59     1.1
+++ Apache-Test/lib/Apache/TestHarness.pm       2001/06/27 02:14:53
@@ -4,6 +4,7 @@
 use warnings FATAL => 'all';
 
 use Test::Harness ();
+use Apache::TestTrace;
 use File::Spec::Functions qw(catfile);
 use File::Find qw(finddepth);
 
@@ -36,7 +37,7 @@
     if (@$ts) {
        for (@$ts) {
            if (-d $_) {
-               push(@tests, <$_/*.t>);
+               push(@tests, sort <$_/*.t>);
            }
            else {
                $_ .= ".t" unless /\.t$/;
@@ -46,7 +47,7 @@
     }
     else {
         if ($args->{tdirs}) {
-            push @tests, map { <$_/*.t> } @{ $args->{tdirs} };
+            push @tests, map { sort <$_/*.t> } @{ $args->{tdirs} };
         }
         else {
             finddepth(sub {
@@ -56,7 +57,43 @@
                           $t =~ s:^$dotslash::;
                           push @tests, $t
                       }, '.');
+            @tests = sort @tests;
         }
+    }
+
+    my $times = $args->{times} || 1;
+    my $order = $args->{order} || 'rotate';
+
+    # re-shuffle the tests according to the requested order
+    if ($order eq 'repeat') {
+        # a, a, b, b
+        @tests = map { ($_) x $times } @tests;
+    }
+    elsif ($order eq 'rotate') {
+        # a, b, a, b
+        @tests = (@tests) x $times;
+    }
+    elsif ($order eq 'random') {
+        # random
+        @tests = (@tests) x $times;
+        my $seed = $ENV{APACHE_TEST_SEED} || '';
+        if ($seed) {
+            warning "Using the seed $ENV{APACHE_TEST_SEED} from APACHE_TEST_SEED env 
+var";
+        } else {
+           $seed = time ^ ($$ + ($$ << 15));
+           warning "Using the seed $seed";
+        }
+
+        srand($seed); # so we could reproduce the problem
+        my ($i,$j) = (0,0);
+        while ($i < @tests) {
+            $j = int rand(@tests - $i);
+            @tests[-$i,$j] = @tests[$j,-$i];
+            $i++;
+        }
+    }
+    else {
+        # nothing
     }
 
     Test::Harness::runtests(@tests);
Index: Apache-Test/lib/Apache/TestRun.pm
===================================================================
RCS file: /home/cvs/modperl-2.0/Apache-Test/lib/Apache/TestRun.pm,v
retrieving revision 1.9
diff -b -u -r1.9 TestRun.pm
--- Apache-Test/lib/Apache/TestRun.pm   2001/06/24 08:34:34     1.9
+++ Apache-Test/lib/Apache/TestRun.pm   2001/06/27 02:14:53
@@ -15,6 +15,8 @@
 my @std_run      = qw(start-httpd run-tests stop-httpd);
 my @others       = qw(verbose configure clean help ping);
 my @flag_opts    = (@std_run, @others);
+my @string_opts  = qw(order);
+my @num_opts     = qw(times);
 my @list_opts    = qw(preamble postamble);
 my @hash_opts    = qw(header);
 my @exit_opts    = qw(clean help ping debug);
@@ -23,6 +25,8 @@
 my %usage = (
    'start-httpd' => 'start the test server',
    'run-tests'   => 'run the tests',
+   'times=N'     => 'repeat the tests N times',
+   'order=mode'  => 'run the tests in one of the modes: (repeat|rotate|random)',
    'stop-httpd'  => 'stop the test server',
    'verbose'     => 'verbose output',
    'configure'   => 'force regeneration of httpd.conf',
@@ -116,7 +120,8 @@
     my(%opts, %vopts, %conf_opts);
 
     GetOptions(\%opts, @flag_opts, @exit_opts,
-               (map "$_=s", @request_opts),
+               (map "$_=s", @request_opts,@string_opts),
+               (map "$_=i", @num_opts),
                (map { ("$_=s", $vopts{$_} ||= []) } @list_opts),
                (map { ("$_=s", $vopts{$_} ||= {}) } @hash_opts));
 
@@ -249,6 +254,7 @@
     } elsif ($self->{opts}->{'run-tests'} and !$self->{server}->ping) {
         # make sure that the server is up when -run-tests is used
         warning "the test server wasn't not running: starting it...";
+        $self->{opts}->{'stop-httpd'} = 1;
         exit 1 unless $self->{server}->start;
     }
 }
@@ -259,6 +265,8 @@
     my $test_opts = {
         verbose => $self->{opts}->{verbose},
         tests   => $self->{tests},
+        times   => $self->{opts}->{times},
+        order   => $self->{opts}->{order},
     };
 
     #make sure we use an absolute path to perl
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to