101 lines
4.4 KiB
Diff
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
|
|
|