source: yum/trunk/test/misc-tests.py@ 516

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

yum: update trunk to 3.4.3.

  • Property svn:eol-style set to native
File size: 4.8 KB
Line 
1import unittest
2import logging
3import sys
4from testbase import *
5
6class MiscTests(DepsolveTests):
7 ''' Test cases to test skip-broken'''
8
9 def setUp(self):
10 DepsolveTests.setUp(self)
11 self.xrepo = FakeRepo("TestRepository", self.xsack)
12 setup_logging()
13
14 def repoPackage(self, name, version='1', release='0', epoch='0', arch='noarch'):
15 po = FakePackage(name, version, release, epoch, arch, repo=self.xrepo)
16 self.xsack.addPackage(po)
17 return po
18
19 def instPackage(self, name, version='1', release='0', epoch='0', arch='noarch'):
20 po = FakePackage(name, version, release, epoch, arch, repo=self.repo)
21 self.rpmdb.addPackage(po)
22 return po
23
24
25 def testLibBCD(self):
26 '''
27 The libABC test
28 http://svn.labix.org/smart/trunk/README
29 (Case Studies - Case 2)
30
31 The issue is, a package named `A` requires package `BCD` explicitly, and
32 RPM detects implicit dependencies between `A` and `libB`, `libC`, and `libD`.
33 Package `BCD` provides `libB`, `libC`, and `libD`, but additionally there
34 is a package `B` providing `libB`, a package `C` providing `libC`, and
35 a package `D` providing `libD`.
36
37 In other words, there's a package `A` which requires four different symbols,
38 and one of these symbols is provided by a single package `BCD`, which happens
39 to provide all symbols needed by `A`. There are also packages `B`, `C`, and `D`,
40 that provide some of the symbols required by `A`, but can't satisfy all
41 dependencies without `BCD`.
42
43 The expected behavior for an operation asking to install `A` is obviously
44 selecting `BCD` to satisfy `A`'s dependencies
45
46 This fails in yum because, yum selects the packages with the shortest name
47 if multiple packages provides the same requirements
48
49 '''
50 A = self.repoPackage('A', '1',arch='i386')
51 A.addRequires('LibB')
52 A.addRequires('LibC')
53 A.addRequires('LibD')
54 A.addRequires('BCD')
55 BCD = self.repoPackage('BCD', '1',arch='i386')
56 BCD.addProvides('LibB')
57 BCD.addProvides('LibC')
58 BCD.addProvides('LibD')
59 B = self.repoPackage('B', '1',arch='i386')
60 B.addProvides('LibB')
61 C = self.repoPackage('C', '1',arch='i386')
62 C.addProvides('LibC')
63 D = self.repoPackage('D', '1',arch='i386')
64 D.addProvides('LibD')
65 self.tsInfo.addInstall(A)
66 self.assertEquals('ok', *self.resolveCode(skip=False))
67 # This one is disabled because, we no it fails, but we dont want it to bail out in the each testcase run
68 # Just enable it to do the test
69 # self.assertResult([A,BCD])
70
71 def testLibBCD2(self):
72 '''
73 Same as above, but in this cases it is ok, because the BCD names is shorter than LibB,LibC and LibD
74 '''
75 A = self.repoPackage('A', '1',arch='i386')
76 A.addRequires('LibB')
77 A.addRequires('LibC')
78 A.addRequires('LibD')
79 A.addRequires('BCD')
80 BCD = self.repoPackage('BCD', '1',arch='i386')
81 BCD.addProvides('LibB')
82 BCD.addProvides('LibC')
83 BCD.addProvides('LibD')
84 B = self.repoPackage('LibB', '1',arch='i386')
85 B.addProvides('LibB')
86 C = self.repoPackage('LibC', '1',arch='i386')
87 C.addProvides('LibC')
88 D = self.repoPackage('LibD', '1',arch='i386')
89 D.addProvides('LibD')
90 self.tsInfo.addInstall(A)
91 self.assertEquals('ok', *self.resolveCode(skip=False))
92 self.assertResult([A,BCD])
93
94 def resolveCode(self,skip = False):
95 solver = YumBase()
96 solver.save_ts = save_ts
97 solver.conf = FakeConf()
98 solver.arch.setup_arch('x86_64')
99 solver.conf.skip_broken = skip
100 solver.tsInfo = solver._tsInfo = self.tsInfo
101 solver.rpmdb = self.rpmdb
102 solver.pkgSack = self.xsack
103
104 for po in self.rpmdb:
105 po.repoid = po.repo.id = "installed"
106 for po in self.xsack:
107 po.repoid = po.repo.id = "TestRepository"
108 for txmbr in solver.tsInfo:
109 if txmbr.ts_state in ('u', 'i'):
110 txmbr.po.repoid = txmbr.po.repo.id = "TestRepository"
111 else:
112 txmbr.po.repoid = txmbr.po.repo.id = "installed"
113
114 res, msg = solver.buildTransaction()
115 return self.res[res], msg
116
117def setup_logging():
118 logging.basicConfig()
119 plainformatter = logging.Formatter("%(message)s")
120 console_stdout = logging.StreamHandler(sys.stdout)
121 console_stdout.setFormatter(plainformatter)
122 verbose = logging.getLogger("yum.verbose")
123 verbose.propagate = False
124 verbose.addHandler(console_stdout)
125 verbose.setLevel(2)
126
Note: See TracBrowser for help on using the repository browser.