poky/meta-selftest/lib/oeqa/runtime/cases/dnf_runtime.py
Mikko Rapeli 33d28b7265 oeqa dnf_runtime.py: fix HTTP server IP address and port
Use correct HTTPService parameters like apt.py when setting up the repo
server. These work with qemu tun and slirp networking. Fixes test
failure with slirp networking when executing testimage.bbclass
selftests "oe-selftest -r runtime_test.TestImage".

(From OE-Core rev: 764424df2f4b6bf0e89fb20b4253a7601468f70d)

Signed-off-by: Mikko Rapeli <mikko.rapeli@linaro.org>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2023-09-12 12:37:56 +01:00

52 lines
2.7 KiB
Python

from oeqa.core.decorator.depends import OETestDepends
from oeqa.runtime.cases.dnf import DnfTest
from oeqa.utils.httpserver import HTTPService
from oeqa.core.decorator.data import skipIfDataVar
class DnfSelftest(DnfTest):
@classmethod
def setUpClass(cls):
import tempfile
cls.temp_dir = tempfile.TemporaryDirectory(prefix="oeqa-remotefeeds-")
cls.repo_server = HTTPService(os.path.join(cls.tc.td['WORKDIR'], 'oe-rootfs-repo'),
'0.0.0.0', port=cls.tc.target.server_port,
logger=cls.tc.logger)
cls.repo_server.start()
@classmethod
def tearDownClass(cls):
cls.repo_server.stop()
cls.temp_dir.cleanup()
@OETestDepends(['dnf.DnfBasicTest.test_dnf_help'])
@skipIfDataVar('PACKAGE_FEED_URIS', None,
'Not suitable as PACKAGE_FEED_URIS is not set')
def test_verify_package_feeds(self):
"""
Summary: Check correct setting of PACKAGE_FEED_URIS var
Expected: 1. Feeds were correctly set for dnf
2. Update recovers packages from host's repo
Author: Humberto Ibarra <humberto.ibarra.lopez@intel.com>
Author: Alexander Kanavin <alex.kanavin@gmail.com>
"""
# When we created an image, we had to supply fake ip and port
# for the feeds. Now we can patch the real ones into the config file.
temp_file = os.path.join(self.temp_dir.name, 'tmp.repo')
self.tc.target.copyFrom("/etc/yum.repos.d/oe-remote-repo.repo", temp_file)
fixed_config = open(temp_file, "r").read().replace("bogus_ip", self.tc.target.server_ip).replace("bogus_port", str(self.repo_server.port))
with open(temp_file, "w") as f:
f.write(fixed_config)
self.tc.target.copyTo(temp_file, "/etc/yum.repos.d/oe-remote-repo.repo")
import re
# Use '-y' for non-interactive mode: automatically import the feed signing key
output_makecache = self.dnf('-vy makecache')
self.assertTrue(re.match(r".*Failed to synchronize cache", output_makecache, re.DOTALL) is None, msg = "dnf makecache failed to synchronize repo: %s" %(output_makecache))
self.assertTrue(re.match(r".*Metadata cache created", output_makecache, re.DOTALL) is not None, msg = "dnf makecache failed: %s" %(output_makecache))
output_repoinfo = self.dnf('-v repoinfo')
matchobj = re.match(r".*Repo-pkgs\s*:\s*(?P<n_pkgs>[0-9]+)", output_repoinfo, re.DOTALL)
self.assertTrue(matchobj is not None, msg = "Could not find the amount of packages in dnf repoinfo output: %s" %(output_repoinfo))
self.assertTrue(int(matchobj.group('n_pkgs')) > 0, msg = "Amount of remote packages is not more than zero: %s\n" %(output_repoinfo))