| # 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() |