@@ -76,6 +76,7 @@ PTESTS_SLOW_META_OE = "\
fftw \
libusb-compat \
mariadb \
+ postgresql \
re2 \
rocksdb \
"
new file mode 100644
@@ -0,0 +1,65 @@
+#!/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}
@@ -29,6 +29,7 @@ SRC_URI = "https://ftp.postgresql.org/pub/source/v${PV}/${BP}.tar.bz2 \
file://postgresql.pam \
file://postgresql-setup \
file://postgresql.service \
+ file://run-ptest \
"
LEAD_SONAME = "libpq.so"
@@ -37,7 +38,7 @@ LEAD_SONAME = "libpq.so"
export LDFLAGS_SL = "${LDFLAGS}"
export LDFLAGS_EX_BE = "-Wl,--export-dynamic"
-inherit autotools pkgconfig perlnative python3native python3targetconfig useradd update-rc.d systemd gettext perl-version multilib_header
+inherit autotools pkgconfig perlnative python3native python3targetconfig useradd update-rc.d systemd gettext perl-version multilib_header ptest
CFLAGS += "-I${STAGING_INCDIR}/${PYTHON_DIR}"
@@ -184,6 +185,45 @@ do_compile:append() {
done
}
+do_compile_ptest() {
+ oe_runmake -C src/test/regress all
+}
+
+do_install_ptest() {
+ mkdir -p ${D}${PTEST_PATH}/test
+
+ # Install pg_regress binary
+ install -m 0755 ${B}/src/test/regress/pg_regress ${D}${PTEST_PATH}/test/
+
+ # Install test schedules and resultmap
+ for f in parallel_schedule serial_schedule resultmap; do
+ [ -f ${S}/src/test/regress/$f ] && install -m 0644 ${S}/src/test/regress/$f ${D}${PTEST_PATH}/test/
+ done
+
+ # Install SQL, expected, input, output, and data files
+ for d in sql expected input output data; do
+ if [ -d ${S}/src/test/regress/$d ]; then
+ cp -r ${S}/src/test/regress/$d ${D}${PTEST_PATH}/test/
+ fi
+ done
+
+ # Install the regress test shared library into the standard PostgreSQL
+ # package library directory (PKGLIBDIR) alongside contrib modules such
+ # as autoinc.so and refint.so. This allows pg_regress --dlpath to
+ # resolve all required shared libraries from a single location.
+ install -d ${D}${libdir}/${BPN}
+ install -m 0755 ${B}/src/test/regress/regress.so ${D}${libdir}/${BPN}/
+
+ # Install run-ptest
+ install -m 0755 ${UNPACKDIR}/run-ptest ${D}${PTEST_PATH}/
+
+ # Set ownership to postgres user for running tests
+ chown -R postgres:postgres ${D}${PTEST_PATH}
+}
+
+RDEPENDS:${PN}-ptest += "${PN}-client ${PN}-contrib perl"
+FILES:${PN}-ptest += "${libdir}/${BPN}/regress.so"
+
# server needs to configure user and group
usernum = "28"
groupnum = "28"