blob: cb1e2dd5d90cb1963024589d960f2bc2ea35a112 [file] [log] [blame]
# Copyright 2011 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 ResolverDepthTestCase(TestCase):
def testResolverDepth(self):
ebuilds = {
"dev-libs/A-1": {"RDEPEND" : "dev-libs/B"},
"dev-libs/A-2": {"RDEPEND" : "dev-libs/B"},
"dev-libs/B-1": {"RDEPEND" : "dev-libs/C"},
"dev-libs/B-2": {"RDEPEND" : "dev-libs/C"},
"dev-libs/C-1": {},
"dev-libs/C-2": {},
"virtual/libusb-0" : {"EAPI" :"2", "SLOT" : "0", "RDEPEND" : "|| ( >=dev-libs/libusb-0.1.12-r1:0 dev-libs/libusb-compat >=sys-freebsd/freebsd-lib-8.0[usb] )"},
"virtual/libusb-1" : {"EAPI" :"2", "SLOT" : "1", "RDEPEND" : ">=dev-libs/libusb-1.0.4:1"},
"dev-libs/libusb-0.1.13" : {},
"dev-libs/libusb-1.0.5" : {"SLOT":"1"},
"dev-libs/libusb-compat-1" : {},
"sys-freebsd/freebsd-lib-8": {"IUSE" : "+usb"},
"sys-fs/udev-164" : {"EAPI" : "1", "RDEPEND" : "virtual/libusb:0"},
"virtual/jre-1.5.0" : {"SLOT" : "1.5", "RDEPEND" : "|| ( =dev-java/sun-jre-bin-1.5.0* =virtual/jdk-1.5.0* )"},
"virtual/jre-1.5.0-r1" : {"SLOT" : "1.5", "RDEPEND" : "|| ( =dev-java/sun-jre-bin-1.5.0* =virtual/jdk-1.5.0* )"},
"virtual/jre-1.6.0" : {"SLOT" : "1.6", "RDEPEND" : "|| ( =dev-java/sun-jre-bin-1.6.0* =virtual/jdk-1.6.0* )"},
"virtual/jre-1.6.0-r1" : {"SLOT" : "1.6", "RDEPEND" : "|| ( =dev-java/sun-jre-bin-1.6.0* =virtual/jdk-1.6.0* )"},
"virtual/jdk-1.5.0" : {"SLOT" : "1.5", "RDEPEND" : "|| ( =dev-java/sun-jdk-1.5.0* dev-java/gcj-jdk )"},
"virtual/jdk-1.5.0-r1" : {"SLOT" : "1.5", "RDEPEND" : "|| ( =dev-java/sun-jdk-1.5.0* dev-java/gcj-jdk )"},
"virtual/jdk-1.6.0" : {"SLOT" : "1.6", "RDEPEND" : "|| ( =dev-java/icedtea-6* =dev-java/sun-jdk-1.6.0* )"},
"virtual/jdk-1.6.0-r1" : {"SLOT" : "1.6", "RDEPEND" : "|| ( =dev-java/icedtea-6* =dev-java/sun-jdk-1.6.0* )"},
"dev-java/gcj-jdk-4.5" : {},
"dev-java/gcj-jdk-4.5-r1" : {},
"dev-java/icedtea-6.1" : {},
"dev-java/icedtea-6.1-r1" : {},
"dev-java/sun-jdk-1.5" : {"SLOT" : "1.5"},
"dev-java/sun-jdk-1.6" : {"SLOT" : "1.6"},
"dev-java/sun-jre-bin-1.5" : {"SLOT" : "1.5"},
"dev-java/sun-jre-bin-1.6" : {"SLOT" : "1.6"},
"dev-java/ant-core-1.8" : {"DEPEND" : ">=virtual/jdk-1.4"},
"dev-db/hsqldb-1.8" : {"RDEPEND" : ">=virtual/jre-1.6"},
}
installed = {
"dev-libs/A-1": {"RDEPEND" : "dev-libs/B"},
"dev-libs/B-1": {"RDEPEND" : "dev-libs/C"},
"dev-libs/C-1": {},
"virtual/jre-1.5.0" : {"SLOT" : "1.5", "RDEPEND" : "|| ( =virtual/jdk-1.5.0* =dev-java/sun-jre-bin-1.5.0* )"},
"virtual/jre-1.6.0" : {"SLOT" : "1.6", "RDEPEND" : "|| ( =virtual/jdk-1.6.0* =dev-java/sun-jre-bin-1.6.0* )"},
"virtual/jdk-1.5.0" : {"SLOT" : "1.5", "RDEPEND" : "|| ( =dev-java/sun-jdk-1.5.0* dev-java/gcj-jdk )"},
"virtual/jdk-1.6.0" : {"SLOT" : "1.6", "RDEPEND" : "|| ( =dev-java/icedtea-6* =dev-java/sun-jdk-1.6.0* )"},
"dev-java/gcj-jdk-4.5" : {},
"dev-java/icedtea-6.1" : {},
"virtual/libusb-0" : {"EAPI" :"2", "SLOT" : "0", "RDEPEND" : "|| ( >=dev-libs/libusb-0.1.12-r1:0 dev-libs/libusb-compat >=sys-freebsd/freebsd-lib-8.0[usb] )"},
}
world = ["dev-libs/A"]
test_cases = (
ResolverPlaygroundTestCase(
["dev-libs/A"],
options = {"--update": True, "--deep": 0},
success = True,
mergelist = ["dev-libs/A-2"]),
ResolverPlaygroundTestCase(
["dev-libs/A"],
options = {"--update": True, "--deep": 1},
success = True,
mergelist = ["dev-libs/B-2", "dev-libs/A-2"]),
ResolverPlaygroundTestCase(
["dev-libs/A"],
options = {"--update": True, "--deep": 2},
success = True,
mergelist = ["dev-libs/C-2", "dev-libs/B-2", "dev-libs/A-2"]),
ResolverPlaygroundTestCase(
["@world"],
options = {"--update": True, "--deep": True},
success = True,
mergelist = ["dev-libs/C-2", "dev-libs/B-2", "dev-libs/A-2"]),
ResolverPlaygroundTestCase(
["@world"],
options = {"--emptytree": True},
success = True,
mergelist = ["dev-libs/C-2", "dev-libs/B-2", "dev-libs/A-2"]),
ResolverPlaygroundTestCase(
["@world"],
options = {"--selective": True, "--deep": True},
success = True,
mergelist = []),
ResolverPlaygroundTestCase(
["dev-libs/A"],
options = {"--deep": 2},
success = True,
mergelist = ["dev-libs/A-2"]),
ResolverPlaygroundTestCase(
["virtual/jre"],
options = {},
success = True,
mergelist = ['virtual/jre-1.6.0-r1']),
ResolverPlaygroundTestCase(
["virtual/jre"],
options = {"--deep" : True},
success = True,
mergelist = ['virtual/jre-1.6.0-r1']),
# Test bug #141118, where we avoid pulling in
# redundant deps, satisfying nested virtuals
# as efficiently as possible.
ResolverPlaygroundTestCase(
["virtual/jre"],
options = {"--selective" : True, "--deep" : True},
success = True,
mergelist = []),
# Test bug #150361, where depgraph._greedy_slots()
# is triggered by --update with AtomArg.
ResolverPlaygroundTestCase(
["virtual/jre"],
options = {"--update" : True},
success = True,
ambiguous_merge_order = True,
mergelist = [('virtual/jre-1.6.0-r1', 'virtual/jre-1.5.0-r1')]),
# Recursively traversed virtual dependencies, and their
# direct dependencies, are considered to have the same
# depth as direct dependencies.
ResolverPlaygroundTestCase(
["virtual/jre"],
options = {"--update" : True, "--deep" : 1},
success = True,
ambiguous_merge_order = True,
merge_order_assertions=(('dev-java/icedtea-6.1-r1', 'virtual/jdk-1.6.0-r1'), ('virtual/jdk-1.6.0-r1', 'virtual/jre-1.6.0-r1'),
('dev-java/gcj-jdk-4.5-r1', 'virtual/jdk-1.5.0-r1'), ('virtual/jdk-1.5.0-r1', 'virtual/jre-1.5.0-r1')),
mergelist = [('dev-java/icedtea-6.1-r1', 'dev-java/gcj-jdk-4.5-r1', 'virtual/jdk-1.6.0-r1', 'virtual/jdk-1.5.0-r1', 'virtual/jre-1.6.0-r1', 'virtual/jre-1.5.0-r1')]),
ResolverPlaygroundTestCase(
["virtual/jre:1.5"],
options = {"--update" : True},
success = True,
mergelist = ['virtual/jre-1.5.0-r1']),
ResolverPlaygroundTestCase(
["virtual/jre:1.6"],
options = {"--update" : True},
success = True,
mergelist = ['virtual/jre-1.6.0-r1']),
# Test that we don't pull in any unnecessary updates
# when --update is not specified, even though we
# specified --deep.
ResolverPlaygroundTestCase(
["dev-java/ant-core"],
options = {"--deep" : True},
success = True,
mergelist = ["dev-java/ant-core-1.8"]),
ResolverPlaygroundTestCase(
["dev-java/ant-core"],
options = {"--update" : True},
success = True,
mergelist = ["dev-java/ant-core-1.8"]),
# Recursively traversed virtual dependencies, and their
# direct dependencies, are considered to have the same
# depth as direct dependencies.
ResolverPlaygroundTestCase(
["dev-java/ant-core"],
options = {"--update" : True, "--deep" : 1},
success = True,
mergelist = ['dev-java/icedtea-6.1-r1', 'virtual/jdk-1.6.0-r1', 'dev-java/ant-core-1.8']),
ResolverPlaygroundTestCase(
["dev-db/hsqldb"],
options = {"--deep" : True},
success = True,
mergelist = ["dev-db/hsqldb-1.8"]),
# Don't traverse deps of an installed package with --deep=0,
# even if it's a virtual.
ResolverPlaygroundTestCase(
["virtual/libusb:0"],
options = {"--selective" : True, "--deep" : 0},
success = True,
mergelist = []),
# Satisfy unsatisfied dep of installed package with --deep=1.
ResolverPlaygroundTestCase(
["virtual/libusb:0"],
options = {"--selective" : True, "--deep" : 1},
success = True,
mergelist = ['dev-libs/libusb-0.1.13']),
# Pull in direct dep of virtual, even with --deep=0.
ResolverPlaygroundTestCase(
["sys-fs/udev"],
options = {"--deep" : 0},
success = True,
mergelist = ['dev-libs/libusb-0.1.13', 'sys-fs/udev-164']),
# Test --nodeps with direct virtual deps.
ResolverPlaygroundTestCase(
["sys-fs/udev"],
options = {"--nodeps" : True},
success = True,
mergelist = ["sys-fs/udev-164"]),
# Test that --nodeps overrides --deep.
ResolverPlaygroundTestCase(
["sys-fs/udev"],
options = {"--nodeps" : True, "--deep" : True},
success = True,
mergelist = ["sys-fs/udev-164"]),
# Test that --nodeps overrides --emptytree.
ResolverPlaygroundTestCase(
["sys-fs/udev"],
options = {"--nodeps" : True, "--emptytree" : True},
success = True,
mergelist = ["sys-fs/udev-164"]),
# Test --emptytree with virtuals.
ResolverPlaygroundTestCase(
["sys-fs/udev"],
options = {"--emptytree" : True},
success = True,
mergelist = ['dev-libs/libusb-0.1.13', 'virtual/libusb-0', 'sys-fs/udev-164']),
)
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()