Add test case for bug #456340.
authorZac Medico <zmedico@gentoo.org>
Tue, 12 Feb 2013 01:35:48 +0000 (17:35 -0800)
committerZac Medico <zmedico@gentoo.org>
Tue, 12 Feb 2013 01:35:48 +0000 (17:35 -0800)
The problem here results from poor handling of the unsatisfied built
slot operator dep inside _add_dep, where it aborts the graph and tries
to backtrack immediately. We really want it to queue a rebuild here,
and continue filling out the graph.

pym/portage/tests/resolver/test_slot_operator_unsolved.py [new file with mode: 0644]

diff --git a/pym/portage/tests/resolver/test_slot_operator_unsolved.py b/pym/portage/tests/resolver/test_slot_operator_unsolved.py
new file mode 100644 (file)
index 0000000..a496252
--- /dev/null
@@ -0,0 +1,73 @@
+# Copyright 2013 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+from portage.tests import TestCase
+from portage.tests.resolver.ResolverPlayground import (ResolverPlayground,
+       ResolverPlaygroundTestCase)
+
+class SlotOperatorUnsolvedTestCase(TestCase):
+       """
+       Demonstrate bug #456340, where an unsolved circular dependency
+       interacts with an unsatisfied built slot-operator dep.
+
+       The problem here results from poor handling of the unsatisfied built
+       slot operator dep inside _add_dep, where it aborts the graph and tries
+       to backtrack immediately. We really want it to queue a rebuild here,
+       and continue filling out the graph.
+       """
+       def __init__(self, *args, **kwargs):
+               super(SlotOperatorUnsolvedTestCase, self).__init__(*args, **kwargs)
+
+       def testSlotOperatorUnsolved(self):
+               ebuilds = {
+                       "dev-libs/icu-50.1.2" : {
+                               "EAPI": "5",
+                               "SLOT": "0/50.1.2"
+                       },
+                       "net-libs/webkit-gtk-1.10.2-r300" : {
+                               "EAPI": "5",
+                               "DEPEND":  ">=dev-libs/icu-3.8.1-r1:=",
+                               "RDEPEND": ">=dev-libs/icu-3.8.1-r1:="
+                       },
+                       "dev-ruby/rdoc-3.12.1" : {
+                               "EAPI": "5",
+                               "DEPEND": ">=dev-ruby/hoe-2.7.0",
+                       },
+                       "dev-ruby/hoe-2.13.0" : {
+                               "EAPI": "5",
+                               "DEPEND": ">=dev-ruby/rdoc-3.10",
+                               "RDEPEND": ">=dev-ruby/rdoc-3.10",
+                       },
+               }
+
+               installed = {
+                       "dev-libs/icu-50.1.2" : {
+                               "EAPI": "5",
+                               "SLOT": "0/50.1.2"
+                       },
+                       "net-libs/webkit-gtk-1.10.2-r300" : {
+                               "EAPI": "5",
+                               "DEPEND":  ">=dev-libs/icu-3.8.1-r1:0/50=",
+                               "RDEPEND": ">=dev-libs/icu-3.8.1-r1:0/50="
+                       },
+               }
+
+               world = ["net-libs/webkit-gtk", "dev-ruby/hoe"]
+
+               test_cases = (
+
+                       ResolverPlaygroundTestCase(
+                               ["@world"],
+                               options = {"--update": True, "--deep": True},
+                               success = False),
+
+               )
+
+               playground = ResolverPlayground(ebuilds=ebuilds,
+                       installed=installed, world=world, debug=False)
+               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()