Files
poky/meta/lib/oeqa/selftest/cases/debuginfod.py
Ross Burton b064a9a517 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 <ross.burton@arm.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2022-09-09 14:09:01 +01:00

56 lines
1.8 KiB
Python

#
# Copyright OpenEmbedded Contributors
#
# SPDX-License-Identifier: MIT
#
import os
import socketserver
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(
"""
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",
"--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")
elif format == "package_ipk":
cmd.append("--scan-deb-dir")
elif format == "package_rpm":
cmd.append("--scan-rpm-dir")
# Find a free port
with socketserver.TCPServer(("localhost", 0), None) as s:
port = s.server_address[1]
cmd.append("--port=%d" % port)
try:
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)
)
status, output = qemu.run_serial(cmd)
# This should be more comprehensive
self.assertIn("/.cache/debuginfod_client/", output)
finally:
debuginfod.kill()