mirror of
https://github.com/waku-org/nwaku.git
synced 2025-01-30 16:47:48 +00:00
190 lines
5.1 KiB
Markdown
190 lines
5.1 KiB
Markdown
# Testrunner [![Build Status](https://travis-ci.org/status-im/nim-testutils.svg?branch=master)](https://travis-ci.org/status-im/nim-testutils)
|
|
[![Build status](https://ci.appveyor.com/api/projects/status/ayqsnuvcpwo2nh6m/branch/master?svg=true)](https://ci.appveyor.com/project/nimbus/nim-testutils/branch/master)
|
|
|
|
## Usage
|
|
|
|
Command syntax:
|
|
|
|
```sh
|
|
Usage:
|
|
ntu COMMAND [options] <path>
|
|
|
|
Available commands:
|
|
|
|
$ ntu test [options] <path>
|
|
|
|
Run the test(s) specified at path. Will search recursively for test files
|
|
provided path is a directory.
|
|
|
|
Options:
|
|
--backends:"c cpp js objc" Run tests for specified targets
|
|
--include:"test1 test2" Run only listed tests (space/comma separated)
|
|
--exclude:"test1 test2" Skip listed tests (space/comma separated)
|
|
--update Rewrite failed tests with new output
|
|
--sort:"source,test" Sort the tests by program and/or test mtime
|
|
--reverse Reverse the order of tests
|
|
--random Shuffle the order of tests
|
|
--help Display this help and exit
|
|
|
|
$ ntu fuzz [options] <module>
|
|
|
|
Start a fuzzing test with a Nim module based on testutils/fuzzing.
|
|
|
|
Options:
|
|
--fuzzer:libFuzzer The fuzzing engine to use.
|
|
Possible values: libFuzzer, honggfuzz, afl
|
|
--corpus:<path> A directory with initial input cases
|
|
```
|
|
|
|
The runner will look recursively for all `*.test` files at given path.
|
|
|
|
## Test file options
|
|
|
|
The test files follow the configuration file syntax (similar as `.ini`), see
|
|
also [nim parsecfg module](https://nim-lang.org/docs/parsecfg.html).
|
|
|
|
### Required
|
|
|
|
- **program**: A test file should have at minimum a program name. This is the name
|
|
of the nim source minus the `.nim` extension.
|
|
|
|
### Optional
|
|
|
|
- **max_size**: To check the maximum size of the binary, in bytes.
|
|
- **timestamp_peg**: If you don't want to use the default timestamps, you can define
|
|
your own timestamp peg here.
|
|
- **compile_error**: When expecting a compilation failure, the error message that
|
|
should be expected.
|
|
- **error_file**: When expecting a compilation failure, the source file where the
|
|
error should occur.
|
|
- **os**: Space and/or comma separated list of operating systems for which the
|
|
test should be run. Defaults to `"linux, macosx, windows"`. Tests meant for a
|
|
different OS than the host will be marked as `SKIPPED`.
|
|
- **--skip**: This will simply skip the test (will not be marked as failure).
|
|
|
|
### Forwarded Options
|
|
Any other options or key-value pairs will be forwarded to the nim compiler.
|
|
|
|
A **key-value** pair will become a conditional symbol + value (`-d:SYMBOL(:VAL)`)
|
|
for the nim compiler, e.g. for `-d:chronicles_timestamps="UnixTime"` the test
|
|
file requires:
|
|
```ini
|
|
chronicles_timestamps="UnixTime"
|
|
```
|
|
If only a key is given, an empty value will be forwarded.
|
|
|
|
An **option** will be forwarded as is to the nim compiler, e.g. this can be
|
|
added in a test file:
|
|
```ini
|
|
--opt:size
|
|
```
|
|
|
|
### Verifying Expected Output
|
|
|
|
For outputs to be compared, the output string should be set to the output name
|
|
(`stdout` or _filename_) from within an _Output_ section:
|
|
|
|
```ini
|
|
[Output]
|
|
stdout="""expected stdout output"""
|
|
file.log="""expected file output"""
|
|
```
|
|
|
|
Triple quotes can be used for multiple lines.
|
|
|
|
### Supplying Command-line Arguments
|
|
|
|
Optionally specify command-line arguments as an escaped string in the following
|
|
syntax inside any _Output_ section:
|
|
|
|
```ini
|
|
[Output]
|
|
args = "--title \"useful title\""
|
|
```
|
|
|
|
### Multiple Invocations
|
|
|
|
Multiple _Output_ sections denote multiple test program invocations. Any
|
|
failure of the test program to match its expected outputs will short-circuit
|
|
and fail the test.
|
|
|
|
```ini
|
|
[Output]
|
|
stdout = ""
|
|
args = "--no-output"
|
|
|
|
[Output_newlines]
|
|
stdout = "\n\n"
|
|
args = "--newlines"
|
|
```
|
|
|
|
### Updating Expected Outputs
|
|
|
|
Pass the `--update` argument to `ntu` to rewrite any failing test with
|
|
the new outputs of the test.
|
|
|
|
### Concurrent Test Execution
|
|
|
|
When built with threads, `ntu` will run multiple test invocations
|
|
defined in each test file simultaneously. You can specify `nothreads`
|
|
in the _preamble_ to disable this behavior.
|
|
|
|
```ini
|
|
nothreads = true
|
|
|
|
[Output_1st_serial]
|
|
args = "--first"
|
|
|
|
[Output_2nd_serial]
|
|
args = "--second"
|
|
```
|
|
|
|
The failure of any test will, when possible, short-circuit all other tests
|
|
defined in the same file.
|
|
|
|
### CPU Affinity
|
|
|
|
Specify `affinity` to clamp the first _N_ concurrent test threads to the first
|
|
_N_ CPU cores.
|
|
|
|
```ini
|
|
affinity = true
|
|
|
|
[Output_1st_core]
|
|
args = "--first"
|
|
|
|
[Output_2nd_core]
|
|
args = "--second"
|
|
```
|
|
|
|
### Testing Alternate Backends
|
|
|
|
By default, `ntu` builds tests using Nim's C backend.
|
|
Specify the `--backends` command-line option to build and run run tests with
|
|
the backends of your choice.
|
|
|
|
```sh
|
|
$ ntu test --backends="c cpp" tests
|
|
```
|
|
|
|
### Setting the Order of Tests
|
|
|
|
By default, `ntu` will order test compilation and execution according to the
|
|
modification time of the test program source. You can choose to sort by test
|
|
program mtime, too.
|
|
|
|
```sh
|
|
$ ntu test --sort:test suite/
|
|
```
|
|
|
|
You can `--reverse` or `--random`ize the order of tests, too.
|
|
|
|
### More Examples
|
|
|
|
See `chonicles`, where `testutils` was born:
|
|
- https://github.com/status-im/nim-chronicles/tree/master/tests
|
|
|
|
|
|
## License
|
|
Apache2 or MIT
|