[LTP] [PATCH v2 2/2] openposix: Add runtest files for kirk
Anders Roxell
anders.roxell@linaro.org
Wed Nov 4 23:50:51 CET 2026
LTP has no runtest files for the Open POSIX tests, so kirk can not run
them. They are only run with run.sh, which prints its own summary.
Generate a runtest file for each suite at install time. The speculative
tests are left out, like in run.sh, and the arguments from a test's
.args file go on its runtest line. Each line calls a small wrapper,
openposix_run.sh, which runs the test from its own directory like
run-tests.sh does.
The list of tests comes from the installed run.sh files, so it is the
same list that run.sh runs. Old tests left in DESTDIR from an earlier
install do not end up in the runtest files.
The wrapper also maps PTS_UNSUPPORTED and PTS_UNTESTED to TCONF.
Without it kirk reports them as TWARN and TFAIL.
Signed-off-by: Anders Roxell <anders.roxell@linaro.org>
---
testcases/open_posix_testsuite/Makefile | 11 +++++-
testcases/open_posix_testsuite/bin/Makefile | 6 ++-
.../open_posix_testsuite/bin/openposix_run.sh | 29 ++++++++++++++
.../include/mk/config.mk.in | 3 ++
.../scripts/generate-runtest.sh | 38 +++++++++++++++++++
5 files changed, 85 insertions(+), 2 deletions(-)
create mode 100755 testcases/open_posix_testsuite/bin/openposix_run.sh
create mode 100755 testcases/open_posix_testsuite/scripts/generate-runtest.sh
diff --git a/testcases/open_posix_testsuite/Makefile b/testcases/open_posix_testsuite/Makefile
index 4bead182170d..ce41643686d5 100644
--- a/testcases/open_posix_testsuite/Makefile
+++ b/testcases/open_posix_testsuite/Makefile
@@ -74,7 +74,7 @@ generate-makefiles: distclean-makefiles
$(top_srcdir)/scripts/generate-makefiles.sh
.PHONY: install
-install: bin-install conformance-install functional-install stress-install
+install: bin-install conformance-install functional-install stress-install runtest-install
.PHONY: test
test: conformance-test functional-test stress-test
@@ -119,6 +119,15 @@ stress-test:
@rm -f `if echo "$(LOGFILE)" | grep -q '^/'; then echo "$(LOGFILE)"; else echo "\`pwd\`/$(LOGFILE)"; fi`.$@
@$(TEST_MAKE) -C stress test
+.PHONY: runtest-install
+runtest-install: $(addsuffix -install,$(SUBDIRS))
+ @mkdir -p $(DESTDIR)/$(runtestdir)
+ @set -e; for suite in $(SUBDIRS); do \
+ $(top_srcdir)/scripts/generate-runtest.sh \
+ $(DESTDIR)/$(testdir) "$(testdir_rel)" $$suite \
+ > $(DESTDIR)/$(runtestdir)/openposix-$$suite; \
+ done
+
# Tools build and install targets.
.PHONY: bin-install
bin-install:
diff --git a/testcases/open_posix_testsuite/bin/Makefile b/testcases/open_posix_testsuite/bin/Makefile
index 262a6567c5b6..5dfff99effcb 100644
--- a/testcases/open_posix_testsuite/bin/Makefile
+++ b/testcases/open_posix_testsuite/bin/Makefile
@@ -16,7 +16,7 @@ clean:
@rm -f t0.val
.PHONY: install
-install: clean $(DESTDIR)/$(bindir) $(DESTDIR)/$(testdir_bin)
+install: clean $(DESTDIR)/$(bindir) $(DESTDIR)/$(testdir_bin) $(DESTDIR)/$(ltp_bindir)
set -e; for file in $(INSTALL_BIN_TARGETS); do \
install -m 00755 $$file $(DESTDIR)/$(bindir)/$$file; \
done
@@ -27,9 +27,13 @@ install: clean $(DESTDIR)/$(bindir) $(DESTDIR)/$(testdir_bin)
install -m 00755 $$file $(DESTDIR)/$(testdir_bin)/$$file; \
done
+ install -m 00755 openposix_run.sh $(DESTDIR)/$(ltp_bindir)/
$(DESTDIR)/$(bindir):
mkdir -p $@
$(DESTDIR)/$(testdir_bin):
mkdir -p $@
+
+$(DESTDIR)/$(ltp_bindir):
+ mkdir -p $@
diff --git a/testcases/open_posix_testsuite/bin/openposix_run.sh b/testcases/open_posix_testsuite/bin/openposix_run.sh
new file mode 100755
index 000000000000..43c52a38d956
--- /dev/null
+++ b/testcases/open_posix_testsuite/bin/openposix_run.sh
@@ -0,0 +1,29 @@
+#!/bin/sh
+# SPDX-License-Identifier: GPL-2.0-or-later
+# Copyright (c) 2026 Linaro Limited
+
+LTPROOT=${LTPROOT:-$(cd "$(dirname "$0")/../.." && pwd)}
+
+if [ $# -lt 1 ]; then
+ echo "Usage: $(basename "$0") <test path relative to LTPROOT> [args]" >&2
+ exit 2
+fi
+
+test_path=$LTPROOT/$1
+test_file=${test_path##*/}
+shift
+
+if [ ! -x "$test_path" ]; then
+ echo "$test_path is missing or not executable" >&2
+ exit 2
+fi
+
+cd "${test_path%/*}" || exit 2
+
+./"$test_file" "$@"
+ret=$?
+
+case $ret in
+4|5) exit 32 ;;
+*) exit $ret ;;
+esac
diff --git a/testcases/open_posix_testsuite/include/mk/config.mk.in b/testcases/open_posix_testsuite/include/mk/config.mk.in
index 20422e0f1047..fae80116bbf7 100644
--- a/testcases/open_posix_testsuite/include/mk/config.mk.in
+++ b/testcases/open_posix_testsuite/include/mk/config.mk.in
@@ -14,4 +14,7 @@ testdir_rel := @testdir@
testdir := ${prefix}/${testdir_rel}
testdir_bin := ${testdir}/bin
+ltp_bindir := ${prefix}/testcases/bin
+runtestdir := ${prefix}/runtest
+
CFLAGS += -std=c99 -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700 -Wall -Wextra
diff --git a/testcases/open_posix_testsuite/scripts/generate-runtest.sh b/testcases/open_posix_testsuite/scripts/generate-runtest.sh
new file mode 100755
index 000000000000..da743d3c1edb
--- /dev/null
+++ b/testcases/open_posix_testsuite/scripts/generate-runtest.sh
@@ -0,0 +1,38 @@
+#!/bin/sh
+# SPDX-License-Identifier: GPL-2.0-or-later
+# Copyright (c) 2026 Linaro Limited
+
+if [ $# -ne 3 ]; then
+ echo "Usage: $(basename "$0") <installed testdir> <testdir relative to LTPROOT> <suite>" >&2
+ exit 1
+fi
+
+installed_testdir=$1
+testdir_rel=$2
+suite=$3
+
+cd "$installed_testdir" || exit 1
+
+if [ ! -d "$suite" ]; then
+ echo "$installed_testdir/$suite does not exist" >&2
+ exit 1
+fi
+
+run_tests_line='^[^ ]*/run-tests\.sh [^ ]* '
+
+find "$suite" -name speculative -prune -o -name run.sh -print | sort | \
+while read -r run_sh; do
+ if ! grep -q "$run_tests_line" "$run_sh"; then
+ echo "$run_sh has no run-tests.sh line" >&2
+ exit 1
+ fi
+ dir=${run_sh%/run.sh}
+ tests=$(sed -n "s,$run_tests_line,,p" "$run_sh")
+ for test_name in $tests; do
+ [ -f "$dir/$test_name" ] || continue
+ base=${test_name%.*}
+ args=
+ [ -f "$dir/$base.args" ] && read -r args < "$dir/$base.args"
+ echo "$base openposix_run.sh ${testdir_rel:+$testdir_rel/}$dir/$test_name${args:+ $args}"
+ done
+done
--
2.53.0
More information about the ltp
mailing list