Exemplo n.º 1
0
    def test_is_software_selection_complete(self):
        """Test the is_software_selection_complete function."""
        selection = PackagesSelectionData()
        selection.environment = "e1"

        dnf_manager = Mock(spec=DNFManager)
        dnf_manager.is_environment_valid.return_value = True

        assert is_software_selection_complete(dnf_manager, selection)
        assert is_software_selection_complete(dnf_manager,
                                              selection,
                                              kickstarted=True)

        dnf_manager.is_environment_valid.return_value = False

        assert not is_software_selection_complete(dnf_manager, selection)
        assert not is_software_selection_complete(
            dnf_manager, selection, kickstarted=True)

        selection.environment = ""

        assert not is_software_selection_complete(dnf_manager, selection)
        assert is_software_selection_complete(dnf_manager,
                                              selection,
                                              kickstarted=True)
Exemplo n.º 2
0
    def check_selection_test(self, kernel_getter):
        kernel_getter.return_value = None
        dnf_manager = Mock()

        selection = PackagesSelectionData()
        selection.core_group_enabled = False
        selection.environment = "e1"

        selection.packages = ["p1", "p2"]
        selection.excluded_packages = ["p3", "p4"]

        selection.groups = ["g1", "g2"]
        selection.excluded_groups = ["g3", "g4"]

        selection.modules = ["m1", "m2"]
        selection.disabled_modules = ["m3", "m4"]

        task = CheckPackagesSelectionTask(dnf_manager, selection)
        report = task.run()

        dnf_manager.clear_selection.assert_called_once_with()
        dnf_manager.disable_modules.assert_called_once_with(["m3", "m4"])
        dnf_manager.enable_modules.assert_called_once_with(["m1", "m2"])
        dnf_manager.apply_specs.assert_called_once_with(
            ["@e1", "@g1", "@g2", "p1", "p2"],
            ["@core", "@g3", "@g4", "p3", "p4"])
        dnf_manager.resolve_selection.assert_called_once_with()
        self.assertEqual(report.get_messages(), [])
Exemplo n.º 3
0
    def is_software_selection_complete_test(self):
        """Test the is_software_selection_complete function."""
        selection = PackagesSelectionData()
        selection.environment = "e1"

        dnf_manager = Mock(spec=DNFManager)
        dnf_manager.is_environment_valid.return_value = True

        self.assertTrue(is_software_selection_complete(dnf_manager, selection))
        self.assertTrue(
            is_software_selection_complete(dnf_manager,
                                           selection,
                                           kickstarted=True))

        dnf_manager.is_environment_valid.return_value = False

        self.assertFalse(is_software_selection_complete(
            dnf_manager, selection))
        self.assertFalse(
            is_software_selection_complete(dnf_manager,
                                           selection,
                                           kickstarted=True))

        selection.environment = ""

        self.assertFalse(is_software_selection_complete(
            dnf_manager, selection))
        self.assertTrue(
            is_software_selection_complete(dnf_manager,
                                           selection,
                                           kickstarted=True))
Exemplo n.º 4
0
    def test_resolve(self, kernel_getter, req_getter1, req_getter2,
                     req_getter3, req_getter4):
        """Test the successful ResolvePackagesTask task."""
        kernel_getter.return_value = None

        req_getter1.return_value = [
            Requirement.for_group("r1"),
            Requirement.for_group("r2")
        ]
        req_getter2.return_value = [Requirement.for_group("r3")]
        req_getter3.return_value = [
            Requirement.for_package("r4"),
            Requirement.for_package("r5")
        ]
        req_getter4.return_value = [Requirement.for_package("r6")]

        selection = PackagesSelectionData()
        selection.excluded_groups = ["r3"]
        selection.excluded_packages = ["r6"]

        dnf_manager = Mock()
        dnf_manager.default_environment = None

        task = ResolvePackagesTask(dnf_manager, selection)
        task.run()

        dnf_manager.clear_selection.assert_called_once_with()
        dnf_manager.disable_modules.assert_called_once_with([])
        dnf_manager.enable_modules.assert_called_once_with([])
        dnf_manager.apply_specs.assert_called_once_with(
            ["@core", "@r1", "@r2", "r4", "r5"], ["@r3", "r6"])
        dnf_manager.resolve_selection.assert_called_once_with()
    def get_installation_specs_groups_test(self):
        """Test the get_installation_specs function with groups."""
        data = PackagesSelectionData()

        data.groups = ["g1", "g2", "g3"]
        data.excluded_groups = ["g4", "g5", "g6"]
        data.groups_package_types = {
            "g1": GROUP_PACKAGE_TYPES_REQUIRED,
            "g3": GROUP_PACKAGE_TYPES_ALL,
            "g4": GROUP_PACKAGE_TYPES_REQUIRED,
            "g6": GROUP_PACKAGE_TYPES_ALL,
        }

        self.assertEqual(get_installation_specs(data), (
            [
                "@core",
                "@g1/mandatory,conditional",
                "@g2",
                "@g3/mandatory,default,conditional,optional"],
            [
                "@g4",
                "@g5",
                "@g6"
            ]
        ))
