Guocai He 4fe575d155
postgresql: add ptest support
Add ptest infrastructure to run the PostgreSQL standard regression test
suite (pg_regress) on the target system.

Test logs:
root@qemux86-64:~# ptest-runner postgresql
START: ptest-runner
2026-03-24T02:42
BEGIN: /usr/lib64/postgresql/ptest
.....
**if all pass **
PASS: - event_trigger_login                      1901 ms
PASS: - fast_default                             9459 ms
PASS: - tablespace                              16542 ms
PASS: all tests passed

**if have fail**
FAIL: create_type                              1763 ms
PASS: create_schema                            2123 ms
PASS: - tablespace                              23226 ms
FAIL: some tests failed

waiting for server to shut down.... done
server stopped
DURATION: 853
END: /usr/lib64/postgresql/ptest
2026-03-24T02:56
STOP: ptest-runner
TOTAL: 1 FAIL: 0

Signed-off-by: Guocai He <guocai.he.cn@windriver.com>
Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
2026-03-24 09:13:49 -07:00

66 lines
1.9 KiB
Bash

#!/bin/sh
#
# PostgreSQL regression test runner for ptest
#
# This script initializes a temporary PostgreSQL database cluster,
# starts a server instance, and executes the standard regression test
# suite via pg_regress against the installed PostgreSQL binaries.
#
set -e
PGDATA=/tmp/ptest_pgdata
PTEST_PATH=$(dirname "$(readlink -f "$0")")
TESTDIR="${PTEST_PATH}/test"
PGBIN=$(pg_config --bindir)
PKGLIBDIR=$(pg_config --pkglibdir)
cleanup() {
su - postgres -c "pg_ctl -D ${PGDATA} stop -m immediate" 2>/dev/null || true
rm -rf "${PGDATA}"
}
trap cleanup EXIT
# Initialize the database cluster
rm -rf "${PGDATA}"
su - postgres -c "${PGBIN}/initdb -D ${PGDATA} --no-locale" || exit 1
# Start the server
su - postgres -c "pg_ctl -D ${PGDATA} -l ${PGDATA}/logfile start -w -t 120" || exit 1
# Ensure the test directory is writable by the postgres user for
# regression output files (regression.out, regression.diffs, results/).
chown -R postgres:postgres "${TESTDIR}"
# Prepare the tablespace test directory
mkdir -p "${TESTDIR}/testtablespace"
chmod 0700 "${TESTDIR}/testtablespace"
chown postgres:postgres "${TESTDIR}/testtablespace"
# Disable set -e before the pipe so we can capture PIPESTATUS
set +e
# Run the regression tests.
# --dlpath points to the standard PostgreSQL package library directory
# where regress.so and contrib modules (autoinc.so, refint.so, etc.)
# are installed, so that CREATE FUNCTION ... AS tests can locate them.
su - postgres -c "cd ${TESTDIR} && \
${TESTDIR}/pg_regress \
--inputdir=. \
--bindir=${PGBIN} \
--dlpath=${PKGLIBDIR} \
--max-concurrent-tests=20 \
--schedule=parallel_schedule" 2>&1 | \
stdbuf -oL sed -n \
-e 's/^ok [0-9]\+\s\+[+* ]\?\s*/PASS: /p' \
-e 's/^not ok [0-9]\+\s\+[+* ]\?\s*/FAIL: /p'
RESULT=${PIPESTATUS[0]}
if [ "${RESULT}" = "0" ]; then
echo "PASS: all tests passed"
else
echo "FAIL: some tests failed"
fi
exit ${RESULT}