2 AT_BANNER([RPM dependency matching])
4 RPMPY_TEST([provide - require pairs],[
5 # ((provides), (requires), match) expected values
7 # Different names never match
9 (('b',), ('a', '=', '1.2'), 0),
10 (('b',), ('a', '>=', '1.2'), 0),
11 (('b',), ('a', '<=', '1.2'), 0),
12 (('b',), ('a', '<', '1.2'), 0),
13 (('b',), ('a', '>', '1.2'), 0),
14 (('b',), ('a', '<>', '1.2'), 0),
16 # Unversioned provide matches all versions
18 (('a',), ('a', '=', '1.2'), 1),
19 (('a',), ('a', '>=', '1.2'), 1),
20 (('a',), ('a', '<=', '1.2'), 1),
21 (('a',), ('a', '<', '1.2'), 1),
22 (('a',), ('a', '>', '1.2'), 1),
23 (('a',), ('a', '<>', '1.2'), 1),
25 # Unversioned require matches all versions
26 (('a', '=', '1.2'), ('a',), 1),
27 (('a', '<', '1.2'), ('a',), 1),
28 (('a', '>', '1.2'), ('a',), 1),
29 (('a', '<=', '1.2'), ('a',), 1),
30 (('a', '>=', '1.2'), ('a',), 1),
31 (('a', '<>', '1.2'), ('a',), 1),
33 # Simple, obvious version comparisons
34 (('a', '=', '1.2'), ('a', '=', '1.2'), 1),
35 (('a', '=', '1.2'), ('a', '>=', '1.2'), 1),
36 (('a', '=', '1.2'), ('a', '<=', '1.2'), 1),
37 (('a', '=', '1.2'), ('a', '<', '1.2'), 0),
38 (('a', '=', '1.2'), ('a', '>', '1.2'), 0),
39 (('a', '=', '1.2'), ('a', '<>', '1.2'), 0),
41 (('a', '=', '1.2'), ('a', '=', '1.3'), 0),
42 (('a', '=', '1.2'), ('a', '>=', '1.3'), 0),
43 (('a', '=', '1.2'), ('a', '<=', '1.3'), 1),
44 (('a', '=', '1.2'), ('a', '<', '1.3'), 1),
45 (('a', '=', '1.2'), ('a', '>', '1.3'), 0),
46 (('a', '=', '1.2'), ('a', '<>', '1.3'), 1),
48 # Simple, obvious version-release comparisons
49 (('a', '=', '1.2-1'), ('a', '=', '1.2-1'), 1),
50 (('a', '=', '1.2-1'), ('a', '>=', '1.2-1'), 1),
51 (('a', '=', '1.2-1'), ('a', '<=', '1.2-1'), 1),
52 (('a', '=', '1.2-1'), ('a', '<', '1.2-1'), 0),
53 (('a', '=', '1.2-1'), ('a', '>', '1.2-1'), 0),
54 (('a', '=', '1.2-1'), ('a', '<>', '1.2-1'), 0),
56 (('a', '=', '1.2-1'), ('a', '=', '1.2-2'), 0),
57 (('a', '=', '1.2-1'), ('a', '>=', '1.2-2'), 0),
58 (('a', '=', '1.2-1'), ('a', '<=', '1.2-2'), 1),
59 (('a', '=', '1.2-1'), ('a', '<', '1.2-2'), 1),
60 (('a', '=', '1.2-1'), ('a', '>', '1.2-2'), 0),
61 (('a', '=', '1.2-1'), ('a', '<>', '1.2-2'), 1),
63 (('a', '=', '1.3-1'), ('a', '=', '1.2-2'), 0),
64 (('a', '=', '1.3-1'), ('a', '>=', '1.2-2'), 1),
65 (('a', '=', '1.3-1'), ('a', '<=', '1.2-2'), 0),
66 (('a', '=', '1.3-1'), ('a', '<', '1.2-2'), 0),
67 (('a', '=', '1.3-1'), ('a', '>', '1.2-2'), 1),
68 (('a', '=', '1.3-1'), ('a', '<>', '1.2-2'), 1),
70 # Zero epoch is same as no epoch
71 (('a', '=', '0:1.2'), ('a', '=', '1.2'), 1),
72 (('a', '=', '0:1.2'), ('a', '>=', '1.2'), 1),
73 (('a', '=', '0:1.2'), ('a', '<=', '1.2'), 1),
74 (('a', '=', '0:1.2'), ('a', '<', '1.2'), 0),
75 (('a', '=', '0:1.2'), ('a', '>', '1.2'), 0),
76 (('a', '=', '0:1.2'), ('a', '<>', '1.2'), 0),
78 (('a', '=', '1.2'), ('a', '=', '0:1.2'), 1),
79 (('a', '=', '1.2'), ('a', '>=', '0:1.2'), 1),
80 (('a', '=', '1.2'), ('a', '<=', '0:1.2'), 1),
81 (('a', '=', '1.2'), ('a', '<', '0:1.2'), 0),
82 (('a', '=', '1.2'), ('a', '>', '0:1.2'), 0),
83 (('a', '=', '1.2'), ('a', '<>', '0:1.2'), 0),
86 (('a', '=', '1:1.2'), ('a', '=', '1.2'), 0),
87 (('a', '=', '1:1.2'), ('a', '>=', '1.2'), 1),
88 (('a', '=', '1:1.2'), ('a', '<=', '1.2'), 0),
89 (('a', '=', '1:1.2'), ('a', '<', '1.2'), 0),
90 (('a', '=', '1:1.2'), ('a', '>', '1.2'), 1),
91 (('a', '=', '1:1.2'), ('a', '<>', '1.2'), 1),
93 (('a', '=', '1.2'), ('a', '=', '1:1.2'), 0),
94 (('a', '=', '1.2'), ('a', '>=', '1:1.2'), 0),
95 (('a', '=', '1.2'), ('a', '<=', '1:1.2'), 1),
96 (('a', '=', '1.2'), ('a', '<', '1:1.2'), 1),
97 (('a', '=', '1.2'), ('a', '>', '1:1.2'), 0),
98 (('a', '=', '1.2'), ('a', '<>', '1:1.2'), 1),
100 (('a', '=', '2:1.2'), ('a', '=', '2:1.2'), 1),
101 (('a', '=', '2:1.2'), ('a', '>=', '2:1.2'), 1),
102 (('a', '=', '2:1.2'), ('a', '<=', '2:1.2'), 1),
103 (('a', '=', '2:1.2'), ('a', '<', '2:1.2'), 0),
104 (('a', '=', '2:1.2'), ('a', '>', '2:1.2'), 0),
105 (('a', '=', '2:1.2'), ('a', '<>', '2:1.2'), 0),
107 # Simple, obvious version comparisons with provide ranges
108 (('a', '>', '1.2'), ('a', '=', '1.2'), 0),
109 (('a', '>', '1.2'), ('a', '>=', '1.2'), 1),
110 (('a', '>', '1.2'), ('a', '<=', '1.2'), 0),
111 (('a', '>', '1.2'), ('a', '<', '1.2'), 0),
112 (('a', '>', '1.2'), ('a', '>', '1.2'), 1),
113 (('a', '>', '1.2'), ('a', '<>', '1.2'), 1),
115 (('a', '<', '1.2'), ('a', '=', '1.2'), 0),
116 (('a', '<', '1.2'), ('a', '>=', '1.2'), 0),
117 (('a', '<', '1.2'), ('a', '<=', '1.2'), 1),
118 (('a', '<', '1.2'), ('a', '<', '1.2'), 1),
119 (('a', '<', '1.2'), ('a', '>', '1.2'), 0),
120 (('a', '<', '1.2'), ('a', '<>', '1.2'), 1),
122 (('a', '>=', '1.2'), ('a', '=', '1.2'), 1),
123 (('a', '>=', '1.2'), ('a', '>=', '1.2'), 1),
124 (('a', '>=', '1.2'), ('a', '<=', '1.2'), 1),
125 (('a', '>=', '1.2'), ('a', '<', '1.2'), 0),
126 (('a', '>=', '1.2'), ('a', '>', '1.2'), 1),
127 (('a', '>=', '1.2'), ('a', '<>', '1.2'), 1),
129 (('a', '<=', '1.2'), ('a', '=', '1.2'), 1),
130 (('a', '<=', '1.2'), ('a', '>=', '1.2'), 1),
131 (('a', '<=', '1.2'), ('a', '<=', '1.2'), 1),
132 (('a', '<=', '1.2'), ('a', '<', '1.2'), 1),
133 (('a', '<=', '1.2'), ('a', '>', '1.2'), 0),
134 (('a', '<=', '1.2'), ('a', '<>', '1.2'), 1),
136 (('a', '<>', '1.2'), ('a', '=', '1.2'), 0),
137 (('a', '<>', '1.2'), ('a', '>=', '1.2'), 1),
138 (('a', '<>', '1.2'), ('a', '<=', '1.2'), 1),
139 (('a', '<>', '1.2'), ('a', '<', '1.2'), 1),
140 (('a', '<>', '1.2'), ('a', '>', '1.2'), 1),
141 (('a', '<>', '1.2'), ('a', '<>', '1.2'), 1),
143 # Missing release should be considered "any release will do"
144 # but this is not always so (the cases with "???")
145 (('a', '=', '1.2-1'), ('a', '=', '1.2'), 1),
146 (('a', '=', '1.2-1'), ('a', '>=', '1.2'), 1),
147 (('a', '=', '1.2-1'), ('a', '<=', '1.2'), 1),
148 (('a', '=', '1.2-1'), ('a', '<', '1.2'), 0),
149 (('a', '=', '1.2-1'), ('a', '>', '1.2'), 0),
150 (('a', '=', '1.2-1'), ('a', '<>', '1.2'), 0),
152 (('a', '>', '1.2-1'), ('a', '=', '1.2'), 1),
153 (('a', '>', '1.2-1'), ('a', '>=', '1.2'), 1),
154 (('a', '>', '1.2-1'), ('a', '<=', '1.2'), 1),
155 (('a', '>', '1.2-1'), ('a', '<', '1.2'), 0),
156 (('a', '>', '1.2-1'), ('a', '>', '1.2'), 1),
157 (('a', '>', '1.2-1'), ('a', '<>', '1.2'), 1),
159 (('a', '<', '1.2-1'), ('a', '=', '1.2'), 1),
160 (('a', '<', '1.2-1'), ('a', '>=', '1.2'), 1),
161 (('a', '<', '1.2-1'), ('a', '<=', '1.2'), 1),
162 (('a', '<', '1.2-1'), ('a', '<', '1.2'), 1),
163 (('a', '<', '1.2-1'), ('a', '>', '1.2'), 0),
164 (('a', '<', '1.2-1'), ('a', '<>', '1.2'), 1),
166 (('a', '>=', '1.2-1'), ('a', '=', '1.2'), 1),
167 (('a', '>=', '1.2-1'), ('a', '>=', '1.2'), 1),
168 (('a', '>=', '1.2-1'), ('a', '<=', '1.2'), 1),
169 (('a', '>=', '1.2-1'), ('a', '<', '1.2'), 0),
170 (('a', '>=', '1.2-1'), ('a', '>', '1.2'), 1),
171 (('a', '>=', '1.2-1'), ('a', '<>', '1.2'), 1),
173 (('a', '<=', '1.2-1'), ('a', '=', '1.2'), 1),
174 (('a', '<=', '1.2-1'), ('a', '>=', '1.2'), 1),
175 (('a', '<=', '1.2-1'), ('a', '<=', '1.2'), 1),
176 (('a', '<=', '1.2-1'), ('a', '<', '1.2'), 1),
177 (('a', '<=', '1.2-1'), ('a', '>', '1.2'), 0),
178 (('a', '<=', '1.2-1'), ('a', '<>', '1.2'), 1),
180 (('a', '<>', '1.2-1'), ('a', '=', '1.2'), 1),
181 (('a', '<>', '1.2-1'), ('a', '>=', '1.2'), 1),
182 (('a', '<>', '1.2-1'), ('a', '<=', '1.2'), 1),
183 (('a', '<>', '1.2-1'), ('a', '<', '1.2'), 1),
184 (('a', '<>', '1.2-1'), ('a', '>', '1.2'), 1),
185 (('a', '<>', '1.2-1'), ('a', '<>', '1.2'), 1),
187 (('a', '=', '1.2'), ('a', '=', '1.2-1'), 1),
188 (('a', '=', '1.2'), ('a', '>=', '1.2-1'), 1),
189 (('a', '=', '1.2'), ('a', '<=', '1.2-1'), 1),
190 (('a', '=', '1.2'), ('a', '<', '1.2-1'), 1),
191 (('a', '=', '1.2'), ('a', '>', '1.2-1'), 1),
192 (('a', '=', '1.2'), ('a', '<>', '1.2-1'), 1),
194 (('a', '>', '1.2'), ('a', '=', '1.2-1'), 0),
195 (('a', '>', '1.2'), ('a', '>=', '1.2-1'), 1),
196 (('a', '>', '1.2'), ('a', '<=', '1.2-1'), 0),
197 (('a', '>', '1.2'), ('a', '<', '1.2-1'), 0),
198 (('a', '>', '1.2'), ('a', '>', '1.2-1'), 1),
199 (('a', '>', '1.2'), ('a', '<>', '1.2-1'), 1),
201 (('a', '<', '1.2'), ('a', '=', '1.2-1'), 0),
202 (('a', '<', '1.2'), ('a', '>=', '1.2-1'), 0),
203 (('a', '<', '1.2'), ('a', '<=', '1.2-1'), 1),
204 (('a', '<', '1.2'), ('a', '<', '1.2-1'), 1),
205 (('a', '<', '1.2'), ('a', '>', '1.2-1'), 0),
206 (('a', '<', '1.2'), ('a', '<>', '1.2-1'), 1),
208 (('a', '>=', '1.2'), ('a', '=', '1.2-1'), 1),
209 (('a', '>=', '1.2'), ('a', '>=', '1.2-1'), 1),
210 (('a', '>=', '1.2'), ('a', '<=', '1.2-1'), 1),
211 (('a', '>=', '1.2'), ('a', '<', '1.2-1'), 1),
212 (('a', '>=', '1.2'), ('a', '>', '1.2-1'), 1),
213 (('a', '>=', '1.2'), ('a', '<>', '1.2-1'), 1),
215 (('a', '<=', '1.2'), ('a', '=', '1.2-1'), 1),
216 (('a', '<=', '1.2'), ('a', '>=', '1.2-1'), 1),
217 (('a', '<=', '1.2'), ('a', '<=', '1.2-1'), 1),
218 (('a', '<=', '1.2'), ('a', '<', '1.2-1'), 1),
219 (('a', '<=', '1.2'), ('a', '>', '1.2-1'), 1),
220 (('a', '<=', '1.2'), ('a', '<>', '1.2-1'), 1),
222 (('a', '<>', '1.2'), ('a', '=', '1.2-1'), 0),
223 (('a', '<>', '1.2'), ('a', '>=', '1.2-1'), 1),
224 (('a', '<>', '1.2'), ('a', '<=', '1.2-1'), 1),
225 (('a', '<>', '1.2'), ('a', '<', '1.2-1'), 1),
226 (('a', '<>', '1.2'), ('a', '>', '1.2-1'), 1),
227 (('a', '<>', '1.2'), ('a', '<>', '1.2-1'), 1),
230 ms = ['no match', 'match']
232 myprint() # dumb kludge to fixup expected output
233 for p, r, res in tests:
234 d1 = rpm.ds(p, 'provides')
235 d2 = rpm.ds(r, 'requires')
236 match = d1.Compare(d2)
238 myprint('FAILED: %s with %s: %s' % (d1.DNEVR(), d2.DNEVR(),ms[res]))