Exemplo n.º 6
0
    def test_get_installation_specs_packages(self):
        """Test the get_installation_specs function with packages."""
        data = PackagesSelectionData()
        data.packages = ["p1", "p2", "p3"]
        data.excluded_packages = ["p4", "p5", "p6"]

        assert get_installation_specs(data) == (["@core", "p1", "p2",
                                                 "p3"], ["p4", "p5", "p6"])
Exemplo n.º 7
0
    def get_installation_specs_packages_test(self):
        """Test the get_installation_specs function with packages."""
        data = PackagesSelectionData()
        data.packages = ["p1", "p2", "p3"]
        data.excluded_packages = ["p4", "p5", "p6"]

        self.assertEqual(get_installation_specs(data),
                         (["@core", "p1", "p2", "p3"], ["p4", "p5", "p6"]))
Exemplo n.º 8
0
    def get_selection_data(self) -> PackagesSelectionData:
        """Generate the selection data.

        :return: a packages selection data
        """
        selection = PackagesSelectionData()
        selection.environment = self.environment
        selection.groups = self.groups
        return selection
Exemplo n.º 9
0
    def test_apply_selection_data(self):
        """Test the apply_selection_data method."""
        selection = PackagesSelectionData()
        selection.environment = "e1"
        selection.groups = ["g1", "g2", "g3"]

        self.cache.apply_selection_data(selection)
        assert self.cache.environment == "e1"
        assert self.cache.groups == ["g1", "g2", "g3"]
Exemplo n.º 10
0
    def apply_selection_data_test(self):
        """Test the apply_selection_data method."""
        selection = PackagesSelectionData()
        selection.environment = "e1"
        selection.groups = ["g1", "g2", "g3"]

        self.cache.apply_selection_data(selection)
        self.assertEqual(self.cache.environment, "e1")
        self.assertEqual(self.cache.groups, ["g1", "g2", "g3"])
Exemplo n.º 11
0
    def packages_selection_data_test(self):
        """Test the PackagesSelectionData structure."""
        data = PackagesSelectionData.to_structure(
            PackagesSelectionData()
        )

        self._check_dbus_property(
            "PackagesSelection",
            data
        )
def test_evaluation_package_rules(proxy_getter, rule_data, ksdata_mock, storage_mock):
    rule_data.new_rule("package --add=firewalld --remove=telnet --add=vim")

    packages_data = PackagesSelectionData()
    packages_data.packages = ["vim"]

    dnf_payload_mock = PAYLOADS.get_proxy("/fake/payload/1")
    dnf_payload_mock.PackagesSelection = PackagesSelectionData.to_structure(packages_data)

    messages = rule_data.eval_rules(ksdata_mock, storage_mock)

    # one info message for each (really) added/removed package
    assert len(messages) == 2
    assert all(message.type == common.MESSAGE_TYPE_INFO for message in messages)

    # all packages should appear in the messages
    not_seen = _quoted_keywords_not_seen_in_messages(
        {"firewalld", "telnet"},
        messages,
    )
    assert not not_seen

    packages_data = PackagesSelectionData()
    packages_data.packages = ["vim", "firewalld"]
    packages_data.excluded_packages = ["telnet"]

    assert dnf_payload_mock.PackagesSelection == \
        PackagesSelectionData.to_structure(packages_data)
