From 9e8ef9f57bc2fbee2a37cba82fa5171b3a956236 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Milo=C5=A1=20Prchl=C3=ADk?= Date: Tue, 30 Jan 2024 16:54:09 +0100 Subject: [PATCH] squash: fix reinstall test --- tests/unit/test_package_managers.py | 32 ++++++++++------ tmt/package_managers/apt.py | 2 +- tmt/package_managers/dnf.py | 59 ++++++++++++++++++++++------- 3 files changed, 67 insertions(+), 26 deletions(-) diff --git a/tests/unit/test_package_managers.py b/tests/unit/test_package_managers.py index 340e96ac9e..bb5022b2c9 100644 --- a/tests/unit/test_package_managers.py +++ b/tests/unit/test_package_managers.py @@ -461,31 +461,39 @@ def _parametrize_test_reinstall() -> \ for container, package_manager_class in CONTAINER_BASE_MATRIX: if package_manager_class is tmt.package_managers.dnf.Yum: - yield container, \ - package_manager_class, \ - r"rpm -q --whatprovides coreutils \|\| yum reinstall -y coreutils && rpm -q --whatprovides coreutils", \ - 'Installed:\n coreutils', \ - None + if 'centos:7' in container.url: + yield container, \ + package_manager_class, \ + r"rpm -q --whatprovides tar && yum reinstall -y tar && rpm -q --whatprovides tar", \ + 'Reinstalling:\n tar', \ + None + + else: + yield container, \ + package_manager_class, \ + r"rpm -q --whatprovides tar && yum reinstall -y tar && rpm -q --whatprovides tar", \ + 'Reinstalled:\n tar', \ + None elif package_manager_class is tmt.package_managers.dnf.Dnf: yield container, \ package_manager_class, \ - r"rpm -q --whatprovides coreutils \|\| dnf reinstall -y coreutils", \ - 'Installed:\n coreutils', \ + r"rpm -q --whatprovides tar && dnf reinstall -y tar", \ + 'Reinstalled:\n tar', \ None elif package_manager_class is tmt.package_managers.dnf.Dnf5: yield container, \ package_manager_class, \ - r"rpm -q --whatprovides coreutils \|\| dnf5 reinstall -y coreutils", \ - None, \ + r"rpm -q --whatprovides tar && dnf5 reinstall -y tar", \ + 'Reinstalling tar', \ None elif package_manager_class is tmt.package_managers.apt.Apt: yield container, \ package_manager_class, \ - r"dpkg-query --show coreutils \|\| apt reinstall -y coreutils", \ - 'Setting up coreutils', \ + r"dpkg-query --show tar && apt reinstall -y tar", \ + 'Setting up tar', \ None else: @@ -516,7 +524,7 @@ def test_reinstall( package_manager_class, root_logger) - output = package_manager.reinstall(Package('coreutils')) + output = package_manager.reinstall(Package('tar')) assert_log(caplog, message=MATCH( rf"Run command: podman exec .+? /bin/bash -c '{expected_command}'")) diff --git a/tmt/package_managers/apt.py b/tmt/package_managers/apt.py index 98933c97d7..7976c67baf 100644 --- a/tmt/package_managers/apt.py +++ b/tmt/package_managers/apt.py @@ -79,7 +79,7 @@ def reinstall( f'{" ".join(escape_packages(*packages))}') if options.check_first: - script = self._build_presence_script(*packages) | script + script = self._build_presence_script(*packages) & script if options.skip_missing: script = script | ShellScript('/bin/true') diff --git a/tmt/package_managers/dnf.py b/tmt/package_managers/dnf.py index 3b27dce6b9..54f6fcec36 100644 --- a/tmt/package_managers/dnf.py +++ b/tmt/package_managers/dnf.py @@ -7,7 +7,7 @@ Package, escape_packages, provides_package_manager, -) + ) from tmt.utils import Command, CommandOutput, ShellScript @@ -67,18 +67,10 @@ def _build_install( return script - def install( + def _build_reinstall( self, *packages: Installable, - options: Optional[Options] = None) -> CommandOutput: - return self.guest.execute(self._build_install( - *packages, - options=options)) - - def reinstall( - self, - *packages: Installable, - options: Optional[Options] = None) -> CommandOutput: + options: Optional[Options] = None) -> ShellScript: options = options or Options() extra_options = self._extra_yum_options(options) @@ -89,9 +81,27 @@ def reinstall( f'{" ".join(escape_packages(*packages))}') if options.check_first: - script = self._build_presence_script(*packages) | script + # self._logger.warn('Check first ignored with reinstall.') + script = self._build_presence_script(*packages) & script - return self.guest.execute(script) + return script + + def install( + self, + *packages: Installable, + options: Optional[Options] = None) -> CommandOutput: + return self.guest.execute(self._build_install( + *packages, + options=options)) + + def reinstall( + self, + *packages: Installable, + options: Optional[Options] = None) -> CommandOutput: + return self.guest.execute(self._build_reinstall( + *packages, + options=options + )) def install_debuginfo( self, @@ -150,3 +160,26 @@ def install( script &= self._build_presence_script(*packages) return self.guest.execute(script) + + def reinstall( + self, + *packages: Installable, + options: Optional[Options] = None) -> CommandOutput: + + options = options or Options() + + script = cast( # type: ignore[redundant-cast] + ShellScript, + self._build_reinstall( # type: ignore[reportGeneralIssues,unused-ignore] + *packages, + options=options + )) + + # Extra ignore/check for yum to workaround BZ#1920176 + if options.skip_missing: + script |= ShellScript('true') + + else: + script &= self._build_presence_script(*packages) + + return self.guest.execute(script)