jtreg shell tests

Jonathan Gibbons jonathan.gibbons at oracle.com
Tue Feb 5 01:08:24 UTC 2019

I have published an updated version of these notes on the OpenJDK 
website [1].

I have also pushed updates to the jtreg repo. With this version I can 
successfully  run shell tests
in the following environments:

  * Ubuntu Linux (I'm assuming macOS and other POSIX systems will be the
  * Windows/Cygwin
  * Windows/WSL, testing a Windows JDK (requires jtreg to be run with a
    Windows JDK)
  * Windows/WSL, testing a Linux JDK (requires jtreg to be run with a
    Linux JDK)

-- Jon

[1] http://openjdk.java.net/jtreg/shellTests.html

On 01/25/2019 04:43 PM, Jonathan Gibbons wrote:
> With all the recent discussion regarding how to support the use of 
> Windows Subsystem for Linux (WSL)
> as an alternate to Cygwin, it seems worth writing up some 
> recommendations on writing jtreg shell tests.
> The intent of these notes is that they will evolve into a page in the 
> jtreg section on the OpenJDK website.
> The focus is specifically about different approaches to providing the 
> ability to run a shell test on all
> supported platforms, by means of abstracting the significant 
> differences into a series of environment
> variables that are set according to the environment in which the test 
> is running.
> Option 1.
> Convert the test to Java. In general, this continues to be the 
> recommended alternative.
> Option 2.
> Use a shell `case` statement, like the following, or a variant thereof:
>     OS=`uname -s`;
>     case "$OS" in
>         Windows* | CYGWIN* )
>             FS="\\"
>             PS=";"
>             NULL=NUL
>             ;;
>         Linux )
>             if [ -r $TESTJAVA/bin/java.exe ]; then
>                 FS="\\"
>                 PS=";"
>                 EXE_SUFFIX=".exe"
>             else
>                 FS="/"
>                 PS=":"
>             fi
>             NULL=/dev/null
>             ;;
>         * )
>             FS="/"
>             PS=":"
>             NULL=/dev/null
>     esac
> Option 3.
> Use a shared library script to embody the behavior in the previous 
> example.  jtreg now provides a new `TESTROOT` environment variable, 
> which makes it easy to reference a shared script in a constant manner 
> from any shell test, wherever the test is within the test suite. Since 
> the library script is used to set environment variables like `FS`, 
> `PS`, and `NULL`, it should be executed with `source` and not `bash` 
> or `sh`.
> Option 4.
> jtreg now sets the following environment variables when running a 
> shell script: `FS`, `PS`, `NULL` and `EXE_SUFFIX`.  This may be enough 
> to completely avoid the need for a `case` statement in each shell 
> script or the use of a shared library script to set these variables.
> Running scripts standalone.
> One concern when working with shell tests has been the ability to run 
> the test "stand-alone", without the use of jtreg. In the past, this 
> was seen as justification for the explicit use of the `case` statement 
> in each shell test. However, the need to run shell tests standalone no 
> longer seems to be a significant concern. For those that do want to 
> run shell tests by themselves, it is worth noting that once a test has 
> been run by jtreg, the ".jtr" file contains "rerun" sections with 
> details on how to run each action of the test. You can either 
> copy/paste/edit from the ".jtr" file directly, or use the jtreg 
> `-show:rerun` option to output the information to the standard output 
> stream.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.java.net/pipermail/quality-discuss/attachments/20190204/ea260c6f/attachment.html>

More information about the quality-discuss mailing list