Exemplo n.º 13
0
    def test_apply_selection_data_invalid_groups(self):
        """Test the apply_selection_data method with invalid groups."""
        self.dnf_manager.resolve_group.return_value = False

        selection = PackagesSelectionData()
        selection.environment = "e1"
        selection.groups = ["g1", "g2", "g3"]

        self.cache.apply_selection_data(selection)
        assert self.cache.environment == "e1"
        assert self.cache.groups == []
Exemplo n.º 14
0
    def test_apply_selection_data_default_environment(self):
        """Test the apply_selection_data method with a default environment."""
        self.dnf_manager.default_environment = "e1"
        self.dnf_manager.resolve_environment.return_value = False

        selection = PackagesSelectionData()
        selection.environment = "e2"

        self.cache.apply_selection_data(selection)
        self.assertEqual(self.cache.environment, "e1")
        self.assertEqual(self.cache.groups, [])
Exemplo n.º 15
0
    def test_apply_selection_data_invalid_environment(self):
        """Test the apply_selection_data method with an invalid environment."""
        self.dnf_manager.default_environment = ""
        self.dnf_manager.resolve_environment.return_value = False

        selection = PackagesSelectionData()
        selection.environment = "e2"

        self.cache.apply_selection_data(selection)
        assert self.cache.environment == ""
        assert self.cache.groups == []
Exemplo n.º 16
0
def get_packages_data() -> PackagesSelectionData:
    """Get the DBus data with the packages configuration.

    :return: a packages configuration
    """
    payload_proxy = get_payload_proxy()

    if payload_proxy.Type != PAYLOAD_TYPE_DNF:
        return PackagesSelectionData()

    return PackagesSelectionData.from_structure(
        payload_proxy.PackagesSelection)
Exemplo n.º 17
0
    def test_get_selection_data(self):
        """Test the get_selection_data method."""
        self.cache.select_environment("e1")
        self.cache.select_group("g1")
        self.cache.select_group("g2")
        self.cache.select_group("g3")

        expected = PackagesSelectionData()
        expected.environment = "e1"
        expected.groups = ["g1", "g2", "g3"]

        data = self.cache.get_selection_data()
        assert compare_data(data, expected)
Exemplo n.º 18
0
    def test_get_installation_specs_environment(self):
        """Test the get_installation_specs function with environment."""
        data = PackagesSelectionData()
        data.environment = "environment-1"

        assert get_installation_specs(data) == (["@environment-1",
                                                 "@core"], [])

        env = "environment-2"
        assert get_installation_specs(
            data, default_environment=env) == (["@environment-1", "@core"], [])

        data.default_environment_enabled = True
        assert get_installation_specs(
            data, default_environment=env) == (["@environment-2", "@core"], [])
Exemplo n.º 19
0
    def get_installation_specs_environment_test(self):
        """Test the get_installation_specs function with environment."""
        data = PackagesSelectionData()
        data.environment = "environment-1"

        self.assertEqual(get_installation_specs(data),
                         (["@environment-1", "@core"], []))

        env = "environment-2"
        self.assertEqual(get_installation_specs(data, default_environment=env),
                         (["@environment-1", "@core"], []))

        data.default_environment_enabled = True
        self.assertEqual(get_installation_specs(data, default_environment=env),
                         (["@environment-2", "@core"], []))
Exemplo n.º 20
0
    def test_fail(self, kernel_getter, req_getter1, req_getter2, req_getter3, req_getter4):
        """Test the failed ResolvePackagesTask task."""
        kernel_getter.return_value = None
        req_getter1.return_value = []
        req_getter2.return_value = []
        req_getter3.return_value = []
        req_getter4.return_value = []

        selection = PackagesSelectionData()

        dnf_manager = Mock()
        dnf_manager.default_environment = None

        dnf_manager.disable_modules.side_effect = MissingSpecsError("e1")
        dnf_manager.apply_specs.side_effect = MissingSpecsError("e2")

        with pytest.raises(NonCriticalInstallationError) as cm:
            task = ResolvePackagesTask(dnf_manager, selection)
            task.run()

        expected = "e1\n\ne2"
        assert str(cm.value) == expected

        dnf_manager.enable_modules.side_effect = BrokenSpecsError("e3")
        dnf_manager.resolve_selection.side_effect = InvalidSelectionError("e4")

        with pytest.raises(PayloadInstallationError) as cm:
            task = ResolvePackagesTask(dnf_manager, selection)
            task.run()

        expected = "e3\n\ne4"
        assert str(cm.value) == expected
