# Common helpers for doltgresql compatibility BATS tests.
# Loaded by all test files in this directory tree via:
# load $BATS_TEST_DIRNAME/../helper/common.bash (from subdirs)
# or
# load $BATS_TEST_DIRNAME/helper/common.bash (from top level)
# ---------------------------------------------------------------------------
# Server lifecycle
# ---------------------------------------------------------------------------
COMPAT_SERVER_PID=""
COMPAT_SERVER_PORT=""
# pick_port — find an unused TCP port in the range 2048–6144.
pick_port() {
for i in {0..99}; do
port=$((RANDOM % 4096 + 2048))
if ! nc -z localhost "$port" 2>/dev/null; then
echo "$port"
return 0
fi
done
echo "ERROR: could not find a free port" >&2
return 1
}
# write_config
— write a minimal doltgres config.yaml into .
write_config() {
local dir="$1"
local port="$2"
cat > "$dir/compat-config.yaml" < [logfile]
# Starts a doltgres server and waits for it to accept connections.
# Sets COMPAT_SERVER_PID and COMPAT_SERVER_PORT.
start_doltgres() {
local binary="${1:?start_doltgres: binary required}"
local datadir="${2:?start_doltgres: datadir required}"
local logfile="${3:-/dev/null}"
COMPAT_SERVER_PORT=$(pick_port)
write_config "$datadir" "$COMPAT_SERVER_PORT"
PGPASSWORD=password "$binary" -data-dir="$datadir" --config="$datadir/compat-config.yaml" \
> "$logfile" 2>&1 &
COMPAT_SERVER_PID=$!
# Wait up to 15 s
local end=$((SECONDS + 15))
while [ $SECONDS -lt $end ]; do
if PGPASSWORD=password psql -U postgres -h localhost -p "$COMPAT_SERVER_PORT" \
-c "SELECT 1;" postgres >/dev/null 2>&1; then
return 0
fi
sleep 0.5
done
echo "ERROR: doltgres server failed to start on port $COMPAT_SERVER_PORT" >&2
if [ -f "$logfile" ]; then cat "$logfile" >&2; fi
kill "$COMPAT_SERVER_PID" 2>/dev/null
COMPAT_SERVER_PID=""
return 1
}
# stop_doltgres — kill the server started by start_doltgres.
stop_doltgres() {
if [ -n "$COMPAT_SERVER_PID" ]; then
kill "$COMPAT_SERVER_PID" 2>/dev/null || true
wait "$COMPAT_SERVER_PID" 2>/dev/null || true
COMPAT_SERVER_PID=""
COMPAT_SERVER_PORT=""
fi
}
# ---------------------------------------------------------------------------
# Query helpers
# ---------------------------------------------------------------------------
# sql [psql-args...] — run psql against the current server's postgres database.
# Use with heredoc for multi-statement sessions:
# sql < — copy a data directory for test isolation.
copy_repo() {
cp -Rpf "$1" "$2"
}