On Wed, 17 Sep 2003, Steve Hay wrote: > Stas Bekman wrote: > > > > Steve Hay wrote: > > > I tried running "perl t/SMOKE" but I just get this: > > > > > > ===== > > > C:\Temp\modperl-2.0>perl t/SMOKE > > > *** Using random number seed: 1012582729 (autogenerated) > > > *** > > > ------------------------------------------------------------ > > > *** [001-00-00] trying all tests 10 times > > > !!! failed to start server > > > '.' is not recognized as an internal or external command, > > > operable program or batch file. > > > ===== > > > > Yup, it needs tweaking to run on win32.
Here's a first stab at a patch to get t/SMOKE running on Win32. I tried to localize the Win32 changes by putting them in their own sub. The full functionality is probably not all there - it still needs more testing - but it does seem workable in principle. ======================================================== Index: lib/Apache/TestSmoke.pm =================================================================== RCS file: /home/cvs/httpd-test/perl-framework/Apache-Test/lib/Apache/TestSmoke.pm,v retrieving revision 1.23 diff -u -r1.23 TestSmoke.pm --- lib/Apache/TestSmoke.pm 12 Sep 2003 02:47:41 -0000 1.23 +++ lib/Apache/TestSmoke.pm 30 Sep 2003 05:42:39 -0000 @@ -16,6 +16,12 @@ use POSIX (); use Symbol (); +use constant WIN32 => Apache::TestConfig::WIN32; +if (WIN32) { + require Win32; + require Win32::Process; +} + #use constant DEBUG => 1; # how many times to run all tests at the first iteration @@ -111,7 +117,7 @@ @{ $self->{tests} } = $self->get_tests($test_opts); - $self->{base_command} = "./TEST"; + $self->{base_command} = "$^X $FindBin::Bin/TEST"; # options common to all $self->{base_command} .= " -verbose" if $self->{verbose}; @@ -462,6 +468,13 @@ sub run_test { my($self, $iter, $count, $tests, $ra_ok) = @_; + my $run_test = \&{"run_test_$^O"}; + $run_test = \&run_test_default unless defined &$run_test; + $run_test->($self, $iter, $count, $tests, $ra_ok); +} + +sub run_test_default { + my($self, $iter, $count, $tests, $ra_ok) = @_; my $bad = ''; my $ra_nok = []; @@ -627,6 +640,129 @@ return $bad; } + +} + +sub run_test_MSWin32 { + my($self, $iter, $count, $tests, $ra_ok) = @_; + my $bad = ''; + my $ra_nok = []; + my $ProcessObj; + + # start server + { + my $cmd = $self->{start_command}; + my $cflags = Win32::Process::NORMAL_PRIORITY_CLASS(); + my $shell = $ENV{ComSpec}; + Win32::Process::Create($ProcessObj, + $shell, + "$shell /c $cmd", + 0, + $cflags, + '.') + or die Win32::FormatMessage(Win32::GetLastError()); + $ProcessObj->Wait(Win32::Process::INFINITE()); + } + my $t_logs = $self->{test_config}->{vars}->{t_logs}; + my @log_files = map { catfile $t_logs, $_ } qw(error_log access_log); + $self->logs_init(@log_files); + + # run tests + { + my $command = $self->{run_command}; + + my $max_len = 1; + for my $test (@$tests) { + $max_len = length $test if length $test > $max_len; + } + + for my $test (@$tests) { + my $ok = 0; + my $log = ''; + (my $test_name = $test) =~ s/\.t$//; + my $fill = "." x ($max_len - length $test_name); + $self->{total_tests_run}++; + + my @args = (split(' ', $command), $test); + $ok = not system(@args); + if ($ok) { + push @$ra_ok, $test; + if ($self->{verbose}) { + print STDERR "$test_name${fill}ok\n"; + } + # need to run log_diff to reset the position of the fh + my %log_diffs = map { $_ => $self->log_diff($_) } @log_files; + + } + else { + push @$ra_nok, $test; + $bad = $test; + + if ($self->{verbose}) { + print STDERR "$test_name${fill}FAILED\n"; + error sep("-"); + + # give server some time to finish the + # logging. it's ok to wait long time since we have + # to deal with an error + sleep 5; + my %log_diffs = map { $_ => $self->log_diff($_) } @log_files; + + # client log + error "\t\t*** run log ***"; + $log =~ s/^/ /mg; + print STDERR "$log\n"; + + # server logs + for my $path (@log_files) { + next unless length $log_diffs{$path}; + error "\t\t*** $path ***"; + $log_diffs{$path} =~ s/^/ /mg; + print STDERR "$log_diffs{$path}\n"; + } + } + + if ($self->{verbose}) { + error sep("-"); + } + + unless ($self->{bug_mode}) { + # normal smoke stop the run, but in the bug_mode + # we want to complete all the tests + last; + } + } + } + } + $self->logs_end(); + + + # stop server + { + my $pid; + if ($ProcessObj) { + $pid = $ProcessObj->GetProcessID(); + $ProcessObj->Kill(0); + } + if ($pid) { + Win32::Process::KillProcess($pid, 0); + } + } + $self->kill_proc(); + + if ($self->{bug_mode}) { + warning sep("-"); + if (@$ra_nok == 0) { + printf STDERR "All tests successful (%d)\n", scalar @$ra_ok; + } + else { + error sprintf "error running %d tests out of %d\n", + scalar(@$ra_nok), scalar @$ra_ok + @$ra_nok; + } + } + else { + return $bad; + } } ============================================================= -- best regards, randy --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]