in reply to Re: How can I write Test::Finished?
in thread How can I write Test::Finished?

Ok, so that will tell me when the child exited and what its return code was, but how does that help me distinguish between a rogue exit(0) and complete test run?

-sam

Replies are listed 'Best First'.
•Re^3: How can I write Test::Finished?
by merlyn (Sage) on Jun 21, 2004 at 19:25 UTC
    untested code:
    if (open CHILD, "-|") { while (<CHILD>) { if (/^SUPERSECRETSTRING\n/) { exit 0; } print; } close CHILD; # to update $? exit $? >> 8; # oops, child exits, so we do too } ... rest of tests here ... print "SUPERSECRETSTRING\n"; # probably as an END block or DESTROY met +hod

    -- Randal L. Schwartz, Perl hacker
    Be sure to read my standard disclaimer if this is a reply.

      Also, since you control both parent and child, you could generate a random 'secret' string.

      # probably as an END block or DESTROY method

      The point is to not put that in an END block or DESTROY method so that it only gets printed when the tests run to completion.

      - tye        

      ++. Sneaky.
Re^3: How can I write Test::Finished?
by Zaxo (Archbishop) on Jun 21, 2004 at 19:26 UTC

    The child can send, say, SIGUSR1 to the parent just before a normal exit. Or if you have a pipe, print "Done" over it. Sadly, there is little you can do that a really malicious rogue can't imitate.

    After Compline,
    Zaxo