def test_fail_grubenv_to_file(monkeypatch): monkeypatch.setattr(api, 'consume', lambda x: iter([HybridImage()])) monkeypatch.setattr(grubenvtofile, 'run', run_mocked(raise_err=True)) monkeypatch.setattr(api, 'current_logger', logger_mocked()) grubenvtofile.grubenv_to_file() assert grubenvtofile.run.called == 1 assert api.current_logger.warnmsg[0].startswith('Could not unlink')
def test_no_network_renaming(monkeypatch): """ This should cover OAMG-4243. """ # this mock should be needed, as this function should be called, but just # for a check.. monkeypatch.setattr(persistentnetnamesconfig, 'generate_link_file', generate_link_file_mocked) interfaces = generate_interfaces(4) for i in range(4): interfaces[i].name = 'myinterface{}'.format(i) msgs = [PersistentNetNamesFacts(interfaces=interfaces)] interfaces[0].name = 'changedinterfacename0' msgs.append(PersistentNetNamesFactsInitramfs(interfaces=interfaces)) mocked_actor = CurrentActorMocked( msgs=msgs, envars={'LEAPP_NO_NETWORK_RENAMING': '1'}) monkeypatch.setattr(persistentnetnamesconfig.api, 'current_actor', mocked_actor) monkeypatch.setattr(persistentnetnamesconfig.api, 'current_logger', logger_mocked()) monkeypatch.setattr(persistentnetnamesconfig.api, 'produce', produce_mocked()) persistentnetnamesconfig.process() ilog = 'Skipping handling of possibly renamed network interfaces: leapp executed with LEAPP_NO_NETWORK_RENAMING=1' assert ilog in persistentnetnamesconfig.api.current_logger.infomsg assert not persistentnetnamesconfig.api.produce.called
def test_remove_boot_files(monkeypatch): # BootContent message available def consume_message_mocked(*models): yield BootContent(kernel_path='/abc', initram_path='/def') monkeypatch.setattr('leapp.libraries.stdlib.api.consume', consume_message_mocked) monkeypatch.setattr(removebootfiles, 'remove_file', remove_file_mocked()) removebootfiles.remove_boot_files() assert removebootfiles.remove_file.files_to_remove == ['/abc', '/def'] # No BootContent message available def consume_no_message_mocked(*models): yield None monkeypatch.setattr('leapp.libraries.stdlib.api.consume', consume_no_message_mocked) monkeypatch.setattr(removebootfiles, 'remove_file', remove_file_mocked()) monkeypatch.setattr('leapp.libraries.stdlib.api.current_logger', logger_mocked()) with pytest.raises(StopActorExecution): removebootfiles.remove_boot_files() assert removebootfiles.remove_file.called == 0 assert any("Did not receive a message" in msg for msg in api.current_logger.warnmsg)
def test_bz_1899455_crash_iface(monkeypatch, current_actor_context, adjust_cwd): """ Cover situation when network device is discovered on the src sys but not inside the upgrade environment. This typically happens when the network device needs specific drivers which are not present inside the upgrade initramfs. Usually it points to a missing actors that should influence the upgrade initramfs in a way the drivers are installed. In this situation, only correct thing we can do in this actor is print warning / report that we couldn't located particular devices so we cannot handle interface names related to this devices. """ with open(os.path.join(CUR_DIR, 'files/crashed_ifaces.json')) as fp: json_msgs = json.load(fp) msgs = [ PersistentNetNamesFacts.create(json_msgs["PersistentNetNamesFacts"]), PersistentNetNamesFactsInitramfs.create(json_msgs["PersistentNetNamesFactsInitramfs"]), ] monkeypatch.setattr(persistentnetnamesconfig, 'generate_link_file', generate_link_file_mocked) monkeypatch.setattr(persistentnetnamesconfig.api, 'current_actor', CurrentActorMocked(msgs=msgs)) monkeypatch.setattr(persistentnetnamesconfig.api, 'current_logger', logger_mocked()) monkeypatch.setattr(persistentnetnamesconfig.api, 'produce', produce_mocked()) persistentnetnamesconfig.process() for prod_models in [RenamedInterfaces, InitrdIncludes]: any(isinstance(i, prod_models) for i in persistentnetnamesconfig.api.produce.model_instances) assert any(['Some network devices' in x for x in persistentnetnamesconfig.api.current_logger.warnmsg])
def test_consume_data(monkeypatch, raised, no_rhsm, testdata): # do not write never into testdata inside the test !! xfs = testdata.xfs custom_repofiles = testdata.custom_repofiles _exp_pkgs = {'dnf', 'dnf-command(config-manager)'} _exp_files = [] def _get_pkgs(msg): if isinstance(msg, models.TargetUserSpacePreupgradeTasks): return msg.install_rpms return msg.packages def _get_files(msg): if isinstance(msg, models.TargetUserSpacePreupgradeTasks): return msg.copy_files return [] def _cfiles2set(cfiles): return {(i.src, i.dst) for i in cfiles} if isinstance(testdata.pkg_msgs, list): for msg in testdata.pkg_msgs: _exp_pkgs.update(_get_pkgs(msg)) _exp_files += _get_files(msg) else: _exp_pkgs.update(_get_pkgs(testdata.pkg_msgs)) _exp_files += _get_files(testdata.pkg_msgs) mocked_consume = MockedConsume(testdata.pkg_msgs, testdata.rhsm_info, testdata.rhui_info, xfs, testdata.storage, custom_repofiles) monkeypatch.setattr(userspacegen.api, 'consume', mocked_consume) monkeypatch.setattr(userspacegen.api, 'current_logger', logger_mocked()) monkeypatch.setattr(userspacegen.api, 'current_actor', CurrentActorMocked(envars={'LEAPP_NO_RHSM': no_rhsm})) if not xfs: xfs = models.XFSPresence() if not custom_repofiles: custom_repofiles = [] if not raised: result = userspacegen._InputData() assert result.packages == _exp_pkgs assert _cfiles2set(result.files) == _cfiles2set(_exp_files) assert result.rhsm_info == testdata.rhsm_info assert result.rhui_info == testdata.rhui_info assert result.xfs_info == xfs assert result.storage_info == testdata.storage assert result.custom_repofiles == custom_repofiles assert not userspacegen.api.current_logger.warnmsg assert not userspacegen.api.current_logger.errmsg else: with pytest.raises(raised[0]) as err: userspacegen._InputData() if isinstance(err.value, StopActorExecutionError): assert raised[1] in err.value.message else: assert userspacegen.api.current_logger.warnmsg assert any([ raised[1] in x for x in userspacegen.api.current_logger.warnmsg ])
def test_enable_repos_skip_rhsm(monkeypatch): monkeypatch.setattr(api, 'current_actor', CurrentActorMocked(envars={'LEAPP_NO_RHSM': '1'})) monkeypatch.setattr(enablerhsmtargetrepos, 'run', run_mocked()) monkeypatch.setattr(api, 'current_logger', logger_mocked()) enablerhsmtargetrepos.enable_rhsm_repos() assert not enablerhsmtargetrepos.run.called assert api.current_logger.dbgmsg
def test_inhibit_on_duplicate_repos_no_dups(monkeypatch): monkeypatch.setattr(reporting, 'create_report', create_report_mocked()) monkeypatch.setattr(api, 'current_logger', logger_mocked()) rhsm._inhibit_on_duplicate_repos([_gen_repofile("foo")]) assert not api.current_logger.warnmsg assert reporting.create_report.called == 0
def test_non_ibmz_arch(monkeypatch, isfile): monkeypatch.setattr(scandasd.architecture, 'matches_architecture', lambda dummy: False) monkeypatch.setattr(scandasd.api, 'current_logger', logger_mocked()) monkeypatch.setattr(scandasd.api, 'produce', produce_mocked()) monkeypatch.setattr(os.path, 'isfile', lambda dummy: isfile) scandasd.process() assert not scandasd.api.current_logger.warnmsg assert not scandasd.api.produce.called
def test_no_includes(monkeypatch): run_mocked = RunMocked() monkeypatch.setattr(api, 'current_actor', CurrentActorMocked(msgs=[])) monkeypatch.setattr(api, 'current_logger', logger_mocked()) monkeypatch.setattr(targetinitramfsgenerator, 'run', run_mocked) targetinitramfsgenerator.process() assert NO_INCLUDE_MSG in api.current_logger.dbgmsg assert not run_mocked.called
def test_no_includes(monkeypatch): run_mocked = RunMocked() monkeypatch.setattr(api, 'current_actor', CurrentActorMocked(msgs=[])) monkeypatch.setattr(api, 'current_logger', logger_mocked()) monkeypatch.setattr(initrdinclude, 'run', run_mocked) initrdinclude.process() assert "No additional files required to add into the initrd." in api.current_logger.dbgmsg assert not run_mocked.called
def test_setrelease_skip_rhsm(monkeypatch, product): commands_called, _ = not_isolated_actions() monkeypatch.setattr(api, 'current_actor', CurrentActorMocked(envars={'LEAPP_NO_RHSM': '1'})) monkeypatch.setattr(api, 'current_logger', logger_mocked()) monkeypatch.setattr(config, 'get_product_type', lambda dummy: product) # To make this work we need to re-apply the decorator, so it respects the environment variable monkeypatch.setattr(rhsm, 'set_release', rhsm.with_rhsm(rhsm.set_release)) enablerhsmtargetrepos.set_rhsm_release() assert not commands_called
def test_device_no_grub_library(monkeypatch): run_mocked = RunMocked() monkeypatch.setattr(grub, 'run', run_mocked) monkeypatch.setattr(os, 'open', open_invalid) monkeypatch.setattr(os, 'read', read_mocked) monkeypatch.setattr(os, 'close', close_mocked) monkeypatch.setattr(api, 'current_logger', logger_mocked()) result = grub.get_grub_device() assert grub.run.called == 2 assert not result
def test_etc_releasever_neither(monkeypatch): mocked_report = create_report_mocked() monkeypatch.setattr(api, 'current_actor', CurrentActorMocked()) monkeypatch.setattr(reporting, 'create_report', mocked_report) monkeypatch.setattr(api, 'current_logger', logger_mocked()) checketcreleasever.process() assert not reporting.create_report.called assert api.current_logger.dbgmsg
def test_remove_file_that_does_not_exist(monkeypatch): def remove_mocked(filepath): raise OSError monkeypatch.setattr('os.remove', remove_mocked) monkeypatch.setattr(api, 'current_logger', logger_mocked()) removebootfiles.remove_file('/filepath') assert any("Could not remove /filepath" in msg for msg in api.current_logger.errmsg)
def test_newest_kernel(monkeypatch): monkeypatch.setattr(api, 'current_actor', CurrentActorMocked(kernel='3.10.0-1234.21.1.el7.x86_64')) monkeypatch.setattr(api, 'current_logger', logger_mocked()) monkeypatch.setattr(api, 'consume', mocked_consume(versioned_kernel_pkgs)) monkeypatch.setattr(reporting, 'create_report', create_report_mocked()) checkinstalledkernels.process() assert not reporting.create_report.called monkeypatch.setattr(api, 'current_actor', CurrentActorMocked(kernel='3.10.0-456.43.1.el7.x86_64')) monkeypatch.setattr(api, 'current_logger', logger_mocked()) monkeypatch.setattr(api, 'consume', mocked_consume(versioned_kernel_pkgs)) monkeypatch.setattr(reporting, 'create_report', create_report_mocked()) checkinstalledkernels.process() assert reporting.create_report.called assert reporting.create_report.report_fields['title'] == 'Newest installed kernel not in use' monkeypatch.setattr(api, 'current_actor', CurrentActorMocked(kernel='3.10.0-789.35.2.el7.x86_64')) monkeypatch.setattr(api, 'current_logger', logger_mocked()) monkeypatch.setattr(api, 'consume', mocked_consume(versioned_kernel_pkgs)) monkeypatch.setattr(reporting, 'create_report', create_report_mocked()) checkinstalledkernels.process() assert reporting.create_report.called assert reporting.create_report.report_fields['title'] == 'Newest installed kernel not in use' # put the kernel in the middle of the list so that its position doesn't guarantee its rank versioned_kernel_pkgs.insert(2, ('kernel', '4.14.0', 115)) monkeypatch.setattr(api, 'current_actor', CurrentActorMocked(kernel='4.14.0-115.29.1.el7a.ppc64le')) monkeypatch.setattr(api, 'current_logger', logger_mocked()) monkeypatch.setattr(api, 'consume', mocked_consume(versioned_kernel_pkgs)) monkeypatch.setattr(reporting, 'create_report', create_report_mocked()) checkinstalledkernels.process() assert not reporting.create_report.called monkeypatch.setattr(api, 'current_actor', CurrentActorMocked(kernel='3.10.0-1234.21.1.el7.x86_64')) monkeypatch.setattr(api, 'current_logger', logger_mocked()) monkeypatch.setattr(api, 'consume', mocked_consume(versioned_kernel_pkgs)) monkeypatch.setattr(reporting, 'create_report', create_report_mocked()) checkinstalledkernels.process() assert reporting.create_report.called assert reporting.create_report.report_fields['title'] == 'Newest installed kernel not in use'
def test_get_grub_device_fail_library(monkeypatch): run_mocked = RunMocked(raise_err=True) monkeypatch.setattr(grub, 'run', run_mocked) monkeypatch.setattr(os, 'open', open_mocked) monkeypatch.setattr(os, 'read', read_mocked) monkeypatch.setattr(os, 'close', close_mocked) monkeypatch.setattr(api, 'current_logger', logger_mocked()) with pytest.raises(StopActorExecution): grub.get_grub_device() assert grub.run.called == 1 err = 'Could not get name of underlying /boot partition' assert err in api.current_logger.warnmsg
def test_get_grub_device_library(monkeypatch): run_mocked = RunMocked() monkeypatch.setattr(grub, 'run', run_mocked) monkeypatch.setattr(os, 'open', open_mocked) monkeypatch.setattr(os, 'read', read_mocked) monkeypatch.setattr(os, 'close', close_mocked) monkeypatch.setattr(api, 'current_logger', logger_mocked()) result = grub.get_grub_device() assert grub.run.called == 2 assert BOOT_DEVICE == result assert not api.current_logger.warnmsg assert 'GRUB is installed on {}'.format(result) in api.current_logger.infomsg
def test_scaninstalledkernel_missing(monkeypatch): result = [] old_kver = '0.1.2-3.rt4.5.el7.x86_64' monkeypatch.setattr(api, 'current_actor', CurrentActorMocked(kernel=old_kver)) monkeypatch.setattr(api, 'current_logger', logger_mocked()) monkeypatch.setattr(api, 'produce', result.append) monkeypatch.setattr(scankernel, 'run', MockedRun({})) scankernel.process() assert api.current_logger.warnmsg assert api.current_logger.errmsg assert not result
def test_scaninstalledkernel_missing_rt(monkeypatch): result = [] old_kver = '0.1.2-3.rt4.5.el7.x86_64' stdouts = {'kernel': [TARGET_KERNEL], 'kernel-rt': [OLD_RT_KERNEL]} monkeypatch.setattr(api, 'current_actor', CurrentActorMocked(kernel=old_kver)) monkeypatch.setattr(api, 'current_logger', logger_mocked()) monkeypatch.setattr(api, 'produce', result.append) monkeypatch.setattr(scankernel, 'run', MockedRun(stdouts)) scankernel.process() assert api.current_logger.warnmsg assert len(result) == 1 and result[0].version == TARGET_KERNEL_VERSION
def test_single_kernel_s390x(monkeypatch): monkeypatch.setattr(api, 'current_actor', CurrentActorMocked()) monkeypatch.setattr(api, 'current_logger', logger_mocked()) monkeypatch.setattr(api, 'consume', mocked_consume(s390x_pkgs_single)) monkeypatch.setattr(reporting, 'create_report', create_report_mocked()) checkinstalledkernels.process() assert not reporting.create_report.called monkeypatch.setattr(api, 'current_actor', CurrentActorMocked(arch=architecture.ARCH_S390X)) monkeypatch.setattr(api, 'consume', mocked_consume(s390x_pkgs_single)) checkinstalledkernels.process() assert not reporting.create_report.called
def test_invalid_fstab_info(monkeypatch): monkeypatch.setattr(reporting, "create_report", create_report_mocked()) monkeypatch.setattr(api, 'current_logger', logger_mocked()) storagescanner._get_fstab_info(os.path.join(CUR_DIR, 'files/invalid_fstab')) assert reporting.create_report.called == 1 assert reporting.create_report.report_fields['severity'] == 'high' assert 'Problems with parsing data in /etc/fstab' in reporting.create_report.report_fields[ 'title'] assert 'inhibitor' in reporting.create_report.report_fields['flags'] assert any("The fstab configuration file seems to be invalid" in msg for msg in api.current_logger.errmsg)
def test_no_set_releasever(monkeypatch, current_actor_context): expected_rel_ver = '8.0' monkeypatch.setattr(setetcreleasever, '_set_releasever', mocked_set_releasever()) monkeypatch.setattr(api, 'current_actor', CurrentActorMocked(dst_ver=expected_rel_ver)) monkeypatch.setattr(api, 'current_logger', logger_mocked()) setetcreleasever.process() assert not setetcreleasever._set_releasever.content assert api.current_logger.dbgmsg
def test_running_submgr_fail(monkeypatch): monkeypatch.setattr( api, 'current_actor', CurrentActorMocked(dst_ver='8.0', envars={'LEAPP_NO_RHSM': '0'}), ) monkeypatch.setattr(enablerhsmtargetrepos, 'get_repos_to_enable', lambda: {'some-repo'}) monkeypatch.setattr(enablerhsmtargetrepos, 'run', run_mocked(raise_err=True)) monkeypatch.setattr(api, 'current_logger', logger_mocked()) enablerhsmtargetrepos.enable_rhsm_repos() assert enablerhsmtargetrepos.run.called assert api.current_logger.warnmsg
def test_etc_releasever_empty(monkeypatch): pkg_mgr_msg = [PkgManagerInfo(etc_releasever=None)] expected_rel_ver = '6.10' mocked_report = create_report_mocked() monkeypatch.setattr( api, 'current_actor', CurrentActorMocked(msgs=pkg_mgr_msg, dst_ver=expected_rel_ver)) monkeypatch.setattr(reporting, 'create_report', mocked_report) monkeypatch.setattr(api, 'current_logger', logger_mocked()) checketcreleasever.process() assert not reporting.create_report.called assert api.current_logger.dbgmsg
def test_set_releasever(monkeypatch, current_actor_context): msgs = [RHUIInfo(provider='aws'), PkgManagerInfo(etc_releasever='7.7')] expected_rel_ver = '8.0' monkeypatch.setattr(setetcreleasever, '_set_releasever', mocked_set_releasever()) monkeypatch.setattr( api, 'current_actor', CurrentActorMocked(msgs=msgs, dst_ver=expected_rel_ver)) monkeypatch.setattr(api, 'current_logger', logger_mocked()) setetcreleasever.process() assert expected_rel_ver == setetcreleasever._set_releasever.content assert not api.current_logger.dbgmsg
def test_etc_releasever_both(monkeypatch): msgs = [RHUIInfo(provider='aws'), PkgManagerInfo(etc_releasever='7.7')] expected_rel_ver = '6.10' mocked_report = create_report_mocked() monkeypatch.setattr( api, 'current_actor', CurrentActorMocked(msgs=msgs, dst_ver=expected_rel_ver)) monkeypatch.setattr(reporting, 'create_report', mocked_report) monkeypatch.setattr(api, 'current_logger', logger_mocked()) checketcreleasever.process() assert reporting.create_report.called == 1 assert expected_rel_ver in mocked_report.report_fields['summary'] assert not api.current_logger.dbgmsg
def test_dasd_not_found(monkeypatch): monkeypatch.setattr(scandasd.architecture, 'matches_architecture', lambda dummy: True) monkeypatch.setattr(scandasd.api, 'current_logger', logger_mocked()) monkeypatch.setattr(os.path, 'isfile', lambda dummy: False) monkeypatch.setattr(scandasd.api, 'produce', produce_mocked()) scandasd.process() assert scandasd.api.current_logger.warnmsg assert scandasd.api.produce.called == 1 assert len(scandasd.api.produce.model_instances) == 1 assert isinstance(scandasd.api.produce.model_instances[0], TargetUserSpaceUpgradeTasks) assert scandasd.api.produce.model_instances[0].install_rpms == [ 's390utils-core' ] assert not scandasd.api.produce.model_instances[0].copy_files
def test_dasd_exists(monkeypatch): monkeypatch.setattr(scandasd.architecture, 'matches_architecture', lambda dummy: True) monkeypatch.setattr(scandasd.api, 'current_logger', logger_mocked()) monkeypatch.setattr(scandasd.api, 'produce', produce_mocked()) monkeypatch.setattr(os.path, 'isfile', lambda dummy: True) scandasd.process() assert not scandasd.api.current_logger.warnmsg assert scandasd.api.produce.called == 2 tusut_flag = False uit_flag = False for msg in scandasd.api.produce.model_instances: if isinstance(msg, TargetUserSpaceUpgradeTasks): assert [CopyFile(src=scandasd.DASD_CONF)] == msg.copy_files tusut_flag = True elif isinstance(msg, UpgradeInitramfsTasks): assert [scandasd.DASD_CONF] == msg.include_files uit_flag = True assert tusut_flag and uit_flag
def test_etc_releasever(monkeypatch, exists): pkg_mgr_msg = [PkgManagerInfo(etc_releasever='7.7')] if exists else [] expected_rel_ver = '6.10' mocked_report = create_report_mocked() monkeypatch.setattr( api, 'current_actor', CurrentActorMocked(msgs=pkg_mgr_msg, dst_ver=expected_rel_ver)) monkeypatch.setattr(reporting, 'create_report', mocked_report) monkeypatch.setattr(api, 'current_logger', logger_mocked()) checketcreleasever.process() if exists: assert reporting.create_report.called == 1 assert expected_rel_ver in mocked_report.report_fields['summary'] assert not api.current_logger.dbgmsg else: assert not reporting.create_report.called assert api.current_logger.dbgmsg
def test_etc_releasever_rhui(monkeypatch, is_rhui): rhui_msg = [RHUIInfo(provider='aws')] if is_rhui else [] expected_rel_ver = '6.10' mocked_report = create_report_mocked() monkeypatch.setattr( api, 'current_actor', CurrentActorMocked(msgs=rhui_msg, dst_ver=expected_rel_ver)) monkeypatch.setattr(reporting, 'create_report', mocked_report) monkeypatch.setattr(api, 'current_logger', logger_mocked()) checketcreleasever.process() if is_rhui: assert reporting.create_report.called == 1 assert expected_rel_ver in mocked_report.report_fields['summary'] assert not api.current_logger.dbgmsg else: assert not reporting.create_report.called assert api.current_logger.dbgmsg