aboutsummaryrefslogtreecommitdiff
blob: 88f6dac2d9fb3f28bdb69f899179ffeb63c50369 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# Copyright 2017 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 DisjunctiveDependOrderTestCase(TestCase):

	def testDisjunctiveDependOrderTestCase(self):
		ebuilds = {
			'virtual/jre-1.8': {
				'EAPI': '6',
				'SLOT' : '1.8',
				'RDEPEND' : '|| ( dev-java/oracle-jre-bin:1.8 virtual/jdk:1.8 )',
			},
			'virtual/jdk-1.8': {
				'EAPI': '6',
				'SLOT' : '1.8',
				'RDEPEND' : '|| ( dev-java/icedtea:8 dev-java/oracle-jdk-bin:1.8 )',
			},
			'dev-java/icedtea-3.6': {
				'SLOT' : '8',
			},
			'dev-java/oracle-jdk-bin-1.8': {
				'SLOT' : '1.8',
			},
			'dev-java/oracle-jre-bin-1.8': {
				'SLOT' : '1.8',
			},
			'dev-db/hsqldb-1.8'       : {
				'DEPEND' : 'virtual/jdk',
				'RDEPEND' : 'virtual/jre',
			},
		}

		binpkgs = {
			'dev-db/hsqldb-1.8'       : {
				'DEPEND' : 'virtual/jdk',
				'RDEPEND' : 'virtual/jre',
			},
		}

		test_cases = (
			# Test bug 639346, where a redundant jre implementation
			# was pulled in because DEPEND was evaluated after
			# RDEPEND.
			ResolverPlaygroundTestCase(
				['dev-db/hsqldb'],
				success=True,
				mergelist=[
					'dev-java/icedtea-3.6',
					'virtual/jdk-1.8',
					'virtual/jre-1.8',
					'dev-db/hsqldb-1.8',
				],
			),

			# The jdk is not needed with --usepkg, so the jre should
			# be preferred in this case.
			ResolverPlaygroundTestCase(
				['dev-db/hsqldb'],
				options = {
					'--usepkg': True
				},
				success=True,
				mergelist=[
					'dev-java/oracle-jre-bin-1.8',
					'virtual/jre-1.8',
					'[binary]dev-db/hsqldb-1.8',
				],
			),
		)

		playground = ResolverPlayground(debug=False,
			binpkgs=binpkgs, ebuilds=ebuilds)

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