diff options
Diffstat (limited to 'lib/portage/tests/resolver/test_depclean_order.py')
-rw-r--r-- | lib/portage/tests/resolver/test_depclean_order.py | 118 |
1 files changed, 116 insertions, 2 deletions
diff --git a/lib/portage/tests/resolver/test_depclean_order.py b/lib/portage/tests/resolver/test_depclean_order.py index a8c334304..36d60d44e 100644 --- a/lib/portage/tests/resolver/test_depclean_order.py +++ b/lib/portage/tests/resolver/test_depclean_order.py @@ -1,4 +1,4 @@ -# Copyright 2013 Gentoo Foundation +# Copyright 2013-2023 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 from portage.tests import TestCase @@ -10,7 +10,6 @@ from portage.tests.resolver.ResolverPlayground import ( class SimpleDepcleanTestCase(TestCase): def testSimpleDepclean(self): - ebuilds = { "dev-libs/A-1": { "EAPI": "5", @@ -58,3 +57,118 @@ class SimpleDepcleanTestCase(TestCase): self.assertEqual(test_case.test_success, True, test_case.fail_msg) finally: playground.cleanup() + + def testIDEPENDDepclean(self): + """ + Test for bug 916135, where a direct circular dependency caused + the unmerge order to fail to account for IDEPEND. + """ + + ebuilds = { + "dev-util/A-1": {}, + "dev-libs/B-1": { + "EAPI": "8", + "IDEPEND": "dev-util/A", + "RDEPEND": "dev-libs/B:=", + }, + "dev-libs/C-1": {}, + } + + installed = { + "dev-util/A-1": {}, + "dev-libs/B-1": { + "EAPI": "8", + "IDEPEND": "dev-util/A", + "RDEPEND": "dev-libs/B:0/0=", + }, + "dev-libs/C-1": {}, + } + + world = ("dev-libs/C",) + + test_cases = ( + # Remove dev-libs/B first because it IDEPENDs on dev-util/A + ResolverPlaygroundTestCase( + [], + options={"--depclean": True}, + success=True, + ordered=True, + cleanlist=[ + "dev-libs/B-1", + "dev-util/A-1", + ], + ), + ) + + playground = ResolverPlayground( + ebuilds=ebuilds, installed=installed, world=world + ) + 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() + + def testCircularDepclean(self): + """ + Test for bug 916135, where an indirect circular dependency caused + the unmerge order to fail to account for IDEPEND. + """ + + ebuilds = { + "dev-util/A-1": {}, + "dev-libs/B-1": { + "EAPI": "8", + "SLOT": "1", + "IDEPEND": "dev-util/A", + "RDEPEND": "dev-libs/B:=", + }, + "dev-libs/B-2": { + "EAPI": "8", + "SLOT": "2", + "IDEPEND": "dev-util/A", + "RDEPEND": "dev-libs/B:=", + }, + "dev-libs/C-1": {}, + } + + installed = { + "dev-util/A-1": {}, + "dev-libs/B-1": { + "EAPI": "8", + "SLOT": "1", + "IDEPEND": "dev-util/A", + "RDEPEND": "dev-libs/B:2/2=", + }, + "dev-libs/B-2": { + "EAPI": "8", + "SLOT": "2", + "IDEPEND": "dev-util/A", + "RDEPEND": "dev-libs/B:1/1=", + }, + "dev-libs/C-1": {}, + } + + world = ("dev-libs/C",) + + test_cases = ( + # Remove dev-libs/B first because it IDEPENDs on dev-util/A + ResolverPlaygroundTestCase( + [], + options={"--depclean": True}, + success=True, + ordered=True, + cleanlist=["dev-libs/B-2", "dev-libs/B-1", "dev-util/A-1"], + ), + ) + + playground = ResolverPlayground( + ebuilds=ebuilds, installed=installed, world=world + ) + 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() |