RFR 6946101: ShellScaffold.sh based tests can issue "write error: Broken pipe" messages

Daniel D. Daugherty daniel.daugherty at oracle.com
Thu Feb 27 14:47:15 PST 2014


On 2/27/14 9:20 AM, Pavel Punegov wrote:
> Please review the fix for:
>    https://bugs.openjdk.java.net/browse/JDK-6946101
>
> webrev:
>    http://cr.openjdk.java.net/~iignatyev/ppunegov/6946101/webrev.00/

test/com/sun/jdi/ShellScaffold.sh
     line 531: # allows JDB to exit"
         stray double-quote at end of comment

     line 563: dofail "It's not allowed to send quit and exit commands 
from the test"
         'and' should be 'or'

     line 819:  # Kill debugger, it could be hang
         Typo: 'hang' -> 'hung'

test/com/sun/jdi/ArrayLengthDumpTest.sh
test/com/sun/jdi/CatchAllTest.sh
test/com/sun/jdi/CatchCaughtTest.sh
test/com/sun/jdi/CatchPatternTest.sh
test/com/sun/jdi/CommandCommentDelimiter.sh
test/com/sun/jdi/DeferredStepTest.sh
test/com/sun/jdi/DeoptimizeWalk.sh
test/com/sun/jdi/EvalArgs.sh
test/com/sun/jdi/GetLocalVariables3Test.sh
test/com/sun/jdi/GetLocalVariables4Test.sh
test/com/sun/jdi/JdbExprTest.sh
test/com/sun/jdi/JdbLockTest.sh
test/com/sun/jdi/JdbMethodExitTest.sh
test/com/sun/jdi/JdbMissStep.sh
test/com/sun/jdi/MixedSuspendTest.sh
test/com/sun/jdi/NotAField.sh
test/com/sun/jdi/NullLocalVariable.sh
test/com/sun/jdi/Redefine-g.sh
test/com/sun/jdi/RedefineAnnotation.sh
test/com/sun/jdi/RedefineChangeClassOrder.sh
test/com/sun/jdi/RedefineClasses.sh
test/com/sun/jdi/RedefineException.sh
test/com/sun/jdi/RedefineFinal.sh
test/com/sun/jdi/RedefineImplementor.sh
test/com/sun/jdi/RedefineIntConstantToLong.sh
test/com/sun/jdi/RedefineMulti.sh
test/com/sun/jdi/RedefinePop.sh
test/com/sun/jdi/RedefineTTYLineNumber.sh
test/com/sun/jdi/StringConvertTest.sh
test/com/sun/jdi/WatchFramePop.sh
     I _think_ I understand the new test driver style:

     - get rid of all explicit 'cmd quit' usages because mydojdbCmds()
       now wraps the test's dojdbCmds with a 'quit' cmd
     - any test that previously ended with a 'cmd cont' is presumed to
       be OK of that 'cmd cont' caused jdb to execute off the end of
       main(); sounds reasonable to me
     - perfect example of the new logic to catch an errant run off the
       end is  test/com/sun/jdi/WatchFramePop.sh
       - the last jdb cmd is 'next'
       - and jdb is NOT supposed to run off the end
       - the new logic should catch this nicely; I _think_ the old
         logic would only catch a run off the end if someone manually
         checked the test result


Thumbs up!

Dan


>
>
> This change fixes two issues with the tests:
>    1. Fix incorrect 'quit' command sending to JDB when JDB process was finished.
>    2. Improve JDB unexpected exit detection and  process synchronization.
>
> Description of fix:
>    1. Add allowExit parameter to cmd() to show that the given command can finish
>    JDB. E.g., 'cont' command make JDB execute debuggee to the end.
>    If allowExit wasn't set for a command then  assume that it can't finish
>    execution, and fail the test if it did.
>
>    2. Make test fail if it tries to send 'quit' or 'exit' commands. This makes
>    it impossible to send quit/exit from test by mistake. Scaffold will
>    finish JDB by itself if JDB didn't finish before be a command with allowExit
>    set. Add dofinish() function to be the only method that may exit JDB.
>
>    3. Add proper synchronization into waitForFinish(). On all systems except
>    SunOS use wait (from bash). On Solaris find the shell subprocess and wait for
>    its finish. It replaces wait  used on all other systems, because it
>    doesn't work on sh/ksh as in bash.
>
>    4. Fix tests: add allowExit to tests where it's needed.
>



More information about the serviceability-dev mailing list