Files
matrix-rust-sdk/testing/matrix-sdk-integration-testing
Damir Jelić 252786d2ef refactor(ui): Make SyncService::stop infallible
The `SyncService::stop()` method could fail for the following reasons:

1. The supervisor was not properly started up, this is a programmer error.
2. The supervisor task wouldn't shut down and instead it returns a JoinError.
3. We couldn't notify the supervisor task that it should shutdown due the channel being closed.

All of those cases shouldn't ever happen and the supervisor task will be
stopped in all of them.

1. Since there is no supervisor to be stopped, we can safely just log an
   error, our tests ensure that a `SyncService::start()` does create a
   supervisor.

2. A JoinError can be returned if the task has been cancelled or if the
   supervisor task has panicked. Since we never cancel the task, nor
   have any panics in the supervisor task, we can assume that this won't
   happen.

3. The supervisor task holds on to a reference to the receiving end of
   the channel, as long as the task is alive the channel can not be
   closed.

In conclusion, it doesn't seem to be useful to forward these error cases
to the user.
2025-01-31 09:58:55 +01:00
..
2024-10-10 14:32:46 +02:00

Matrix SDK integration test

This set of tests requires a Synapse instance, and it runs the tests from this directory against this real-world server. As a result, these tests depend on the load of the machine/server, and as such they might be more sensitive to timing issues than other tests in the code base.

Requirements

This requires a synapse backend with a configuration patched for CI. You can get it up and running with docker compose via:

docker compose -f assets/docker-compose.yml up -d
docker compose -f assets/docker-compose.yml logs --tail 100 -f

Note that this works also with podman compose.

Patches You can see the patches we do to configuration (namely activate registration and resetting rate limits, enable a few experimental features), check out what assets/ci-start.sh changes.

Running

The integration tests can be run with cargo test or cargo nextest run.

The integration tests expect the environment variables HOMESERVER_URL to be the HTTP URL to access the synapse server and HOMESERVER_DOMAIN to be set to the domain configured in that server. These variables are set to a default value that matches the default docker-compose.yml template; if you haven't touched it, you don't need to manually set those environment variables.

Maintenance

Delete all instance data

To stop the services and drop the database of your docker-compose cluster, run:

docker compose -f assets/docker-compose.yml down --volumes --remove-orphan -t 0

Rebuild the synapse image

If the Synapse image has been updated in version, you may need to rebuild the custom Synapse image using the following:

docker compose -f assets/docker-compose.yml build --pull synapse

Then restart the synapse service:

docker compose -f assets/docker-compose.yml up -d synapse