The purpose of the tests is to figure out when things break. Inevitably changes made to the system will cause one of the tests to fail, and when that happens the test needs to be debugged.
First, it is always recommended to run in debug mode. This can be done by compiling the system using the command
make debug. Second, it is recommended to only run the test that breaks. This can be done by passing the filename of the breaking test to the test suite as a command line parameter (e.g.
build/debug/test/unittest test/sql/projection/test_simple_projection.test). For more options on running a subset of the tests see the Triggering which tests to run section.
After that, a debugger can be attached to the program and the test can be debugged. In the sqllogictests it is normally difficult to break on a specific query, however, we have expanded the test suite so that a function called
query_break is called with the line number
line as parameter for every query that is run. This allows you to put a conditional breakpoint on a specific query. For example, if we want to break on line number 43 of the test file we can create the following break point:
gdb: break query_break if line==43 lldb: break -n query_break -c line==43
You can also skip certain queries from executing by placing
mode skip in the file, followed by an optional
mode unskip. Any queries between the two statements will not be executed.
When running the unittest program, by default all the fast tests are run. A specific test can be run by adding the name of the test as an argument. For the SQLLogicTests, this is the relative path to the test file.
# run only a single test build/debug/test/unittest test/sql/projection/test_simple_projection.test
All tests in a given directory can be executed by providing the directory as a parameter with square brackets.
# run all tests in the "projection" directory build/debug/test/unittest "[projection]"
All tests, including the slow tests, can be run by running the tests with an asterisk.
# run all tests, including the slow tests build/debug/test/unittest "*"
We can run a subset of the tests using the
# run tests the tests 200..250 build/debug/test/unittest --start-offset=200 --end-offset=250
These are also available in percentages:
# run tests 10% - 20% build/debug/test/unittest --start-offset-percentage=10 --end-offset-percentage=20
The set of tests to run can also be loaded from a file containing one test name per line, and loaded using the
$ cat test.list test/sql/join/full_outer/test_full_outer_join_issue_4252.test test/sql/join/full_outer/full_outer_join_cache.test test/sql/join/full_outer/test_full_outer_join.test # run only the tests labeled in the file $ build/debug/test/unittest -f test.list