diff mbox series

rpm-sequoia: add ptest

Message ID 20250505101642.9255-2-ines.kchelfi@smile.fr
State New
Headers show
Series rpm-sequoia: add ptest | expand

Commit Message

ines.kchelfi@smile.fr May 5, 2025, 10:16 a.m. UTC
From: Ines KCHELFI <ines.kchelfi@smile.fr>

In rpm-sequoia, some default paths in test code (OUT_DIR,
CARGO_MANIFEST_DIR) are invalid at runtime and cause test failures.

To fix this, patch the test code (symbols.rs) to support overriding these
paths via optional environment variables: FORCE_RUNTIME_PATH_LIB and
FORCE_RUNTIME_PATH_SRC.

Also patch the libray name to match what is installed.

Tests take less than a second so this is added to PTEST_FAST.

ptest result:
|root@qemux86-64:~# ptest-runner rpm-sequoia
|START: ptest-runner
|2025-05-02T15:57
|BEGIN: /usr/lib/rpm-sequoia/ptest
|
|running 1 test
|test symbols ... ok
|
|test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
|
|
|running 2 tests
|test tests::merge_certs_mismatch ... ok
|test tests::merge_certs ... ok
|
|test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
|
|DURATION: 0
|END: /usr/lib/rpm-sequoia/ptest
|2025-05-02T15:57
|STOP: ptest-runner
|TOTAL: 1 FAIL: 0

Signed-off-by: Ines KCHELFI <ines.kchelfi@smile.fr>
---
 .../distro/include/ptest-packagelists.inc     |  1 +
 ...-librpm_sequoia.so.1-instead-of-libr.patch | 29 +++++++++++++++
 ...-vars-to-force-runtime-paths-in-test.patch | 35 +++++++++++++++++++
 .../rpm-sequoia/rpm-sequoia_1.7.0.bb          | 23 ++++++++++--
 4 files changed, 86 insertions(+), 2 deletions(-)
 create mode 100644 meta/recipes-devtools/rpm-sequoia/files/0001-Force-the-use-of-librpm_sequoia.so.1-instead-of-libr.patch
 create mode 100644 meta/recipes-devtools/rpm-sequoia/files/0001-Use-optional-env-vars-to-force-runtime-paths-in-test.patch

Comments

Alexander Kanavin May 5, 2025, 4:51 p.m. UTC | #1
On Mon, 5 May 2025 at 12:17, ines.kchelfi via lists.openembedded.org
<ines.kchelfi=smile.fr@lists.openembedded.org> wrote:
> Also patch the libray name to match what is installed.
> +Subject: [PATCH] Force the use of librpm_sequoia.so.1 instead of librpm_sequoia.so
> +-        lib.push("librpm_sequoia.so");
> ++        lib.push("librpm_sequoia.so.1");

Rather than do this, how about making -ptest package RDEPEND on -dev
package (which contains the unversioned symlink to the library)?

Alex
diff mbox series

Patch

