Testing Guide

Test Types

Type Description Prerequisites Command
regress SQL regression tests None mise run test:regress
tap Perl TAP tests (stress, concurrent, lifecycle) PG built with -Dtap_tests=enabled (see below) ./scripts/run-tests.sh <pg_install> tap
isolation Race condition tests None mise run test:isolation
stress High-load stress test with pgbench None mise run test:stress
clickhouse ClickHouse integration tests Docker mise run test:clickhouse
all Run all tests None (skips TAP if unavailable) mise run test:all

Running Tests

# Run all tests (mise)
mise run test:all

# Via script with specific PG version
./scripts/run-tests.sh 18 all
./scripts/run-tests.sh 17 regress

# ClickHouse integration tests (requires Docker)
mise run clickhouse:start
mise run test:clickhouse
mise run clickhouse:stop

TAP Tests

TAP tests require PostgreSQL compiled with -Dtap_tests=enabled (Meson). Mise-installed PostgreSQL versions don’t include the Perl TAP modules, so you must build PostgreSQL from source.

1. Build PostgreSQL with TAP support

cd ../postgres
meson setup build_tap --prefix=$(pwd)/install_tap -Dtap_tests=enabled
ninja -C build_tap -j$(nproc)
ninja -C build_tap install

2. Build pg_stat_ch against it

cmake -B build -G Ninja -DPG_CONFIG=../postgres/install_tap/bin/pg_config
cmake --build build && cmake --install build

3. Run TAP tests

./scripts/run-tests.sh ../postgres/install_tap tap

Test Files

Regression Tests (test/regression/sql/)

File Description
basic.sql Extension CREATE/DROP
version.sql Version function
guc.sql GUC parameter validation
stats.sql Stats function output
utility.sql DDL/utility statement tracking
buffers.sql Buffer usage tracking
cmd_type.sql Command type classification
client_info.sql Application name and client address
error_capture.sql Error capture via emit_log_hook

TAP Tests (t/)

File Description
001_stress_test.pl High-load stress test with pgbench
002_concurrent_sessions.pl Multiple concurrent sessions
003_buffer_overflow.pl Queue overflow handling
004_basic_lifecycle.pl Extension lifecycle
005_settings.pl GUC settings verification
006_query_capture.pl Query capture via executor hooks
007_utility_tracking.pl DDL/utility statement tracking
008_error_capture.pl Error capture tests
009_bgworker.pl Background worker lifecycle
010_clickhouse_export.pl ClickHouse export integration
011_clickhouse_reconnect.pl Reconnection after ClickHouse restart
012_timing_accuracy.pl Timing measurement accuracy
013_buffer_metrics.pl Buffer usage metrics
014_cpu_metrics.pl CPU time tracking
015_guc_validation.pl GUC validation tests