2022-05-11 15:39:36 +01:00
|
|
|
---
|
|
|
|
title: SyTest
|
|
|
|
parent: Development
|
2023-05-30 09:02:53 +01:00
|
|
|
nav_order: 2
|
2022-05-11 15:39:36 +01:00
|
|
|
permalink: /development/sytest
|
|
|
|
---
|
|
|
|
|
2019-05-24 15:00:03 +01:00
|
|
|
# SyTest
|
|
|
|
|
|
|
|
Dendrite uses [SyTest](https://github.com/matrix-org/sytest) for its
|
2019-06-21 16:49:37 +01:00
|
|
|
integration testing. When creating a new PR, add the test IDs (see below) that
|
2020-01-22 13:31:22 +00:00
|
|
|
your PR should allow to pass to `sytest-whitelist` in dendrite's root
|
|
|
|
directory. Not all PRs need to make new tests pass. If we find your PR should
|
|
|
|
be making a test pass we may ask you to add to that file, as generally
|
|
|
|
Dendrite's progress can be tracked through the amount of SyTest tests it
|
|
|
|
passes.
|
2019-06-21 16:49:37 +01:00
|
|
|
|
|
|
|
## Finding out which tests to add
|
|
|
|
|
2020-08-25 08:11:41 +01:00
|
|
|
We recommend you run the tests locally by using the SyTest docker image.
|
|
|
|
After running the tests, a script will print the tests you need to add to
|
|
|
|
`sytest-whitelist`.
|
2019-06-21 16:49:37 +01:00
|
|
|
|
|
|
|
You should proceed after you see no build problems for dendrite after running:
|
|
|
|
|
|
|
|
```sh
|
2023-05-30 09:02:53 +01:00
|
|
|
go build -o bin/ ./cmd/...
|
2019-06-21 16:49:37 +01:00
|
|
|
```
|
|
|
|
|
2020-08-25 08:11:41 +01:00
|
|
|
If you are fixing an issue marked with
|
|
|
|
[Are We Synapse Yet](https://github.com/matrix-org/dendrite/labels/are-we-synapse-yet)
|
|
|
|
then there will be a list of Sytests that you should add to the whitelist when you
|
|
|
|
have fixed that issue. This MUST be included in your PR to ensure that the issue
|
|
|
|
is fully resolved.
|
|
|
|
|
2020-04-12 13:48:24 +01:00
|
|
|
### Using the SyTest Docker image
|
|
|
|
|
2020-08-25 08:11:41 +01:00
|
|
|
**We strongly recommend using the Docker image to run Sytest.**
|
|
|
|
|
2020-04-12 13:48:24 +01:00
|
|
|
Use the following commands to pull the latest SyTest image and run the tests:
|
|
|
|
|
|
|
|
```sh
|
|
|
|
docker pull matrixdotorg/sytest-dendrite
|
|
|
|
docker run --rm -v /path/to/dendrite/:/src/ -v /path/to/log/output/:/logs/ matrixdotorg/sytest-dendrite
|
|
|
|
```
|
|
|
|
|
|
|
|
`/path/to/dendrite/` should be replaced with the actual path to your dendrite
|
|
|
|
source code. The test results TAP file and homeserver logging output will go to
|
|
|
|
`/path/to/log/output`. The output of the command should tell you if you need to
|
|
|
|
add any tests to `sytest-whitelist`.
|
|
|
|
|
|
|
|
When debugging, the following Docker `run` options may also be useful:
|
2022-05-11 15:39:36 +01:00
|
|
|
|
2020-04-12 13:48:24 +01:00
|
|
|
* `-v /path/to/sytest/:/sytest/`: Use your local SyTest repository at
|
|
|
|
`/path/to/sytest` instead of pulling from GitHub. This is useful when you want
|
|
|
|
to speed things up or make modifications to SyTest.
|
2020-08-25 08:11:41 +01:00
|
|
|
* `-v "/path/to/gopath/:/gopath"`: Use your local `GOPATH` so you don't need to
|
|
|
|
re-download packages on every run.
|
2020-04-12 13:48:24 +01:00
|
|
|
* `--entrypoint bash`: Prevent the container from automatically starting the
|
|
|
|
tests. When used, you need to manually run `/bootstrap.sh dendrite` inside
|
|
|
|
the container to start them.
|
2020-08-25 08:11:41 +01:00
|
|
|
* `-e "DENDRITE_TRACE_HTTP=1"`: Adds HTTP tracing to server logs.
|
|
|
|
* `-e "DENDRITE_TRACE_INTERNAL=1"`: Adds roomserver internal API tracing to
|
|
|
|
server logs.
|
2023-05-30 09:02:53 +01:00
|
|
|
* `-e "COVER=1"`: Run Sytest with an instrumented binary, producing a Go coverage file per server.
|
|
|
|
* `-e "RACE_DETECTION=1"`: Build the binaries with the `-race` flag (Note: This will significantly slow down test runs)
|
2020-08-25 08:11:41 +01:00
|
|
|
|
|
|
|
The docker command also supports a single positional argument for the test file to
|
|
|
|
run, so you can run a single `.pl` file rather than the whole test suite. For example:
|
2022-05-11 15:39:36 +01:00
|
|
|
|
2020-08-25 08:11:41 +01:00
|
|
|
```
|
|
|
|
docker run --rm --name sytest -v "/Users/kegan/github/sytest:/sytest"
|
|
|
|
-v "/Users/kegan/github/dendrite:/src" -v "/Users/kegan/logs:/logs"
|
|
|
|
-v "/Users/kegan/go/:/gopath" -e "POSTGRES=1" -e "DENDRITE_TRACE_HTTP=1"
|
|
|
|
matrixdotorg/sytest-dendrite:latest tests/50federation/40devicelists.pl
|
|
|
|
```
|