Integration tests are useful to ensure that the code works well for any use cases.
They can also be used as sample on how to use the Matrix SDK.
In a ideal world, every API of the SDK should be covered by integration tests. For the moment, we have test mainly for the Crypto part, which is the tricky part. But it covers quite a lot of features: accounts creation, login to existing account, send encrypted messages, keys backup, verification, etc.
The Matrix SDK is able to open multiple sessions, for the same user, of for different users. This way we can test communication between several sessions on a single device.
Integration tests need a homeserver running on localhost.
The documentation describes what we do to have one, using Synapse, which is the Matrix reference homeserver.
Steps:
- Install virtualenv
python3 -m pip install virtualenv
- Clone Synapse repository
git clone -b develop https://github.com/matrix-org/synapse.git
or
git clone -b develop git@github.com:matrix-org/synapse.git
You should have the develop branch cloned by default.
- Run synapse, from the Synapse folder you just cloned
virtualenv -p python3 env
source env/bin/activate
pip install -e .
demo/start.sh --no-rate-limit
Alternatively, to install the latest Synapse release package (and not a cloned branch) you can run the following instead of git clone
and pip install -e .
:
pip install matrix-synapse
On your first run, you will want to stop the demo and edit the config to correct the public_baseurl
to http://10.0.2.2:8080 and restart the server.
You should now have 3 running federated Synapse instances 🎉, at http://127.0.0.1:8080/, http://127.0.0.1:8081/ and http://127.0.0.1:8082/, which should display a "It Works! Synapse is running" message.
It's recommended to run tests using an Android Emulator and not a real device. First reason for that is that the tests will use http://10.0.2.2:8080 to connect to Synapse, which run locally on your machine.
You can run all the tests in the androidTest
folders.
It can be done using this command:
./gradlew vector:connectedAndroidTest matrix-sdk-android:connectedAndroidTest
To stop Synapse, you can run the following commands:
./demo/stop.sh
And you can deactivate the virtualenv:
deactivate
You'll need python3 to be able to run synapse
Try on the Emulator browser to open "http://10.0.2.2:8080". You should see the "Synapse is running" message.
This is because the public_baseurl
of synapse is not consistent with the endpoint that the tests are connecting to.
Ensure you have the following configuration in demo/etc/8080.config
.
public_baseurl: http://10.0.2.2:8080/
After changing this you will need to restart synapse using demo/stop.sh
and demo/start.sh
to load the new configuration.
You can try using
python3 -m venv env
or
python3 -m virtualenv env
instead of
virtualenv -p python3 env