3cd86bd32135e5913d676d4aadf1532c43ecb3a5
[portage.git] / pym / portage / tests / resolver / test_slot_conflict_rebuild.py
1 # Copyright 2012 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 SlotConflictRebuildTestCase(TestCase):
9
10         def testSlotConflictRebuild(self):
11
12                 ebuilds = {
13
14                         "app-misc/A-1" : {
15                                 "EAPI": "5",
16                                 "SLOT": "0/1"
17                         },
18
19                         "app-misc/A-2" : {
20                                 "EAPI": "5",
21                                 "SLOT": "0/2"
22                         },
23
24                         "app-misc/B-0" : {
25                                 "EAPI": "5",
26                                 "DEPEND": "app-misc/A:=",
27                                 "RDEPEND": "app-misc/A:="
28                         },
29
30                         "app-misc/C-0" : {
31                                 "EAPI": "5",
32                                 "DEPEND": "<app-misc/A-2",
33                                 "RDEPEND": "<app-misc/A-2"
34                         },
35
36                         "app-misc/D-1" : {
37                                 "EAPI": "5",
38                                 "SLOT": "0/1"
39                         },
40
41                         "app-misc/D-2" : {
42                                 "EAPI": "5",
43                                 "SLOT": "0/2"
44                         },
45
46                         "app-misc/E-0" : {
47                                 "EAPI": "5",
48                                 "DEPEND": "app-misc/D:=",
49                                 "RDEPEND": "app-misc/D:="
50                         },
51
52                 }
53
54                 installed = {
55
56                         "app-misc/A-1" : {
57                                 "EAPI": "5",
58                                 "SLOT": "0/1"
59                         },
60
61                         "app-misc/B-0" : {
62                                 "EAPI": "5",
63                                 "DEPEND": "app-misc/A:0/1=",
64                                 "RDEPEND": "app-misc/A:0/1="
65                         },
66
67                         "app-misc/C-0" : {
68                                 "EAPI": "5",
69                                 "DEPEND": "<app-misc/A-2",
70                                 "RDEPEND": "<app-misc/A-2"
71                         },
72
73                         "app-misc/D-1" : {
74                                 "EAPI": "5",
75                                 "SLOT": "0/1"
76                         },
77
78                         "app-misc/E-0" : {
79                                 "EAPI": "5",
80                                 "DEPEND": "app-misc/D:0/1=",
81                                 "RDEPEND": "app-misc/D:0/1="
82                         },
83
84                 }
85
86                 world = ["app-misc/B", "app-misc/C", "app-misc/E"]
87
88                 test_cases = (
89
90                         # Test bug #439688, where a slot conflict prevents an
91                         # upgrade and we don't want to trigger unnecessary rebuilds.
92                         ResolverPlaygroundTestCase(
93                                 ["@world"],
94                                 options = {"--update": True, "--deep": True},
95                                 success = True,
96                                 mergelist = ["app-misc/D-2", "app-misc/E-0"]),
97
98                 )
99
100                 playground = ResolverPlayground(ebuilds=ebuilds,
101                         installed=installed, world=world, debug=False)
102                 try:
103                         for test_case in test_cases:
104                                 playground.run_TestCase(test_case)
105                                 self.assertEqual(test_case.test_success, True, test_case.fail_msg)
106                 finally:
107                         playground.cleanup()