Steve Hay wrote:
Randy Kobes wrote:

On Tue, 30 Sep 2003, Stas Bekman wrote:



Barrie Slaymaker wrote:


On Sep 30 2003, Stas Bekman wrote:



Isn't IPC::Run3 based on IPC::Run? So if IPC::Run doesn't work...

No, it's smaller, faster, lighter ;)


It's "all new code", no select(). Uses File::Temp
temporary files to optionally queue up input for the
child, runs the child, optionally with any stdout and/or
stderr redirects to other temp files, then slurps the
results. Simple. Portable. Relatively efficient for
small to moderate amounts of data, especially when you
start comparing it to the things that IPC::Run does when
faced with the odd behaviors of Win32's anonymous pipe
and TCP socket APIs (you want the child to have pipe()s,
but you can't select() on pipes, and I don't know how to
take a pipe handle that Win32 gives me and do a blocking
poll on it a la select()--WaitForMultipleObjects() might
do it, but I'm no guru there).

So may be we could try it. If Randy says that it works for
him, we will happily move to use it instead ;)


And that does seem to work! A diff appears below (not tested
on linux) - in this, I also added a change to TestServer.pm
to print out a message on Win32 when shutting down the
server, as that's expected when checking that the server
successfully shut down in TestSmoke.pm.

This version gets SMOKE running, but it doesn't seem to be able to keep running.

I have a 1.99_10 build tree in which "nmake test" runs with all tests successful every time, but when I try "perl t/SMOKE" with your patch below, I find that one of the tests has an error and causes everything to stop.

I've tried it three times now. Each time I had it fail on a different test (modperl\cookie, modperl\endav, modperl\post_utf8), but every time I get this message written into t/logs/error_log:

Failed to dup STDIN: Permission denied.

That sounds bad. What it tries to do is:


open my $oldout, ">&STDIN" or die "Can't dup STDIN: $!";

though using the C API:

modperl_in.c:102

    status = Perl_do_open(aTHX_ handle_save, ">&STDIN", 8, FALSE, O_RDONLY,
                          0, Nullfp);
    if (status == 0) {
        Perl_croak(aTHX_ "Failed to dup STDIN: %_", get_sv("!", TRUE));
    }

Hmm, looks like I can't count. Does this help:

Index: src/modules/perl/modperl_io.c
===================================================================
RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_io.c,v
retrieving revision 1.11
diff -u -r1.11 modperl_io.c
--- src/modules/perl/modperl_io.c       24 Aug 2003 19:37:29 -0000      1.11
+++ src/modules/perl/modperl_io.c       1 Oct 2003 17:30:27 -0000
@@ -99,7 +99,7 @@
     MP_TRACE_o(MP_FUNC, "start");

     /* open my $oldout, ">&STDIN" or die "Can't dup STDIN: $!"; */
-    status = Perl_do_open(aTHX_ handle_save, ">&STDIN", 8, FALSE, O_RDONLY,
+    status = Perl_do_open(aTHX_ handle_save, ">&STDIN", 7, FALSE, O_RDONLY,
                           0, Nullfp);
     if (status == 0) {
         Perl_croak(aTHX_ "Failed to dup STDIN: %_", get_sv("!", TRUE));


This is the only message in the log after the server has started up, and it doesn't appear until the test fails. I'm using IPC::Run3 0.009 on Perl 5.8.1 / Apache 2.0.47.

Can you reproduce this problem outside t/SMOKE? You should be able to by doing:


t/TEST -start
t/TEST -run modperl\cookie
t/TEST -stop

since that's what t/SMOKE does

I also find that the SMOKE stops smoking when the test fails. For example, here's the end of my third SMOKE run:

=====
[...]
modperl\post_utf8....request has failed (the response code was: 500)
see t/logs/error_log for more details
dubious
       Test returned status 9 (wstat 2304, 0x900)
!!! error running tests (please examine t\logs\error_log)
*** server localhost:8529 is not running
!!! failed to stop server
*** server localhost:8529 is not running
=====

Is that supposed to happen? I thought it would have carried on, and then given a report at the end of all the tests that failed. Maybe it's just because the error that occurred actually took the Apache server down. Perhaps SMOKE should have the ability to restart Apache if/when that happens, so that it can carry on?

This is by design. Normally you bring 'make test' to 100% completion, then you start looking for combinations of tests that may cause a failure. If it finds such a combination it tries to reduce it to the minimal sequence so it's easy to reproduce and debug. However if it finds that running a single test alone causes a failure, it immediately quits since what's the point of trying again if that test will fail again, no new results will be acquired.


__________________________________________________________________
Stas Bekman            JAm_pH ------> Just Another mod_perl Hacker
http://stason.org/     mod_perl Guide ---> http://perl.apache.org
mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org   http://ticketmaster.com


--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to