diff mbox series

[meta-oe,2/2] freerdp3: add ptest support

Message ID 20251223114345.591895-2-skandigraun@gmail.com
State New
Headers show
Series [meta-oe,1/2] freerdp3: upgrade 3.19.0 -> 3.20.0 | expand

Commit Message

Gyorgy Sarvari Dec. 23, 2025, 11:43 a.m. UTC
The execution takes under 10s.

Sample output:

root@qemux86-64:~# ptest-runner
START: ptest-runner
2025-12-23T11:36
BEGIN: /usr/lib/freerdp3/ptest
PASS: TestSynchInit
PASS: TestSynchEvent
PASS: TestSynchMutex
[...many lines...]
PASS: TestClientRdpFile
PASS: TestClientChannels
PASS: TestClientCmdLine
DURATION: 7
END: /usr/lib/freerdp3/ptest
2025-12-23T11:37
STOP: ptest-runner
TOTAL: 1 FAIL: 0

Signed-off-by: Gyorgy Sarvari <skandigraun@gmail.com>
---
 .../include/ptest-packagelists-meta-oe.inc    |  1 +
 .../freerdp/freerdp3/run-ptest                |  2 +
 .../freerdp/freerdp3_3.20.0.bb                | 52 ++++++++++++++++++-
 3 files changed, 53 insertions(+), 2 deletions(-)
 create mode 100644 meta-oe/recipes-support/freerdp/freerdp3/run-ptest
diff mbox series

Patch

diff --git a/meta-oe/conf/include/ptest-packagelists-meta-oe.inc b/meta-oe/conf/include/ptest-packagelists-meta-oe.inc
index 1f21db7ae1..556fa8a148 100644
--- a/meta-oe/conf/include/ptest-packagelists-meta-oe.inc
+++ b/meta-oe/conf/include/ptest-packagelists-meta-oe.inc
@@ -16,6 +16,7 @@  PTESTS_FAST_META_OE = "\
     ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'dbus-broker', '', d)} \
     duktape \
     exiv2 \
+    freerdp3 \
     fuse3 \
     function2 \
     fwupd \
diff --git a/meta-oe/recipes-support/freerdp/freerdp3/run-ptest b/meta-oe/recipes-support/freerdp/freerdp3/run-ptest
new file mode 100644
index 0000000000..1a9b69c27e
--- /dev/null
+++ b/meta-oe/recipes-support/freerdp/freerdp3/run-ptest
@@ -0,0 +1,2 @@ 
+#!/bin/sh
+ctest | sed 's/\*\*\*/   /g' | awk '/Test +#/{gsub(/Passed/,"PASS"); gsub(/Failed/,"FAIL"); gsub(/Skipped/,"SKIP"); print $6": "$4; fflush();}'
diff --git a/meta-oe/recipes-support/freerdp/freerdp3_3.20.0.bb b/meta-oe/recipes-support/freerdp/freerdp3_3.20.0.bb
index 07e6db69b7..daf3256912 100644
--- a/meta-oe/recipes-support/freerdp/freerdp3_3.20.0.bb
+++ b/meta-oe/recipes-support/freerdp/freerdp3_3.20.0.bb
@@ -4,11 +4,13 @@  LICENSE = "Apache-2.0"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
 
 DEPENDS = "openssl libusb1 uriparser cairo icu pkcs11-helper zlib jpeg json-c"
+RDEPENDS:${PN}-ptest += "cmake coreutils"
 
-inherit pkgconfig cmake
+inherit pkgconfig cmake ptest
 
 SRCREV = "b8e790a02ede8dd64ff7177fb9027d1844e66bb6"
-SRC_URI = "git://github.com/FreeRDP/FreeRDP.git;branch=master;protocol=https;tag=${PV}"
+SRC_URI = "git://github.com/FreeRDP/FreeRDP.git;branch=master;protocol=https;tag=${PV} \
+           file://run-ptest"
 
 
 CVE_PRODUCT = "freerdp"
