influxdb/query_tests
Marco Neumann 779f0e9cdf
feat: querier RAM pool (#4593)
* feat: `SortKey::size`

* feat: `FunctionEstimator`

* feat: querier RAM pool

Let's put all the caches into a single RAM pool, so we can at least
somewhat control RAM usage. Note that this does NOT limit the peak
memory during query execution though, but should at least stop unlimited
cache growth. A follow-up PR will add metrics.

* refactor: improve some size calculations

Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
2022-05-17 13:11:20 +00:00
..
cases chore: convert some debug to trace to reduce noises (#4589) 2022-05-12 22:40:29 +00:00
generate fix: Remove db crate from query_tests 2022-05-06 11:30:36 -04:00
src feat: querier RAM pool (#4593) 2022-05-17 13:11:20 +00:00
Cargo.toml chore: dump out the diff for SQL tests (#4571) 2022-05-11 18:43:36 +00:00
README.md fix: Remove db crate from query_tests 2022-05-06 11:30:36 -04:00

README.md

This crate contains "integration" tests for the query engine. Specifically, it runs queries against a fully created database instance, records the output, and compares it to expected output.

Some tests simply have their inputs and outputs hard coded into #[test] annotated tests as is Rust's norm.

The tests in src/runner are driven somewhat more dynamically based on input files.

Cookbook: Adding a new Test

How to make a new test:

  1. Add a new file .sql to the cases/in directory
  2. Regenerate file: (cd generate && cargo run)
  3. Run the tests `` cargo test -p query_tests`
  4. You will get a failure message that contains examples of how to update the files

Example output

Possibly helpful commands:
  # See diff
  diff -du "/Users/alamb/Software/influxdb_iox/query_tests/cases/in/pushdown.expected" "/Users/alamb/Software/influxdb_iox/query_tests/cases/out/pushdown.out"
  # Update expected
  cp -f "/Users/alamb/Software/influxdb_iox/query_tests/cases/in/pushdown.out" "/Users/alamb/Software/influxdb_iox/query_tests/cases/out/pushdown.expected"

Cookbook: Adding a new test scenario

Each test can be defined in terms of a "setup" (a set of actions taken to prepare the state of database).

In the future, we envision more fine grained control of these setups (by implementing some of the database commands as IOX_TEST commands), but for now they are hard coded.

The SQL files refer to the setups with a specially formatted comment:

-- IOX_SETUP: OneMeasurementFourChunksWithDuplicates

To add a new setup, follow the pattern in scenario.rs of get_all_setups.