Пример #1
0
def test_get_loaded_kmods(monkeypatch):
    run_subprocess_mocked = mock.Mock(
        spec=run_subprocess,
        side_effect=run_subprocess_side_effect(
            (
                ("lsmod", ),
                (
                    "Module                  Size  Used by\n"
                    "a                 81920  4\n"
                    "b    49152  0\n"
                    "c              40960  1\n",
                    0,
                ),
            ),
            (("modinfo", "-F", "filename", "a"),
             (MODINFO_STUB.split()[0] + "\n", 0)),
            (("modinfo", "-F", "filename", "b"),
             (MODINFO_STUB.split()[1] + "\n", 0)),
            (("modinfo", "-F", "filename", "c"),
             (MODINFO_STUB.split()[2] + "\n", 0)),
        ),
    )
    monkeypatch.setattr(
        checks,
        "run_subprocess",
        value=run_subprocess_mocked,
    )
    assert get_loaded_kmods() == {
        "kernel/lib/c.ko.xz", "kernel/lib/a.ko.xz", "kernel/lib/b.ko.xz"
    }
Пример #2
0
def test_get_rhel_supported_kmods(
    monkeypatch,
    pretend_os,
    repoquery_f_stub,
    repoquery_l_stub,
    exception,
):
    run_subprocess_mock = mock.Mock(side_effect=run_subprocess_side_effect(
        (
            ("repoquery", "-f"),
            (repoquery_f_stub, 0),
        ),
        (
            ("repoquery", "-l"),
            (repoquery_l_stub, 0),
        ),
    ))
    monkeypatch.setattr(
        checks,
        "run_subprocess",
        value=run_subprocess_mock,
    )
    if exception:
        with pytest.raises(exception):
            checks.get_rhel_supported_kmods()
    else:
        res = checks.get_rhel_supported_kmods()
        assert res == set((
            "kernel/lib/a.ko",
            "kernel/lib/a.ko.xz",
            "kernel/lib/b.ko.xz",
            "kernel/lib/c.ko.xz",
            "kernel/lib/c.ko",
        ))
Пример #3
0
def test_ensure_compatibility_of_kmods(
    monkeypatch,
    pretend_os,
    caplog,
    host_kmods,
    exception,
    should_be_in_logs,
    shouldnt_be_in_logs,
):
    monkeypatch.setattr(checks, "get_loaded_kmods",
                        mock.Mock(return_value=host_kmods))
    run_subprocess_mock = mock.Mock(side_effect=run_subprocess_side_effect(
        (("uname", ), ("5.8.0-7642-generic\n", 0)),
        (("repoquery", "-f"), (REPOQUERY_F_STUB_GOOD, 0)),
        (("repoquery", "-l"), (REPOQUERY_L_STUB_GOOD, 0)),
    ))
    monkeypatch.setattr(
        checks,
        "run_subprocess",
        value=run_subprocess_mock,
    )

    if exception:
        with pytest.raises(exception):
            checks.ensure_compatibility_of_kmods()
    else:
        checks.ensure_compatibility_of_kmods()

    if should_be_in_logs:
        assert should_be_in_logs in caplog.records[-1].message
    if shouldnt_be_in_logs:
        assert shouldnt_be_in_logs not in caplog.records[-1].message
Пример #4
0
def test_remove_pkgs_failed_to_remove(
    pkgs_to_remove,
    ret_code,
    backup_pkg,
    critical,
    expected,
    monkeypatch,
    caplog,
):
    run_subprocess_mock = mock.Mock(
        side_effect=unit_tests.run_subprocess_side_effect((
            ("rpm", "-e", "--nodeps", pkgs_to_remove[0]),
            ("test", ret_code)), ))
    monkeypatch.setattr(
        backup,
        "run_subprocess",
        value=run_subprocess_mock,
    )

    if critical:
        with pytest.raises(SystemExit):
            backup.remove_pkgs(
                pkgs_to_remove=pkgs_to_remove,
                backup=backup_pkg,
                critical=critical,
            )
    else:
        backup.remove_pkgs(pkgs_to_remove=pkgs_to_remove,
                           backup=backup_pkg,
                           critical=critical)

    assert expected.format(pkgs_to_remove[0]) in caplog.records[-1].message
