diff mbox series

[v3] psmisc: add ptest support

Message ID 20260921125719.30898-1-pratik.farkase@est.tech
State New
Headers show
Series [v3] psmisc: add ptest support | expand

Commit Message

Pratik Farkase Sept. 21, 2026, 12:57 p.m. UTC
Add ptest support using psmisc's upstream DejaGnu testsuite, which
exercises killall, pslog and fuser via their .exp scripts. The tools and
the testsuite helper programs (socket_test, test-listen) are installed
under a src/ layout so the scripts' ${topdir}src/<tool> paths resolve on
target.

Tested on qemux86-64 with ptest-runner: glibc killall 66, pslog 2,
fuser 9; musl pslog 2, fuser 9; all pass.

Signed-off-by: Pratik Farkase <pratik.farkase@est.tech>
---

Changes in v3:
- Skip the killall DejaGnu tool on musl. killall's "-SIGNAME" shorthand
  depends on glibc getopt_long_only() error-recovery semantics that musl
  lacks, so the killall.exp signal-name loop failed on the qemux86-64 and
  arm64 musl autobuilders. pslog and fuser still run on musl.

Changes in v2:
- Point mktemp at a private, symlink-resolved TMPDIR in run-ptest
  so the fuser -a/-av/-va tests do not fail intermittently on the
  autobuilder when /tmp is a symlink or on a different mount.

 .../distro/include/ptest-packagelists.inc     |  1 +
 meta/recipes-extended/psmisc/psmisc/run-ptest | 13 +++++
 meta/recipes-extended/psmisc/psmisc_23.7.bb   | 57 ++++++++++++++++++-
 3 files changed, 70 insertions(+), 1 deletion(-)
 create mode 100644 meta/recipes-extended/psmisc/psmisc/run-ptest
diff mbox series

Patch

diff --git a/meta/conf/distro/include/ptest-packagelists.inc b/meta/conf/distro/include/ptest-packagelists.inc
index 4012be5f49..f01abc4a57 100644
--- a/meta/conf/distro/include/ptest-packagelists.inc
+++ b/meta/conf/distro/include/ptest-packagelists.inc
@@ -68,6 +68,7 @@  PTESTS_FAST = "\
     opkg \
     popt \
     procps \
+    psmisc \
     python3-atomicwrites \
     python3-attrs \
     python3-bcrypt \
diff --git a/meta/recipes-extended/psmisc/psmisc/run-ptest b/meta/recipes-extended/psmisc/psmisc/run-ptest
new file mode 100644
index 0000000000..53f7521ac1
--- /dev/null
+++ b/meta/recipes-extended/psmisc/psmisc/run-ptest
@@ -0,0 +1,13 @@ 
+#!/bin/sh
+
+cd ./testsuite
+
+tmpdir="$(pwd)/tmp"
+mkdir -p "$tmpdir"
+TMPDIR="$(cd "$tmpdir" && pwd -P)"
+export TMPDIR
+
+for tool in @DEJATOOL@; do
+    runtest -a --tool $tool --outdir ../log
+done
+cd -
diff --git a/meta/recipes-extended/psmisc/psmisc_23.7.bb b/meta/recipes-extended/psmisc/psmisc_23.7.bb
index ad57c49ffe..4984f86ced 100644
--- a/meta/recipes-extended/psmisc/psmisc_23.7.bb
+++ b/meta/recipes-extended/psmisc/psmisc_23.7.bb
@@ -13,10 +13,11 @@  LICENSE = "GPL-2.0-only"
 LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3"
 
 SRC_URI = "git://gitlab.com/psmisc/psmisc.git;protocol=https;branch=master;tag=v${PV} \
+           file://run-ptest \
            "
 SRCREV = "9091d6dbcce3d8fb87adf9249a2eb346d25a562c"
 
-inherit autotools gettext
+inherit autotools gettext ptest
 
 # Upstream has a custom autogen.sh which invokes po/update-potfiles as they
 # don't ship a po/POTFILES.in (which is silly).  Without that file gettext
@@ -25,6 +26,60 @@  do_configure:prepend() {
     ( cd ${S} && po/update-potfiles )
 }
 
+do_compile_ptest() {
+    for p in $(makefile-getvar ${B}/Makefile check_PROGRAMS); do
+        oe_runmake $p
+    done
+    oe_runmake -C testsuite site.exp
+}
+
+# DejaGnu tools to exclude from the ptest run on specific C libraries.
+PTEST_DEJATOOL_SKIP = ""
+PTEST_DEJATOOL_SKIP:libc-musl = "killall"
+
+do_install_ptest() {
+    install -d ${D}${PTEST_PATH}/testsuite
+    install -d ${D}${PTEST_PATH}/src
+    install -d ${D}${PTEST_PATH}/log
+
+    cp -r ${S}/testsuite/* ${D}${PTEST_PATH}/testsuite/
+    install -m 0644 ${B}/testsuite/site.exp ${D}${PTEST_PATH}/testsuite/
+
+    # Tools exercised by the .exp scripts.
+    for p in killall pslog prtstat fuser; do
+        if [ -x ${B}/src/$p ]; then
+            install -m 0755 ${B}/src/$p ${D}${PTEST_PATH}/src/
+        fi
+    done
+
+    # Helper programs (check_PROGRAMS) used by the fuser tests.
+    for p in $(makefile-getvar ${B}/Makefile check_PROGRAMS); do
+        install -m 0755 ${B}/$p ${D}${PTEST_PATH}/src/
+    done
+
+    dejatool=""
+    for t in $(makefile-getvar ${B}/testsuite/Makefile DEJATOOL); do
+        skip=0
+        for s in ${PTEST_DEJATOOL_SKIP}; do
+            [ "$t" = "$s" ] && skip=1
+        done
+        [ $skip -eq 0 ] && dejatool="$dejatool $t"
+    done
+    sed -i -e "s#@DEJATOOL@#$(echo $dejatool)#" \
+        ${D}${PTEST_PATH}/run-ptest
+
+    sed -i -e "/set srcdir/c\\set srcdir ${PTEST_PATH}/testsuite" \
+           -e "/set objdir/c\\set objdir ${PTEST_PATH}/testsuite" \
+        ${D}${PTEST_PATH}/testsuite/site.exp
+}
+
+do_install_ptest_base:append() {
+    sed -i -e 's/^set \([a-zA-Z_]*\)$/set \1 ""/' \
+        ${D}${PTEST_PATH}/testsuite/site.exp
+}
+
+RDEPENDS:${PN}-ptest += "dejagnu"
+
 PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)}"
 PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
 PACKAGECONFIG[selinux] = "--enable-selinux,--disable-selinux,libselinux"