The `read_receipts::compute_unread_counts` function needs the _previous events_ to compute the read receipt correctly. These previous events were store in `SlidingSyncRoom::timeline_queue`. Since the removal of `timeline_queue` in the previous patches, this patch uses the Event Cache to fetch them. It only uses events that are loaded in memory. This is as correct as the prior behaviour, even this is still incorrect since it doesn't back-paginate to get a better view. This is for later. The goal of this patch is to restore the same behaviour, without `timeline_queue`. The main problem is that read receipts are computed in `matrix-sdk-base`, and that the Event Cache lives in `matrix-sdk`. Thus, we change the `SlidingSyncResponseProcessor` to handle read receipt in particular. The `matrix_sdk_base::response_processors::rooms::msc4186::extensions::dispa tch_ephemeral_events` function has been split in two methods `dispatch_typing_ephemeral_events`, and `dispatch_receipt_ephemeral_event_for_room`. The workflow has been a little bit redesigned to fit in the new `SlidingSyncResponseProcessor` constraints. This patch moves one test from `matrix-sdk-base` into `matrix-sdk`, because to compute the read receipt, the Event Cache must be enabled/listening to sync updates.
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-orphans -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