This repro contains a copy of the scripts used to run the CIAO regression tests.
The tests themselves together with their data files are stored locally due to their size (~80 Gb)
The general design is based on testing individual CIAO tools; however, the framework has been adapted to make it work with things like scripts and threads.
For all the gory details about the regression test system see Nick Durham's User's Guide. This will just summarize the layout of the system.
All the files live in
/data/sdsreg
The test scripts, input files, and dmdiff tolerance files live in the
current_regtest directory.
$ tree -L 1 -d current_regtest
current_regtest
├── input
├── tests
├── threads_tests
└── tolfilesThe baseline outputs are in the results directory.
The tests directory contains a directory for each "tool". In each
tool's directory are a collection of *.MAIN shell scripts
and possibly *.AUX auxiliary scripts. The *.MAIN tests are
run using ksh. The test harness takes care of all the directory
setup, setting PFILES, setting ASCDS_WORK_PATH, and redirecting
stderr+stdout to a LOG file. The *.MAIN files should access files
in the input directory using the $CT_INDIR variable.
The *.AUX file is run after the *.MAIN. The best use of this is
to tweak the LOG file. For example, removing hard coded paths,
specific version strings, etc. The stdout+stderr output from the
AUX scripts is not redirected to the LOG file.
Historically, many of the tests dirs also contain a "sources.txt" file that provides a link to say an SDS worksheet that the test was created from. It's recommended instead to put this information into the test script itself as a comment to keep everything together.
The input directory has subdirectories corresponding to the tools
in the tests. The layout below that is free form. Since some tools
use the same input file for multiple tests it may make more sense to
have no directory structure and conversely some tools require a certain
hierarchy (eg chandra_repro).
The tolfiles directory contains dmdiff tolerance files for each tool.
If there is not a tool specific tolerance file, then the DEFAULT.tol file
is used.
This is where the single-tool framework is limiting. For many scripts that generate many outputs from many different (compiled) tools, a single tolerance file does not always make a lot of sense. We end up putting a lot of single-tool specific stuff in and have to be careful it doesn't conflict with another tool's tolerances.
There is also the threads_tests dir which contains the *.MAIN
files for the CIAO threads.
The threads are maintained as bash-kernel Jupyter notebooks in the
/data/sdsreg/thread_output/Notebooks/
directory. The threads always download the latest files from the archive
so there is no corresponding input folder for them. The threads
also generate so many outputs from so many different tools that the
tool tolerance files scheme just doesn't work.
Generally when we compare the threads outputs we manually compare the output logs.
We maintain separate baseline output files for Linux and macOS. (Technically we should also have macOS x86 vs. amd, but the diffs there are fewer).
The baseline outputs are kept in
/data/sdsreg/results/ciao_linux64_baseline_repro/
/data/sdsreg/results/ciao_osx_baseline_repro/
The baseline outputs are kept up to date (generally) with the current version of CIAOX using the current version of the CALDB.
There are bash and tcsh setup scripts in the root directory to
setup all the necessary environment variables. The expectation is
that users only need to modify the ROOT variable for their local
repro.
tcsh% source setup.csh
or
bash$ source setup.shThe baseline outputs are kept up to date with the current version of CIAOX/T and the current CALDB. We do not keep versioned copies of the inputs nor the baseline save files.
Here is an example of how to run the standard suite of regression tests
First be sure to setup for CIAO and MARX
source /exort/ciaox/bin/ciao.csh
source /exort/ciaox/marx-*/setup_marx.cshand then run the tests
source setup.csh
cd $CIAOTEST_RESULTS
parallel_run_and_compare ciao_linux64_baseline_repro ciaox_20200828_Linux &
serve_results ciao_linux64_baseline_repro-ciaox_20200828_Linux &
gio open http://localhost:8080This is a summary of the high level tasks.
Usage:
parallel_run_and_compare baselineset testset [-u] [tests]Used to run and compare a new regression test set to the baseline test set.
This script keeps track of the running tests using an sqlite3 database. To store all the diff comparison outputs and for the sqlite3 database file the script creates the directory
baselineset-testset
(that is the two directory names are joined together with a hyphen, "-", between). So for example running
parallel_run_and_compare my_baseline my_tests
will create the directory my_baseline-my_tests and the sqlite3 database
my_baseline-my_tests/results.sqlite
The -u flag tells the script to update the existing test database
otherwise a new database is created.
The baseline can be set to none to skip comparison.
Individual tools and individual tests can be run as the other test tools.
Calls:
list_testsrun_testscompare_results
The serve_results script can be used to monitor the progress
of the test.
Usage:
serve_results baselineset-testset [port]This application creates a small web server
using bottle that can be used to monitor
the regression tests run by the parallel_run_and_compare test.
This script should be started in a separate window using the same
setup as parallel_run_and_compare. Once the script is started,
you should pointer your web browser to the URL provided, usually
Calls:
- none
Usage
run_tests outdir [tests]Used to run the test scripts (ie the *.MAIN files). Data are not
compared|checked.
Calls:
- none
Usage:
run_and_compare baselineset testset [tests]Used to run and compare a new regression test set to the baseline test set.
Calls:
smart_compare: on baseline and test setscompare_results: on thecompare.datfile written out tocompare.log
Usage:
smart_compare baselineset testset [tests]Takes smart_diff output and creates an exit status log for each test.
- creates
smart_comparedirectory - creates
compare.dat
Calls:
smart_diff
Usage
compare_results -d compare.datcreates compare.log file with pass/fail/summary info
Usage:
smart_diff [-d] [-i] [-l log] /path1/tool/test/file /path2/tool/test/fileThe big comparison script. Edits can be made here to the diff process.
Usage:
print_test tool testidThis will display the test's .MAIN file, replacing the $CT_INDIR with the correct location.
Usage:
cd .../tool/testid
bless filenameThe bless script is used to copy files from the current directory
into the baseline repro. It should be used cautiously as this makes the
output the new baseline. To that end, it only allows one file at a time
and forces the user to create the directory in the baseline repro if
it doesn't already exist.
Note: the paths are hard coded and may need to be tweaked, especially for macOS fuse mount.
Users can specify individual tests in the following ways:
run_tests outdir dmlistwill run all the dmlist tests.
run_tests outdir dmlist 01will run the single dmlist 01.MAIN test.
run_tests outdir "file(/path/to/my.lis)"Individual tests can be specified in a list file. Each line is a different test and should contain the tool name and test-id separated by white space. You need to use the full path name to the list file.
Most of these script were written by N. Durham, E. Galle, and C. Stawarz.
They (unfortunately) are mostly ksh scripts. Minor tweaks have been
made by N. Lee and K. Glotfelty.