blob: e5d6bdf0d94f52e1c64470b064012585ec671d5c [file] [log] [blame]
# 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, ResolverPlaygroundTestCase
class MultirepoTestCase(TestCase):
def testMultirepo(self):
ebuilds = {
#Simple repo selection
"dev-libs/A-1": { },
"dev-libs/A-1::repo1": { },
"dev-libs/A-2::repo1": { },
"dev-libs/A-1::repo2": { },
#Packages in exactly one repo
"dev-libs/B-1": { },
"dev-libs/C-1::repo1": { },
#Package in repository 1 and 2, but 1 must be used
"dev-libs/D-1::repo1": { },
"dev-libs/D-1::repo2": { },
"dev-libs/E-1": { },
"dev-libs/E-1::repo1": { },
"dev-libs/E-1::repo2": { "SLOT": "1" },
"dev-libs/F-1::repo1": { "SLOT": "1" },
"dev-libs/F-1::repo2": { "SLOT": "1" },
"dev-libs/G-1::repo1": { "EAPI" : "4", "IUSE":"+x +y", "REQUIRED_USE" : "" },
"dev-libs/G-1::repo2": { "EAPI" : "4", "IUSE":"+x +y", "REQUIRED_USE" : "^^ ( x y )" },
}
sets = {
"multirepotest":
( "dev-libs/A::test_repo", )
}
test_cases = (
#Simple repo selection
ResolverPlaygroundTestCase(
["dev-libs/A"],
success = True,
check_repo_names = True,
mergelist = ["dev-libs/A-2::repo1"]),
ResolverPlaygroundTestCase(
["dev-libs/A::test_repo"],
success = True,
check_repo_names = True,
mergelist = ["dev-libs/A-1"]),
ResolverPlaygroundTestCase(
["dev-libs/A::repo2"],
success = True,
check_repo_names = True,
mergelist = ["dev-libs/A-1::repo2"]),
ResolverPlaygroundTestCase(
["=dev-libs/A-1::repo1"],
success = True,
check_repo_names = True,
mergelist = ["dev-libs/A-1::repo1"]),
ResolverPlaygroundTestCase(
["@multirepotest"],
success = True,
check_repo_names = True,
mergelist = ["dev-libs/A-1"]),
#Packages in exactly one repo
ResolverPlaygroundTestCase(
["dev-libs/B"],
success = True,
check_repo_names = True,
mergelist = ["dev-libs/B-1"]),
ResolverPlaygroundTestCase(
["dev-libs/C"],
success = True,
check_repo_names = True,
mergelist = ["dev-libs/C-1::repo1"]),
#Package in repository 1 and 2, but 2 must be used
ResolverPlaygroundTestCase(
["dev-libs/D"],
success = True,
check_repo_names = True,
mergelist = ["dev-libs/D-1::repo2"]),
#Atoms with slots
ResolverPlaygroundTestCase(
["dev-libs/E"],
success = True,
check_repo_names = True,
mergelist = ["dev-libs/E-1::repo2"]),
ResolverPlaygroundTestCase(
["dev-libs/E:1::repo2"],
success = True,
check_repo_names = True,
mergelist = ["dev-libs/E-1::repo2"]),
ResolverPlaygroundTestCase(
["dev-libs/E:1"],
success = True,
check_repo_names = True,
mergelist = ["dev-libs/E-1::repo2"]),
ResolverPlaygroundTestCase(
["dev-libs/F:1"],
success = True,
check_repo_names = True,
mergelist = ["dev-libs/F-1::repo2"]),
ResolverPlaygroundTestCase(
["=dev-libs/F-1:1"],
success = True,
check_repo_names = True,
mergelist = ["dev-libs/F-1::repo2"]),
ResolverPlaygroundTestCase(
["=dev-libs/F-1:1::repo1"],
success = True,
check_repo_names = True,
mergelist = ["dev-libs/F-1::repo1"]),
# Check interaction between repo priority and unsatisfied
# REQUIRED_USE, for bug #350254.
ResolverPlaygroundTestCase(
["=dev-libs/G-1"],
check_repo_names = True,
success = False),
)
playground = ResolverPlayground(ebuilds=ebuilds, sets=sets)
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 testMultirepoUserConfig(self):
ebuilds = {
#package.use test
"dev-libs/A-1": { "IUSE": "foo" },
"dev-libs/A-2::repo1": { "IUSE": "foo" },
"dev-libs/A-3::repo2": { },
"dev-libs/B-1": { "DEPEND": "dev-libs/A", "EAPI": 2 },
"dev-libs/B-2": { "DEPEND": "dev-libs/A[foo]", "EAPI": 2 },
"dev-libs/B-3": { "DEPEND": "dev-libs/A[-foo]", "EAPI": 2 },
#package.keywords test
"dev-libs/C-1": { "KEYWORDS": "~x86" },
"dev-libs/C-1::repo1": { "KEYWORDS": "~x86" },
#package.license
"dev-libs/D-1": { "LICENSE": "TEST" },
"dev-libs/D-1::repo1": { "LICENSE": "TEST" },
#package.mask
"dev-libs/E-1": { },
"dev-libs/E-1::repo1": { },
"dev-libs/H-1": { },
"dev-libs/H-1::repo1": { },
#package.properties
"dev-libs/F-1": { "PROPERTIES": "bar"},
"dev-libs/F-1::repo1": { "PROPERTIES": "bar"},
#package.unmask
"dev-libs/G-1": { },
"dev-libs/G-1::repo1": { },
#package.mask with wildcards
"dev-libs/Z-1::repo3": { },
}
user_config = {
"package.use":
(
"dev-libs/A::repo1 foo",
),
"package.keywords":
(
"=dev-libs/C-1::test_repo",
),
"package.license":
(
"=dev-libs/D-1::test_repo TEST",
),
"package.mask":
(
"dev-libs/E::repo1",
"dev-libs/H",
#needed for package.unmask test
"dev-libs/G",
#wildcard test
"*/*::repo3",
),
"package.properties":
(
"dev-libs/F::repo1 -bar",
),
"package.unmask":
(
"dev-libs/G::test_repo",
),
}
test_cases = (
#package.use test
ResolverPlaygroundTestCase(
["=dev-libs/B-1"],
success = True,
check_repo_names = True,
mergelist = ["dev-libs/A-3::repo2", "dev-libs/B-1"]),
ResolverPlaygroundTestCase(
["=dev-libs/B-2"],
success = True,
check_repo_names = True,
mergelist = ["dev-libs/A-2::repo1", "dev-libs/B-2"]),
ResolverPlaygroundTestCase(
["=dev-libs/B-3"],
success = False,
check_repo_names = True),
#package.keywords test
ResolverPlaygroundTestCase(
["dev-libs/C"],
success = True,
check_repo_names = True,
mergelist = ["dev-libs/C-1"]),
#package.license test
ResolverPlaygroundTestCase(
["dev-libs/D"],
success = True,
check_repo_names = True,
mergelist = ["dev-libs/D-1"]),
#package.mask test
ResolverPlaygroundTestCase(
["dev-libs/E"],
success = True,
check_repo_names = True,
mergelist = ["dev-libs/E-1"]),
#package.properties test
ResolverPlaygroundTestCase(
["dev-libs/F"],
success = True,
check_repo_names = True,
mergelist = ["dev-libs/F-1"]),
#package.mask test
ResolverPlaygroundTestCase(
["dev-libs/G"],
success = True,
check_repo_names = True,
mergelist = ["dev-libs/G-1"]),
ResolverPlaygroundTestCase(
["dev-libs/H"],
success = False),
#package.mask with wildcards
ResolverPlaygroundTestCase(
["dev-libs/Z"],
success = False),
)
playground = ResolverPlayground(ebuilds=ebuilds, user_config=user_config)
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()