diff --git a/meta/conf/distro/include/ptest-packagelists.inc b/meta/conf/distro/include/ptest-packagelists.inc
index f3fdededf6..7ae882400d 100644
--- a/meta/conf/distro/include/ptest-packagelists.inc
+++ b/meta/conf/distro/include/ptest-packagelists.inc
@@ -80,6 +80,7 @@  PTESTS_FAST = "\
     python3-webcolors \
     qemu \
     quilt \
+    rpm-sequoia \
     sed \
     slang \
     wayland \
diff --git a/meta/recipes-devtools/rpm-sequoia/files/0001-Force-the-use-of-librpm_sequoia.so.1-instead-of-libr.patch b/meta/recipes-devtools/rpm-sequoia/files/0001-Force-the-use-of-librpm_sequoia.so.1-instead-of-libr.patch
new file mode 100644
index 0000000000..bfe3860bfc
--- /dev/null
+++ b/meta/recipes-devtools/rpm-sequoia/files/0001-Force-the-use-of-librpm_sequoia.so.1-instead-of-libr.patch
@@ -0,0 +1,29 @@ 
+From 07c738e8731cb658a15c19e0afa023333da4b431 Mon Sep 17 00:00:00 2001
+From: Ines KCHELFI <ines.kchelfi@smile.fr>
+Date: Thu, 10 Apr 2025 16:03:24 +0200
+Subject: [PATCH] Force the use of librpm_sequoia.so.1 instead of librpm_sequoia.so
+
+Signed-off-by: Ines KCHELFI <ines.kchelfi@smile.fr>
+Upstream-Status: Inappropriate [configuration specific to Yocto]
+---
+ tests/symbols.rs | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/tests/symbols.rs b/tests/symbols.rs
+index dc4a42c..9f7b89c 100644
+--- a/tests/symbols.rs
++++ b/tests/symbols.rs
+@@ -19,12 +19,12 @@ fn symbols() -> anyhow::Result<()> {
+     let mut build_dir = out_dir;
+     let lib = loop {
+         let mut lib = build_dir.clone();
+-        lib.push("librpm_sequoia.so");
++        lib.push("librpm_sequoia.so.1");
+         if lib.exists() {
+             break lib;
+         }
+         if ! build_dir.pop() {
+-            panic!("Failed to find librpm_sequoia.so");
++            panic!("Failed to find librpm_sequoia.so.1");
+         }
+     };
diff --git a/meta/recipes-devtools/rpm-sequoia/files/0001-Use-optional-env-vars-to-force-runtime-paths-in-test.patch b/meta/recipes-devtools/rpm-sequoia/files/0001-Use-optional-env-vars-to-force-runtime-paths-in-test.patch
new file mode 100644
index 0000000000..d0179fc53c
--- /dev/null
+++ b/meta/recipes-devtools/rpm-sequoia/files/0001-Use-optional-env-vars-to-force-runtime-paths-in-test.patch
@@ -0,0 +1,35 @@ 
+From 590937523deea4ad2a2ee0e1ae4412a8f59e0170 Mon Sep 17 00:00:00 2001
+From: Ines KCHELFI <ines.kchelfi@smile.fr>
+Date: Thu, 10 Apr 2025 15:14:11 +0200
+Subject: [PATCH] Use optional env vars to force runtime paths in tests
+
+Signed-off-by: Ines KCHELFI <ines.kchelfi@smile.fr>
+Upstream-Status: Submitted [https://github.com/rpm-software-management/rpm-sequoia/pull/86]
+---
+ tests/symbols.rs | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/tests/symbols.rs b/tests/symbols.rs
+index c16dd9b..dc4a42c 100644
+--- a/tests/symbols.rs
++++ b/tests/symbols.rs
+@@ -14,7 +14,8 @@ fn symbols() -> anyhow::Result<()> {
+     // OUT_DIR gives us
+     // `/tmp/rpm-sequoia/debug/build/rpm-sequoia-HASH/out`.
+ 
+-    let out_dir = PathBuf::from(env!("OUT_DIR"));
++    let out_dir = PathBuf::from(option_env!("FORCE_RUNTIME_PATH_LIB")
++        .unwrap_or(env!("OUT_DIR")));
+     let mut build_dir = out_dir;
+     let lib = loop {
+         let mut lib = build_dir.clone();
+@@ -53,7 +54,8 @@ fn symbols() -> anyhow::Result<()> {
+     }
+ 
+     let mut expected_symbols_txt_fn
+-        = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
++    = PathBuf::from(option_env!("FORCE_RUNTIME_PATH_SRC")
++        .unwrap_or(env!("CARGO_MANIFEST_DIR")));
+     expected_symbols_txt_fn.push("src/symbols.txt");
+ 
+     let mut expected_symbols_txt = Vec::new();
diff --git a/meta/recipes-devtools/rpm-sequoia/rpm-sequoia_1.7.0.bb b/meta/recipes-devtools/rpm-sequoia/rpm-sequoia_1.7.0.bb
index 57062b100a..24d5f4b38f 100644
--- a/meta/recipes-devtools/rpm-sequoia/rpm-sequoia_1.7.0.bb
+++ b/meta/recipes-devtools/rpm-sequoia/rpm-sequoia_1.7.0.bb
@@ -10,9 +10,13 @@  LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=f0ff5ff7747cf7d394079c6ae87f5f0c"
 
 DEPENDS = "openssl"
 
-inherit pkgconfig rust cargo cargo-update-recipe-crates
+inherit pkgconfig rust cargo cargo-update-recipe-crates ptest-cargo
+
+SRC_URI = "git://github.com/rpm-software-management/rpm-sequoia.git;protocol=https;branch=main \
+	file://0001-Use-optional-env-vars-to-force-runtime-paths-in-test.patch \
+	file://0001-Force-the-use-of-librpm_sequoia.so.1-instead-of-libr.patch \
+"
 
-SRC_URI = "git://github.com/rpm-software-management/rpm-sequoia.git;protocol=https;branch=main"
 
 SRCREV = "0667e04ae7fb8cf0490919978d69883d16400e41"
 
@@ -41,6 +45,13 @@  do_compile:prepend () {
 	export LIBDIR="${libdir}"
 }
 
+# By default, ptest binaries contain host build dir paths.
+# Use custom environment variables to force these paths to match the target instead.
+do_compile_ptest_cargo:prepend() {
+    os.environ["FORCE_RUNTIME_PATH_LIB"] = d.getVar("libdir")
+    os.environ["FORCE_RUNTIME_PATH_SRC"] = d.getVar("PTEST_PATH")
+}
+
 do_install:append () {
 	# Move the library to the correct location expected by rpm-sequoia.pc
 	mkdir -p ${D}${libdir}
@@ -54,6 +65,14 @@  do_install:append () {
 	install -m644 ${S}/target/release/rpm-sequoia.pc ${D}${libdir}/pkgconfig
 }
 
+do_install_ptest:append () {
+	install -d ${D}${PTEST_PATH}/src
+	install -m 644 ${S}/src/symbols.txt ${D}${PTEST_PATH}/src/symbols.txt
+}
+
+# Tests need objdump
+RDEPENDS:${PN}-ptest += "binutils"
+
 RDEPENDS:${PN} = "rpm-sequoia-crypto-policy"
 PACKAGE_WRITE_DEPS += "rpm-sequoia-crypto-policy-native"