14ca0ff00e23115b4fbf41968cfdb0d3482a3f3b
[portage.git] / pym / portage / tests / resolver / test_multirepo.py
1 # Copyright 2010 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, ResolverPlaygroundTestCase
6
7 class MultirepoTestCase(TestCase):
8
9         def testMultirepo(self):
10                 ebuilds = {
11                         #Simple repo selection
12                         "dev-libs/A-1": { },
13                         "dev-libs/A-1::repo1": { },
14                         "dev-libs/A-2::repo1": { },
15                         "dev-libs/A-1::repo2": { },
16
17                         #Packges in exactly one repo
18                         "dev-libs/B-1": { },
19                         "dev-libs/C-1::repo1": { },
20
21                         #Package in repository 1 and 2, but 1 must be used
22                         "dev-libs/D-1::repo1": { },
23                         "dev-libs/D-1::repo2": { },
24
25                         "dev-libs/E-1": { },
26                         "dev-libs/E-1::repo1": { },
27                         "dev-libs/E-1::repo2": { "SLOT": "1" },
28
29                         "dev-libs/F-1::repo1": { "SLOT": "1" },
30                         "dev-libs/F-1::repo2": { "SLOT": "1" },
31                         }
32                 
33                 sets = {
34                         "multirepotest": 
35                                 ( "dev-libs/A::test_repo", )
36                 }
37
38                 test_cases = (
39                         #Simple repo selection
40                         ResolverPlaygroundTestCase(
41                                 ["dev-libs/A"],
42                                 success = True,
43                                 check_repo_names = True,
44                                 mergelist = ["dev-libs/A-2::repo1"]),
45                         ResolverPlaygroundTestCase(
46                                 ["dev-libs/A::test_repo"],
47                                 success = True,
48                                 check_repo_names = True,
49                                 mergelist = ["dev-libs/A-1"]),
50                         ResolverPlaygroundTestCase(
51                                 ["dev-libs/A::repo2"],
52                                 success = True,
53                                 check_repo_names = True,
54                                 mergelist = ["dev-libs/A-1::repo2"]),
55                         ResolverPlaygroundTestCase(
56                                 ["=dev-libs/A-1::repo1"],
57                                 success = True,
58                                 check_repo_names = True,
59                                 mergelist = ["dev-libs/A-1::repo1"]),
60                         ResolverPlaygroundTestCase(
61                                 ["@multirepotest"],
62                                 success = True,
63                                 check_repo_names = True,
64                                 mergelist = ["dev-libs/A-1"]),
65
66                         #Packges in exactly one repo
67                         ResolverPlaygroundTestCase(
68                                 ["dev-libs/B"],
69                                 success = True,
70                                 check_repo_names = True,
71                                 mergelist = ["dev-libs/B-1"]),
72                         ResolverPlaygroundTestCase(
73                                 ["dev-libs/C"],
74                                 success = True,
75                                 check_repo_names = True,
76                                 mergelist = ["dev-libs/C-1::repo1"]),
77
78                         #Package in repository 1 and 2, but 1 must be used
79                         ResolverPlaygroundTestCase(
80                                 ["dev-libs/D"],
81                                 success = True,
82                                 check_repo_names = True,
83                                 mergelist = ["dev-libs/D-1::repo1"]),
84
85                         #Atoms with slots
86                         ResolverPlaygroundTestCase(
87                                 ["dev-libs/E"],
88                                 success = True,
89                                 check_repo_names = True,
90                                 mergelist = ["dev-libs/E-1::repo1"]),
91                         ResolverPlaygroundTestCase(
92                                 ["dev-libs/E:1::repo2"],
93                                 success = True,
94                                 check_repo_names = True,
95                                 mergelist = ["dev-libs/E-1::repo2"]),
96                         ResolverPlaygroundTestCase(
97                                 ["dev-libs/E:1"],
98                                 success = True,
99                                 check_repo_names = True,
100                                 mergelist = ["dev-libs/E-1::repo2"]),
101                         ResolverPlaygroundTestCase(
102                                 ["dev-libs/F:1"],
103                                 success = True,
104                                 check_repo_names = True,
105                                 mergelist = ["dev-libs/F-1::repo1"]),
106                         ResolverPlaygroundTestCase(
107                                 ["=dev-libs/F-1:1"],
108                                 success = True,
109                                 check_repo_names = True,
110                                 mergelist = ["dev-libs/F-1::repo1"]),
111                         ResolverPlaygroundTestCase(
112                                 ["=dev-libs/F-1:1::repo2"],
113                                 success = True,
114                                 check_repo_names = True,
115                                 mergelist = ["dev-libs/F-1::repo2"]),
116                         )
117
118                 playground = ResolverPlayground(ebuilds=ebuilds, sets=sets)
119                 try:
120                         for test_case in test_cases:
121                                 playground.run_TestCase(test_case)
122                                 self.assertEqual(test_case.test_success, True, test_case.fail_msg)
123                 finally:
124                         playground.cleanup()
125
126
127         def testMultirepoUserConfig(self):
128                 ebuilds = {
129                         #package.use test
130                         "dev-libs/A-1": { "IUSE": "foo" },
131                         "dev-libs/A-2::repo1": { "IUSE": "foo" },
132                         "dev-libs/A-3::repo2": { },
133                         "dev-libs/B-1": { "DEPEND": "dev-libs/A", "EAPI": 2 },
134                         "dev-libs/B-2": { "DEPEND": "dev-libs/A[foo]", "EAPI": 2 },
135                         "dev-libs/B-3": { "DEPEND": "dev-libs/A[-foo]", "EAPI": 2 },
136
137                         #package.keywords test
138                         "dev-libs/C-1": { "KEYWORDS": "~x86" },
139                         "dev-libs/C-1::repo1": { "KEYWORDS": "~x86" },
140
141                         #package.license
142                         "dev-libs/D-1": { "LICENSE": "TEST" },
143                         "dev-libs/D-1::repo1": { "LICENSE": "TEST" },
144
145                         #package.mask
146                         "dev-libs/E-1": { },
147                         "dev-libs/E-1::repo1": { },
148                         "dev-libs/H-1": { },
149                         "dev-libs/H-1::repo1": { },
150
151                         #package.properties
152                         "dev-libs/F-1": { "PROPERTIES": "bar"},
153                         "dev-libs/F-1::repo1": { "PROPERTIES": "bar"},
154
155                         #package.unmask
156                         "dev-libs/G-1": { },
157                         "dev-libs/G-1::repo1": { },
158                         }
159
160                 user_config = {
161                         "package.use":
162                                 (
163                                         "dev-libs/A::repo1 foo",
164                                 ),
165                         "package.keywords":
166                                 (
167                                         "=dev-libs/C-1::test_repo",
168                                 ),
169                         "package.license":
170                                 (
171                                         "=dev-libs/D-1::test_repo TEST",
172                                 ),
173                         "package.mask":
174                                 (
175                                         "dev-libs/E::repo1",
176                                         "dev-libs/H",
177                                         #needed for package.unmask test
178                                         "dev-libs/G",
179                                 ),
180                         "package.properties":
181                                 (
182                                         "dev-libs/F::repo1 -bar",
183                                 ),
184                         "package.unmask":
185                                 (
186                                         "dev-libs/G::test_repo",
187                                 ),
188                         }
189
190                 test_cases = (
191                         #package.use test
192                         ResolverPlaygroundTestCase(
193                                 ["=dev-libs/B-1"],
194                                 success = True,
195                                 check_repo_names = True,
196                                 mergelist = ["dev-libs/A-3::repo2", "dev-libs/B-1"]),
197                         ResolverPlaygroundTestCase(
198                                 ["=dev-libs/B-2"],
199                                 success = True,
200                                 check_repo_names = True,
201                                 mergelist = ["dev-libs/A-2::repo1", "dev-libs/B-2"]),
202                         ResolverPlaygroundTestCase(
203                                 ["=dev-libs/B-3"],
204                                 success = True,
205                                 check_repo_names = True,
206                                 mergelist = ["dev-libs/A-1", "dev-libs/B-3"]),
207
208                         #package.keywords test
209                         ResolverPlaygroundTestCase(
210                                 ["dev-libs/C"],
211                                 success = True,
212                                 check_repo_names = True,
213                                 mergelist = ["dev-libs/C-1"]),
214
215                         #package.license test
216                         ResolverPlaygroundTestCase(
217                                 ["dev-libs/D"],
218                                 success = True,
219                                 check_repo_names = True,
220                                 mergelist = ["dev-libs/D-1"]),
221
222                         #package.mask test
223                         ResolverPlaygroundTestCase(
224                                 ["dev-libs/E"],
225                                 success = True,
226                                 check_repo_names = True,
227                                 mergelist = ["dev-libs/E-1"]),
228
229                         #package.properties test
230                         ResolverPlaygroundTestCase(
231                                 ["dev-libs/F"],
232                                 success = True,
233                                 check_repo_names = True,
234                                 mergelist = ["dev-libs/F-1"]),
235
236                         #package.mask test
237                         ResolverPlaygroundTestCase(
238                                 ["dev-libs/G"],
239                                 success = True,
240                                 check_repo_names = True,
241                                 mergelist = ["dev-libs/G-1"]),
242                         ResolverPlaygroundTestCase(
243                                 ["dev-libs/H"],
244                                 success = False),
245                         )
246
247                 playground = ResolverPlayground(ebuilds=ebuilds, user_config=user_config, debug=True)
248                 try:
249                         for test_case in test_cases:
250                                 playground.run_TestCase(test_case)
251                                 self.assertEqual(test_case.test_success, True, test_case.fail_msg)
252                 finally:
253                         playground.cleanup()