Skip to content

Commit

Permalink
add lefoverpackages tests
Browse files Browse the repository at this point in the history
  • Loading branch information
tomasfratrik committed Apr 10, 2024
1 parent b65ef94 commit 4526ea2
Show file tree
Hide file tree
Showing 6 changed files with 96 additions and 46 deletions.
20 changes: 20 additions & 0 deletions repos/system_upgrade/common/actors/checkleftoverpackages/actor.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
from leapp.actors import Actor
from leapp.models import InstalledUnsignedRPM, LeftoverPackages, TransactionCompleted
from leapp.tags import IPUWorkflowTag, RPMUpgradePhaseTag
from leapp.libraries.actor import checkleftoverpackages


class CheckLeftoverPackages(Actor):
"""
Check if there are any RHEL 7 packages present after upgrade.
Actor produces message containing these packages. Message is empty if there are no el7 package left.
"""

name = 'check_leftover_packages'
consumes = (TransactionCompleted, InstalledUnsignedRPM)
produces = (LeftoverPackages,)
tags = (RPMUpgradePhaseTag, IPUWorkflowTag)

def process(self):
checkleftoverpackages.process()
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
from leapp.libraries.common.rpms import get_installed_rpms
from leapp.models import InstalledUnsignedRPM, LeftoverPackages, RPM
from leapp.libraries.stdlib import api


def process():
LEAPP_PACKAGES = ['leapp', 'leapp-repository', 'snactor', 'leapp-repository-deps-el8', 'leapp-deps-el8',
'python2-leapp']
installed_rpms = get_installed_rpms()
if not installed_rpms:
return

to_remove = LeftoverPackages()
unsigned = [pkg.name for pkg in next(api.consume(InstalledUnsignedRPM), InstalledUnsignedRPM()).items]

for rpm in installed_rpms:
rpm = rpm.strip()
if not rpm:
continue
name, version, release, epoch, packager, arch, pgpsig = rpm.split('|')

if 'el7' in release and name not in set(unsigned + LEAPP_PACKAGES):
to_remove.items.append(RPM(
name=name,
version=version,
epoch=epoch,
packager=packager,
arch=arch,
release=release,
pgpsig=pgpsig
))

api.produce(to_remove)
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import pytest
from leapp.libraries.common.testutils import produce_mocked, CurrentActorMocked
from leapp.libraries.stdlib import api
from leapp.libraries.actor import checkleftoverpackages
from leapp.models import InstalledUnsignedRPM, LeftoverPackages, RPM


@pytest.mark.parametrize(
('rpm_name', 'release', 'expected_to_be_removed'),
(
# el7
('sed', '7.el7', True),
('leapp', '1.el7', False),
('unsigned', '1.el7', False),
# el8
('leapp-repository', '1.el8', False),
('gnutls', '8.el8_9.1', False),
# other
('whois-nls', '1.fc39', False),
)
)
def test_package_to_be_removed(monkeypatch, rpm_name, release, expected_to_be_removed):
def get_installed_rpms_mocked():
return [f'{rpm_name}|0.1|{release}|0|packager|noarch|OTHER_SIG']

UnsignedRPM = RPM(name='unsigned', version='0.1', release=f'{release}', epoch='0', packager='packager', arch='noarch',
pgpsig='OTHER_SIG')

monkeypatch.setattr(api, 'current_actor', CurrentActorMocked(msgs=[InstalledUnsignedRPM(items=[UnsignedRPM])]))
monkeypatch.setattr(checkleftoverpackages, 'get_installed_rpms', get_installed_rpms_mocked)
monkeypatch.setattr(api, 'produce', produce_mocked())

checkleftoverpackages.process()

expected_output = LeftoverPackages()
if expected_to_be_removed:
expected_output.items.append(RPM(name=f'{rpm_name}', version='0.1', release=f'{release}', epoch='0',
packager='packager', arch='noarch', pgpsig='OTHER_SIG'))

assert api.produce.called == 1
assert api.produce.model_instances[0] == expected_output

This file was deleted.

0 comments on commit 4526ea2

Please sign in to comment.