leapp-repository/SOURCES/0054-Add-test.patch
2025-07-21 11:47:55 +00:00

101 lines
4.4 KiB
Diff

From 6df858daa7c678d3e951bef3fdf077a0a5b49d36 Mon Sep 17 00:00:00 2001
From: Matej Matuska <mmatuska@redhat.com>
Date: Fri, 11 Jul 2025 18:18:07 +0200
Subject: [PATCH 54/66] Add test
---
.../tests/unit_test_targetuserspacecreator.py | 73 +++++++++++++++++++
1 file changed, 73 insertions(+)
diff --git a/repos/system_upgrade/common/actors/targetuserspacecreator/tests/unit_test_targetuserspacecreator.py b/repos/system_upgrade/common/actors/targetuserspacecreator/tests/unit_test_targetuserspacecreator.py
index 69ed7040..219cb7c3 100644
--- a/repos/system_upgrade/common/actors/targetuserspacecreator/tests/unit_test_targetuserspacecreator.py
+++ b/repos/system_upgrade/common/actors/targetuserspacecreator/tests/unit_test_targetuserspacecreator.py
@@ -13,6 +13,7 @@ from leapp.libraries.actor import userspacegen
from leapp.libraries.common import overlaygen, repofileutils, rhsm
from leapp.libraries.common.config import architecture
from leapp.libraries.common.testutils import CurrentActorMocked, logger_mocked, produce_mocked
+from leapp.libraries.stdlib import api, CalledProcessError
from leapp.utils.deprecation import suppress_deprecation
if sys.version_info < (2, 8):
@@ -1225,3 +1226,75 @@ def test_perform_ok(monkeypatch):
assert userspacegen.api.produce.model_instances[1] == msg_target_repos
# this one is full of constants, so it's safe to check just the instance
assert isinstance(userspacegen.api.produce.model_instances[2], models.TargetUserSpaceInfo)
+
+
+def test__get_files_owned_by_rpms(monkeypatch):
+ # this is not necessarily accurate, but close enoguh
+ fake_walk = [
+ ("/base/dir/etc/pki", ["ca-trust", "tls", "rpm-gpg"], []),
+ ("/base/dir/etc/pki/ca-trust", ["extracted", "source"], []),
+ ("/base/dir/etc/pki/ca-trust/extracted", ["openssl", "java"], []),
+ ("/base/dir/etc/pki/ca-trust/extracted/openssl", [], ["ca-bundle.trust.crt"]),
+ ("/base/dir/etc/pki/ca-trust/extracted/java", [], ["cacerts"]),
+
+ ("/base/dir/etc/pki/ca-trust/source", ["anchors", "directory-hash"], []),
+ ("/base/dir/etc/pki/ca-trust/source/anchors", [], ["my-ca.crt"]),
+ ("/base/dir/etc/pki/ca-trust/extracted/pem/directory-hash", [], [
+ "5931b5bc.0", "a94d09e5.0"
+ ]),
+ ("/base/dir/etc/pki/tls", ["certs", "private"], []),
+ ("/base/dir/etc/pki/tls/certs", [], ["server.crt", "ca-bundle.crt"]),
+ ("/base/dir/etc/pki/tls/private", [], ["server.key"]),
+ ("/base/dir/etc/pki/rpm-gpg", [], [
+ "RPM-GPG-KEY-1",
+ "RPM-GPG-KEY-2",
+ ]),
+ ]
+ monkeypatch.setattr(os, 'walk', lambda _: fake_walk)
+ logger = logger_mocked()
+ monkeypatch.setattr(api, 'current_logger', logger)
+
+ class _MockContext():
+
+ def __init__(self, owned):
+ self.base_dir = '/base/dir'
+ # list of files owned, no base_dir prefixed
+ self.owned = owned
+
+ def full_path(self, path):
+ return os.path.join(self.base_dir, os.path.abspath(path).lstrip('/'))
+
+ def call(self, cmd):
+ assert len(cmd) == 3 and cmd[0] == 'rpm' and cmd[1] == '-qf'
+ if cmd[2] in self.owned:
+ return {'exit_code': 0}
+ raise CalledProcessError("Command failed with exit code 1", cmd, 1)
+
+ search_dir = '/etc/pki'
+ owned = [
+ 'tls/certs/ca-bundle.crt',
+ 'ca-trust/extracted/openssl/ca-bundle.trust.crt',
+ 'rpm-gpg/RPM-GPG-KEY-1',
+ 'rpm-gpg/RPM-GPG-KEY-2',
+ 'ca-trust/extracted/pem/directory-hash/a94d09e5.0',
+ 'ca-trust/extracted/pem/directory-hash/a94d09e5.0',
+ ]
+ # the rpm -qf call happens with the full path
+ owned_fullpath = [os.path.join(search_dir, f) for f in owned]
+ context = _MockContext(owned_fullpath)
+
+ out = userspacegen._get_files_owned_by_rpms(context, '/etc/pki', recursive=True)
+
+ # any directory-hash directory should be skipped
+ assert sorted(owned[0:4]) == sorted(out)
+
+ def has_dbgmsg(substr):
+ return any([substr in log for log in logger.dbgmsg])
+
+ # test a few
+ assert has_dbgmsg(
+ "SKIP files in the /base/dir/etc/pki/ca-trust/extracted/pem/directory-hash directory:"
+ " Not important for the IPU.",
+ )
+ assert has_dbgmsg('SKIP the tls/certs/server.crt file: not owned by any rpm')
+ assert has_dbgmsg('Found the file owned by an rpm: rpm-gpg/RPM-GPG-KEY-2.')
--
2.50.1