Files
threshold/internal/db/sqltest
Jim 785241237e refactor (kms): adopt the go-kms-wrapping/extras/kms package (#2027)
* feature (db): add Db.UnderlyingDB()

This is needed to allow for integration with bits that need a *dbw.DB

* feature (kms): add new go-kms-wrapping/extras/kms dependency

* refactor (kms): schema changes required to adopt extras/kms pkg

* refactor (kms/iam): rename to DeprecateCreateKeysTx(...)

* refactor (kms): remove deprecated test

* refactor (kms): refactor Kms type

This refactor includes renaming the existing type to DeprecatedKms
and then refactoring the Kms type to become a wrapper of
go-kms-wrapping/extras/kms

* refactor (kms): delete all the unneeded bits

All this stuff is not needed now that we're using
go-kms-wrapping/extras/kms

* refactor (db): fixup tests after kms refactor

* refactor (kms/tests): use testing.TB for test helpers

Our test helper packages were not possible to use
with benchmarks. This refactor switches to testing.TB
to allow both tests and benchmarks to use the helpers.

* tests (session benchmarks): refactor to use new Kms type

* refactor (schema): rm test which relies on deprecated Kms code

* refactor (kms): post rebase on main changes required

* chore (kms refactor): re-add unit test from main

* refactor (kms): uses migrations that don't include KMS schema changes
2022-05-13 13:53:22 -04:00
..

SQL Tests

This test suite is used to test behavior of the database logic. In particular the data warehouse implementation is completely in sql via plpgsql, functions, and triggers. This test suite is also implemented directly in sql.

Organization

  • initdb.d: contains init scripts/sql that is run on the test database when it starts. It ensures the sql migrations are run and creates test helper functions.
  • tests: contains the tests. Each file can contain only a single test that runs in a transaction so it can rollback.

The tests leverage the pgTap postgres extension to make assertions and provide more readable test output.

Usage

To run the test run make or make test. This will:

  • Start a docker postgres container and initialize it.
  • Start a docker pgtap container to execute the tests.

When writing new tests it can be faster to keep the database up and just re-run the tests. This can be done by running:

# starts database docker image in the background
make database-up

# runs the tests, call this multiple times while implementing new tests.
make run-tests

# to clean up
make clean

You can also run individual tests:

# run a single test file
make TESTS=tests/setup/wtt_load.sql

# run a single test file with the database already created.
make run-tests TESTS=tests/setup/wtt_load.sql

# run a directory of tests
make TESTS=tests/setup/*.sql

You can pass through options to pg_prove. See the docs for available options, i.e:

# run tests in parallel with verbose output
make PROVE_OPTS='-j9 -v'

By default the database docker container does not use a host port. This can be changed using an environment variable:

$ export SQL_TEST_DB_PORT=5433
$ make database-up
$ make run-tests

Different versions of postgres can easily be tested:

make PG_DOCKER_TAG=latest
make PG_DOCKER_TAG=13-alpine
make PG_DOCKER_TAG=12-alpine
make PG_DOCKER_TAG=11-alpine