test: add podman/docker dbtest tool for postgres, mssql and mysql
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
# dbtest: container test databases
|
||||
|
||||
Podman (preferred) or Docker. One tool for postgres, mssql, mysql.
|
||||
|
||||
## Commands
|
||||
|
||||
| Command | Action |
|
||||
|---|---|
|
||||
| `./tests/dbtest/dbtest.sh up <db\|all>` | Start, wait for ready, run init |
|
||||
| `down <db\|all>` | Stop and remove |
|
||||
| `restart <db>` | Fresh container |
|
||||
| `status <db\|all>` | State and connection string |
|
||||
| `env <db\|all>` | Print `export` line for the test env var |
|
||||
| `test <db> [pkgs]` | up, `go test`, down |
|
||||
| `shell <db>` | Interactive client |
|
||||
| `exec <db> <file>` | Run SQL file |
|
||||
| `logs <db>` | Container logs |
|
||||
|
||||
## Databases
|
||||
|
||||
| db | Port | Env var | Init | Default test pkgs |
|
||||
|---|---|---|---|---|
|
||||
| postgres | 5439 | `RELSPEC_TEST_PG_CONN` | `tests/postgres/init.sql` | readers/pgsql, writers/pgsql, writers/sqlexec |
|
||||
| mssql | 1439 | `RELSPEC_TEST_MSSQL_CONN` | `test_data/mssql/test_schema.sql` (creates `RelSpecTest`) | readers/mssql, writers/mssql |
|
||||
| mysql | 3309 | `RELSPEC_TEST_MYSQL_CONN` | `tests/dbtest/init/mysql.sql` | none (no Go driver/reader yet) |
|
||||
|
||||
## Env
|
||||
|
||||
| Var | Effect |
|
||||
|---|---|
|
||||
| `DBTEST_RUNTIME` | Force `podman` or `docker` |
|
||||
| `DBTEST_TIMEOUT` | Ready wait, seconds (default 120) |
|
||||
| `DBTEST_KEEP=1` | Keep container after `test` |
|
||||
| `DBTEST_GOFLAGS` | Extra `go test` flags |
|
||||
|
||||
## Add a database
|
||||
|
||||
1. Add `dbs/<name>.sh` defining: `DB_NAME DB_IMAGE DB_CONTAINER DB_PORT DB_INTERNAL_PORT DB_ENV DB_INIT_MOUNT DB_CONN_VAR DB_CONN DB_DEFAULT_PKGS` and functions `db_ready db_post_init db_shell db_exec_file`.
|
||||
2. Add the name to `ALL_DBS` in `dbtest.sh`.
|
||||
|
||||
## Notes
|
||||
|
||||
- Containers are named `relspec-test-<db>`; existing `tests/postgres/*.sh` and `make docker-*` use the same postgres name/port 5439 and remain independent.
|
||||
- mssql needs ~2GB RAM and takes longer to become ready.
|
||||
- Tests skip when the env var is unset.
|
||||
Reference in New Issue
Block a user