Пример #5
0
def test_enable_repos_toolopts_enablerepo(
    toolopts_enablerepo,
    subprocess,
    should_raise,
    expected,
    expected_message,
    tool_opts,
    monkeypatch,
    caplog,
):
    cmd_mock = ["subscription-manager", "repos"]
    for repo in toolopts_enablerepo:
        cmd_mock.append("--enable=%s" % repo)

    run_subprocess_mock = mock.Mock(
        side_effect=unit_tests.run_subprocess_side_effect((cmd_mock,
                                                           subprocess), ))
    monkeypatch.setattr(
        utils,
        "run_subprocess",
        value=run_subprocess_mock,
    )
    tool_opts.enablerepo = toolopts_enablerepo
    # monkeypatch.setattr(tool_opts, "enablerepo", toolopts_enablerepo)

    if should_raise:
        with pytest.raises(SystemExit):
            subscription.enable_repos(rhel_repoids=None)
    else:
        subscription.enable_repos(rhel_repoids=None)
        assert system_info.submgr_enabled_repos == expected

    assert expected_message in caplog.records[-1].message
    assert run_subprocess_mock.call_count == 1
Пример #6
0
def test_remove_iwlax2xx_firmware(
    pretend_os,
    is_iwl7260_installed,
    is_iwlax2xx_installed,
    subprocess_output,
    subprocess_call_count,
    expected_message,
    monkeypatch,
    caplog,
):
    run_subprocess_mock = mock.Mock(side_effect=run_subprocess_side_effect((
        ("rpm", "-e", "--nodeps", "iwlax2xx-firmware"), subprocess_output), ))
    is_rpm_installed_mock = mock.Mock(
        side_effect=[is_iwl7260_installed, is_iwlax2xx_installed])
    monkeypatch.setattr(
        special_cases,
        "run_subprocess",
        value=run_subprocess_mock,
    )
    monkeypatch.setattr(special_cases.system_info,
                        "is_rpm_installed",
                        value=is_rpm_installed_mock)

    special_cases.remove_iwlax2xx_firmware()

    assert run_subprocess_mock.call_count == subprocess_call_count
    assert is_rpm_installed_mock.call_count == 2
    assert expected_message in caplog.records[-1].message
Пример #7
0
def test_is_loaded_kernel_latest_eus_system(
    pretend_os,
    repoquery_version,
    uname_version,
    return_code,
    package_name,
    raise_system_exit,
    tmpdir,
    monkeypatch,
    caplog,
):
    fake_reposdir_path = str(tmpdir)
    monkeypatch.setattr(checks,
                        "get_hardcoded_repofiles_dir",
                        value=lambda: fake_reposdir_path)
    run_subprocess_mocked = mock.Mock(
        spec=run_subprocess,
        side_effect=run_subprocess_side_effect(
            (
                (
                    "repoquery",
                    "--quiet",
                    "--qf",
                    '"%{BUILDTIME}\\t%{VERSION}-%{RELEASE}\\t%{REPOID}"',
                    "--setopt=reposdir=%s" % fake_reposdir_path,
                    package_name,
                ),
                (
                    repoquery_version,
                    return_code,
                ),
            ),
            (("uname", "-r"), (uname_version, return_code)),
        ),
    )
    monkeypatch.setattr(
        checks,
        "run_subprocess",
        value=run_subprocess_mocked,
    )

    if raise_system_exit:
        with pytest.raises(SystemExit):
            is_loaded_kernel_latest()

        repoquery_kernel_version = repoquery_version.split("\t")[1]
        uname_kernel_version = uname_version.rsplit(".", 1)[0]
        assert (
            "The version of the loaded kernel is different from the latest version in repositories defined in the %s folder"
            % fake_reposdir_path)
        assert ("Latest kernel version available in baseos: %s\n" %
                repoquery_kernel_version in caplog.records[-1].message)
        assert "Loaded kernel version: %s\n" % uname_kernel_version in caplog.records[
            -1].message
    else:
        is_loaded_kernel_latest()
        assert "The currently loaded kernel is at the latest version." in caplog.records[
            -1].message