Exemplo n.º 21
0
    def PackagesSelection(self, data: Structure):
        """Set the packages selection.

        :param: a structure of the type PackagesSelectionData
        """
        self.implementation.set_packages_selection(
            PackagesSelectionData.from_structure(data))
Exemplo n.º 22
0
    def PackagesSelection(self) -> Structure:
        """The packages selection.

        :return: a structure of the type PackagesSelectionData
        """
        return PackagesSelectionData.to_structure(
            self.implementation.packages_selection)
Exemplo n.º 23
0
    def _process_kickstart_packages_selection(self, data):
        """Process the kickstart packages selection."""
        selection = PackagesSelectionData()
        selection.core_group_enabled = not data.packages.nocore
        selection.default_environment_enabled = data.packages.default

        if data.packages.environment is not None:
            selection.environment = data.packages.environment

        selection.packages = data.packages.packageList
        selection.excluded_packages = data.packages.excludedList

        for group in data.packages.groupList:
            selection.groups.append(group.name)

            if group.include == GROUP_ALL:
                selection.groups_package_types[
                    group.name] = GROUP_PACKAGE_TYPES_ALL

            if group.include == GROUP_REQUIRED:
                selection.groups_package_types[
                    group.name] = GROUP_PACKAGE_TYPES_REQUIRED

        for group in data.packages.excludedGroupList:
            selection.excluded_groups.append(group.name)

        self.set_packages_selection(selection)
        self.set_packages_kickstarted(data.packages.seen)
Exemplo n.º 24
0
    def __init__(self):
        super().__init__()
        self._packages_configuration = PackagesConfigurationData()
        self.packages_configuration_changed = Signal()

        self._packages_selection = PackagesSelectionData()
        self.packages_selection_changed = Signal()

        self._packages_kickstarted = False
Exemplo n.º 25
0
    def check_no_selection_test(self, kernel_getter):
        kernel_getter.return_value = None

        dnf_manager = Mock()
        dnf_manager.default_environment = None

        selection = PackagesSelectionData()
        selection.default_environment_enabled = False
        selection.core_group_enabled = False

        task = CheckPackagesSelectionTask(dnf_manager, selection)
        report = task.run()

        dnf_manager.clear_selection.assert_called_once_with()
        dnf_manager.disable_modules.assert_called_once_with([])
        dnf_manager.enable_modules.assert_called_once_with([])
        dnf_manager.apply_specs.assert_called_once_with([], ["@core"])
        dnf_manager.resolve_selection.assert_called_once_with()
        self.assertEqual(report.get_messages(), [])
Exemplo n.º 26
0
    def test_check_default_selection(self, kernel_getter):
        kernel_getter.return_value = "kernel"

        dnf_manager = Mock()
        dnf_manager.default_environment = "environment"

        selection = PackagesSelectionData()
        selection.default_environment_enabled = True
        selection.core_group_enabled = True

        task = CheckPackagesSelectionTask(dnf_manager, selection)
        report = task.run()

        dnf_manager.clear_selection.assert_called_once_with()
        dnf_manager.disable_modules.assert_called_once_with([])
        dnf_manager.enable_modules.assert_called_once_with([])
        dnf_manager.apply_specs.assert_called_once_with(
            ["@environment", "@core", "kernel"], [])
        dnf_manager.resolve_selection.assert_called_once_with()
        self.assertEqual(report.get_messages(), [])
