On Wed, 8 Oct 2003, Stas Bekman wrote:
> Stas Bekman wrote:
> > ... You should be able then to reproduce
> > this outside Apache-Test, just doing:
> >
> > httpd > /dev/null &
> >
> > and then trying to run requests on it, should reproduce the problem.
>
> It's probably should be reproducable by a simple attempt to do:
>
> print STDOUT "It works";
>
> from the startup.pl file. Most likely it won't print
> anything and if you check the return code from print,
> it'll indicate failure.
That's right - I think it was in the way the server was
started in Apache::TestServer. Here's a diff that seems
to work, using IPC::Run3; I've tested it both with t/SMOKE
and t/TEST, on Win32. Note that I left the "print $log;"
statements in there, just to see the progress while
debugging.
==========================================================
Index: Apache-Test/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
--- Apache-Test/lib/Apache/TestSmoke.pm 12 Sep 2003 02:47:41 -0000 1.23
+++ Apache-Test/lib/Apache/TestSmoke.pm 9 Oct 2003 07:21:17 -0000
@@ -15,6 +15,7 @@
use FindBin;
use POSIX ();
use Symbol ();
+use IPC::Run3;
#use constant DEBUG => 1;
@@ -111,7 +112,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};
@@ -473,16 +474,10 @@
# start server
{
my $command = $self->{start_command};
- open my $pipe, "$command 2>&1|" or die "cannot fork: $!";
- my $oldfh = select $pipe; $| = 1; select $oldfh;
- # XXX: check startup success?
- my $started_ok = 0;
my $log = '';
- while (my $t = <$pipe>) {
- $started_ok = 1 if $t =~ /started/;
- $log .= $t;
- }
- close $pipe;
+ run3 $command, undef, \$log, \$log;
+ print $log;
+ my $started_ok = ($log =~ /started/) ? 1 : 0;
unless ($started_ok) {
error "failed to start server\n $log";
exit 1;
@@ -507,19 +502,11 @@
my $fill = "." x ($max_len - length $test_name);
$self->{total_tests_run}++;
- open my $pipe, "$command $test 2>&1|" or die "cannot fork: $!";
- my $oldfh = select $pipe; $| = 1; select $oldfh;
-
- my $ok = 0;
+ my $test_command = "$command $test";
my $log = '';
- while (<$pipe>) {
- $log .= $_;
-
- $ok = 1 if /All tests successful/;
- }
- # it's normal for $command to exit with a failure status if tests
- # fail, so we don't die/report it
- close $pipe;
+ run3 $test_command, undef, \$log, \$log;
+ print $log;
+ my $ok = ($log =~ /All tests successful/) ? 1 : 0;
my @core_files_msg = $self->Apache::TestRun::scan_core_incremental;
@@ -594,16 +581,10 @@
# stop server
{
my $command = $self->{stop_command};
- open my $pipe, "$command 2>&1|" or die "cannot fork: $!";
- my $oldfh = select $pipe; $| = 1; select $oldfh;
- # XXX: check stopup success?
- my $stopped_ok = 0;
my $log = '';
- while (my $t = <$pipe>) {
- $stopped_ok = 1 if $t =~ /shutdown/;
- $log .= $t;
- }
- close $pipe;
+ run3 $command, undef, \$log, \$log;
+ print $log;
+ my $stopped_ok = ($log =~ /shutdown/) ? 1 : 0;
unless ($stopped_ok) {
error "failed to stop server\n $log";
exit 1;
Index: Apache-Test/lib/Apache/TestServer.pm
===================================================================
RCS file: /home/cvs/httpd-test/perl-framework/Apache-Test/lib/Apache/TestServer.pm,v
retrieving revision 1.66
diff -u -r1.66 TestServer.pm
--- Apache-Test/lib/Apache/TestServer.pm 1 Oct 2003 13:45:23 -0000 1.66
+++ Apache-Test/lib/Apache/TestServer.pm 9 Oct 2003 07:21:17 -0000
@@ -316,12 +316,14 @@
if (Apache::TestConfig::WIN32) {
if ($self->{config}->{win32obj}) {
$self->{config}->{win32obj}->Kill(0);
+ warning "server $self->{name} shutdown";
return 1;
}
else {
require Win32::Process;
my $pid = $self->pid;
Win32::Process::KillProcess($pid, 0);
+ warning "server $self->{name} shutdown";
return 1;
}
}
@@ -443,7 +445,7 @@
Win32::Process::Create($obj,
$httpd,
"$cmd $one_process",
- 0,
+ 1,
Win32::Process::NORMAL_PRIORITY_CLASS(),
'.') || die Win32::Process::ErrorReport();
$config->{win32obj} = $obj;
=========================================================================
--
best regards,
randy
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]