Пример #8
0
def test_ensure_compatibility_of_kmods_excluded(
    monkeypatch,
    pretend_os,
    caplog,
    unsupported_pkg,
    msg_in_logs,
    msg_not_in_logs,
    exception,
):
    monkeypatch.setattr(
        checks,
        "get_loaded_kmods",
        mock.Mock(return_value=HOST_MODULES_STUB_GOOD | {unsupported_pkg}),
    )
    get_unsupported_kmods_mocked = mock.Mock(
        wraps=checks.get_unsupported_kmods)
    run_subprocess_mock = mock.Mock(side_effect=run_subprocess_side_effect(
        (("uname", ), ("5.8.0-7642-generic\n", 0)),
        (("repoquery", "-f"), (REPOQUERY_F_STUB_GOOD, 0)),
        (("repoquery", "-l"), (REPOQUERY_L_STUB_GOOD, 0)),
    ))
    monkeypatch.setattr(
        checks,
        "run_subprocess",
        value=run_subprocess_mock,
    )
    monkeypatch.setattr(
        checks,
        "get_unsupported_kmods",
        value=get_unsupported_kmods_mocked,
    )
    if exception:
        with pytest.raises(exception):
            checks.ensure_compatibility_of_kmods()
    else:
        checks.ensure_compatibility_of_kmods()
    get_unsupported_kmods_mocked.assert_called_with(
        # host kmods
        set((
            unsupported_pkg,
            "kernel/lib/c.ko.xz",
            "kernel/lib/a.ko.xz",
            "kernel/lib/b.ko.xz",
        )),
        # rhel supported kmods
        set((
            "kernel/lib/c.ko",
            "kernel/lib/b.ko.xz",
            "kernel/lib/c.ko.xz",
            "kernel/lib/a.ko.xz",
            "kernel/lib/a.ko",
        )),
    )
    if msg_in_logs:
        assert any(msg_in_logs in record.message for record in caplog.records)
    if msg_not_in_logs:
        assert all(msg_not_in_logs not in record.message
                   for record in caplog.records)
Пример #9
0
    def test_unregister_system_submgr_not_found(self, monkeypatch, caplog):
        rpm_command = ["rpm", "--quiet", "-q", "subscription-manager"]

        run_subprocess_mock = mock.Mock(
            side_effect=unit_tests.run_subprocess_side_effect((rpm_command,
                                                               ("", 1)), ))
        monkeypatch.setattr(utils, "run_subprocess", value=run_subprocess_mock)
        subscription.unregister_system()
        assert "The subscription-manager package is not installed." in caplog.records[
            -1].message
Пример #10
0
def test_is_loaded_kernel_latest(repoquery_version, uname_version, return_code,
                                 major_ver, package_name, raise_system_exit,
                                 monkeypatch, caplog):
    Version = namedtuple("Version", ("major", "minor"))
    # Using the minor version as 99, so the tests should never fail because of a constraint in the code, since we don't
    # mind the minor version number (for now), and require only that the major version to be in the range of 6 to 8,
    # we can set the minor version to 99 to avoid hardcoded checks in the code.
    monkeypatch.setattr(
        checks.system_info,
        "version",
        value=Version(major=major_ver, minor=99),
    )
    system_info.id = "centos"
    run_subprocess_mocked = mock.Mock(
        spec=run_subprocess,
        side_effect=run_subprocess_side_effect(
            (
                (
                    "repoquery",
                    "--quiet",
                    "--qf",
                    '"%{BUILDTIME}\\t%{VERSION}-%{RELEASE}\\t%{REPOID}"',
                    package_name,
                ),
                (
                    repoquery_version,
                    return_code,
                ),
            ),
            (("uname", "-r"), (uname_version, return_code)),
        ),
    )
    monkeypatch.setattr(
        checks,
        "run_subprocess",
        value=run_subprocess_mocked,
    )

    if raise_system_exit:
        with pytest.raises(SystemExit):
            is_loaded_kernel_latest()

        repoquery_kernel_version = repoquery_version.split("\t")[1]
        uname_kernel_version = uname_version.rsplit(".", 1)[0]
        assert ("Latest kernel version available in baseos: %s\n" %
                repoquery_kernel_version in caplog.records[-1].message)
        assert "Loaded kernel version: %s\n" % uname_kernel_version in caplog.records[
            -1].message
    else:
        is_loaded_kernel_latest()
        assert "The currently loaded kernel is at the latest version." in caplog.records[
            -1].message
