From bf302fc794957a88bc4785f4dd2505b8d71012e0 Mon Sep 17 00:00:00 2001 From: Evgeni Golov Date: Wed, 21 Aug 2024 07:52:02 +0200 Subject: [PATCH 04/40] properly scope try/except when loading obsoleted keys We want to load all possible keys, even *after* a KeyError happenend Fixes: 7e0fb44bb673893d0409903f6a441d0eb2829d22 --- .../libraries/removeobsoleterpmgpgkeys.py | 8 +-- .../tests/test_removeobsoleterpmgpgkeys.py | 50 +++++++++++++++++++ 2 files changed, 54 insertions(+), 4 deletions(-) diff --git a/repos/system_upgrade/common/actors/removeobsoletegpgkeys/libraries/removeobsoleterpmgpgkeys.py b/repos/system_upgrade/common/actors/removeobsoletegpgkeys/libraries/removeobsoleterpmgpgkeys.py index bda7efa3..198c4368 100644 --- a/repos/system_upgrade/common/actors/removeobsoletegpgkeys/libraries/removeobsoleterpmgpgkeys.py +++ b/repos/system_upgrade/common/actors/removeobsoletegpgkeys/libraries/removeobsoleterpmgpgkeys.py @@ -12,14 +12,14 @@ def _get_obsolete_keys(): distribution = api.current_actor().configuration.os_release.release_id obsoleted_keys_map = get_distribution_data(distribution).get('obsoleted-keys', {}) keys = [] - try: - for version in range(7, int(get_target_major_version()) + 1): + for version in range(7, int(get_target_major_version()) + 1): + try: for key in obsoleted_keys_map[str(version)]: name, version, release = key.rsplit("-", 2) if has_package(InstalledRPM, name, version=version, release=release): keys.append(key) - except KeyError: - pass + except KeyError: + pass return keys diff --git a/repos/system_upgrade/common/actors/removeobsoletegpgkeys/tests/test_removeobsoleterpmgpgkeys.py b/repos/system_upgrade/common/actors/removeobsoletegpgkeys/tests/test_removeobsoleterpmgpgkeys.py index 4d9a0e84..b78174cc 100644 --- a/repos/system_upgrade/common/actors/removeobsoletegpgkeys/tests/test_removeobsoleterpmgpgkeys.py +++ b/repos/system_upgrade/common/actors/removeobsoletegpgkeys/tests/test_removeobsoleterpmgpgkeys.py @@ -76,6 +76,56 @@ def test_get_obsolete_keys(monkeypatch, version, expected): assert set(keys) == set(expected) +@pytest.mark.parametrize( + "version, obsoleted_keys, expected", + [ + (10, None, []), + (10, {}, []), + (10, {"8": ["gpg-pubkey-888-abc"], "10": ["gpg-pubkey-10-10"]}, ["gpg-pubkey-888-abc", "gpg-pubkey-10-10"]), + (9, {"8": ["gpg-pubkey-888-abc"], "9": ["gpg-pubkey-999-def"]}, ["gpg-pubkey-999-def", "gpg-pubkey-888-abc"]), + (8, {"8": ["gpg-pubkey-888-abc"], "9": ["gpg-pubkey-999-def"]}, ["gpg-pubkey-888-abc"]) + ] +) +def test_get_obsolete_keys_incomplete_data(monkeypatch, version, obsoleted_keys, expected): + def get_target_major_version_mocked(): + return version + + def get_distribution_data_mocked(_distro): + if obsoleted_keys is None: + return {} + return {'obsoleted-keys': obsoleted_keys} + + def has_package_mocked(*args, **kwargs): + return True + + monkeypatch.setattr( + removeobsoleterpmgpgkeys, + "get_target_major_version", + get_target_major_version_mocked, + ) + + monkeypatch.setattr( + removeobsoleterpmgpgkeys, + "get_distribution_data", + get_distribution_data_mocked, + ) + + monkeypatch.setattr( + removeobsoleterpmgpgkeys, + "has_package", + has_package_mocked, + ) + + monkeypatch.setattr( + api, + "current_actor", + CurrentActorMocked(), + ) + + keys = removeobsoleterpmgpgkeys._get_obsolete_keys() + assert set(keys) == set(expected) + + @pytest.mark.parametrize( "keys, should_register", [ -- 2.47.0