From b064a9a51706325b9480b4fd7da2f3140d351c05 Mon Sep 17 00:00:00 2001 From: Ross Burton Date: Thu, 8 Sep 2022 12:54:15 +0100 Subject: [PATCH] oeqa/selftest/debuginfod: don't re-use the database debuginfod writes the files it scans to a database in $HOME, which isn't ideal when the build trees that get scanned typically are deleted after the test has finished. This can result in debuginfod trying to return objects that no longer exist on disk: libc error: stat /home/pokybuild/yocto-worker/oe-selftest-debian/build/build-st-1032306/tmp/deploy/rpm/core2_64/elfutils-dbg-0.187-r0.core2_64.rpm: No such file or directory libc error: stat /home/pokybuild/yocto-worker/oe-selftest-debian/build/build-st-1113320/tmp/deploy/rpm/core2_64/elfutils-dbg-0.187-r0.core2_64.rpm: No such file or directory libc error: stat /home/pokybuild/yocto-worker/oe-selftest-debian/build/build-st-1113320/tmp/deploy/rpm/core2_64/elfutils-dbg-0.187-r0.core2_64.rpm: No such file or directory Solve this, and save writing a database on disk at all, by using the special database path :memory: which keeps the database in memory only, so state can't leak between tests. (From OE-Core rev: d1c2aa3d241bd17d68e8e38d9399cbb0a3f3b912) Signed-off-by: Ross Burton Signed-off-by: Richard Purdie --- meta/lib/oeqa/selftest/cases/debuginfod.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/meta/lib/oeqa/selftest/cases/debuginfod.py b/meta/lib/oeqa/selftest/cases/debuginfod.py index 01359ec649..3c40119282 100644 --- a/meta/lib/oeqa/selftest/cases/debuginfod.py +++ b/meta/lib/oeqa/selftest/cases/debuginfod.py @@ -10,16 +10,24 @@ import subprocess from oeqa.selftest.case import OESelftestTestCase from oeqa.utils.commands import bitbake, get_bb_var, runqemu + class Debuginfod(OESelftestTestCase): def test_debuginfod(self): - self.write_config(""" + self.write_config( + """ DISTRO_FEATURES:append = " debuginfod" CORE_IMAGE_EXTRA_INSTALL += "elfutils" - """) + """ + ) bitbake("core-image-minimal elfutils-native:do_addto_recipe_sysroot") native_sysroot = get_bb_var("RECIPE_SYSROOT_NATIVE", "elfutils-native") - cmd = [os.path.join(native_sysroot, "usr", "bin", "debuginfod"), "--verbose", get_bb_var("DEPLOY_DIR")] + cmd = [ + os.path.join(native_sysroot, "usr", "bin", "debuginfod"), + "--verbose", + "--database=:memory:", + get_bb_var("DEPLOY_DIR"), + ] for format in get_bb_var("PACKAGE_CLASSES").split(): if format == "package_deb": cmd.append("--scan-deb-dir") @@ -36,7 +44,10 @@ CORE_IMAGE_EXTRA_INSTALL += "elfutils" debuginfod = subprocess.Popen(cmd) with runqemu("core-image-minimal", runqemuparams="nographic") as qemu: - cmd = "DEBUGINFOD_URLS=http://%s:%d/ debuginfod-find debuginfo /usr/bin/debuginfod" % (qemu.server_ip, port) + cmd = ( + "DEBUGINFOD_URLS=http://%s:%d/ debuginfod-find debuginfo /usr/bin/debuginfod" + % (qemu.server_ip, port) + ) status, output = qemu.run_serial(cmd) # This should be more comprehensive self.assertIn("/.cache/debuginfod_client/", output)