commit: 7cc9af07e5fb84e9a12ac4090c6819512b77af21 Author: Eli Schwartz <eschwartz <AT> gentoo <DOT> org> AuthorDate: Mon Oct 20 00:54:07 2025 +0000 Commit: Zac Medico <zmedico <AT> gentoo <DOT> org> CommitDate: Sun Jan 4 02:21:26 2026 +0000 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=7cc9af07
add testcase for "usepkg satisfiable by slot downgrade of dep" Bug: https://bugs.gentoo.org/964705 Signed-off-by: Eli Schwartz <eschwartz <AT> gentoo.org> Signed-off-by: Zac Medico <zmedico <AT> gentoo.org> lib/portage/tests/resolver/meson.build | 1 + .../test_binpackage_downgrades_slot_dep.py | 115 +++++++++++++++++++++ 2 files changed, 116 insertions(+) diff --git a/lib/portage/tests/resolver/meson.build b/lib/portage/tests/resolver/meson.build index df7944259b..bab474cf0d 100644 --- a/lib/portage/tests/resolver/meson.build +++ b/lib/portage/tests/resolver/meson.build @@ -14,6 +14,7 @@ py.install_sources( 'test_backtracking.py', 'test_bdeps.py', 'test_binary_pkg_ebuild_visibility.py', + 'test_binpackage_downgrades_slot_dep.py', 'test_blocker.py', 'test_broken_deps.py', 'test_bootstrap_deps.py', diff --git a/lib/portage/tests/resolver/test_binpackage_downgrades_slot_dep.py b/lib/portage/tests/resolver/test_binpackage_downgrades_slot_dep.py new file mode 100644 index 0000000000..ef434168dd --- /dev/null +++ b/lib/portage/tests/resolver/test_binpackage_downgrades_slot_dep.py @@ -0,0 +1,115 @@ +# Copyright 2025 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +import pytest + +from portage.tests import TestCase +from portage.tests.resolver.ResolverPlayground import ( + ResolverPlayground, + ResolverPlaygroundTestCase, +) + + +class BinpackageDowngradesSlotDepTestCase(TestCase): + @pytest.mark.xfail() + def testBinpackageDowngradesSlotDep(self): + python_use = "python_targets_python3_12 +python_targets_python3_13" + python_usedep = "python_targets_python3_12(-)?,python_targets_python3_13(-)?" + common_metadata = { + "EAPI": "8", + "REQUIRED_USE": """ + python? ( + || ( + python_targets_python3_12 + python_targets_python3_13 + ) + ) + """, + } + + ebuilds = { + "dev-libs/libxml2-2.13.9": { + "IUSE": f"+python {python_use}", + "SLOT": "2", + **common_metadata, + }, + "dev-libs/libxml2-2.14.6": { + "IUSE": f"+python {python_use}", + "SLOT": "2/16", + **common_metadata, + }, + "dev-libs/libxslt-1.1.43-r1": { + "IUSE": f"python {python_use}", + "RDEPEND": f""" + >=dev-libs/libxml2-2.13:2= + python? ( + >=dev-libs/libxml2-2.13:2=[python,{python_usedep}] + ) + """, + **common_metadata, + }, + } + + binpkgs = { + "dev-libs/libxslt-1.1.43-r1": { + "IUSE": f"python {python_use}", + "RDEPEND": f""" + >=dev-libs/libxml2-2.13:2/2= + python? ( + >=dev-libs/libxml2-2.13:2/2=[python,{python_usedep}] + ) + """, + **common_metadata, + }, + } + + installed = { + "dev-libs/libxml2-2.14.6": { + "IUSE": f"+python {python_use}", + "USE": f"python python_targets_python3_13", + "SLOT": "2/16", + **common_metadata, + }, + "dev-libs/libxslt-1.1.43-r1": { + "IUSE": f"python {python_use}", + "USE": "python_targets_python3_13", + "RDEPEND": f""" + >=dev-libs/libxml2-2.13:2/16= + python? ( + >=dev-libs/libxml2-2.13:2/16=[python,{python_usedep}] + ) + """, + **common_metadata, + }, + } + + world = [] + user_config = {"package.use": ["*/* -python_targets_python3_13"]} + + playground = ResolverPlayground( + ebuilds=ebuilds, + installed=installed, + binpkgs=binpkgs, + world=world, + user_config=user_config, + debug=True, + ) + + settings = playground.settings + profile_path = settings.profile_path + + test_cases = ( + ResolverPlaygroundTestCase( + ["dev-libs/libxslt"], + success=True, + options={"--usepkg": True}, + mergelist=["dev-libs/libxslt-1.1.43-r1"], + ), + ) + + try: + for test_case in test_cases: + playground.run_TestCase(test_case) + self.assertEqual(test_case.test_success, True, test_case.fail_msg) + finally: + playground.cleanup()
