Skip to content

Commit

Permalink
squash: fix reinstall test
Browse files Browse the repository at this point in the history
  • Loading branch information
happz committed Jan 30, 2024
1 parent d04a9c6 commit 9e8ef9f
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 26 deletions.
32 changes: 20 additions & 12 deletions tests/unit/test_package_managers.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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}'"))
Expand Down
2 changes: 1 addition & 1 deletion tmt/package_managers/apt.py
Original file line number Diff line number Diff line change
Expand Up @@ -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')
Expand Down
59 changes: 46 additions & 13 deletions tmt/package_managers/dnf.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
Package,
escape_packages,
provides_package_manager,
)
)
from tmt.utils import Command, CommandOutput, ShellScript


Expand Down Expand Up @@ -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)
Expand All @@ -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,
Expand Down Expand Up @@ -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)

0 comments on commit 9e8ef9f

Please sign in to comment.