def set_dbus_defaults():
    boss = BOSS.get_proxy()
    boss.GetModules.return_value = [
        KDUMP.service_name
    ]

    kdump = KDUMP.get_proxy()
    kdump.KdumpEnabled = True

    user_interface = BOSS.get_proxy(USER_INTERFACE)
    user_interface.PasswordPolicies = {}

    network = NETWORK.get_proxy()
    network.Connected.return_value = True

    firewall = NETWORK.get_proxy(FIREWALL)
    firewall.EnabledServices = []
    firewall.DisabledServices = []
    firewall.EnabledPorts = []
    firewall.Trusts = []

    device_tree = STORAGE.get_proxy(DEVICE_TREE)
    device_tree.GetDeviceMountOptions.return_value = "defaults"
    device_tree.GetMountPoints.return_value = {}

    bootloader = STORAGE.get_proxy(BOOTLOADER)
    bootloader.IsPasswordSet = False

    users = USERS.get_proxy()
    users.IsRootPasswordSet = True
    users.IsRootPasswordCrypted = False
    users.RootPassword = "******"

    payloads = PAYLOADS.get_proxy()
    payloads.ActivePayload = "/fake/payload/1"

    dnf_payload = PAYLOADS.get_proxy("/fake/payload/1")
    dnf_payload.Type = PAYLOAD_TYPE_DNF

    packages_data = PackagesSelectionData()
    dnf_payload.PackagesSelection = PackagesSelectionData.to_structure(packages_data)
def test_revert_package_rules(proxy_getter, rule_data, ksdata_mock, storage_mock):
    rule_data.new_rule("package --add=firewalld --remove=telnet --add=iptables --add=vim")

    packages_data = PackagesSelectionData()
    packages_data.packages = ["vim"]

    dnf_payload_mock = PAYLOADS.get_proxy("/fake/payload/1")
    dnf_payload_mock.PackagesSelection = PackagesSelectionData.to_structure(packages_data)

    # run twice --> nothing should be different in the second run
    messages = rule_data.eval_rules(ksdata_mock, storage_mock)
    messages = rule_data.eval_rules(ksdata_mock, storage_mock)

    # one info message for each added/removed package
    assert len(messages) == 3

    rule_data.revert_changes(ksdata_mock, storage_mock)

    # (only) added and excluded packages should have been removed from the
    # list
    assert dnf_payload_mock.PackagesSelection == \
        PackagesSelectionData.to_structure(packages_data)

    # now do the same again #
    messages = rule_data.eval_rules(ksdata_mock, storage_mock)

    # one info message for each added/removed package
    assert len(messages) == 3

    rule_data.revert_changes(ksdata_mock, storage_mock)

    # (only) added and excluded packages should have been removed from the
    # list
    assert dnf_payload_mock.PackagesSelection == \
        PackagesSelectionData.to_structure(packages_data)
Exemplo n.º 29
0
    def test_get_software_selection_status(self):
        """Test the get_software_selection_status function."""
        selection = PackagesSelectionData()
        selection.environment = "e1"

        environment_data = CompsEnvironmentData()
        environment_data.name = "The e1 environment"

        dnf_manager = Mock(spec=DNFManager)
        dnf_manager.is_environment_valid.return_value = True
        dnf_manager.get_environment_data.return_value = environment_data

        status = get_software_selection_status(dnf_manager, selection)
        assert status == "The e1 environment"

        status = get_software_selection_status(dnf_manager,
                                               selection,
                                               kickstarted=True)
        assert status == "The e1 environment"

        dnf_manager.is_environment_valid.return_value = False

        status = get_software_selection_status(dnf_manager, selection)
        assert status == "Selected environment is not valid"

        status = get_software_selection_status(dnf_manager,
                                               selection,
                                               kickstarted=True)
        assert status == "Invalid environment specified in kickstart"

        selection.environment = ""

        status = get_software_selection_status(dnf_manager, selection)
        assert status == "Please confirm software selection"

        status = get_software_selection_status(dnf_manager,
                                               selection,
                                               kickstarted=True)
        assert status == "Custom software selected"
def test_evaluation_package_rules_report_only(proxy_getter, rule_data, ksdata_mock, storage_mock):
    rule_data.new_rule("package --add=firewalld --remove=telnet --add=iptables")

    messages = rule_data.eval_rules(ksdata_mock, storage_mock, report_only=True)

    # one info message for each added/removed package
    assert len(messages) == 3
    assert all(message.type == common.MESSAGE_TYPE_INFO for message in messages)

    not_seen = _quoted_keywords_not_seen_in_messages(
        {"firewalld", "telnet", "iptables"},
        messages,
    )

    assert not not_seen

    # report_only --> no packages should be added or excluded
    dnf_payload_mock = PAYLOADS.get_proxy("/fake/payload/1")
    packages_data = PackagesSelectionData()

    assert dnf_payload_mock.PackagesSelection == \
        PackagesSelectionData.to_structure(packages_data)