2021-02-24 21:52:18 +00:00
# Testing
This document covers details that are only relevant if you are developing IOx and running the tests.
2022-03-24 12:53:25 +00:00
## "End to End" tests
The purpose of the "end to end tests" is highest level "integration"
test that can be run entirely within the `influxdb_iox` repository
with minimum dependencies that ensure all the plumbing is connected
correctly.
It is NOT meant to cover corner cases in implementation, which are
better tested with targeted tests in the various sub modules that make
up IOx.
Each of these tests starts up IOx as a sub process (aka runs the
`influxdb_iox` binary) and manipulates it either via a client or the
CLI. These tests should *not* manipulate or use the contents of any
subsystem crate.
### Running
2022-05-12 18:53:31 +00:00
The end to end tests are run using the `cargo test --test end_to_end` command, after setting the
`TEST_INTEGRATION` and `TEST_INFLUXDB_IOX_CATALOG_DSN` environment variables. NOTE if you don't set
these variables the tests will "pass" locally (really they will be skipped).
2022-03-24 12:53:25 +00:00
2023-02-22 21:02:08 +00:00
For example, you can run this docker compose to get postgres running:
2022-06-30 14:01:35 +00:00
```shell
docker-compose -f integration-docker-compose.yml up
```
In another terminal window, you can run:
```shell
export TEST_INTEGRATION=1
export TEST_INFLUXDB_IOX_CATALOG_DSN=postgresql://postgres@localhost:5432/postgres
cargo test --workspace
```
2023-02-22 21:02:08 +00:00
Or for just the end-to-end tests (and not general tests):
2022-05-12 18:53:31 +00:00
2022-03-24 12:53:25 +00:00
```shell
2022-06-30 14:01:35 +00:00
TEST_INTEGRATION=1 TEST_INFLUXDB_IOX_CATALOG_DSN=postgresql://postgres@localhost:5432/postgres cargo test --test end_to_end
```
If you are debugging a failing end-to-end test, you will likely want to run with `--nocapture` to also get the logs from the test execution in addition to the server:
```
cargo test --test end_to_end -- my_failing_test --nocapture
```
If running multiple tests in parallel:
* The output may be interleaved
* Multiple tests may share the same server instance and thus the server logs may be captured in the output of a different test than the one that is failing.
When debugging a failing test it is therefore recommended you run a single test, or disable parallel test execution
```
cargo test --test end_to_end -- --test-threads 1
2022-03-24 12:53:25 +00:00
```
You can also see more logging using the `LOG_FILTER` variable. For example:
```shell
2022-06-30 14:01:35 +00:00
LOG_FILTER=debug,sqlx=warn,h2=warn
2022-03-24 12:53:25 +00:00
```
2021-03-25 19:22:51 +00:00
## InfluxDB 2 Client
The `influxdb2_client` crate may be used by people using InfluxDB 2.0 OSS, and should be compatible
2021-04-22 18:20:27 +00:00
with both that and IOx. If you want to run the integration tests for the client against InfluxDB
2.0 OSS, you will need to set `TEST_INTEGRATION=1` .
If you have `docker` in your path, the integration tests for the `influxdb2_client` crate will run
integration tests against `influxd` running in a Docker container.
2021-04-15 20:58:27 +00:00
2021-04-19 19:54:37 +00:00
If you do not want to use Docker locally, but you do have `influxd` for InfluxDB
2021-04-21 14:32:07 +00:00
2.0 locally, you can use that instead by running the tests with the environment variable
`INFLUXDB_IOX_INTEGRATION_LOCAL=1` .