Crate sqlness

source ·
Expand description

SQL integration test harNESS

Usage

The entrypoint of this crate is Runner struct. It runs your test cases and compare the result. There are three things you need to do to complete an integration test:

  • Prepare the test case (of course!)
  • Implement EnvController and Database. They provide methods to start the server, submit the query and clean up etc.
  • Format the result. Implement Display for your query result to make them comparable.

And then all you need is to run the runner!

async fn run_integration_test() {
    let runner = Runner::new(root_path, env).await;
    runner.run().await;
}

Directory organization

An example directory tree is:

sqlness
├── local
│   ├── config.toml
│   ├── dml
│   │   └── basic.sql
│   ├── ddl
│   └── system
└── remote
    ├── config.toml
    ├── dml
    ├── ddl
    └── system

Here the root dir is sqlness, it contains two sub-directories for different “environments”: local and remote. Each environment has an env-specific configuration config.toml. All the test cases are placed under corresponding environment directory.

Note that only the first layer of sub-directory is special (for distinguash different environments). All deeper layers are treated as the same. E.g., both sqlness/local/dml/basic.sql and sqlness/local/dml/another-dir/basic.sql will be run under the local in the same pass.

Structs

Configurations of Runner.
Builder for Config.
The entrypoint of this crate.

Enums

Traits

Query executor.
Controller of test environments.