Skip to content

Commit

Permalink
Check both stdout and stderr in package manager tests
Browse files Browse the repository at this point in the history
We don't care that much where `dnf` puts the info about which
packages were installed. Plus in different `dnf` versions the
output goes into different output streams. See also:

* rpm-software-management/dnf5#1641
  • Loading branch information
psss committed Sep 19, 2024
1 parent 1f6789d commit a082f53
Showing 1 changed file with 12 additions and 25 deletions.
37 changes: 12 additions & 25 deletions tests/unit/test_package_managers.py
Original file line number Diff line number Diff line change
Expand Up @@ -781,7 +781,7 @@ def test_install_dont_check_first(


def _parametrize_test_reinstall() -> Iterator[tuple[
Container, PackageManagerClass, Optional[str], Optional[str], Optional[str]]]:
Container, PackageManagerClass, Optional[str], Optional[str]]]:

for container, package_manager_class in CONTAINER_BASE_MATRIX:
if package_manager_class is tmt.package_managers.dnf.Yum:
Expand All @@ -791,52 +791,46 @@ def _parametrize_test_reinstall() -> Iterator[tuple[
Package('tar'), \
True, \
r"rpm -q --whatprovides tar && yum reinstall -y tar && rpm -q --whatprovides tar", \
'Reinstalling:\n tar', \
None # noqa: E501
'Reinstalling:\n tar' # noqa: E501

else:
yield container, \
package_manager_class, \
Package('tar'), \
True, \
r"rpm -q --whatprovides tar && yum reinstall -y tar && rpm -q --whatprovides tar", \
'Reinstalled:\n tar', \
None # noqa: E501
'Reinstalled:\n tar' # noqa: E501

elif package_manager_class is tmt.package_managers.dnf.Dnf:
yield container, \
package_manager_class, \
Package('tar'), \
True, \
r"rpm -q --whatprovides tar && dnf reinstall -y tar", \
'Reinstalled:\n tar', \
None
'Reinstalled:\n tar'

elif package_manager_class is tmt.package_managers.dnf.Dnf5:
yield container, \
package_manager_class, \
Package('tar'), \
True, \
r"rpm -q --whatprovides tar && dnf5 reinstall -y tar", \
'Reinstalling tar', \
None
'Reinstalling tar'

elif package_manager_class is tmt.package_managers.apt.Apt:
yield container, \
package_manager_class, \
Package('tar'), \
True, \
r"export DEBIAN_FRONTEND=noninteractive; dpkg-query --show tar && apt reinstall -y tar", \
'Setting up tar', \
None # noqa: E501
'Setting up tar' # noqa: E501

elif package_manager_class is tmt.package_managers.rpm_ostree.RpmOstree:
yield container, \
package_manager_class, \
Package('tar'), \
False, \
None, \
None, \
None

elif package_manager_class is tmt.package_managers.apk.Apk:
Expand All @@ -845,8 +839,7 @@ def _parametrize_test_reinstall() -> Iterator[tuple[
Package('bash'), \
True, \
r"apk info -e bash && apk fix bash", \
'Reinstalling bash', \
None
'Reinstalling bash'

else:
pytest.fail(f"Unhandled package manager class '{package_manager_class}'.")
Expand All @@ -858,8 +851,7 @@ def _parametrize_test_reinstall() -> Iterator[tuple[
'package',
'supported',
'expected_command',
'expected_stdout',
'expected_stderr'),
'expected_output'),
list(_parametrize_test_reinstall()),
indirect=["container_per_test"],
ids=CONTAINER_MATRIX_IDS)
Expand All @@ -870,8 +862,7 @@ def test_reinstall(
package: Package,
supported: bool,
expected_command: Optional[str],
expected_stdout: Optional[str],
expected_stderr: Optional[str],
expected_output: Optional[str],
root_logger: tmt.log.Logger,
caplog: _pytest.logging.LogCaptureFixture) -> None:
package_manager = create_package_manager(
Expand All @@ -895,13 +886,9 @@ def test_reinstall(
assert excinfo.value.message \
== "rpm-ostree does not support reinstall operation."

if expected_stdout:
assert output.stdout is not None
assert expected_stdout in output.stdout

if expected_stderr:
assert output.stderr is not None
assert expected_stderr in output.stderr
if expected_output:
assert output.stdout is not None or output.stderr is not None
assert expected_output in output.stdout or expected_output in output.stderr


def _generate_test_reinstall_nonexistent_matrix() -> Iterator[tuple[
Expand Down

0 comments on commit a082f53

Please sign in to comment.