jtreg shell tests
Jonathan Gibbons
jonathan.gibbons at oracle.com
Sat Jan 26 00:43:30 UTC 2019
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/20190125/30b07869/attachment.html>
More information about the quality-discuss
mailing list