@@ -17,6 +19,7 @@  PACKAGECONFIG ??= " \
     ${@bb.utils.filter('DISTRO_FEATURES', 'pam pulseaudio wayland x11', d)} \
     ${@bb.utils.contains('LICENSE_FLAGS_ACCEPTED', 'commercial', 'ffmpeg', '', d)} \
     gstreamer cups pcsc \
+    ${@bb.utils.contains('PTEST_ENABLED', '1', 'test openh264', '', d)} \
 "
 
 EXTRA_OECMAKE = " \
@@ -54,12 +57,57 @@  PACKAGECONFIG[opencl] = "-DWITH_OPENCL=ON,-DWITH_OPENCL=OFF,virtual/libopencl1"
 PACKAGECONFIG[lame] = "-DWITH_LAME=ON,-DWITH_LAME=OFF,lame"
 PACKAGECONFIG[faad] = "-DWITH_FAAD=ON,-DWITH_FAAD=OFF,faad2"
 PACKAGECONFIG[faac] = "-DWITH_FAAC=ON,-DWITH_FAAC=OFF,faac"
+PACKAGECONFIG[test] = "-DBUILD_TESTING=ON,-DBUILD_TESTING=OFF"
+
+do_configure:prepend() {
+    sed -i 's|TEST_SOURCE_DIR="\${CMAKE_CURRENT_SOURCE_DIR}"|TEST_SOURCE_DIR="${PTEST_PATH}/test"|' ${S}/client/common/test/CMakeLists.txt
+    sed -i 's|\${CMAKE_SOURCE_DIR}|${PTEST_PATH}|' ${S}/winpr/libwinpr/clipboard/test/CMakeLists.txt
+    sed -i 's|="\${CMAKE_CURRENT_SOURCE_DIR}|="${PTEST_PATH}/test|' ${S}/winpr/libwinpr/utils/test/CMakeLists.txt
+    sed -i 's|="\${CMAKE_CURRENT_BINARY_DIR}|="${PTEST_PATH}/test|' ${S}/winpr/libwinpr/utils/test/CMakeLists.txt
+    sed -i 's|="\${CMAKE_CURRENT_SOURCE_DIR}|="${PTEST_PATH}/test|' ${S}/libfreerdp/codec/test/CMakeLists.txt
+    sed -i 's|="\${CMAKE_CURRENT_BINARY_DIR}|="${PTEST_PATH}/test|' ${S}/libfreerdp/codec/test/CMakeLists.txt
+
+}
 
 do_configure:append() {
     sed -i -e 's|${WORKDIR}||g' ${B}/include/freerdp/buildflags.h
     sed -i -e 's|${WORKDIR}||g' ${B}/winpr/include/winpr/buildflags.h
 }
 
+do_install_ptest() {
+    # main CTestTestfile.cmake file
+    cp ${B}/CTestTestfile.cmake ${D}${PTEST_PATH}
+    # the actual test executables
+    cp -r ${B}/Testing ${D}${PTEST_PATH}
+    # test data
+    cp ${S}/winpr/libwinpr/utils/test/*bmp ${D}${PTEST_PATH}/test/
+    cp ${S}/libfreerdp/codec/test/*bmp ${D}${PTEST_PATH}/test/
+    cp -r ${S}/client/common/test ${D}${PTEST_PATH}
+    cp -r ${S}/resources ${D}${PTEST_PATH}
+    cp -r ${S}/libfreerdp/codec/test/planar ${D}${PTEST_PATH}/test/
+    cp -r ${S}/libfreerdp/codec/test/interleaved ${D}${PTEST_PATH}/test/
+
+    cd ${B}
+    # the test definitions, how to execute the tests
+    find . -name CTestTestfile.cmake -exec install -Dm 0644 {} ${D}${PTEST_PATH}/{} \;
+
+    for testfile in $(find ${D}${PTEST_PATH} -name CTestTestfile.cmake); do
+        # these are comments only, containing ${S} and ${B}, at the top of each file
+        sed -i "s,Source directory: ${S},<source_dir>," $testfile
+        sed -i "s,Build directory: ${B},<build_dir>," $testfile
+
+        # change the ${B} to ${PTEST_PATH}, so the files will be searches at the correct place
+        sed -i "s,${B}/Testing,${PTEST_PATH}/Testing,g" $testfile
+
+        # These add some extra traceability info to the tests, to pair them with CMakeLists.txt files,
+        # containing ${B}.
+        # They are not needed for test execution, just remove the whole line.
+        sed -i "s,set_tests_properties.*_BACKTRACE_TRIPLES.*,," $testfile
+    done
+
+    rm ${D}${PTEST_PATH}/resources/conv_to_ewm_prop.py
+}
+
 PACKAGES =+ "${PN}-proxy-plugins"
 
 FILES:${PN}-proxy-plugins += "${libdir}/${BPN}/proxy/*.so*"