The run-tests.sh script is called by various testers to do the work of
testing. Each test is actually fairly simple: it is a comparison of standard
output and standard error, as per the program specification.
In any given program specification directory, there exists a specific tests/
directory which holds the expected return code, standard output, and standard
error in files called n.rc, n.out, and n.err (respectively) for each
test n. The testing framework just starts at 1 and keeps incrementing
tests until it can't find any more or encounters a failure. Thus, adding new
tests is easy; just add the relevant files to the tests directory at the
lowest available number.
The files needed to describe a test number n are:
n.rc: The return code the program should return (usually 0 or 1)n.out: The standard output expected from the testn.err: The standard error expected from the testn.run: How to run the test (which arguments it needs, etc.)n.desc: A short text description of the testn.pre(optional): Code to run before the test, to set something upn.post(optional): Code to run after the test, to clean something up
There is also a single file called pre which gets run once at the
beginning of testing; this is often used to do a more complex build
of a code base, for example. To prevent repeated time-wasting pre-test
activity, suppress this with the -s flag (as described below).
In most cases, a wrapper script is used to call run-tests.sh to do the
necessary work.
The options for run-tests.sh include:
-h(the help message)-v(verbose: print what each test is doing)-t n(run only testn)-c(continue even after a test fails)-d(run tests not fromtests/directory but from this directory instead)-s(suppress running the one-time set of commands inprefile)
There is also another script used in testing of xv6' projects, called run-xv6-command. This is an expectscript which launches the qemu emulator and runs the relevant testing command in the xv6 environment before automatically terminating the test. It is used by therun-tests.sh`
script as described above and thus not generally called by users directly.