Merge additional backtracking tests from the master branch.
authorZac Medico <zmedico@gentoo.org>
Mon, 27 Sep 2010 20:45:35 +0000 (13:45 -0700)
committerZac Medico <zmedico@gentoo.org>
Tue, 5 Oct 2010 15:50:07 +0000 (08:50 -0700)
pym/portage/tests/resolver/test_backtracking.py

index 91a739aafc3da89ad5a5023b592a9d9754daa40b..41b6d50b68905ccae1e2b6204b3b9524ed4e13d9 100644 (file)
@@ -30,6 +30,44 @@ class BacktrackingTestCase(TestCase):
                finally:
                        playground.cleanup()
 
+
+       def testHittingTheBacktrackLimit(self):
+               ebuilds = {
+                       "dev-libs/A-1": {},
+                       "dev-libs/A-2": {},
+                       "dev-libs/B-1": {},
+                       "dev-libs/B-2": {},
+                       "dev-libs/C-1": { "DEPEND": "dev-libs/A dev-libs/B" },
+                       "dev-libs/D-1": { "DEPEND": "=dev-libs/A-1 =dev-libs/B-1" },
+                       }
+
+               test_cases = (
+                               ResolverPlaygroundTestCase(
+                                       ["dev-libs/C", "dev-libs/D"],
+                                       all_permutations = True,
+                                       mergelist = ["dev-libs/A-1", "dev-libs/B-1", "dev-libs/C-1", "dev-libs/D-1"],
+                                       ignore_mergelist_order = True,
+                                       success = True),
+                               #This one hits the backtrack limit. Be aware that this depends on the argument order.
+                               ResolverPlaygroundTestCase(
+                                       ["dev-libs/D", "dev-libs/C"],
+                                       options = { "--backtrack": 1 },
+                                       mergelist = ["dev-libs/A-1", "dev-libs/B-1", "dev-libs/A-2", "dev-libs/B-2", "dev-libs/C-1", "dev-libs/D-1"],
+                                       ignore_mergelist_order = True,
+                                       slot_collision_solutions = [],
+                                       success = False),
+                       )
+
+               playground = ResolverPlayground(ebuilds=ebuilds)
+
+               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 testBacktrackingGoodVersionFirst(self):
                """
                When backtracking due to slot conflicts, we masked the version that has been pulled
@@ -59,3 +97,37 @@ class BacktrackingTestCase(TestCase):
                                self.assertEqual(test_case.test_success, True, test_case.fail_msg)
                finally:
                        playground.cleanup()
+
+       def testBacktrackWithoutUpdates(self):
+               """
+               If --update is not given we might have to mask the old installed version later.
+               """
+
+               ebuilds = {
+                       "dev-libs/A-1": { "DEPEND": "dev-libs/Z" },
+                       "dev-libs/B-1": { "DEPEND": ">=dev-libs/Z-2" },
+                       "dev-libs/Z-1": { },
+                       "dev-libs/Z-2": { },
+                       }
+
+               installed = {
+                       "dev-libs/Z-1": { "USE": "" },
+                       }
+
+               test_cases = (
+                               ResolverPlaygroundTestCase(
+                                       ["dev-libs/B", "dev-libs/A"],
+                                       all_permutations = True,
+                                       mergelist = ["dev-libs/Z-2", "dev-libs/B-1", "dev-libs/A-1", ],
+                                       ignore_mergelist_order = True,
+                                       success = True),
+                       )
+
+               playground = ResolverPlayground(ebuilds=ebuilds, installed=installed)
+
+               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()