| # Copyright 2018 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 OrUpgradeInstalledTestCase(TestCase): |
| |
| def testOrUpgradeInstalled(self): |
| ebuilds = { |
| 'net-misc/foo-1': { |
| 'EAPI': '6', |
| 'RDEPEND': '|| ( sys-libs/glibc[rpc(-)] net-libs/libtirpc )' |
| }, |
| 'net-libs/libtirpc-1': { |
| 'EAPI': '6', |
| }, |
| 'sys-libs/glibc-2.26': { |
| 'EAPI': '6', |
| 'IUSE': '' |
| }, |
| 'sys-libs/glibc-2.24': { |
| 'EAPI': '6', |
| 'IUSE': '+rpc' |
| }, |
| } |
| |
| installed = { |
| 'sys-libs/glibc-2.24': { |
| 'EAPI': '6', |
| 'IUSE': '+rpc', |
| 'USE': 'rpc', |
| }, |
| } |
| |
| world = ['sys-libs/glibc'] |
| |
| test_cases = ( |
| # Test bug 643974, where we need to install libtirpc |
| # in order to upgrade glibc. |
| ResolverPlaygroundTestCase( |
| ['net-misc/foo', '@world'], |
| options={'--update': True, '--deep': True}, |
| success=True, |
| ambiguous_merge_order=True, |
| mergelist=( |
| ( |
| 'net-libs/libtirpc-1', |
| 'sys-libs/glibc-2.26', |
| 'net-misc/foo-1', |
| ), |
| ) |
| ), |
| ) |
| |
| playground = ResolverPlayground(debug=False, |
| 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.debug = False |
| playground.cleanup() |
| |
| # In some cases it's necessary to avoid upgrade due to |
| # the package being masked. |
| user_config = { |
| "package.mask" : ( |
| ">=sys-libs/glibc-2.26", |
| ), |
| } |
| |
| test_cases = ( |
| ResolverPlaygroundTestCase( |
| ['net-misc/foo', '@world'], |
| options={'--update': True, '--deep': True}, |
| success=True, |
| mergelist=[ |
| 'net-misc/foo-1', |
| ] |
| ), |
| ) |
| |
| playground = ResolverPlayground(debug=False, |
| ebuilds=ebuilds, installed=installed, world=world, |
| 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.debug = False |
| playground.cleanup() |
| |
| def testVirtualRust(self): |
| ebuilds = { |
| 'dev-lang/rust-1.19.0': {}, |
| 'dev-lang/rust-1.23.0': {}, |
| 'dev-lang/rust-bin-1.19.0': {}, |
| 'virtual/rust-1.19.0': { |
| 'RDEPEND': '|| ( =dev-lang/rust-1.19.0* =dev-lang/rust-bin-1.19.0* )' |
| }, |
| } |
| |
| installed = { |
| 'dev-lang/rust-1.19.0': {}, |
| 'virtual/rust-1.19.0': { |
| 'RDEPEND': '|| ( =dev-lang/rust-1.19.0* =dev-lang/rust-bin-1.19.0* )' |
| }, |
| } |
| |
| world = ['virtual/rust'] |
| |
| test_cases = ( |
| # Test bug 645416, where rust-bin-1.19.0 was pulled in |
| # inappropriately due to the rust-1.23.0 update being |
| # available. |
| ResolverPlaygroundTestCase( |
| ['virtual/rust'], |
| options={'--update': True, '--deep': True}, |
| success=True, |
| mergelist=[] |
| ), |
| # Test upgrade to rust-1.23.0, which is only possible |
| # if rust-bin-1.19.0 is installed in order to satisfy |
| # virtual/rust-1.19.0. |
| ResolverPlaygroundTestCase( |
| ['=dev-lang/rust-1.23.0', 'virtual/rust'], |
| options={'--update': True, '--deep': True}, |
| all_permutations=True, |
| success=True, |
| ambiguous_merge_order=True, |
| mergelist=( |
| ( |
| 'dev-lang/rust-1.23.0', |
| 'dev-lang/rust-bin-1.19.0', |
| ), |
| ), |
| ), |
| ) |
| |
| playground = ResolverPlayground(debug=False, |
| 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.debug = False |
| playground.cleanup() |
| |
| |
| def test_llvm_slot_operator(self): |
| ebuilds = { |
| 'media-libs/mesa-19.2.8': { |
| 'EAPI': '7', |
| 'RDEPEND': '''|| ( |
| sys-devel/llvm:10 |
| sys-devel/llvm:9 |
| sys-devel/llvm:8 |
| sys-devel/llvm:7 |
| ) |
| sys-devel/llvm:=''' |
| }, |
| 'sys-devel/llvm-10': { |
| 'EAPI': '7', |
| 'KEYWORDS': '', |
| 'SLOT': '10', |
| }, |
| 'sys-devel/llvm-9': { |
| 'EAPI': '7', |
| 'SLOT': '9', |
| }, |
| 'sys-devel/llvm-8': { |
| 'EAPI': '7', |
| 'SLOT': '8', |
| }, |
| } |
| |
| installed = { |
| 'media-libs/mesa-19.2.8': { |
| 'EAPI': '7', |
| 'RDEPEND': '''|| ( |
| sys-devel/llvm:10 |
| sys-devel/llvm:9 |
| sys-devel/llvm:8 |
| sys-devel/llvm:7 |
| ) |
| sys-devel/llvm:8/8=''' |
| }, |
| 'sys-devel/llvm-8': { |
| 'EAPI': '7', |
| 'SLOT': '8', |
| }, |
| } |
| |
| world = ['media-libs/mesa'] |
| |
| test_cases = ( |
| # Demonstrate bug 706278, where there is a missed slot operator |
| # rebuild that prevents upgrade from llvm-8 to llvm-9. |
| ResolverPlaygroundTestCase( |
| ['@world'], |
| options={'--update': True, '--deep': True}, |
| success=True, |
| mergelist=['sys-devel/llvm-9', 'media-libs/mesa-19.2.8'], |
| ), |
| ) |
| |
| playground = ResolverPlayground(debug=False, |
| 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.debug = False |
| playground.cleanup() |