Пример #11
0
def test_lock_releasever_in_rhel_repositories(pretend_os, subprocess, expected,
                                              monkeypatch, caplog):
    cmd = [
        "subscription-manager", "release",
        "--set=%s" % system_info.releasever
    ]
    run_subprocess_mock = mock.Mock(
        side_effect=unit_tests.run_subprocess_side_effect((cmd, subprocess), ))
    monkeypatch.setattr(
        utils,
        "run_subprocess",
        value=run_subprocess_mock,
    )
    subscription.lock_releasever_in_rhel_repositories()

    assert expected in caplog.records[-1].message
    assert run_subprocess_mock.call_count == 1
Пример #12
0
def test_changed_pkgs_control_remove_installed_pkgs(monkeypatch, caplog):
    removed_pkgs = ["pkg_1"]
    run_subprocess_mock = mock.Mock(
        side_effect=unit_tests.run_subprocess_side_effect((("rpm", "-e",
                                                            "--nodeps",
                                                            removed_pkgs[0]),
                                                           ("test", 0)), ))
    monkeypatch.setattr(
        backup,
        "run_subprocess",
        value=run_subprocess_mock,
    )

    control = backup.ChangedRPMPackagesController()
    control.installed_pkgs = removed_pkgs
    control._remove_installed_pkgs()
    assert "Removing package: %s" % removed_pkgs[0] in caplog.records[
        -1].message
Пример #13
0
def test_is_loaded_kernel_latest_unsupported_skip(repoquery_version,
                                                  return_code, major_ver,
                                                  package_name,
                                                  unsupported_skip, expected,
                                                  monkeypatch, caplog):
    run_subprocess_mocked = mock.Mock(
        spec=run_subprocess,
        side_effect=run_subprocess_side_effect((
            (
                "repoquery",
                "--quiet",
                "--qf",
                '"%{BUILDTIME}\\t%{VERSION}-%{RELEASE}\\t%{REPOID}"',
                package_name,
            ),
            (
                repoquery_version,
                return_code,
            ),
        ), ),
    )
    monkeypatch.setattr(
        checks.system_info,
        "version",
        value=systeminfo.Version(major=major_ver, minor=0),
    )
    monkeypatch.setattr(
        checks,
        "run_subprocess",
        value=run_subprocess_mocked,
    )
    monkeypatch.setattr(os, "environ", {
        "CONVERT2RHEL_UNSUPPORTED_SKIP_KERNEL_CURRENCY_CHECK":
        unsupported_skip
    })

    if unsupported_skip == "0":
        with pytest.raises(SystemExit):
            is_loaded_kernel_latest()
        expected = expected.format(package_name)
    else:
        is_loaded_kernel_latest()

    assert expected in caplog.records[-1].message
Пример #14
0
    def test_unregister_system(self, output, ret_code, expected, monkeypatch,
                               caplog):
        submgr_command = ("subscription-manager", "unregister")
        rpm_command = ("rpm", "--quiet", "-q", "subscription-manager")

        # Mock rpm command
        run_subprocess_mock = mock.Mock(side_effect=run_subprocess_side_effect(
            (
                submgr_command,
                (
                    output,
                    ret_code,
                ),
            ),
            (rpm_command, ("", 0)),
        ), )
        monkeypatch.setattr(utils, "run_subprocess", value=run_subprocess_mock)

        subscription.unregister_system()

        assert expected in caplog.records[-1].message
Пример #15
0
def test_changedrpms_packages_controller_install_local_rpms_system_exit(
        monkeypatch, caplog):
    pkgs = ["pkg-1"]
    run_subprocess_mock = mock.Mock(
        side_effect=unit_tests.run_subprocess_side_effect((("rpm", "-i",
                                                            pkgs[0]),
                                                           ("test", 1)), ))
    monkeypatch.setattr(
        backup,
        "run_subprocess",
        value=run_subprocess_mock,
    )

    control = backup.ChangedRPMPackagesController()
    with pytest.raises(SystemExit):
        control._install_local_rpms(pkgs_to_install=pkgs,
                                    replace=False,
                                    critical=True)

    assert run_subprocess_mock.call_count == 1
    assert "Error: Couldn't install %s packages." % pkgs[0] in caplog.records[
        -1].message