In this section we discuss how to exercise unit, functional and performance benchmarking tests.
Audience: All users and contributors.
In CI, we execute these tests against the following build modes
- All tests on optimized and debug builds using clang
- All tests on optimized and debug builds using gcc
- All tests using address-sanitizer debug builds using the clang compiler
- All tests using memory-sanitizer debug builds using the gcc compiler
- clang-format checks
- shellcheck and shfmt checks run against shell scripts
To run a small collection of unit-tests to give you a very quick
baseline stability of the library, do: $ make run-tests
The make run-tests
target invokes the
underlying test.sh
script to run quick tests.
To execute a larger set of tests, including functional and performance tests, you can do one of the following:
$ make test-results
$ INCLUDE_SLOW_TESTS=true make run-tests
$ INCLUDE_SLOW_TESTS=true ./test.sh
In CI, all test execution is driven by the top-level test.sh script, which exercises individual build artifacts produced for testing, as described below.
As part of the make build output the following artifacts are produced under
the ./bin
directory:
- A
unit_test
binary, which runs a collection of quick-running unit tests - A collection of stand-alone unit-test binaries in the
./bin/unit
directory. - A
driver_test
binary to drive functional and performance tests
The following sections describe how to execute individual testing artifacts, for more granular test stabilization.
To run all the unit-tests, do: $ ./bin/unit_test
Some unit-tests are designed to run with multiple threads, and larger volumes of data. These are generally named as stress tests.
You can run them standalone as follows: $ ./bin/unit/btree_stress_test
See Unit testing for more details on unit test development and unit testing.
All functional tests are executed by the driver_test
binary
$ ./bin/driver_test --help
Dispatch test --help
invalid test
List of tests:
btree_test
filter_test
splinter_test
log_test
cache_test
ycsb_test
Each functional test can be run with different parameters. Use the following syntax to get the test-specific configuration supported.
$ ./bin/driver_test <test-name> --help
$ ./bin/driver_test btree_test --help
$ ./bin/driver_test splinter_test --help
In the test.sh
script you can find
examples of the command-line parameters
that are commonly used for testing stability.
SplinterDB performance tests are executed by driver_test
using the splinter_test
option with the --perf
argument.
Several different options are supported to execute different performance tests. These can be found using:
$ ./bin/driver_test splinter_test --help
An example usage of performance tests that are executed in our CI runs can be found here in test.sh