def packages_configuration_data_test(self): """Test the PackagesConfigurationData structure.""" data = PackagesConfigurationData.to_structure( PackagesConfigurationData() ) self._check_dbus_property( "PackagesConfiguration", data )
def test_set_rpm_macros_no_install_langs(self, mock_rpm): data = PackagesConfigurationData() data.languages = RPM_LANGUAGES_NONE macros = [ ('__dbi_htconfig', 'hash nofsync %{__dbi_other} %{__dbi_perms}'), ('_install_langs', '%{nil}'), ] task = self._run_task(data) self._check_macros(task, mock_rpm, macros)
def test_set_rpm_macros_exclude_docs(self, mock_rpm): data = PackagesConfigurationData() data.docs_excluded = True macros = [ ('__dbi_htconfig', 'hash nofsync %{__dbi_other} %{__dbi_perms}'), ('_excludedocs', '1'), ] task = self._run_task(data) self._check_macros(task, mock_rpm, macros)
def test_set_rpm_macros_install_langs(self, mock_rpm): data = PackagesConfigurationData() data.languages = "en,es" macros = [ ('__dbi_htconfig', 'hash nofsync %{__dbi_other} %{__dbi_perms}'), ('_install_langs', 'en,es'), ] task = self._run_task(data) self._check_macros(task, mock_rpm, macros)
def test_configure_base(self): """Test the configuration of the DNF base.""" data = PackagesConfigurationData() self.dnf_manager.configure_base(data) self._check_configuration( "multilib_policy = best", "timeout = 30", "retries = 10", "install_weak_deps = 1", ) assert self.dnf_manager._ignore_broken_packages is False assert self.dnf_manager._ignore_missing_packages is False data.multilib_policy = MULTILIB_POLICY_ALL data.timeout = 100 data.retries = 5 data.broken_ignored = True data.missing_ignored = True data.weakdeps_excluded = True self.dnf_manager.configure_base(data) self._check_configuration( "multilib_policy = all", "timeout = 100", "retries = 5", "install_weak_deps = 0", ) assert self.dnf_manager._ignore_broken_packages is True assert self.dnf_manager._ignore_missing_packages is True
def test_error_update(self, execute): """The update of the DNF configuration has failed.""" execute.side_effect = OSError("Fake!") with tempfile.TemporaryDirectory() as sysroot: data = PackagesConfigurationData() data.multilib_policy = MULTILIB_POLICY_ALL task = UpdateDNFConfigurationTask(sysroot, data) with self.assertLogs(level="WARNING") as cm: task.run() msg = "Couldn't update the DNF configuration: Fake!" assert any(map(lambda x: msg in x, cm.output))
def test_failed_update(self, execute): """The update of the DNF configuration has failed.""" execute.return_value = 1 with tempfile.TemporaryDirectory() as sysroot: data = PackagesConfigurationData() data.multilib_policy = MULTILIB_POLICY_ALL task = UpdateDNFConfigurationTask(sysroot, data) with self.assertLogs(level="WARNING") as cm: task.run() msg = "Failed to update the DNF configuration (1)." assert any(map(lambda x: msg in x, cm.output))
def PackagesConfiguration(self, data: Structure): """Set the packages configuration. :param data: a structure of the type PackagesConfigurationData """ self.implementation.set_packages_configuration( PackagesConfigurationData.from_structure(data))
def PackagesConfiguration(self) -> Structure: """The packages configuration. :return: a structure of the type PackagesConfigurationData """ return PackagesConfigurationData.to_structure( self.implementation.packages_configuration)
def test_set_rpm_macros_default(self, mock_rpm): data = PackagesConfigurationData() macros = [('__dbi_htconfig', 'hash nofsync %{__dbi_other} %{__dbi_perms}')] task = self._run_task(data) self._check_macros(task, mock_rpm, macros)
def test_multilib_policy(self, execute): """Update the multilib policy.""" execute.return_value = 0 with tempfile.TemporaryDirectory() as sysroot: data = PackagesConfigurationData() data.multilib_policy = MULTILIB_POLICY_ALL task = UpdateDNFConfigurationTask(sysroot, data) task.run() execute.assert_called_once_with("dnf", [ "config-manager", "--save", "--setopt=multilib_policy=all", ], root=sysroot)
def test_no_update(self, execute): """Don't update the DNF configuration.""" with tempfile.TemporaryDirectory() as sysroot: data = PackagesConfigurationData() task = UpdateDNFConfigurationTask(sysroot, data) task.run() execute.assert_not_called()
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
def test_set_rpm_macros_selinux_disabled(self, mock_rpm, mock_conf): mock_conf.security.selinux = 0 data = PackagesConfigurationData() macros = [ ('__dbi_htconfig', 'hash nofsync %{__dbi_other} %{__dbi_perms}'), ('__file_context_path', '%{nil}'), ] task = self._run_task(data) self._check_macros(task, mock_rpm, macros)
def test_set_rpm_macros_selinux(self, mock_rpm, mock_os): mock_os.access.return_value = True data = PackagesConfigurationData() macros = [ ('__dbi_htconfig', 'hash nofsync %{__dbi_other} %{__dbi_perms}'), ('__file_context_path', '/etc/selinux/targeted/contexts/files/file_contexts'), ] task = self._run_task(data) self._check_macros(task, mock_rpm, macros)
def get_packages_configuration(self) -> PackagesConfigurationData: """Get the DBus data with the packages configuration.""" return PackagesConfigurationData.from_structure( self.proxy.PackagesConfiguration )
def set_packages_configuration(self, data: PackagesConfigurationData): """Set the DBus data with the packages configuration.""" return self.proxy.SetPackagesConfiguration( PackagesConfigurationData.to_structure(data) )
def _process_kickstart_packages_configuration(self, data): """Process the kickstart packages configuration.""" configuration = PackagesConfigurationData() configuration.docs_excluded = data.packages.excludeDocs configuration.weakdeps_excluded = data.packages.excludeWeakdeps if data.packages.handleMissing == KS_MISSING_IGNORE: configuration.missing_ignored = True if data.packages.handleBroken == KS_BROKEN_IGNORE: configuration.broken_ignored = True if data.packages.instLangs == "": configuration.languages = RPM_LANGUAGES_NONE elif data.packages.instLangs is not None: configuration.languages = data.packages.instLangs if data.packages.multiLib: configuration.multilib_policy = MULTILIB_POLICY_ALL if data.packages.timeout is not None: configuration.timeout = data.packages.timeout if data.packages.retries is not None: configuration.retries = data.packages.retries self.set_packages_configuration(configuration)