diff options
Diffstat (limited to 'pym/portage/tests/resolver')
-rw-r--r-- | pym/portage/tests/resolver/ResolverPlayground.py | 26 | ||||
-rw-r--r-- | pym/portage/tests/resolver/test_autounmask.py | 131 | ||||
-rw-r--r-- | pym/portage/tests/resolver/test_eapi.py | 6 | ||||
-rw-r--r-- | pym/portage/tests/resolver/test_simple.py | 4 |
4 files changed, 155 insertions, 12 deletions
diff --git a/pym/portage/tests/resolver/ResolverPlayground.py b/pym/portage/tests/resolver/ResolverPlayground.py index a9954fef1..3740f8314 100644 --- a/pym/portage/tests/resolver/ResolverPlayground.py +++ b/pym/portage/tests/resolver/ResolverPlayground.py @@ -14,6 +14,7 @@ from portage.package.ebuild.config import config from portage.sets import load_default_config from portage.versions import catsplit +from _emerge.Blocker import Blocker from _emerge.create_depgraph_params import create_depgraph_params from _emerge.depgraph import backtrack_depgraph from _emerge.RootConfig import RootConfig @@ -183,19 +184,30 @@ class ResolverPlayground(object): # Add a fake _test_ option that can be used for # conditional test code. myopts["_test_"] = True - + portage.util.noiselimit = -2 myparams = create_depgraph_params(myopts, myaction) success, mydepgraph, favorites = backtrack_depgraph( self.settings, self.trees, myopts, myparams, myaction, myfiles, None) + result = ResolverPlaygroundResult(success, mydepgraph, favorites) portage.util.noiselimit = 0 - if success: - mergelist = [x.cpv for x in mydepgraph._dynamic_config._serialized_tasks_cache] - return True, mergelist - else: - #TODO: Use mydepgraph.display_problems() to return a useful error message - return False, None + return result def cleanup(self): shutil.rmtree(self.root) + +class ResolverPlaygroundResult(object): + def __init__(self, success, mydepgraph, favorites): + self.success = success + self.depgraph = mydepgraph + self.favorites = favorites + self.mergelist = None + + if self.depgraph._dynamic_config._serialized_tasks_cache is not None: + self.mergelist = [] + for x in self.depgraph._dynamic_config._serialized_tasks_cache: + if isinstance(x, Blocker): + self.mergelist.append(x.atom) + else: + self.mergelist.append(x.cpv) diff --git a/pym/portage/tests/resolver/test_autounmask.py b/pym/portage/tests/resolver/test_autounmask.py new file mode 100644 index 000000000..944e5485b --- /dev/null +++ b/pym/portage/tests/resolver/test_autounmask.py @@ -0,0 +1,131 @@ +# Copyright 2010 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 + +class AutounmaskTestCase(TestCase): + + def testAutounmask(self): + ebuilds = { + #ebuilds to test use changes + "dev-libs/A-1": { "SLOT": 1, "DEPEND": "dev-libs/B[foo]", "EAPI": 2}, + "dev-libs/A-2": { "SLOT": 2, "DEPEND": "dev-libs/B[bar]", "EAPI": 2}, + "dev-libs/B-1": { "DEPEND": "foo? ( dev-libs/C ) bar? ( dev-libs/D )", "IUSE": "foo bar"}, + "dev-libs/C-1": {}, + "dev-libs/D-1": {}, + + #ebuilds to test keyword changes + "app-misc/Z-1": { "KEYWORDS": "~x86", "DEPEND": "app-misc/Y" }, + "app-misc/Y-1": { "KEYWORDS": "~x86" }, + "app-misc/W-1": {}, + "app-misc/W-2": { "KEYWORDS": "~x86" }, + "app-misc/V-1": { "KEYWORDS": "~x86", "DEPEND": ">=app-misc/W-2"}, + + #ebuilds for mixed test for || dep handling + "sci-libs/K-1": { "DEPEND": " || ( sci-libs/L[bar] || ( sci-libs/M sci-libs/P ) )", "EAPI": 2}, + "sci-libs/K-2": { "DEPEND": " || ( sci-libs/L[bar] || ( sci-libs/P sci-libs/M ) )", "EAPI": 2}, + "sci-libs/K-3": { "DEPEND": " || ( sci-libs/M || ( sci-libs/L[bar] sci-libs/P ) )", "EAPI": 2}, + "sci-libs/K-4": { "DEPEND": " || ( sci-libs/M || ( sci-libs/P sci-libs/L[bar] ) )", "EAPI": 2}, + "sci-libs/K-5": { "DEPEND": " || ( sci-libs/P || ( sci-libs/L[bar] sci-libs/M ) )", "EAPI": 2}, + "sci-libs/K-6": { "DEPEND": " || ( sci-libs/P || ( sci-libs/M sci-libs/L[bar] ) )", "EAPI": 2}, + "sci-libs/K-7": { "DEPEND": " || ( sci-libs/M sci-libs/L[bar] )", "EAPI": 2}, + "sci-libs/K-8": { "DEPEND": " || ( sci-libs/L[bar] sci-libs/M )", "EAPI": 2}, + + "sci-libs/L-1": { "IUSE": "bar" }, + "sci-libs/M-1": { "KEYWORDS": "~x86" }, + "sci-libs/P-1": { }, + + #ebuilds to conflicting use changes + "net-www/G-1": { "DEPEND": "net-www/I[foo]", "EAPI": 2 }, + "net-www/H-1": { "DEPEND": "net-www/I[-foo]", "EAPI": 2 }, + "net-www/I-1": { "IUSE": "foo" }, + "net-www/J-1": { "DEPEND": "|| ( net-www/G net-www/H )" }, + "net-www/J-2": { "DEPEND": "|| ( net-www/H net-www/G )" }, + "net-www/K-1": { "DEPEND": "!!net-www/G", "EAPI": 2 }, + } + + requests = ( + #Test USE changes. + #The simple case. + + (["dev-libs/A:1"], {"--autounmask": "n"}, None, False, None), + (["dev-libs/A:1"], {"--autounmask": True}, None, False, \ + ["dev-libs/C-1", "dev-libs/B-1", "dev-libs/A-1"]), + + #Make sure we restart if needed. + + (["dev-libs/B", "dev-libs/A:1"], {"--autounmask": True}, None, False, \ + ["dev-libs/C-1", "dev-libs/B-1", "dev-libs/A-1"]), + (["dev-libs/A:1", "dev-libs/B"], {"--autounmask": True}, None, False, \ + ["dev-libs/C-1", "dev-libs/B-1", "dev-libs/A-1"]), + (["dev-libs/A:1", "dev-libs/A:2"], {"--autounmask": True}, None, False, \ + ["dev-libs/D-1", "dev-libs/C-1", "dev-libs/B-1", "dev-libs/A-1", "dev-libs/A-2"]), + (["dev-libs/B", "dev-libs/A:1", "dev-libs/A:2"], {"--autounmask": True}, None, False, \ + ["dev-libs/D-1", "dev-libs/C-1", "dev-libs/B-1", "dev-libs/A-1", "dev-libs/A-2"]), + (["dev-libs/A:1", "dev-libs/B", "dev-libs/A:2"], {"--autounmask": True}, None, False, \ + ["dev-libs/D-1", "dev-libs/C-1", "dev-libs/B-1", "dev-libs/A-1", "dev-libs/A-2"]), + (["dev-libs/A:1", "dev-libs/A:2", "dev-libs/B"], {"--autounmask": True}, None, False, \ + ["dev-libs/D-1", "dev-libs/C-1", "dev-libs/B-1", "dev-libs/A-1", "dev-libs/A-2"]), + + #Test keywording. + #The simple case. + + (["app-misc/Z"], {"--autounmask": "n"}, None, False, None), + (["app-misc/Z"], {"--autounmask": True}, None, False, \ + ["app-misc/Y-1", "app-misc/Z-1"]), + + #Make sure that the backtracking for slot conflicts handles our mess. + + (["=app-misc/V-1", "app-misc/W"], {"--autounmask": True}, None, False, \ + ["app-misc/W-2", "app-misc/V-1"]), + (["app-misc/W", "=app-misc/V-1"], {"--autounmask": True}, None, False, \ + ["app-misc/W-2", "app-misc/V-1"]), + + #Mixed testing + #Make sure we don't change use for something in a || dep if there is another choice + #that needs no change. + + (["=sci-libs/K-1"], {"--autounmask": True}, None, True, \ + ["sci-libs/P-1", "sci-libs/K-1"]), + (["=sci-libs/K-2"], {"--autounmask": True}, None, True, \ + ["sci-libs/P-1", "sci-libs/K-2"]), + (["=sci-libs/K-3"], {"--autounmask": True}, None, True, \ + ["sci-libs/P-1", "sci-libs/K-3"]), + (["=sci-libs/K-4"], {"--autounmask": True}, None, True, \ + ["sci-libs/P-1", "sci-libs/K-4"]), + (["=sci-libs/K-5"], {"--autounmask": True}, None, True, \ + ["sci-libs/P-1", "sci-libs/K-5"]), + (["=sci-libs/K-6"], {"--autounmask": True}, None, True, \ + ["sci-libs/P-1", "sci-libs/K-6"]), + + #Make sure we prefer use changes over keyword changes. + (["=sci-libs/K-7"], {"--autounmask": True}, None, False, \ + ["sci-libs/L-1", "sci-libs/K-7"]), + (["=sci-libs/K-8"], {"--autounmask": True}, None, False, \ + ["sci-libs/L-1", "sci-libs/K-8"]), + + #Testing conflict bahviour + (["=net-www/G-1", "=net-www/H-1"], {"--autounmask": True}, None, False, None), + #Some of the following tests don't work because we are not able to take back + #changes that later on turn out to be not necessary, because the package + #that induced the change gets masked. + #~ (["=net-www/J-1", "=net-www/K-1"], {"--autounmask": True}, None, True, \ + #~ ["net-www/I-1", "net-www/H-1", "net-www/J-1", "net-www/K-1"] ), + (["=net-www/J-2", "=net-www/K-1"], {"--autounmask": True}, None, True, \ + ["net-www/I-1", "net-www/K-1", "net-www/H-1", "net-www/J-2", ] ), + #~ (["=net-www/K-1", "=net-www/J-1"], {"--autounmask": True}, None, True, \ + #~ ["net-www/I-1", "net-www/H-1", "net-www/J-1", "net-www/K-1"] ), + (["=net-www/K-1", "=net-www/J-2"], {"--autounmask": True}, None, True, \ + ["net-www/I-1", "net-www/K-1", "net-www/H-1", "net-www/J-2", ] ), + ) + + playground = ResolverPlayground(ebuilds=ebuilds) + try: + for atoms, options, action, \ + expected_result, expected_mergelist in requests: + result = playground.run(atoms, options, action) + self.assertEqual((result.success, result.mergelist), + (expected_result, expected_mergelist)) + finally: + playground.cleanup() diff --git a/pym/portage/tests/resolver/test_eapi.py b/pym/portage/tests/resolver/test_eapi.py index 19c7b2193..d9f34f43e 100644 --- a/pym/portage/tests/resolver/test_eapi.py +++ b/pym/portage/tests/resolver/test_eapi.py @@ -4,7 +4,7 @@ from portage.tests import TestCase from portage.tests.resolver.ResolverPlayground import ResolverPlayground -class SimpleResolverTestCase(TestCase): +class EAPITestCase(TestCase): def testEAPI(self): ebuilds = { @@ -95,8 +95,8 @@ class SimpleResolverTestCase(TestCase): try: for atoms, options, action, \ expected_result, expected_mergelist in requests: - success, mergelist = playground.run(atoms, options, action) - self.assertEqual((success, mergelist), + result = playground.run(atoms, options, action) + self.assertEqual((result.success, result.mergelist), (expected_result, expected_mergelist)) finally: playground.cleanup() diff --git a/pym/portage/tests/resolver/test_simple.py b/pym/portage/tests/resolver/test_simple.py index 0e77c9e6d..ef19abe1b 100644 --- a/pym/portage/tests/resolver/test_simple.py +++ b/pym/portage/tests/resolver/test_simple.py @@ -27,8 +27,8 @@ class SimpleResolverTestCase(TestCase): try: for atoms, options, action, \ expected_result, expected_mergelist in requests: - success, mergelist = playground.run(atoms, options, action) - self.assertEqual((success, mergelist), + result = playground.run(atoms, options, action) + self.assertEqual((result.success, result.mergelist), (expected_result, expected_mergelist)) finally: playground.cleanup() |