93 lines
2.8 KiB
Markdown
93 lines
2.8 KiB
Markdown
## Lianad blackbox tests
|
|
|
|
Here we test `lianad` by starting it on a regression testing Bitcoin network,
|
|
and by then talking to it as an user would, from the outside.
|
|
|
|
Python scripts are used for the automation, and specifically the [`pytest` framework](https://docs.pytest.org/en/stable/index.html).
|
|
|
|
Credits: this test framework was taken and adapted from revaultd, which was itself adapted from
|
|
[C-lightning's test framework](https://github.com/ElementsProject/lightning/tree/master/contrib/pyln-testing).
|
|
|
|
### Building the project for testing
|
|
|
|
To run the tests, we must build the debug version of `lianad`. Follow the instructions at [`doc/BUILD.md`](../doc/BUILD.md) but instead of running
|
|
```
|
|
$ cargo build --release
|
|
```
|
|
Run
|
|
```
|
|
$ cargo build
|
|
```
|
|
to build the daemon for testing.
|
|
The `lianad` and `liana-cli` binaries will be in the `target/debug` directory at the root of the
|
|
repository.
|
|
|
|
### Test dependencies
|
|
|
|
Before running the tests, you might need to install some system packages. Here's an example for Ubuntu:
|
|
|
|
```
|
|
sudo apt update
|
|
sudo apt install build-essential libssl-dev libffi-dev python3-dev
|
|
sudo apt install autoconf automake libtool
|
|
```
|
|
|
|
Functional tests dependencies can be installed using `pip`. Use a virtual environment.
|
|
```
|
|
# Create a new virtual environment, preferably.
|
|
python3 -m venv venv
|
|
. venv/bin/activate
|
|
# Get the deps
|
|
pip install -r tests/requirements.txt
|
|
```
|
|
|
|
Additionally you need to have `bitcoind` installed on your computer, please
|
|
refer to [bitcoincore](https://bitcoincore.org/en/download/) for installation. You may use a
|
|
specific `bitcoind` binary by specifying the `BITCOIND_PATH` env var.
|
|
|
|
### Running the tests
|
|
|
|
From the root of the repository:
|
|
```
|
|
pytest tests/
|
|
```
|
|
|
|
For running the tests under Taproot a `bitcoind` version 26.0 or superior must be used. It can be
|
|
pointed to using the `BITCOIND_PATH` variable. For now, one must also compile the `taproot_signer`
|
|
Rust program:
|
|
```
|
|
(cd tests/tools/taproot_signer && cargo build --release)
|
|
```
|
|
|
|
Then the test suite can be run by using Taproot descriptors instead of P2WSH descriptors by setting
|
|
the `USE_TAPROOT` environment variable to `1`.
|
|
|
|
### Tips and tricks
|
|
#### Logging
|
|
|
|
We use the [Live Logging](https://docs.pytest.org/en/latest/logging.html#live-logs)
|
|
functionality from pytest. It is configured in (`pyproject.toml`)[../pyproject.toml] to
|
|
output `INFO`-level to the console. If a test fails, the entire `DEBUG` log is output.
|
|
|
|
You can override the config at runtime with the `--log-cli-level` option:
|
|
```
|
|
pytest -vvv --log-cli-level=DEBUG -k test_startup
|
|
```
|
|
|
|
Note that we record all logs from daemons, and we start them with `log_level = "debug"`.
|
|
|
|
#### Running tests in parallel
|
|
|
|
In order to run tests in parallel, you can use `-n` arg:
|
|
|
|
```
|
|
pytest -n 8 tests/
|
|
```
|
|
### Test lints
|
|
|
|
Just use [`black`](https://github.com/psf/black).
|
|
|
|
### More
|
|
|
|
See the environment variables in `test_framework/utils.py`.
|