source: yum/trunk/test/merge-history-transactions-tests.py@ 1569

Last change on this file since 1569 was 516, checked in by Yuri Dario, 11 years ago

yum: update trunk to 3.4.3.

File size: 34.2 KB
Line 
1import unittest
2
3import yum.history as hist
4
5_fake_count = 0
6class FakeYumHistoryTransaction(hist.YumHistoryTransaction):
7 def __init__(self, pkgs, tid=None, beg_timestamp=None, end_timestamp=None,
8 beg_rpmdbversion=None, end_rpmdbversion=None,
9 loginuid=0, return_code=0, pkgs_with=[],
10 errors=[], output=[]):
11 global _fake_count
12
13 if tid is None:
14 _fake_count += 1
15 tid = _fake_count
16 if beg_timestamp is None:
17 _fake_count += 1
18 beg_timestamp = _fake_count
19 if end_timestamp is None:
20 _fake_count += 1
21 end_timestamp = _fake_count
22
23 if beg_rpmdbversion is None:
24 _fake_count += 1
25 beg_rpmdbversion = '?:<n/a>,' + str(_fake_count)
26 if end_rpmdbversion is None:
27 _fake_count += 1
28 end_rpmdbversion = '?:<n/a>,' + str(_fake_count)
29
30 self.tid = tid
31 self.beg_timestamp = beg_timestamp
32 self.beg_rpmdbversion = beg_rpmdbversion
33 self.end_timestamp = end_timestamp
34 self.end_rpmdbversion = end_rpmdbversion
35 self.loginuid = loginuid
36 self.return_code = return_code
37
38 self._loaded_TW = pkgs_with
39 self._loaded_TD = pkgs
40
41 self._loaded_ER = errors
42 self._loaded_OT = output
43
44 self.altered_lt_rpmdb = None
45 self.altered_gt_rpmdb = None
46
47def _dump_trans_data(pkgs):
48 """ For debugging to see WTF is going on with .trans_data. """
49 return [(str(pkg), pkg.state) for pkg in pkgs]
50
51class MergeHistTransTests(unittest.TestCase):
52
53 def __init__(self, methodName='runTest'):
54 unittest.TestCase.__init__(self, methodName)
55
56 def setUp(self):
57 pass
58 def tearDown(self):
59 pass
60
61 def _merge_new(self, trans):
62 merged = hist.YumMergedHistoryTransaction(trans[0])
63 for pkg in trans[1:]:
64 merged.merge(pkg)
65 return merged
66
67 def _trans_new(self, *args, **kwargs):
68 return FakeYumHistoryTransaction(*args, **kwargs)
69
70 def _pkg_new(self, name, version='1', release='2',
71 arch='noarch', epoch='0', checksum=None, state='Install'):
72 self.assertTrue(state in hist._sttxt2stcode)
73 pkg = hist.YumHistoryPackageState(name,arch,epoch,version,release,
74 state, checksum)
75 return pkg
76
77 def assertMergedBeg(self, merged, beg):
78 self.assertTrue(beg.tid in merged.tid)
79 self.assertEquals(beg.beg_timestamp, merged.beg_timestamp)
80 self.assertEquals(beg.beg_rpmdbversion, merged.beg_rpmdbversion)
81 def assertMergedEnd(self, merged, end):
82 self.assertTrue(end.tid in merged.tid)
83 self.assertEquals(end.end_timestamp, merged.end_timestamp)
84 self.assertEquals(end.end_rpmdbversion, merged.end_rpmdbversion)
85 def assertMergedCodes(self, merged, trans):
86 ret = set()
87 uid = set()
88 for trans in trans:
89 ret.add(trans.loginuid)
90 uid.add(trans.return_code)
91 if len(ret) == 1:
92 self.assertEquals(list(ret)[0], merged.return_code)
93 else:
94 for ret in ret:
95 self.assertTrue(ret in merged.return_code)
96 if len(uid) == 1:
97 self.assertEquals(list(uid)[0], merged.loginuid)
98 else:
99 for uid in uid:
100 self.assertTrue(uid in merged.loginuid)
101
102 def assertMergedMain(self, merged, trans):
103 self.assertMergedBeg(merged, trans[0])
104 self.assertMergedEnd(merged, trans[-1])
105 self.assertMergedCodes(merged, trans)
106
107 def testSimpleInMerge1(self, xstate='Install'):
108 pkg1 = self._pkg_new('foo', state=xstate)
109 pkg2 = self._pkg_new('xbar', version='4')
110 trans = []
111 trans.append(self._trans_new([pkg1]))
112 trans.append(self._trans_new([pkg2]))
113 merged = self._merge_new(trans)
114 self.assertMergedMain(merged, trans)
115 pkgs = merged.trans_data
116 self.assertEquals(len(pkgs), 2)
117 self.assertEquals(pkgs[0], pkg1)
118 self.assertEquals(pkgs[0].state, xstate)
119 self.assertEquals(pkgs[1], pkg2)
120 self.assertEquals(pkgs[1].state, pkg2.state)
121
122 def testSimpleInMerge2(self, xstate='Install'):
123 pkg1 = self._pkg_new('foo', state=xstate)
124 pkg2 = self._pkg_new('bar', version='4')
125 pkg3 = self._pkg_new('xbar', version='6')
126 pkg4 = self._pkg_new('xfoo', version='3')
127 trans = []
128 trans.append(self._trans_new([pkg1, pkg3]))
129 trans.append(self._trans_new([pkg2, pkg4]))
130 merged = self._merge_new(trans)
131 self.assertMergedMain(merged, trans)
132 pkgs = merged.trans_data
133 self.assertEquals(len(pkgs), 4)
134 self.assertEquals(pkgs[0], pkg2)
135 self.assertEquals(pkgs[0].state, pkg2.state)
136 self.assertEquals(pkgs[1], pkg1)
137 self.assertEquals(pkgs[1].state, xstate)
138 self.assertEquals(pkgs[2], pkg3)
139 self.assertEquals(pkgs[2].state, pkg3.state)
140 self.assertEquals(pkgs[3], pkg4)
141 self.assertEquals(pkgs[3].state, pkg4.state)
142
143 def testSimpleUpMerge1(self, xstate='Update'):
144 opkg1 = self._pkg_new('foo', state='Updated')
145 npkg1 = self._pkg_new('foo', version='3', state=xstate)
146 opkg2 = self._pkg_new('bar', version='4', state='Updated')
147 npkg2 = self._pkg_new('bar', version='6', state='Update')
148
149 trans = []
150 trans.append(self._trans_new([opkg1, npkg1]))
151 trans.append(self._trans_new([opkg2, npkg2]))
152 merged = self._merge_new(trans)
153 self.assertMergedMain(merged, trans)
154 pkgs = merged.trans_data
155 self.assertEquals(len(pkgs), 4)
156 self.assertEquals(pkgs[0], opkg2)
157 self.assertEquals(pkgs[0].state, opkg2.state)
158 self.assertEquals(pkgs[1], npkg2)
159 self.assertEquals(pkgs[1].state, npkg2.state)
160 self.assertEquals(pkgs[2], opkg1)
161 self.assertEquals(pkgs[2].state, opkg1.state)
162 self.assertEquals(pkgs[3], npkg1)
163 self.assertEquals(pkgs[3].state, xstate)
164
165 def testSimpleUpMerge2(self, xstate='Update'):
166 opkg1 = self._pkg_new('foo', state='Updated')
167 npkg1 = self._pkg_new('foo', version='3', state=xstate)
168 opkg2 = self._pkg_new('bar', version='4', state='Updated')
169 npkg2 = self._pkg_new('bar', version='6', state='Update')
170 opkg3 = self._pkg_new('foo', version='3', state='Updated')
171 npkg3 = self._pkg_new('foo', version='5', state='Update')
172
173 trans = []
174 trans.append(self._trans_new([opkg2, npkg2, opkg1, npkg1]))
175 trans.append(self._trans_new([opkg3, npkg3]))
176 merged = self._merge_new(trans)
177 self.assertMergedMain(merged, trans)
178 pkgs = merged.trans_data
179 self.assertEquals(len(pkgs), 4)
180 self.assertEquals(pkgs[0], opkg2)
181 self.assertEquals(pkgs[0].state, opkg2.state)
182 self.assertEquals(pkgs[1], npkg2)
183 self.assertEquals(pkgs[1].state, npkg2.state)
184 self.assertEquals(pkgs[2], opkg1)
185 self.assertEquals(pkgs[2].state, opkg1.state)
186 self.assertEquals(pkgs[3], npkg3)
187 self.assertEquals(pkgs[3].state, xstate)
188
189 def testSimpleUpMerge3(self, xstate='Install'):
190 opkg1 = self._pkg_new('foo', state=xstate)
191 opkg2 = self._pkg_new('bar', version='4', state='Updated')
192 npkg2 = self._pkg_new('bar', version='6', state='Update')
193 opkg3 = self._pkg_new('foo', state='Updated')
194 npkg3 = self._pkg_new('foo', version='5', state='Update')
195
196 trans = []
197 trans.append(self._trans_new([opkg2, npkg2, opkg1]))
198 trans.append(self._trans_new([opkg3, npkg3]))
199 merged = self._merge_new(trans)
200 self.assertMergedMain(merged, trans)
201 pkgs = merged.trans_data
202 self.assertEquals(len(pkgs), 3)
203 self.assertEquals(pkgs[0], opkg2)
204 self.assertEquals(pkgs[0].state, opkg2.state)
205 self.assertEquals(pkgs[1], npkg2)
206 self.assertEquals(pkgs[1].state, npkg2.state)
207 self.assertEquals(pkgs[2], npkg3)
208 self.assertEquals(pkgs[2].state, xstate)
209
210 def testSimpleUpMultiMerge1(self, xstate='Install'):
211 opkg1 = self._pkg_new('foo', arch='i586', state=xstate)
212 opkg2 = self._pkg_new('bar', version='4', state='Updated')
213 npkg2 = self._pkg_new('bar', version='6', state='Update')
214 opkg3 = self._pkg_new('foo', arch='i586', state='Updated')
215 npkg3 = self._pkg_new('foo', arch='i686', version='5', state='Update')
216
217 trans = []
218 trans.append(self._trans_new([opkg2, npkg2, opkg1]))
219 trans.append(self._trans_new([opkg3, npkg3]))
220 merged = self._merge_new(trans)
221 self.assertMergedMain(merged, trans)
222 pkgs = merged.trans_data
223 self.assertEquals(len(pkgs), 3)
224 self.assertEquals(pkgs[0], opkg2)
225 self.assertEquals(pkgs[0].state, opkg2.state)
226 self.assertEquals(pkgs[1], npkg2)
227 self.assertEquals(pkgs[1].state, npkg2.state)
228 self.assertEquals(pkgs[2], npkg3)
229 self.assertEquals(pkgs[2].state, xstate)
230
231 def testUpDownMerge1(self, xstate='Update'):
232 opkg1 = self._pkg_new('foo', version='0', state='Updated')
233 npkg1 = self._pkg_new('foo', state=xstate)
234 opkg2 = self._pkg_new('bar', version='4', state='Updated')
235 npkg2 = self._pkg_new('bar', version='6', state='Update')
236 opkg3 = self._pkg_new('foo', state='Updated')
237 npkg3 = self._pkg_new('foo', version='7', state='Update')
238 opkg4 = self._pkg_new('foo', version='7', state='Downgraded')
239 npkg4 = self._pkg_new('foo', version='5', state='Downgrade')
240
241 trans = []
242 trans.append(self._trans_new([opkg2, npkg2, opkg1, npkg1]))
243 trans.append(self._trans_new([opkg3, npkg3]))
244 trans.append(self._trans_new([opkg4, npkg4]))
245 merged = self._merge_new(trans)
246 self.assertMergedMain(merged, trans)
247 pkgs = merged.trans_data
248 self.assertEquals(len(pkgs), 4)
249 self.assertEquals(pkgs[0], opkg2)
250 self.assertEquals(pkgs[1], npkg2)
251 self.assertEquals(pkgs[2], opkg1)
252 self.assertNotEquals(pkgs[3], opkg3)
253 self.assertNotEquals(pkgs[3], npkg3)
254 self.assertNotEquals(pkgs[3], opkg4)
255 self.assertNotEquals(pkgs[3].state, npkg4.state)
256 self.assertEquals(pkgs[3].pkgtup, npkg4.pkgtup)
257 self.assertEquals(pkgs[3].state, xstate)
258
259 def testUpDownMerge2(self, xstate='Install'):
260 opkg1 = self._pkg_new('foo')
261 opkg2 = self._pkg_new('bar', version='4', state='Updated')
262 npkg2 = self._pkg_new('bar', version='6', state='Update')
263 opkg3 = self._pkg_new('foo', state='Updated')
264 npkg3 = self._pkg_new('foo', version='7', state=xstate)
265 opkg4 = self._pkg_new('foo', version='7', state='Downgraded')
266 npkg4 = self._pkg_new('foo', version='5', state='Downgrade')
267
268 trans = []
269 trans.append(self._trans_new([opkg2, npkg2, opkg1]))
270 trans.append(self._trans_new([opkg3, npkg3]))
271 trans.append(self._trans_new([opkg4, npkg4]))
272 merged = self._merge_new(trans)
273 self.assertMergedMain(merged, trans)
274 pkgs = merged.trans_data
275 self.assertEquals(len(pkgs), 3)
276 self.assertEquals(pkgs[0], opkg2)
277 self.assertEquals(pkgs[1], npkg2)
278 self.assertNotEquals(pkgs[2], opkg1)
279 self.assertNotEquals(pkgs[2], opkg3)
280 self.assertNotEquals(pkgs[2], npkg3)
281 self.assertNotEquals(pkgs[2], opkg4)
282 self.assertNotEquals(pkgs[2].state, npkg4.state)
283 self.assertEquals(pkgs[2].pkgtup, npkg4.pkgtup)
284 self.assertEquals(pkgs[2].state, xstate)
285
286 def testUpDownMerge3(self):
287 opkg1 = self._pkg_new('foo')
288 opkg2 = self._pkg_new('bar', version='4', state='Updated')
289 npkg2 = self._pkg_new('bar', version='6', state='Update')
290 opkg3 = self._pkg_new('foo', version='3', state='Updated') # rpmdbv
291 npkg3 = self._pkg_new('foo', version='7', state='Update')
292 opkg4 = self._pkg_new('foo', version='7', state='Downgraded')
293 npkg4 = self._pkg_new('foo', version='3', state='Downgrade')
294
295 trans = []
296 trans.append(self._trans_new([opkg2, npkg2, opkg1]))
297 trans.append(self._trans_new([opkg3, npkg3]))
298 trans.append(self._trans_new([opkg4, npkg4]))
299 merged = self._merge_new(trans)
300 self.assertMergedMain(merged, trans)
301 pkgs = merged.trans_data
302 self.assertEquals(len(pkgs), 4)
303 self.assertEquals(pkgs[0], opkg2)
304 self.assertEquals(pkgs[1], npkg2)
305 self.assertEquals(pkgs[2], opkg1)
306 self.assertEquals(pkgs[2].state, opkg1.state)
307 self.assertNotEquals(pkgs[3], opkg1)
308 self.assertNotEquals(pkgs[3].state, opkg3.state)
309 self.assertNotEquals(pkgs[3], npkg3)
310 self.assertNotEquals(pkgs[3], opkg4)
311 self.assertNotEquals(pkgs[3].state, npkg4.state)
312 self.assertEquals(pkgs[3].pkgtup, npkg4.pkgtup)
313 self.assertEquals(pkgs[3].state, 'Reinstall')
314
315 def testUpDownMerge4(self, xstate='Update'):
316 opkg2 = self._pkg_new('bar', version='4', state='Updated')
317 npkg2 = self._pkg_new('bar', version='6', state='Update')
318 opkg3 = self._pkg_new('foo', version='3', state='Updated')
319 npkg3 = self._pkg_new('foo', version='7', state=xstate)
320 opkg4 = self._pkg_new('foo', version='7', state='Downgraded')
321 npkg4 = self._pkg_new('foo', version='3', state='Downgrade')
322
323 trans = []
324 trans.append(self._trans_new([opkg2, npkg2]))
325 trans.append(self._trans_new([opkg3, npkg3]))
326 trans.append(self._trans_new([opkg4, npkg4]))
327 merged = self._merge_new(trans)
328 self.assertMergedMain(merged, trans)
329 pkgs = merged.trans_data
330 self.assertEquals(len(pkgs), 3)
331 self.assertEquals(pkgs[0], opkg2)
332 self.assertEquals(pkgs[1], npkg2)
333 self.assertNotEquals(pkgs[2].state, opkg3.state)
334 self.assertNotEquals(pkgs[2], npkg3)
335 self.assertNotEquals(pkgs[2], opkg4)
336 self.assertNotEquals(pkgs[2].state, npkg4.state)
337 self.assertEquals(pkgs[2].pkgtup, opkg3.pkgtup)
338 if xstate == 'Obsoleting':
339 self.assertEquals(pkgs[2].state, 'Obsoleting')
340 else:
341 self.assertEquals(pkgs[2].state, 'Reinstall')
342
343 def testUpDownMerge5(self, xstate='Update'):
344 opkg2 = self._pkg_new('bar', version='4', state='Updated')
345 npkg2 = self._pkg_new('bar', version='6', state='Update')
346 opkg3 = self._pkg_new('foo', version='3', state='Updated')
347 npkg3 = self._pkg_new('foo', version='21', state=xstate)
348 opkg4 = self._pkg_new('foo', version='21', state='Downgraded')
349 npkg4 = self._pkg_new('foo', version='19', state='Downgrade')
350 opkg5 = self._pkg_new('foo', version='19', state='Downgraded')
351 npkg5 = self._pkg_new('foo', version='13', state='Downgrade')
352
353 trans = []
354 trans.append(self._trans_new([opkg2, npkg2]))
355 trans.append(self._trans_new([opkg3, npkg3]))
356 trans.append(self._trans_new([opkg4, npkg4]))
357 trans.append(self._trans_new([opkg5, npkg5]))
358 merged = self._merge_new(trans)
359 self.assertMergedMain(merged, trans)
360 pkgs = merged.trans_data
361 self.assertEquals(len(pkgs), 4)
362 self.assertEquals(pkgs[0], opkg2)
363 self.assertEquals(pkgs[0].state, opkg2.state)
364 self.assertEquals(pkgs[1], npkg2)
365 self.assertEquals(pkgs[1].state, npkg2.state)
366 self.assertEquals(pkgs[2], opkg3)
367 self.assertEquals(pkgs[2].state, opkg3.state)
368 self.assertEquals(pkgs[3], npkg5)
369 self.assertEquals(pkgs[3].state, xstate)
370
371 def testDownUpMerge1(self, xstate='Downgrade'):
372 opkg1 = self._pkg_new('foo', version='10', state='Downgraded')
373 npkg1 = self._pkg_new('foo', version='9', state=xstate)
374 opkg2 = self._pkg_new('bar', version='4', state='Updated')
375 npkg2 = self._pkg_new('bar', version='6', state='Update')
376 opkg3 = self._pkg_new('foo', version='7', state='Updated')
377 npkg3 = self._pkg_new('foo', version='8', state='Update')
378 opkg4 = self._pkg_new('foo', version='9', state='Downgraded')
379 npkg4 = self._pkg_new('foo', version='7', state='Downgrade')
380
381 trans = []
382 trans.append(self._trans_new([opkg2, npkg2, opkg1, npkg1]))
383 trans.append(self._trans_new([opkg4, npkg4]))
384 trans.append(self._trans_new([opkg3, npkg3]))
385 merged = self._merge_new(trans)
386 self.assertMergedMain(merged, trans)
387 pkgs = merged.trans_data
388 self.assertEquals(len(pkgs), 4)
389 self.assertEquals(pkgs[0], opkg2)
390 self.assertEquals(pkgs[1], npkg2)
391 self.assertNotEquals(pkgs[2], opkg3)
392 self.assertNotEquals(pkgs[2].state, npkg3.state)
393 self.assertNotEquals(pkgs[2], opkg4)
394 self.assertNotEquals(pkgs[2], npkg4)
395 self.assertEquals(pkgs[2].pkgtup, npkg3.pkgtup)
396 self.assertEquals(pkgs[2].state, xstate)
397 self.assertEquals(pkgs[3], opkg1)
398 self.assertEquals(pkgs[3].state, opkg1.state)
399
400 def testDownUpMerge2(self, xstate='Install'):
401 opkg1 = self._pkg_new('foo', version='7', state=xstate)
402 opkg2 = self._pkg_new('bar', version='4', state='Updated')
403 npkg2 = self._pkg_new('bar', version='6', state='Update')
404 opkg3 = self._pkg_new('foo', version='5', state='Updated')
405 npkg3 = self._pkg_new('foo', version='6', state='Update')
406 opkg4 = self._pkg_new('foo', version='7', state='Downgraded')
407 npkg4 = self._pkg_new('foo', version='5', state='Downgrade')
408
409 trans = []
410 trans.append(self._trans_new([opkg2, npkg2, opkg1]))
411 trans.append(self._trans_new([opkg4, npkg4]))
412 trans.append(self._trans_new([opkg3, npkg3]))
413 merged = self._merge_new(trans)
414 self.assertMergedMain(merged, trans)
415 pkgs = merged.trans_data
416 self.assertEquals(len(pkgs), 3)
417 self.assertEquals(pkgs[0], opkg2)
418 self.assertEquals(pkgs[1], npkg2)
419 self.assertNotEquals(pkgs[2], opkg1)
420 self.assertNotEquals(pkgs[2], opkg3)
421 self.assertNotEquals(pkgs[2], opkg4)
422 self.assertNotEquals(pkgs[2], npkg4)
423 self.assertNotEquals(pkgs[2].state, npkg3.state)
424 self.assertEquals(pkgs[2].pkgtup, npkg3.pkgtup)
425 self.assertEquals(pkgs[2].state, xstate)
426
427 def testDownUpMerge3(self):
428 opkg1 = self._pkg_new('foo')
429 opkg2 = self._pkg_new('bar', version='4', state='Updated')
430 npkg2 = self._pkg_new('bar', version='6', state='Update')
431 opkg3 = self._pkg_new('foo', version='3', state='Updated')
432 npkg3 = self._pkg_new('foo', version='7', state='Update')
433 opkg4 = self._pkg_new('foo', version='7', state='Downgraded') # rpmdbv
434 npkg4 = self._pkg_new('foo', version='3', state='Downgrade')
435
436 trans = []
437 trans.append(self._trans_new([opkg2, npkg2, opkg1]))
438 trans.append(self._trans_new([opkg4, npkg4]))
439 trans.append(self._trans_new([opkg3, npkg3]))
440 merged = self._merge_new(trans)
441 self.assertMergedMain(merged, trans)
442 pkgs = merged.trans_data
443 self.assertEquals(len(pkgs), 4)
444 self.assertEquals(pkgs[0], opkg2)
445 self.assertEquals(pkgs[1], npkg2)
446 self.assertEquals(pkgs[2], opkg1)
447 self.assertEquals(pkgs[2].state, opkg1.state)
448 self.assertNotEquals(pkgs[3], opkg1)
449 self.assertNotEquals(pkgs[3], opkg3)
450 self.assertNotEquals(pkgs[3].state, npkg3.state)
451 self.assertNotEquals(pkgs[3].state, opkg4.state)
452 self.assertNotEquals(pkgs[3], npkg4)
453 self.assertEquals(pkgs[3].pkgtup, npkg3.pkgtup)
454 self.assertEquals(pkgs[3].state, 'Reinstall')
455
456 def testDownUpMerge4(self, xstate='Update'):
457 opkg2 = self._pkg_new('bar', version='4', state='Updated')
458 npkg2 = self._pkg_new('bar', version='6', state='Update')
459 opkg3 = self._pkg_new('foo', version='3', state='Updated')
460 npkg3 = self._pkg_new('foo', version='7', state=xstate)
461 opkg4 = self._pkg_new('foo', version='7', state='Downgraded')
462 npkg4 = self._pkg_new('foo', version='3', state='Downgrade')
463
464 trans = []
465 trans.append(self._trans_new([opkg2, npkg2]))
466 trans.append(self._trans_new([opkg4, npkg4]))
467 trans.append(self._trans_new([opkg3, npkg3]))
468 merged = self._merge_new(trans)
469 self.assertMergedMain(merged, trans)
470 pkgs = merged.trans_data
471 self.assertEquals(len(pkgs), 3)
472 self.assertEquals(pkgs[0], opkg2)
473 self.assertEquals(pkgs[1], npkg2)
474 self.assertNotEquals(pkgs[2], opkg3)
475 self.assertNotEquals(pkgs[2].state, 'Update')
476 self.assertNotEquals(pkgs[2].state, opkg4.state)
477 self.assertNotEquals(pkgs[2], npkg4)
478 self.assertEquals(pkgs[2].pkgtup, npkg3.pkgtup)
479 if xstate == 'Obsoleting':
480 self.assertEquals(pkgs[2].state, 'Obsoleting')
481 else:
482 self.assertEquals(pkgs[2].state, 'Reinstall')
483
484 def testDownUpMerge5(self, xstate='Downgrade'):
485 opkg2 = self._pkg_new('bar', version='4', state='Updated')
486 npkg2 = self._pkg_new('bar', version='6', state='Update')
487 opkg3 = self._pkg_new('foo', version='21', state='Downgraded')
488 npkg3 = self._pkg_new('foo', version='3', state=xstate)
489 opkg4 = self._pkg_new('foo', version='3', state='Updated')
490 npkg4 = self._pkg_new('foo', version='7', state='Update')
491 opkg5 = self._pkg_new('foo', version='7', state='Updated')
492 npkg5 = self._pkg_new('foo', version='13', state='Update')
493
494 trans = []
495 trans.append(self._trans_new([opkg2, npkg2]))
496 trans.append(self._trans_new([opkg3, npkg3]))
497 trans.append(self._trans_new([opkg4, npkg4]))
498 trans.append(self._trans_new([opkg5, npkg5]))
499 merged = self._merge_new(trans)
500 self.assertMergedMain(merged, trans)
501 pkgs = merged.trans_data
502 self.assertEquals(len(pkgs), 4)
503 self.assertEquals(pkgs[0], opkg2)
504 self.assertEquals(pkgs[0].state, opkg2.state)
505 self.assertEquals(pkgs[1], npkg2)
506 self.assertEquals(pkgs[1].state, npkg2.state)
507 self.assertEquals(pkgs[2], npkg5)
508 self.assertEquals(pkgs[2].state, xstate)
509 self.assertEquals(pkgs[3], opkg3)
510 self.assertEquals(pkgs[3].state, opkg3.state)
511
512 def testInRmMerge1(self, xstate='Install', estate='Erase'):
513 npkg1 = self._pkg_new('foo', state=xstate)
514 npkg2 = self._pkg_new('foo', state=estate)
515 npkg3 = self._pkg_new('bar', version='6', state='True-Install')
516
517 trans = []
518 trans.append(self._trans_new([npkg1]))
519 trans.append(self._trans_new([npkg2]))
520 trans.append(self._trans_new([npkg3]))
521 merged = self._merge_new(trans)
522 self.assertMergedMain(merged, trans)
523 pkgs = merged.trans_data
524 self.assertEquals(len(pkgs), 1)
525 self.assertEquals(pkgs[0], npkg3)
526 self.assertEquals(pkgs[0].state, npkg3.state)
527
528 def testInRmMerge2(self, xstate='Install'):
529 self.testInRmMerge1(xstate, 'Obsoleted')
530
531 def testInRmInonlyMerge1(self, xstate='True-Install', estate='Erase'):
532 npkg1 = self._pkg_new('foo', state=xstate)
533 npkg2 = self._pkg_new('foo', version='2', state=xstate)
534 npkg3 = self._pkg_new('foo', version='3', state=xstate)
535 npkg4 = self._pkg_new('foo', state=estate)
536 npkg5 = self._pkg_new('foo', version='2', state=estate)
537 npkg6 = self._pkg_new('foo', version='3', state=estate)
538 npkg9 = self._pkg_new('bar', version='6', state=xstate)
539
540 trans = []
541 trans.append(self._trans_new([npkg1]))
542 trans.append(self._trans_new([npkg2]))
543 trans.append(self._trans_new([npkg3]))
544 trans.append(self._trans_new([npkg4]))
545 trans.append(self._trans_new([npkg5]))
546 trans.append(self._trans_new([npkg6]))
547 trans.append(self._trans_new([npkg9]))
548 merged = self._merge_new(trans)
549 self.assertMergedMain(merged, trans)
550 pkgs = merged.trans_data
551 self.assertEquals(len(pkgs), 1)
552 self.assertEquals(pkgs[0], npkg9)
553 self.assertEquals(pkgs[0].state, npkg9.state)
554
555 def testInRmInonlyMerge2(self, xstate='True-Install'):
556 self.testInRmInonlyMerge1(xstate, 'Obsoleted')
557
558 def testUpRmMerge1(self, xstate='Update'):
559 npkg1 = self._pkg_new('foo')
560 opkg2 = self._pkg_new('bar', version='4', state='Updated')
561 npkg2 = self._pkg_new('bar', version='6', state=xstate)
562 npkg3 = self._pkg_new('bar', version='6', state='Erase')
563
564 trans = []
565 trans.append(self._trans_new([npkg1]))
566 trans.append(self._trans_new([opkg2, npkg2]))
567 trans.append(self._trans_new([npkg3]))
568 merged = self._merge_new(trans)
569 self.assertMergedMain(merged, trans)
570 pkgs = merged.trans_data
571 self.assertEquals(len(pkgs), 2)
572 self.assertEquals(pkgs[0], opkg2)
573 self.assertEquals(pkgs[0].state, npkg3.state)
574 self.assertEquals(pkgs[1], npkg1)
575 self.assertEquals(pkgs[1].state, npkg1.state)
576
577 def testUpRmMerge2(self, xstate='True-Install'):
578 npkg1 = self._pkg_new('foo')
579 npkg4 = self._pkg_new('bar', version='4', state=xstate)
580 opkg2 = self._pkg_new('bar', version='4', state='Updated')
581 npkg2 = self._pkg_new('bar', version='6', state='Update')
582 npkg3 = self._pkg_new('bar', version='6', state='Erase')
583
584 trans = []
585 trans.append(self._trans_new([npkg1, npkg4]))
586 trans.append(self._trans_new([opkg2, npkg2]))
587 trans.append(self._trans_new([npkg3]))
588 merged = self._merge_new(trans)
589 self.assertMergedMain(merged, trans)
590 pkgs = merged.trans_data
591 self.assertEquals(len(pkgs), 1)
592 self.assertEquals(pkgs[0], npkg1)
593 self.assertEquals(pkgs[0].state, npkg1.state)
594
595 def testUpRmMerge3(self, xstate='Update'):
596 npkg1 = self._pkg_new('foo')
597 npkg4 = self._pkg_new('bar', version='4', state='Dep-Install')
598 opkg2 = self._pkg_new('bar', version='4', state='Updated')
599 npkg2 = self._pkg_new('bar', version='6', state=xstate)
600 npkg3 = self._pkg_new('bar', version='6', state='Erase')
601
602 trans = []
603 trans.append(self._trans_new([npkg1, npkg4]))
604 trans.append(self._trans_new([opkg2, npkg2]))
605 trans.append(self._trans_new([npkg3]))
606 merged = self._merge_new(trans)
607 self.assertMergedMain(merged, trans)
608 pkgs = merged.trans_data
609 self.assertEquals(len(pkgs), 1)
610 self.assertEquals(pkgs[0], npkg1)
611 self.assertEquals(pkgs[0].state, npkg1.state)
612
613 def testRmInMerge1(self, xstate='Install', estate='Erase'):
614 npkg1 = self._pkg_new('foo', state=xstate)
615 npkg2 = self._pkg_new('foo', state=estate)
616 npkg3 = self._pkg_new('bar', version='6', state='True-Install')
617
618 trans = []
619 trans.append(self._trans_new([npkg2]))
620 trans.append(self._trans_new([npkg1]))
621 trans.append(self._trans_new([npkg3]))
622 merged = self._merge_new(trans)
623 self.assertMergedMain(merged, trans)
624 pkgs = merged.trans_data
625 self.assertEquals(len(pkgs), 2)
626 self.assertEquals(pkgs[0], npkg3)
627 self.assertEquals(pkgs[0].state, npkg3.state)
628 self.assertEquals(pkgs[1], npkg1)
629 if xstate == 'Obsoleting':
630 self.assertEquals(pkgs[1].state, 'Obsoleting')
631 else:
632 self.assertEquals(pkgs[1].state, 'Reinstall')
633
634 def testRmInMerge2(self, xstate='Install'):
635 self.testRmInMerge1(xstate, 'Obsoleted')
636
637 def testUpRmInlMerge1(self, xstate='Update', ystate='Install',
638 estate='Erase'):
639 npkg1 = self._pkg_new('bar', version='6', state='True-Install')
640 opkg2 = self._pkg_new('foo', version='3', state='Updated')
641 npkg2 = self._pkg_new('foo', version='7', state=xstate)
642 npkg3 = self._pkg_new('foo', version='7', state=estate)
643 npkg4 = self._pkg_new('foo', state=ystate)
644
645 trans = []
646 trans.append(self._trans_new([npkg1]))
647 trans.append(self._trans_new([opkg2, npkg2]))
648 trans.append(self._trans_new([npkg3]))
649 trans.append(self._trans_new([npkg4]))
650 merged = self._merge_new(trans)
651 self.assertMergedMain(merged, trans)
652 pkgs = merged.trans_data
653 self.assertEquals(len(pkgs), 3)
654 self.assertEquals(pkgs[0], npkg1)
655 self.assertEquals(pkgs[0].state, npkg1.state)
656 self.assertEquals(pkgs[1].pkgtup, npkg4.pkgtup)
657 if ystate == 'Obsoleting':
658 self.assertEquals(pkgs[1].state, "Obsoleting")
659 else:
660 self.assertEquals(pkgs[1].state, "Downgrade")
661 self.assertEquals(pkgs[2].pkgtup, opkg2.pkgtup)
662 self.assertEquals(pkgs[2].state, "Downgraded")
663
664 def testUpRmInlMerge2(self, xstate='Update', ystate='Install'):
665 self.testUpRmInlMerge1(xstate, ystate, 'Obsoleted')
666
667 def testUpRmInuMerge1(self, xstate='Update', ystate='Install',
668 estate='Erase'):
669 npkg1 = self._pkg_new('bar', version='6', state='True-Install')
670 opkg2 = self._pkg_new('foo', version='3', state='Updated')
671 npkg2 = self._pkg_new('foo', version='7', state=xstate)
672 npkg3 = self._pkg_new('foo', version='7', state=estate)
673 npkg4 = self._pkg_new('foo', version='4', state=ystate)
674
675 trans = []
676 trans.append(self._trans_new([npkg1]))
677 trans.append(self._trans_new([opkg2, npkg2]))
678 trans.append(self._trans_new([npkg3]))
679 trans.append(self._trans_new([npkg4]))
680 merged = self._merge_new(trans)
681 self.assertMergedMain(merged, trans)
682 pkgs = merged.trans_data
683 self.assertEquals(len(pkgs), 3)
684 self.assertEquals(pkgs[0], npkg1)
685 self.assertEquals(pkgs[0].state, npkg1.state)
686 self.assertEquals(pkgs[1].pkgtup, opkg2.pkgtup)
687 self.assertEquals(pkgs[1].state, "Updated")
688 self.assertEquals(pkgs[2].pkgtup, npkg4.pkgtup)
689 if ystate == 'Obsoleting':
690 self.assertEquals(pkgs[2].state, "Obsoleting")
691 else:
692 self.assertEquals(pkgs[2].state, "Update")
693
694 def testUpRmInuMerge2(self, xstate='Update', ystate='Install'):
695 self.testUpRmInuMerge1(xstate, ystate, 'Obsoleted')
696
697 def testBrokenUpMerge1(self, xstate='Update', estate='Erase'):
698 # This is "broken", so as long as we don't die it's all good.
699 # The below test basically documents what we do.
700 opkg1 = self._pkg_new('foo', version='1', state='Updated')
701 npkg1 = self._pkg_new('foo', version='2', state=xstate)
702 opkg2 = self._pkg_new('foo', version='11', state='Updated')
703 npkg2 = self._pkg_new('foo', version='21', state=xstate)
704 opkg3 = self._pkg_new('foo', version='110', state='Updated')
705 npkg3 = self._pkg_new('foo', version='210', state=xstate)
706 npkg4 = self._pkg_new('foo', version='2', state=estate)
707 npkg5 = self._pkg_new('foo', version='21', state=estate)
708 npkg6 = self._pkg_new('foo', version='210', state=estate)
709
710 trans = []
711 trans.append(self._trans_new([opkg1, npkg1]))
712 trans.append(self._trans_new([opkg2, npkg2]))
713 trans.append(self._trans_new([opkg3, npkg3]))
714 trans.append(self._trans_new([npkg4]))
715 trans.append(self._trans_new([npkg5]))
716 trans.append(self._trans_new([npkg6]))
717 merged = self._merge_new(trans)
718 self.assertMergedMain(merged, trans)
719 pkgs = merged.trans_data
720 self.assertEquals(len(pkgs), 3)
721 self.assertEquals(pkgs[0], opkg1)
722 self.assertEquals(pkgs[0].state, 'Updated')
723 self.assertEquals(pkgs[1], opkg2)
724 self.assertEquals(pkgs[1].state, 'Updated')
725 self.assertEquals(pkgs[2], opkg3)
726 self.assertEquals(pkgs[2].state, estate)
727
728 # Obsoleting is the _painful_ one because it really should be a state, but
729 # an attribute. So "Obsoleting" can be any of:
730 # Install*, Reinstall, Update, Downgrade
731 def testObsSIM1(self):
732 self.testSimpleInMerge1(xstate='Obsoleting')
733 def testObsSIM2(self):
734 self.testSimpleInMerge2(xstate='Obsoleting')
735 def testObsSUM1(self):
736 self.testSimpleUpMerge1(xstate='Obsoleting')
737 def testObsSUM2(self):
738 self.testSimpleUpMerge2(xstate='Obsoleting')
739 def testObsSUM3(self):
740 self.testSimpleUpMerge3(xstate='Obsoleting')
741 def testObsSUMM1(self):
742 self.testSimpleUpMultiMerge1(xstate='Obsoleting')
743 def testObsUDM1(self):
744 self.testUpDownMerge1(xstate='Obsoleting')
745 def testObsUDM2(self):
746 self.testUpDownMerge2(xstate='Obsoleting')
747 def testObsUDM4(self):
748 self.testUpDownMerge4(xstate='Obsoleting')
749 def testObsUDM5(self):
750 self.testUpDownMerge5(xstate='Obsoleting')
751 def testObsDUM1(self):
752 self.testDownUpMerge1(xstate='Obsoleting')
753 def testObsDUM2(self):
754 self.testDownUpMerge2(xstate='Obsoleting')
755 def testObsDUM4(self):
756 self.testDownUpMerge4(xstate='Obsoleting')
757 def testObsDUM5(self):
758 self.testDownUpMerge5(xstate='Obsoleting')
759 def testObsIRM1(self):
760 self.testInRmMerge1(xstate='Obsoleting')
761 def testObsIRM2(self):
762 self.testInRmMerge2(xstate='Obsoleting')
763 def testObsIRMM1(self):
764 self.testInRmInonlyMerge1(xstate='Obsoleting')
765 def testObsIRMM2(self):
766 self.testInRmInonlyMerge1(xstate='Obsoleting')
767 def testObsURM1(self):
768 self.testUpRmMerge1(xstate='Obsoleting')
769 def testObsURM2(self):
770 self.testUpRmMerge2(xstate='Obsoleting')
771 def testObsURM3(self):
772 self.testUpRmMerge3(xstate='Obsoleting')
773 def testObsRIM1(self):
774 self.testRmInMerge1(xstate='Obsoleting')
775 def testObsRIM2(self):
776 self.testRmInMerge2(xstate='Obsoleting')
777 def testObsURIlM1(self):
778 self.testUpRmInlMerge1(xstate='Obsoleting')
779 self.testUpRmInlMerge1(ystate='Obsoleting')
780 self.testUpRmInlMerge1(xstate='Obsoleting', ystate='Obsoleting')
781 def testObsURIlM2(self):
782 self.testUpRmInlMerge2(xstate='Obsoleting')
783 self.testUpRmInlMerge2(ystate='Obsoleting')
784 self.testUpRmInlMerge2(xstate='Obsoleting', ystate='Obsoleting')
785 def testObsURIuM1(self):
786 self.testUpRmInuMerge1(xstate='Obsoleting')
787 self.testUpRmInuMerge1(ystate='Obsoleting')
788 self.testUpRmInuMerge1(xstate='Obsoleting', ystate='Obsoleting')
789 def testObsURIuM2(self):
790 self.testUpRmInuMerge2(xstate='Obsoleting')
791 self.testUpRmInuMerge2(ystate='Obsoleting')
792 self.testUpRmInuMerge2(xstate='Obsoleting', ystate='Obsoleting')
Note: See TracBrowser for help on using the repository browser.