The test suite takes about 50s to execute.

Sample output:

root@qemux86-64:~# ptest-runner
START: ptest-runner
2026-01-22T12:58
BEGIN: /usr/lib/freerdp/ptest
PASS: TestClient TestClientRdpFile
PASS: TestClient TestClientChannels
PASS: TestClient TestClientCmdLine
[...many lines...]
PASS: TestWtsApi TestWtsApiSessionNotification
PASS: TestWtsApi TestWtsApiShutdownSystem
PASS: TestWtsApi TestWtsApiWaitSystemEvent
DURATION: 48
END: /usr/lib/freerdp/ptest
2026-01-22T12:59
STOP: ptest-runner
TOTAL: 1 FAIL: 0

Signed-off-by: Gyorgy Sarvari <[email protected]>
---
 .../include/ptest-packagelists-meta-oe.inc    |  1 +
 .../recipes-support/freerdp/freerdp/run-ptest | 85 +++++++++++++++++++
 .../recipes-support/freerdp/freerdp_2.11.7.bb | 22 ++++-
 3 files changed, 107 insertions(+), 1 deletion(-)
 create mode 100644 meta-oe/recipes-support/freerdp/freerdp/run-ptest

diff --git a/meta-oe/conf/include/ptest-packagelists-meta-oe.inc 
b/meta-oe/conf/include/ptest-packagelists-meta-oe.inc
index f8d9ee6f9b..4de602ac1c 100644
--- a/meta-oe/conf/include/ptest-packagelists-meta-oe.inc
+++ b/meta-oe/conf/include/ptest-packagelists-meta-oe.inc
@@ -72,6 +72,7 @@ PTESTS_FAST_META_OE:remove:riscv32 = "botan nodejs oprofile"
 
 PTESTS_SLOW_META_OE = "\
     c-ares \
+    ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'freerdp', '', d)} \
     fftw \
     libusb-compat \
     mariadb \
diff --git a/meta-oe/recipes-support/freerdp/freerdp/run-ptest 
b/meta-oe/recipes-support/freerdp/freerdp/run-ptest
new file mode 100644
index 0000000000..423a780eb1
--- /dev/null
+++ b/meta-oe/recipes-support/freerdp/freerdp/run-ptest
@@ -0,0 +1,85 @@
+#!/bin/sh
+
+#The key is the test binary name, and the value is the list of arguments to
+#use with the given binary. Each argument is a testcase to execute.
+
+#These test cases were determined by running the actual test binary
+#which lists all available test cases. Couldn't find a way to just simply
+#run all. Also, BusyBox seems to have no associative array support, so
+#plain variables are used with eval.
+
+TestAsn="TestAsn1Module TestAsn1Encoder TestAsn1Decoder TestAsn1Encode 
TestAsn1Decode TestAsn1String \
+    TestAsn1Integer TestAsn1Compare TestAsn1BerEnc TestAsn1BerDec 
TestAsn1DerEnc TestAsn1DerDec"
+TestClient="TestClientRdpFile TestClientChannels TestClientCmdLine"
+TestClipboard="TestClipboardFormats"
+TestCommon="TestCommonAssistance"
+TestCore="TestVersion TestSettings"
+TestCredUI="TestCredUIParseUserName TestCredUIConfirmCredentials 
TestCredUIPromptForCredentials TestCredUICmdLinePromptForCredentials"
+TestCrt="TestTypes TestFormatSpecifiers TestAlignment TestString 
TestUnicodeConversion"
+TestCrypto="TestCryptoHash TestCryptoRand TestCryptoCipher 
TestCryptoProtectData TestCryptoProtectMemory 
TestCryptoCertEnumCertificatesInStore"
+TestDsParse="TestDsMakeSpn TestDsCrackNames"
+TestEnvironment="TestEnvironmentGetEnvironmentStrings 
TestEnvironmentSetEnvironmentVariable TestEnvironmentMergeEnvironmentStrings 
TestEnvironmentGetSetEB"
+TestError="TestErrorSetLastError"
+TestFile="TestFileCreateFile TestFileDeleteFile TestFileReadFile 
TestSetFileAttributes TestFileWriteFile \
+    TestFilePatternMatch TestFileFindFirstFile TestFileFindFirstFileEx 
TestFileFindNextFile TestFileGetStdHandle"
+TestFreeRDPCodec="TestFreeRDPRegion TestFreeRDPCodecMppc 
TestFreeRDPCodecNCrush TestFreeRDPCodecXCrush \
+    TestFreeRDPCodecZGfx TestFreeRDPCodecPlanar TestFreeRDPCodecClear 
TestFreeRDPCodecInterleaved \
+    TestFreeRDPCodecProgressive TestFreeRDPCodecRemoteFX"
+TestFreeRDPCrypto="TestKnownHosts TestBase64 Test_x509_cert_info"
+TestFreeRDPUtils="TestRingBuffer"
+TestGdi="TestGdiRop3 TestGdiLine TestGdiRegion TestGdiRect TestGdiBitBlt 
TestGdiCreate TestGdiEllipse TestGdiClip"
+TestInterlocked="TestInterlockedAccess TestInterlockedSList 
TestInterlockedDList"
+TestIo="TestIoDevice TestIoGetOverlappedResult"
+TestLibrary="TestLibraryLoadLibrary TestLibraryGetProcAddress 
TestLibraryGetModuleFileName"
+TestLocale="TestLocaleFormatMessage"
+TestMemory="TestMemoryCreateFileMapping"
+TestNt="TestNtCreateFile TestNtCurrentTeb"
+TestPath="TestPathCchAddBackslash TestPathCchRemoveBackslash 
TestPathCchAddBackslashEx TestPathCchRemoveBackslashEx \
+    TestPathCchAddExtension TestPathCchAppend TestPathCchAppendEx 
TestPathCchCanonicalize TestPathCchCanonicalizeEx \
+    TestPathAllocCanonicalize TestPathCchCombine TestPathCchCombineEx 
TestPathAllocCombine TestPathCchFindExtension \
+    TestPathCchRenameExtension TestPathCchRemoveExtension TestPathCchIsRoot 
TestPathIsUNCEx TestPathCchSkipRoot \
+    TestPathCchStripToRoot TestPathCchStripPrefix TestPathCchRemoveFileSpec 
TestPathShell TestPathMakePath"
+TestPipe="TestPipeCreatePipe TestPipeCreateNamedPipe 
TestPipeCreateNamedPipeOverlapped"
+TestPool="TestPoolIO TestPoolSynch TestPoolThread TestPoolTimer TestPoolWork"
+TestPrimitives="TestPrimitivesAdd TestPrimitivesAlphaComp TestPrimitivesAndOr 
TestPrimitivesColors TestPrimitivesCopy \
+    TestPrimitivesSet TestPrimitivesShift TestPrimitivesSign TestPrimitivesYUV 
TestPrimitivesYCbCr TestPrimitivesYCoCg"
+TestRdTk="TestRdTkNinePatch"
+TestSecurity="TestSecurityToken"
+TestSmartCard="TestSmartCardListReaders"
+TestSspi="TestQuerySecurityPackageInfo TestEnumerateSecurityPackages 
TestInitializeSecurityContext TestAcquireCredentialsHandle TestCredSSP TestNTLM"
+TestSynch="TestSynchInit TestSynchEvent TestSynchMutex TestSynchBarrier 
TestSynchCritical TestSynchSemaphore \
+    TestSynchThread TestSynchMultipleThreads TestSynchTimerQueue 
TestSynchWaitableTimer TestSynchWaitableTimerAPC TestSynchAPC"
+TestSysInfo="TestGetNativeSystemInfo TestCPUFeatures TestGetComputerName 
TestSystemTime TestLocalTime"
+TestThread="TestThreadCommandLineToArgv TestThreadCreateProcess 
TestThreadExitThread"
+TestWinPR="TestIntrinsics TestTypes"
+TestWinPRUtils="TestIni TestVersion TestImage TestBipBuffer TestBacktrace 
TestQueue TestPrint TestPubSub TestStream \
+    TestBitStream TestArrayList TestLinkedList TestListDictionary TestCmdLine 
TestWLog TestWLogCallback TestHashTable \
+    TestBufferPool TestStreamPool TestMessageQueue TestMessagePipe"
+TestWnd="TestWndCreateWindowEx TestWndWmCopyData"
+TestWtsApi="TestWtsApiEnumerateProcesses TestWtsApiEnumerateSessions 
TestWtsApiQuerySessionInformation \
+    TestWtsApiSessionNotification TestWtsApiShutdownSystem 
TestWtsApiWaitSystemEvent"
+
+run_test(){
+  binary=$1
+  tcs=$(eval "echo \$${binary}")
+  if [ -z "$tcs" -o "$tcs" = ".so" ]; then
+     return
+  fi
+  
+  EXTRA_ARG=""
+  if [ "$binary" = "TestFile" ]; then
+    # This testcase needs an extra argument. TestFileArea is a folder
+    # where some test files are used by this test.
+    EXTRA_ARG="TestFileArea"
+  fi
+  
+  for tc in $tcs; do
+    ./$binary $tc $EXTRA_ARG > ../${binary}_${tc}.out 2>&1 && echo PASS: 
$binary $tc || echo FAIL: $binary $tc
+  done
+}
+
+cd Testing
+
+for testbin in *; do
+  run_test $testbin
+done
diff --git a/meta-oe/recipes-support/freerdp/freerdp_2.11.7.bb 
b/meta-oe/recipes-support/freerdp/freerdp_2.11.7.bb
index 9b07c94169..225f49a94b 100644
--- a/meta-oe/recipes-support/freerdp/freerdp_2.11.7.bb
+++ b/meta-oe/recipes-support/freerdp/freerdp_2.11.7.bb
@@ -8,13 +8,16 @@ SECTION = "net"
 LICENSE = "Apache-2.0"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
 
