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)` 2. Run the tests `` cargo test -p query_tests` 3. 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: ```sql -- IOX_SETUP: OneMeasurementFourChunksWithDuplicates ``` To add a new setup, follow the pattern in scenario.rs of `get_all_setups`.