mirror of
https://github.com/bigchaindb/bigchaindb.git
synced 2024-10-13 13:34:05 +00:00

- Standardize docker-compose workflow - Change docker-compose version to 2.1 - why one might ask? because compose version 3.0 does not support depends on and inherits like we want to and is more aimed towards migration to using `docker stack`, for our current strategy `2.1` is a better choice. - change `bdb` service `bigchaindb` service - why? Introduced a new proxy service `bdb` which is just a dummy `busybox` image. - why? because this ensure via healthcheck of bigchaindb that BigchainDB has started properly and makes a `curl` to ensure HTTP API server is up and running. - why? Because we have had scenarios where BigchainDB is not started via docker compose and user has to check out the logs to find out what the problem might be. This ensure that bigchaindb is up and running. - Does this change deployment workflow? No. - The only thing change is that if you want to run commands inside a bigchaindb container e.g. `pytest` now you have to run the following command: `docker-compose run --rm --no-deps bigchaindb pytest -v --cov=bigchaindb` as opposed to `docker-compose run --rm --no-deps bdb pytest -v --cov=bigchaindb` - Remove env variable `BIGCHAINDB_START_TENDERMINT` - Remove TENDERMINT_INTEGRATION.rst and move to the new docs - Change mdb -> mongodb because the other services were named with full name. - Add example to run specific tests or from a file - Update config.toml for tendermint to use `bigchaindb` as proxy app instead of `bdb` - Remove `network` directory because it is deprecated - Add comment about why PYTHONBUFFERED is used
101 lines
3.2 KiB
Markdown
101 lines
3.2 KiB
Markdown
# BigchainDB Server Tests
|
|
|
|
## The tests/ Folder
|
|
|
|
The `tests/` folder is where all the tests for BigchainDB Server live. Most of them are unit tests. Integration tests are in the [`tests/integration/` folder](./integration/).
|
|
|
|
A few notes:
|
|
|
|
- [`tests/common/`](./common/) contains self-contained tests only testing
|
|
[`bigchaindb/common/`](../bigchaindb/common/)
|
|
- [`tests/backend/`](./backend/) contains tests requiring
|
|
the database backend (MongoDB)
|
|
|
|
|
|
## Writing Tests
|
|
|
|
We write unit and integration tests for our Python code using the [pytest](http://pytest.org/latest/) framework. You can use the tests in the `tests/` folder as templates or examples.
|
|
|
|
|
|
## Running Tests
|
|
|
|
### Running Tests Directly
|
|
|
|
If you installed BigchainDB Server using `pip install bigchaindb`, then you
|
|
didn't install the tests. Before you can run all the tests, you must install
|
|
BigchainDB from source. The [`CONTRIBUTING.md` file](../CONTRIBUTING.md) has
|
|
instructions for how to do that.
|
|
|
|
Next, make sure you have Local MongoDB running in the background. You
|
|
can run MongoDB using `mongod`.
|
|
|
|
The `pytest` command has many options. If you want to learn about all the
|
|
things you can do with pytest, see [the pytest
|
|
documentation](http://pytest.org/latest/). We've also added a customization to
|
|
pytest:
|
|
|
|
`--database-backend`: Defines the backend to use for the tests. It defaults to
|
|
`localmongodb`.
|
|
|
|
Now you can run all tests using:
|
|
```text
|
|
pytest -v
|
|
```
|
|
|
|
or, if that doesn't work, try:
|
|
```text
|
|
python -m pytest -v
|
|
```
|
|
|
|
or:
|
|
```text
|
|
python setup.py test
|
|
```
|
|
|
|
How does `python setup.py test` work? The documentation for [pytest-runner](https://pypi.python.org/pypi/pytest-runner) explains.
|
|
|
|
The `pytest` command has many options. If you want to learn about all the things you can do with pytest, see [the pytest documentation](http://pytest.org/latest/). We've also added a customization to pytest:
|
|
|
|
|
|
### Running Tests with Docker Compose
|
|
|
|
You can also use [Docker Compose](https://docs.docker.com/compose/) to run all the tests.
|
|
|
|
First, bring up all the services BigchainDB, MongoDB, Tendermint in the background:
|
|
|
|
```text
|
|
$ docker-compose up -d bdb
|
|
```
|
|
|
|
then run the tests using:
|
|
|
|
```text
|
|
$ docker-compose run --rm --no-deps bigchaindb pytest -v
|
|
```
|
|
|
|
## Automated Testing of All Pull Requests
|
|
|
|
We use [Travis CI](https://travis-ci.com/), so that whenever someone creates a new BigchainDB pull request on GitHub, Travis CI gets the new code and does _a bunch of stuff_. We use the same `docker-compose.yml` for tests. It tells Travis CI how to install BigchainDB, how to run all the tests, and what to do "after success" (e.g. run `codecov`). (We use [Codecov](https://codecov.io/) to get a rough estimate of our test coverage.)
|
|
|
|
|
|
### Tox
|
|
|
|
We use [tox](https://tox.readthedocs.io/en/latest/) to run multiple suites of tests against multiple environments during automated testing. Generally you don't need to run this yourself, but it might be useful when troubleshooting a failing Travis CI build.
|
|
|
|
To run all the tox tests, use:
|
|
```text
|
|
tox
|
|
```
|
|
|
|
or:
|
|
```text
|
|
python -m tox
|
|
```
|
|
|
|
To run only a few environments, use the `-e` flag:
|
|
```text
|
|
tox -e {ENVLIST}
|
|
```
|
|
|
|
where `{ENVLIST}` is one or more of the environments specified in the [tox.ini file](../tox.ini).
|