-inherit pkgconfig cmake gitpkgv
+inherit pkgconfig cmake gitpkgv ptest
+
+RDEPENDS:${PN}-ptest += "coreutils pcsc-lite-lib"
 
 PE = "1"
 PKGV = "${GITPKGVTAG}"
 
 SRCREV = "efa899d3deb8595a29fabb2a2251722f9d7e0d7f"
 SRC_URI = 
"git://github.com/FreeRDP/FreeRDP.git;branch=stable-2.0;protocol=https \
+           file://run-ptest \
            file://winpr-makecert-Build-with-install-RPATH.patch \
            file://0001-Fixed-compilation-warnings.patch \
            file://0001-Fix-const-qualifier-error.patch \
@@ -37,6 +40,7 @@ EXTRA_OECMAKE += " \
 
 PACKAGECONFIG ??= " \
     ${@bb.utils.filter('DISTRO_FEATURES', 'directfb pam pulseaudio wayland 
x11', d)}\
+    ${@bb.utils.contains('PTEST_ENABLED', '1', 'test', '', d)} \
     alsa gstreamer cups pcsc server \
 "
 
@@ -51,6 +55,7 @@ PACKAGECONFIG[gstreamer] = 
"-DWITH_GSTREAMER_1_0=ON,-DWITH_GSTREAMER_1_0=OFF,gst
 PACKAGECONFIG[cups] = "-DWITH_CUPS=ON,-DWITH_CUPS=OFF,cups"
 PACKAGECONFIG[server] = "-DWITH_SERVER=ON,-DWITH_SERVER=OFF"
 PACKAGECONFIG[alsa] = "-DWITH_ALSA=ON,-DWITH_ALSA=OFF,alsa-lib"
