def test_is_processable_vsftpd_installed(): installed_rpms = [ RPM(name='sendmail', version='8.14.7', release='5.el7', epoch='0', packager='foo', arch='x86_64', pgpsig='bar'), RPM(name='vsftpd', version='3.0.2', release='25.el7', epoch='0', packager='foo', arch='x86_64', pgpsig='bar'), RPM(name='postfix', version='2.10.1', release='7.el7', epoch='0', packager='foo', arch='x86_64', pgpsig='bar') ] installed_rpm_facts = InstalledRedHatSignedRPM(items=installed_rpms) res = vsftpdconfigread.is_processable(installed_rpm_facts) assert res is True
def test_actor_execution_with_unsigned_data(current_actor_context): installed_rpm = [ RPM(name='sample02', version='0.1', release='1.sm01', epoch='1', packager=RH_PACKAGER, arch='noarch', pgpsig='SOME_OTHER_SIG_X'), RPM(name='sample04', version='0.1', release='1.sm01', epoch='1', packager=RH_PACKAGER, arch='noarch', pgpsig='SOME_OTHER_SIG_X'), RPM(name='sample06', version='0.1', release='1.sm01', epoch='1', packager=RH_PACKAGER, arch='noarch', pgpsig='SOME_OTHER_SIG_X'), RPM(name='sample08', version='0.1', release='1.sm01', epoch='1', packager=RH_PACKAGER, arch='noarch', pgpsig='SOME_OTHER_SIG_X') ] current_actor_context.feed(InstalledUnsignedRPM(items=installed_rpm)) current_actor_context.run() assert current_actor_context.consume(CheckResult)
def test_actor_execution_with_sample_data(current_actor_context): installed_rpm = [ RPM(name='sample01', version='0.1', release='1.sm01', epoch='1', packager=RH_PACKAGER, arch='noarch', pgpsig='SOME_PGP_SIG'), RPM(name='sample02', version='0.1', release='1.sm01', epoch='1', packager=RH_PACKAGER, arch='noarch', pgpsig='SOME_PGP_SIG') ] current_actor_context.feed(InstalledRedHatSignedRPM(items=installed_rpm)) current_actor_context.feed( RpmTransactionTasks(to_remove=[rpm.name for rpm in installed_rpm], to_keep=[installed_rpm[0].name])) current_actor_context.run() result = current_actor_context.consume(FilteredRpmTransactionTasks) assert len(result) == 1 assert result[0].to_keep == [installed_rpm[0].name] assert result[0].to_remove == [installed_rpm[1].name]
def test_has_package(current_actor_context): installed_rpm = [ RPM(name='sample01', version='0.1', release='1.sm01', epoch='1', packager=RH_PACKAGER, arch='noarch', pgpsig= 'RSA/SHA256, Mon 01 Jan 1970 00:00:00 AM -03, Key ID 199e2f91fd431d51' ), RPM(name='sample02', version='0.1', release='1.sm01', epoch='1', packager=RH_PACKAGER, arch='noarch', pgpsig='SOME_OTHER_SIG_X'), ] current_actor_context.feed(InstalledRPM(items=installed_rpm)) current_actor_context.run(config_model=mock_configs.CONFIG) assert rpms.has_package(InstalledRedHatSignedRPM, 'sample01', context=current_actor_context) assert not rpms.has_package(InstalledRedHatSignedRPM, 'nosuchpackage', context=current_actor_context) assert rpms.has_package(InstalledUnsignedRPM, 'sample02', context=current_actor_context) assert not rpms.has_package( InstalledUnsignedRPM, 'nosuchpackage', context=current_actor_context)
def test_x32_only(current_actor_context): ok_rpms = [ RPM(name='brlapi', version='0.1', release='1.sm01', epoch='1', packager="RH_PACKAGER", arch='i686', pgpsig= 'RSA/SHA256, Mon 01 Jan 1970 00:00:00 AM -03, Key ID 199e2f91fd431d51' ), RPM(name='gnome-online-accounts-devel', version='0.1', release='1.sm01', epoch='1', packager="RH_PACKAGER", arch='i686', pgpsig='SOME_OTHER_SIG_X'), RPM(name='geocode-glib-devel', version='0.1', release='1.sm01', epoch='1', packager="RH_PACKAGER", arch='i686', pgpsig= 'RSA/SHA256, Mon 01 Jan 1970 00:00:00 AM -03, Key ID 5326810137017186' ), ] current_actor_context.feed(InstalledRPM(items=ok_rpms)) current_actor_context.run() assert not current_actor_context.consume(Report)
def test_1_package(current_actor_context): pkg = 'geocode-glib-devel' problem_rpms = [ RPM(name=pkg, version='0.1', release='1.sm01', epoch='1', packager="RH_PACKAGER", arch='x86_64', pgpsig='SOME_OTHER_SIG_X'), RPM(name=pkg, version='0.1', release='1.sm01', epoch='1', packager="RH_PACKAGER", arch='i686', pgpsig= 'RSA/SHA256, Mon 01 Jan 1970 00:00:00 AM -03, Key ID 5326810137017186' ) ] current_actor_context.feed(InstalledRPM(items=problem_rpms)) current_actor_context.run() report = current_actor_context.consume(Report)[0].report assert report['title'] == ( 'Some packages have both 32bit and 64bit version installed which are known to' ' cause rpm transaction test to fail') assert {p['title'] for p in report['detail']['related_resources'] if p['scheme'] == 'package'} == \ {'{}.i686'.format(pkg)}
def test_actor_without_acpid_package(current_actor_context): without_acpid = [ RPM(name='powertop', version='0.1', release='1.sm01', epoch='1', packager=RH_PACKAGER, arch='noarch', pgpsig= 'RSA/SHA256, Mon 01 Jan 1970 00:00:00 AM -03, Key ID 199e2f91fd431d51' ), RPM(name='sed', version='0.1', release='1.sm01', epoch='1', packager=RH_PACKAGER, arch='noarch', pgpsig= 'RSA/SHA256, Mon 01 Jan 1970 00:00:00 AM -03, Key ID 199e2f91fd431d51' ) ] current_actor_context.feed( create_modulesfacts(installed_rpm=without_acpid)) current_actor_context.run() assert not current_actor_context.consume(Report)
def consume_unsigned_message_mocked(*models): installed_rpm = [ RPM(name='sample02', version='0.1', release='1.sm01', epoch='1', packager=RH_PACKAGER, arch='noarch', pgpsig='SOME_OTHER_SIG_X'), RPM(name='sample04', version='0.1', release='1.sm01', epoch='1', packager=RH_PACKAGER, arch='noarch', pgpsig='SOME_OTHER_SIG_X'), RPM(name='sample06', version='0.1', release='1.sm01', epoch='1', packager=RH_PACKAGER, arch='noarch', pgpsig='SOME_OTHER_SIG_X'), RPM(name='sample08', version='0.1', release='1.sm01', epoch='1', packager=RH_PACKAGER, arch='noarch', pgpsig='SOME_OTHER_SIG_X') ] yield InstalledUnsignedRPM(items=installed_rpm)
def test_actor_with_grep_package(current_actor_context): rpms = [ RPM(name='wireshark', version='0.1', release='1.sm01', epoch='1', packager=RH_PACKAGER, arch='noarch', pgpsig= 'RSA/SHA256, Mon 01 Jan 1970 00:00:00 AM -03, Key ID 199e2f91fd431d51' ), RPM(name='powertop', version='0.1', release='1.sm01', epoch='1', packager=RH_PACKAGER, arch='noarch', pgpsig= 'RSA/SHA256, Mon 01 Jan 1970 00:00:00 AM -03, Key ID 199e2f91fd431d51' ) ] current_actor_context.feed(InstalledRedHatSignedRPM(items=rpms)) current_actor_context.run() assert current_actor_context.consume(Report)
def test_gpg_pubkey_pkg(current_actor_context): installed_rpm = [ RPM(name='gpg-pubkey', version='0.1', release='1.sm01', epoch='1', packager=RH_PACKAGER, arch='noarch', pgpsig= 'RSA/SHA256, Mon 01 Jan 1970 00:00:00 AM -03, Key ID aa17105e03152d37' ), RPM(name='gpg-pubkey', version='0.1', release='1.sm01', epoch='1', packager='Tester', arch='noarch', pgpsig= 'RSA/SHA256, Mon 01 Jan 1970 00:00:00 AM -03, Key ID 9ea903b1361e896b' ), ] current_actor_context.feed(InstalledRPM(items=installed_rpm)) current_actor_context.run() assert current_actor_context.consume(InstalledRedHatSignedRPM) assert len( current_actor_context.consume(InstalledRedHatSignedRPM)[0].items) == 1 assert current_actor_context.consume(InstalledUnsignedRPM) assert len( current_actor_context.consume(InstalledUnsignedRPM)[0].items) == 1
def test_actor_execution_with_signed_unsigned_data(current_actor_context): installed_rpm = [ RPM(name='sample01', version='0.1', release='1.sm01', epoch='1', packager=RH_PACKAGER, arch='noarch', pgpsig='RSA/SHA256, Mon 01 Jan 1970 00:00:00 AM -03, Key ID 199e2f91fd431d51'), RPM(name='sample02', version='0.1', release='1.sm01', epoch='1', packager=RH_PACKAGER, arch='noarch', pgpsig='SOME_OTHER_SIG_X'), RPM(name='sample03', version='0.1', release='1.sm01', epoch='1', packager=RH_PACKAGER, arch='noarch', pgpsig='RSA/SHA256, Mon 01 Jan 1970 00:00:00 AM -03, Key ID 5326810137017186'), RPM(name='sample04', version='0.1', release='1.sm01', epoch='1', packager=RH_PACKAGER, arch='noarch', pgpsig='SOME_OTHER_SIG_X'), RPM(name='sample05', version='0.1', release='1.sm01', epoch='1', packager=RH_PACKAGER, arch='noarch', pgpsig='RSA/SHA256, Mon 01 Jan 1970 00:00:00 AM -03, Key ID 938a80caf21541eb'), RPM(name='sample06', version='0.1', release='1.sm01', epoch='1', packager=RH_PACKAGER, arch='noarch', pgpsig='SOME_OTHER_SIG_X'), RPM(name='sample07', version='0.1', release='1.sm01', epoch='1', packager=RH_PACKAGER, arch='noarch', pgpsig='RSA/SHA256, Mon 01 Jan 1970 00:00:00 AM -03, Key ID fd372689897da07a'), RPM(name='sample08', version='0.1', release='1.sm01', epoch='1', packager=RH_PACKAGER, arch='noarch', pgpsig='SOME_OTHER_SIG_X'), RPM(name='sample09', version='0.1', release='1.sm01', epoch='1', packager=RH_PACKAGER, arch='noarch', pgpsig='RSA/SHA256, Mon 01 Jan 1970 00:00:00 AM -03, Key ID 45689c882fa658e0')] current_actor_context.feed(InstalledRPM(items=installed_rpm)) current_actor_context.run() assert current_actor_context.consume(InstalledRedHatSignedRPM) assert len(current_actor_context.consume(InstalledRedHatSignedRPM)[0].items) == 5 assert current_actor_context.consume(InstalledUnsignedRPM) assert len(current_actor_context.consume(InstalledUnsignedRPM)[0].items) == 4
def test_actor_execution_with_sample_data(current_actor_context): installed_rpm = [ RPM(name='sample01', version='0.1', release='1.sm01', epoch='1', packager=RH_PACKAGER, arch='noarch', pgpsig='SOME_PGP_SIG'), RPM(name='sample02', version='0.1', release='1.sm01', epoch='1', packager=RH_PACKAGER, arch='noarch', pgpsig='SOME_PGP_SIG') ] modules_to_enable = [ Module(name='enable', stream='1'), Module(name='enable', stream='2') ] modules_to_reset = [ Module(name='reset', stream='1'), Module(name='reset', stream='2') ] current_actor_context.feed(InstalledRedHatSignedRPM(items=installed_rpm)) current_actor_context.feed( RpmTransactionTasks( to_remove=[rpm.name for rpm in installed_rpm], to_keep=[installed_rpm[0].name], modules_to_enable=modules_to_enable, modules_to_reset=modules_to_reset, )) current_actor_context.feed( RpmTransactionTasks( modules_to_enable=modules_to_enable, modules_to_reset=modules_to_reset, )) current_actor_context.run() result = current_actor_context.consume(FilteredRpmTransactionTasks) assert len(result) == 1 assert result[0].to_keep == [installed_rpm[0].name] assert result[0].to_remove == [installed_rpm[1].name] assert len(result[0].modules_to_enable) == 2 assert all(m.name == 'enable' for m in result[0].modules_to_enable) assert '1' in {m.stream for m in result[0].modules_to_enable} assert '2' in {m.stream for m in result[0].modules_to_enable} assert len(result[0].modules_to_reset) == 2 assert all(m.name == 'reset' for m in result[0].modules_to_reset) assert '1' in {m.stream for m in result[0].modules_to_reset} assert '2' in {m.stream for m in result[0].modules_to_reset}
def process(): output = rpms.get_installed_rpms() pkg_repos = get_package_repository_data() rpm_streams = map_modular_rpms_to_modules() result = InstalledRPM() for entry in output: entry = entry.strip() if not entry: continue name, version, release, epoch, packager, arch, pgpsig = entry.split('|') repository = pkg_repos.get(name, '') rpm_key = (name, epoch, version, release, arch) module, stream = rpm_streams.get(rpm_key, (None, None)) result.items.append(RPM( name=name, version=version, epoch=epoch, packager=packager, arch=arch, release=release, pgpsig=pgpsig, repository=repository, module=module, stream=stream)) api.produce(result)
def process(self): LEAPP_PACKAGES = [ 'leapp', 'leapp-repository', 'snactor', 'leapp-repository-deps-el8', 'leapp-deps-el8', 'python2-leapp', 'leapp-repository-sos-plugin' ] installed_rpms = get_installed_rpms() if not installed_rpms: return to_remove = LeftoverPackages() unsigned = [ pkg.name for pkg in next(self.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)) self.produce(to_remove)
def process(self): leftover_packages = next(self.consume(LeftoverPackages), LeftoverPackages()) if not leftover_packages.items: self.log.info('No leftover packages, skipping...') return installed_rpms = get_installed_rpms() to_remove = ['-'.join([pkg.name, pkg.version, pkg.release]) for pkg in leftover_packages.items] cmd = ['dnf', 'remove', '-y', '--noautoremove'] + to_remove if rhsm.skip_rhsm(): # ensure we don't use suscription-manager when it should be skipped cmd += ['--disableplugin', 'subscription-manager'] try: stdlib.run(cmd) except stdlib.CalledProcessError: error = 'Failed to remove packages: {}'.format(', '.join(to_remove)) self.log.error(error) return removed_packages = RemovedPackages() removed = list(set(installed_rpms) - set(get_installed_rpms())) for pkg in removed: name, version, release, epoch, packager, arch, pgpsig = pkg.split('|') removed_packages.items.append(RPM( name=name, version=version, epoch=epoch, packager=packager, arch=arch, release=release, pgpsig=pgpsig )) self.produce(removed_packages)
def test_all_rpms_signed(current_actor_context): installed_rpm = [ RPM(name='sample01', version='0.1', release='1.sm01', epoch='1', packager=RH_PACKAGER, arch='noarch', pgpsig='RSA/SHA256, Mon 01 Jan 1970 00:00:00 AM -03, Key ID 199e2f91fd431d51'), RPM(name='sample02', version='0.1', release='1.sm01', epoch='1', packager=RH_PACKAGER, arch='noarch', pgpsig='SOME_OTHER_SIG_X'), RPM(name='sample03', version='0.1', release='1.sm01', epoch='1', packager=RH_PACKAGER, arch='noarch', pgpsig='RSA/SHA256, Mon 01 Jan 1970 00:00:00 AM -03, Key ID 5326810137017186'), RPM(name='sample04', version='0.1', release='1.sm01', epoch='1', packager=RH_PACKAGER, arch='noarch', pgpsig='SOME_OTHER_SIG_X') ] current_actor_context.feed(InstalledRPM(items=installed_rpm)) current_actor_context.run(config_model=mock_configs.CONFIG_ALL_SIGNED) assert current_actor_context.consume(InstalledRedHatSignedRPM) assert len(current_actor_context.consume(InstalledRedHatSignedRPM)[0].items) == 4 assert not current_actor_context.consume(InstalledUnsignedRPM)[0].items
def consume_message_mocked(*models): pkgs = [ RPM(name='original', epoch='', packager='', version='', release='', arch='', pgpsig=''), RPM(name='removed', epoch='', packager='', version='', release='', arch='', pgpsig='') ] yield InstalledRedHatSignedRPM(items=pkgs)
def mock_rpm(name): return RPM( name=name, epoch="0", packager="Red Hat Inc.", version="4.6.0", release="1.el7", arch="x86_64", pgpsig="dummy", )
def get_sample_rpm(name, repository): return RPM( name=name, epoch='1', packager='Red Hat Inc.', version='0.0.1', release='1.el7', arch='x86_64', pgpsig= 'RSA/SHA256, Mon 01 Jan 1970 00:00:00 AM UTC, Key ID 0123456789abcdef', repository=repository)
def test_kernel_rpm(version_string, release_string, version, release): rpm = RPM( name='kernel', arch='noarch', version=version_string, release=release_string, epoch='0', packager=RH_PACKAGER, pgpsig='SOME_OTHER_SIG_X', ) assert version == checkinstalledkernels.get_kernel_rpm_version(rpm) assert release == checkinstalledkernels.get_kernel_rpm_release(rpm)
def consume_signed_rpms_mocked(*models): installed = [ RPM(name='c', version='0.1', release='1.sm01', epoch='1', packager=RH_PACKAGER, arch='noarch', pgpsig= 'RSA/SHA256, Mon 01 Jan 1970 00:00:00 AM -03, Key ID 199e2f91fd431d51' ) ] yield InstalledRedHatSignedRPM(items=installed)
def test_katello_pkg_goes_to_signed(current_actor_context): installed_rpm = [ RPM(name='katello-ca-consumer-vm-098.example.com', version='1.0', release='1', epoch='(none)', packager='None', arch='noarch', pgpsig=''), ] current_actor_context.feed(InstalledRPM(items=installed_rpm)) current_actor_context.run(config_model=mock_configs.CONFIG_ALL_SIGNED) assert current_actor_context.consume(InstalledRedHatSignedRPM) assert len(current_actor_context.consume(InstalledRedHatSignedRPM)[0].items) == 1 assert not current_actor_context.consume(InstalledUnsignedRPM)[0].items
def create_rpm( version, release, name='kernel', packager=RH_PACKAGER, pgpsig='SOME_OTHER_SIG_X', epoch='0', ): return RPM( name=name, arch=release.split('.')[-1], version=version, release='.'.join(release.split('.')[0:-1]), epoch='0', packager=RH_PACKAGER, pgpsig='SOME_OTHER_SIG_X', )
def _generate_rpm_with_name(name): """ Generate new RPM model item with given name. Parameters: name (str): rpm name Returns: rpm (RPM): new RPM object with name parameter set """ return RPM(name=name, version='0.1', release='1.sm01', epoch='1', pgpsig='RSA/SHA256, Mon 01 Jan 1970 00:00:00 AM -03, Key ID 199e2f91fd431d51', packager='Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>', arch='noarch')
def process(self): output = get_installed_rpms() result = InstalledRPM() for entry in output: entry = entry.strip() if not entry: continue name, version, release, epoch, packager, arch, pgpsig = entry.split('|') result.items.append(RPM( name=name, version=version, epoch=epoch, packager=packager, arch=arch, release=release, pgpsig=pgpsig)) self.produce(result)
def mocked_consume(pkgs): # pkgs = [(name, version-number)] installed_rpms = [] version = 1 for pkg in pkgs: installed_rpms.append( RPM(name=pkg[0], arch='noarch', version=str(version), release='{}.sm01'.format(pkg[1]), epoch='0', packager=RH_PACKAGER, pgpsig='SOME_OTHER_SIG_X')) version += 1 def f(*a): yield InstalledRedHatSignedRPM(items=installed_rpms) return f
def process(self): output = check_output([ '/bin/rpm', '-qa', '--queryformat', r'%{NAME}|%{VERSION}|%{RELEASE}|%|EPOCH?{%{EPOCH}}:{}||%|ARCH?{%{ARCH}}:{}|\n' ]).decode('utf-8') result = InstalledRPM() for entry in output.split('\n'): entry = entry.strip() if not entry: continue name, version, release, epoch, arch = entry.split('|') result.items.append( RPM(name=name, version=version, epoch=epoch, arch=arch, release=release)) self.produce(result)
def mocked_consume(pkg_names): installed_rpms = [] version = 1 for pkg in pkg_names: installed_rpms.append( RPM(name=pkg, arch='noarch', version=str(version), release='1.sm01', epoch='0', packager=RH_PACKAGER, pgpsig='SOME_OTHER_SIG_X')) version += 1 def f(*a): yield InstalledRedHatSignedRPM(items=installed_rpms) return f
def process(self): output = check_output([ '/bin/rpm', '-qa', '--queryformat', r'%{NAME}|%{VERSION}|%{RELEASE}|%|EPOCH?{%{EPOCH}}:{(none)}||%|PACKAGER?{%{PACKAGER}}:{(none)}||%|' r'ARCH?{%{ARCH}}:{}||%|DSAHEADER?{%{DSAHEADER:pgpsig}}:{%|RSAHEADER?{%{RSAHEADER:pgpsig}}:{(none)}|}|\n' ]) result = InstalledRPM() for entry in output.split('\n'): entry = entry.strip() if not entry: continue name, version, release, epoch, packager, arch, pgpsig = entry.split('|') result.items.append(RPM( name=name, version=version, epoch=epoch, packager=packager, arch=arch, release=release, pgpsig=pgpsig)) self.produce(result)
import os import pytest from leapp.libraries.actor.library import BrlttyConf from leapp.models import InstalledRedHatSignedRPM, RPM, BrlttyMigrationDecision from leapp.reporting import Report RH_PACKAGER = 'Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>' with_brltty = [ RPM(name='grep', version='0.1', release='1.sm01', epoch='1', packager=RH_PACKAGER, arch='noarch', pgpsig= 'RSA/SHA256, Mon 01 Jan 1970 00:00:00 AM -03, Key ID 199e2f91fd431d51' ), RPM(name='brltty', version='0.1', release='1.sm01', epoch='1', packager=RH_PACKAGER, arch='noarch', pgpsig= 'RSA/SHA256, Mon 01 Jan 1970 00:00:00 AM -03, Key ID 199e2f91fd431d51') ] without_brltty = [