cecdd37e27780569efe6282e8199727f42aa13cd
[portage.git] / pym / portage / tests / resolver / test_depth.py
1 # Copyright 2011 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
3
4 from portage.tests import TestCase
5 from portage.tests.resolver.ResolverPlayground import (ResolverPlayground,
6         ResolverPlaygroundTestCase)
7
8 class ResolverDepthTestCase(TestCase):
9
10         def testResolverDepth(self):
11
12                 ebuilds = {
13                         "dev-libs/A-1": {"RDEPEND" : "dev-libs/B"},
14                         "dev-libs/A-2": {"RDEPEND" : "dev-libs/B"},
15                         "dev-libs/B-1": {"RDEPEND" : "dev-libs/C"},
16                         "dev-libs/B-2": {"RDEPEND" : "dev-libs/C"},
17                         "dev-libs/C-1": {},
18                         "dev-libs/C-2": {},
19
20                         "virtual/jre-1.5.0"        : {"SLOT" : "1.5", "RDEPEND" : "|| ( =dev-java/sun-jre-bin-1.5.0* =virtual/jdk-1.5.0* )"},
21                         "virtual/jre-1.5.0-r1"     : {"SLOT" : "1.5", "RDEPEND" : "|| ( =dev-java/sun-jre-bin-1.5.0* =virtual/jdk-1.5.0* )"},
22                         "virtual/jre-1.6.0"        : {"SLOT" : "1.6", "RDEPEND" : "|| ( =dev-java/sun-jre-bin-1.6.0* =virtual/jdk-1.6.0* )"},
23                         "virtual/jre-1.6.0-r1"     : {"SLOT" : "1.6", "RDEPEND" : "|| ( =dev-java/sun-jre-bin-1.6.0* =virtual/jdk-1.6.0* )"},
24                         "virtual/jdk-1.5.0"        : {"SLOT" : "1.5", "RDEPEND" : "|| ( =dev-java/sun-jdk-1.5.0* dev-java/gcj-jdk )"},
25                         "virtual/jdk-1.5.0-r1"     : {"SLOT" : "1.5", "RDEPEND" : "|| ( =dev-java/sun-jdk-1.5.0* dev-java/gcj-jdk )"},
26                         "virtual/jdk-1.6.0"        : {"SLOT" : "1.6", "RDEPEND" : "|| ( =dev-java/icedtea-6* =dev-java/sun-jdk-1.6.0* )"},
27                         "virtual/jdk-1.6.0-r1"     : {"SLOT" : "1.6", "RDEPEND" : "|| ( =dev-java/icedtea-6* =dev-java/sun-jdk-1.6.0* )"},
28                         "dev-java/gcj-jdk-4.5"     : {},
29                         "dev-java/gcj-jdk-4.5-r1"  : {},
30                         "dev-java/icedtea-6.1"     : {},
31                         "dev-java/icedtea-6.1-r1"  : {},
32                         "dev-java/sun-jdk-1.5"     : {"SLOT" : "1.5"},
33                         "dev-java/sun-jdk-1.6"     : {"SLOT" : "1.6"},
34                         "dev-java/sun-jre-bin-1.5" : {"SLOT" : "1.5"},
35                         "dev-java/sun-jre-bin-1.6" : {"SLOT" : "1.6"},
36
37                         "dev-java/ant-core-1.8"   : {"DEPEND"  : ">=virtual/jdk-1.4"},
38                         "dev-db/hsqldb-1.8"       : {"RDEPEND" : ">=virtual/jre-1.6"},
39                         }
40
41                 installed = {
42                         "dev-libs/A-1": {"RDEPEND" : "dev-libs/B"},
43                         "dev-libs/B-1": {"RDEPEND" : "dev-libs/C"},
44                         "dev-libs/C-1": {},
45
46                         "virtual/jre-1.5.0"       : {"SLOT" : "1.5", "RDEPEND" : "|| ( =virtual/jdk-1.5.0* =dev-java/sun-jre-bin-1.5.0* )"},
47                         "virtual/jre-1.6.0"       : {"SLOT" : "1.6", "RDEPEND" : "|| ( =virtual/jdk-1.6.0* =dev-java/sun-jre-bin-1.6.0* )"},
48                         "virtual/jdk-1.5.0"       : {"SLOT" : "1.5", "RDEPEND" : "|| ( =dev-java/sun-jdk-1.5.0* dev-java/gcj-jdk )"},
49                         "virtual/jdk-1.6.0"       : {"SLOT" : "1.6", "RDEPEND" : "|| ( =dev-java/icedtea-6* =dev-java/sun-jdk-1.6.0* )"},
50                         "dev-java/gcj-jdk-4.5"    : {},
51                         "dev-java/icedtea-6.1"    : {},
52                         }
53
54                 world = ["dev-libs/A"]
55
56                 test_cases = (
57                         ResolverPlaygroundTestCase(
58                                 ["dev-libs/A"],
59                                 options = {"--update": True, "--deep": 0},
60                                 success = True,
61                                 mergelist = ["dev-libs/A-2"]),
62
63                         ResolverPlaygroundTestCase(
64                                 ["dev-libs/A"],
65                                 options = {"--update": True, "--deep": 1},
66                                 success = True,
67                                 mergelist = ["dev-libs/B-2", "dev-libs/A-2"]),
68
69                         ResolverPlaygroundTestCase(
70                                 ["dev-libs/A"],
71                                 options = {"--update": True, "--deep": 2},
72                                 success = True,
73                                 mergelist = ["dev-libs/C-2", "dev-libs/B-2", "dev-libs/A-2"]),
74
75                         ResolverPlaygroundTestCase(
76                                 ["@world"],
77                                 options = {"--update": True, "--deep": True},
78                                 success = True,
79                                 mergelist = ["dev-libs/C-2", "dev-libs/B-2", "dev-libs/A-2"]),
80
81                         ResolverPlaygroundTestCase(
82                                 ["@world"],
83                                 options = {"--emptytree": True},
84                                 success = True,
85                                 mergelist = ["dev-libs/C-2", "dev-libs/B-2", "dev-libs/A-2"]),
86
87                         ResolverPlaygroundTestCase(
88                                 ["@world"],
89                                 options = {"--selective": True, "--deep": True},
90                                 success = True,
91                                 mergelist = []),
92
93                         ResolverPlaygroundTestCase(
94                                 ["dev-libs/A"],
95                                 options = {"--deep": 2},
96                                 success = True,
97                                 mergelist = ["dev-libs/A-2"]),
98
99                         ResolverPlaygroundTestCase(
100                                 ["virtual/jre"],
101                                 options = {},
102                                 success = True,
103                                 mergelist = ['virtual/jre-1.6.0-r1']),
104
105                         ResolverPlaygroundTestCase(
106                                 ["virtual/jre"],
107                                 options = {"--deep" : True},
108                                 success = True,
109                                 mergelist = ['virtual/jre-1.6.0-r1']),
110
111                         # Test bug #141118, where we avoid pulling in
112                         # redundant deps, satisfying nested virtuals
113                         # as efficiently as possible.
114                         ResolverPlaygroundTestCase(
115                                 ["virtual/jre"],
116                                 options = {"--selective" : True, "--deep" : True},
117                                 success = True,
118                                 mergelist = []),
119
120                         # Test bug #150361, where depgraph._greedy_slots()
121                         # is triggered by --update with AtomArg.
122                         ResolverPlaygroundTestCase(
123                                 ["virtual/jre"],
124                                 options = {"--update" : True},
125                                 success = True,
126                                 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']),
127
128                         ResolverPlaygroundTestCase(
129                                 ["virtual/jre:1.5"],
130                                 options = {"--update" : True},
131                                 success = True,
132                                 mergelist = ['dev-java/gcj-jdk-4.5-r1', 'virtual/jdk-1.5.0-r1', 'virtual/jre-1.5.0-r1']),
133
134                         ResolverPlaygroundTestCase(
135                                 ["virtual/jre:1.6"],
136                                 options = {"--update" : True},
137                                 success = True,
138                                 mergelist = ['dev-java/icedtea-6.1-r1', 'virtual/jdk-1.6.0-r1', 'virtual/jre-1.6.0-r1']),
139
140                         # Test that we don't pull in any unnecessary updates
141                         # when --update is not specified, even though we
142                         # specified --deep.
143                         ResolverPlaygroundTestCase(
144                                 ["dev-java/ant-core"],
145                                 options = {"--deep" : True},
146                                 success = True,
147                                 mergelist = ["dev-java/ant-core-1.8"]),
148
149                         # FIXME: pulls in unwanted updates without --deep: ['dev-java/icedtea-6.1-r1', 'virtual/jdk-1.6.0-r1', 'dev-java/ant-core-1.8']
150                         #ResolverPlaygroundTestCase(
151                         #       ["dev-java/ant-core"],
152                         #       options = {"--update" : True},
153                         #       success = True,
154                         #       mergelist = ["dev-java/ant-core-1.8"]),
155
156                         ResolverPlaygroundTestCase(
157                                 ["dev-db/hsqldb"],
158                                 options = {"--deep" : True},
159                                 success = True,
160                                 mergelist = ["dev-db/hsqldb-1.8"]),
161                         )
162
163                 playground = ResolverPlayground(ebuilds=ebuilds, installed=installed,
164                         world=world)
165                 try:
166                         for test_case in test_cases:
167                                 playground.run_TestCase(test_case)
168                                 self.assertEqual(test_case.test_success, True, test_case.fail_msg)
169                 finally:
170                         playground.cleanup()