+PACKAGECONFIG[test] = "-DBUILD_TESTING=ON,-DBUILD_TESTING=OFF"
 
 PACKAGES =+ "libfreerdp"
 
@@ -59,6 +64,12 @@ FILES:libfreerdp = "${libdir}/lib*${SOLIBS}"
 
 PACKAGES_DYNAMIC += "^libfreerdp-plugin-.*"
 
+do_configure:prepend() {
+    sed -i 's,CMAKE_CURRENT_SOURCE_DIR,"${PTEST_PATH}/test_data",' 
${S}/libfreerdp/codec/test/TestFreeRDPCodecProgressive.c
+    sed -i 's,\${CMAKE_CURRENT_SOURCE_DIR},"${PTEST_PATH}/test_data",' 
${S}/libfreerdp/crypto/test/CMakeLists.txt
+    sed -i 's,\${CMAKE_CURRENT_SOURCE_DIR},${PTEST_PATH}/test_data,' 
${S}/winpr/libwinpr/utils/test/CMakeLists.txt
+}
+
 do_configure:append() {
     sed -i -e 's|${WORKDIR}||g' ${B}/buildflags.h
 }
@@ -70,6 +81,15 @@ do_install:append () {
     rm -rf ${D}${libdir}/freerdp
 }
 
+do_install_ptest() {
+    install -d ${D}${PTEST_PATH}/test_data
+    cp -r ${B}/Testing ${D}${PTEST_PATH}
+    install -m 0644 ${S}/libfreerdp/codec/test/progressive.bmp 
${D}${PTEST_PATH}/test_data/
+    install -m 0644 ${S}/libfreerdp/crypto/test/Test_x509_cert_info.pem 
${D}${PTEST_PATH}/test_data/
+    install -m 0644 ${S}/winpr/libwinpr/utils/test/lodepng_32bit.png 
${D}${PTEST_PATH}/test_data/
+    install -m 0644 ${S}/winpr/libwinpr/utils/test/lodepng_32bit.bmp 
${D}${PTEST_PATH}/test_data/
+}
+
 python populate_packages:prepend () {
     freerdp_root = d.expand('${libdir}/freerdp')
 
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#123736): 
https://lists.openembedded.org/g/openembedded-devel/message/123736
Mute This Topic: https://lists.openembedded.org/mt/117399060/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-devel/unsub 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to