source: yum/trunk/test/transactiontests.py

Last change on this file was 2, checked in by Yuri Dario, 15 years ago

Initial import for vendor code.

  • Property svn:eol-style set to native
File size: 6.8 KB
Line 
1from yum.constants import *
2import unittest
3import settestpath
4from testbase import *
5
6from yum.transactioninfo import TransactionData
7
8class TransactionDataTests(unittest.TestCase):
9 ''' Test cases for yum.transactioninfo.TransactionData'''
10
11 def setUp(self):
12 self.tsInfo = TransactionData()
13 self.rpmdb = packageSack.PackageSack()
14 self.pkgSack = packageSack.PackageSack()
15 self.tsInfo.setDatabases(self.rpmdb, self.pkgSack)
16 self.foo1 = FakePackage('foo', '1', '0', '0', 'noarch')
17 self.foo2 = FakePackage('foo', '2', '0', '0', 'i386')
18 self.bar1 = FakePackage('bar', '1', '0', '0', 'i386')
19 self.bar2 = FakePackage('bar', '2', '0', '0', 'noarch')
20 self.foogui1 = FakePackage('foogui', '1', '0', '0', 'x86_64')
21 self.foogui2 = FakePackage('foogui', '2', '0', '0', 'noarch')
22
23
24 def testLenght(self):
25 ''' test __len__ method '''
26 self.tsInfo.addInstall(self.foo1)
27 self.tsInfo.addUpdate(self.foogui2,self.foogui1)
28 self.dumpTsInfo()
29 self.assertEqual(len(self.tsInfo),3)
30
31 def testAddTheSameTwice(self):
32 ''' test add the same twice '''
33 txmbr1 = self.tsInfo.addInstall(self.foo1)
34 txmbr2 = self.tsInfo.addInstall(self.foo2)
35 txmbr3 = self.tsInfo.addInstall(self.foo1)
36 self.dumpTsInfo()
37 self.assertEqual(len(self.tsInfo),2) # only 2 members
38 # self.assertEquals(txmbr3, txmbr1) # 1 & 3 should be equal
39
40 def testExists(self):
41 ''' test exists method '''
42 self.tsInfo.addInstall(self.foo1)
43 self.tsInfo.addInstall(self.bar1)
44 self.dumpTsInfo()
45 self.assertEqual(self.tsInfo.exists(self.foo1.pkgtup),1)
46 self.assertEqual(self.tsInfo.exists(self.bar1.pkgtup),1)
47 self.assertEqual(self.tsInfo.exists(self.foogui1.pkgtup),0)
48
49 def testRemove(self):
50 ''' test remove from transaction '''
51 txmbr = self.tsInfo.addInstall(self.foo1)
52 self.tsInfo.addInstall(self.bar2)
53 self.tsInfo.remove(self.bar2.pkgtup)
54 self.dumpTsInfo()
55 self.assertResult([txmbr])
56
57 def testAddToTransaction(self):
58 ''' test adding basic adding to Transaction '''
59 txmbr1 = self.tsInfo.addInstall(self.foo1)
60 txmbr2 = self.tsInfo.addUpdate(self.foogui2,self.foogui1)
61 txmbr3 = self.tsInfo.getMembers(self.foogui1.pkgtup)[0]
62 self.dumpTsInfo()
63 self.assertResult([txmbr1,txmbr2,txmbr3])
64
65 def testGetFromTransaction(self):
66 ''' test getting from Transaction '''
67 self.tsInfo.addInstall(self.foo2)
68 self.tsInfo.addObsoleting(self.bar2,self.bar1)
69 self.tsInfo.addUpdate(self.foogui2,self.foogui1)
70 self.tsInfo.addErase(self.foo1)
71 self.dumpTsInfo()
72 # get install member foo-2.0 - u
73 txmbr = self.tsInfo.getMembers(self.foo2.pkgtup)[0]
74 self.assertEqual(txmbr.po, self.foo2)
75 self.assertEqual(txmbr.current_state, TS_AVAILABLE)
76 self.assertEqual(txmbr.output_state, TS_INSTALL)
77 self.assertEqual(txmbr.po.state, TS_INSTALL)
78 self.assertEqual(txmbr.ts_state, 'u')
79 # get erase member foo-1.0 - e
80 txmbr = self.tsInfo.getMembers(self.foo1.pkgtup)[0]
81 self.assertEqual(txmbr.po, self.foo1)
82 self.assertEqual(txmbr.current_state, TS_INSTALL)
83 self.assertEqual(txmbr.output_state, TS_ERASE)
84 self.assertEqual(txmbr.po.state, TS_INSTALL)
85 self.assertEqual(txmbr.ts_state, 'e')
86 # get Obsoleting
87 txmbr = self.tsInfo.getMembers(self.bar2.pkgtup)[0]
88 self.assertEqual(txmbr.po, self.bar2)
89 self.assertEqual(txmbr.current_state, TS_AVAILABLE)
90 self.assertEqual(txmbr.output_state, TS_OBSOLETING)
91 self.assertEqual(txmbr.po.state, TS_OBSOLETING)
92 self.assertEqual(txmbr.ts_state, 'u')
93 self.assertEqual(txmbr.relatedto, [(self.bar1, 'obsoletes')])
94 self.assertEqual(txmbr.obsoletes, [self.bar1])
95 # get update member
96 txmbr = self.tsInfo.getMembers(self.foogui2.pkgtup)[0]
97 self.assertEqual(txmbr.po, self.foogui2)
98 self.assertEqual(txmbr.current_state, TS_AVAILABLE)
99 self.assertEqual(txmbr.output_state, TS_UPDATE)
100 self.assertEqual(txmbr.po.state, TS_UPDATE)
101 self.assertEqual(txmbr.ts_state, 'u')
102 self.assertEqual(txmbr.relatedto, [(self.foogui1, 'updates')])
103 self.assertEqual(txmbr.updates, [self.foogui1])
104
105
106 def testAddUpdatesAndObsoletes(self):
107 ''' test addUpdated,addObsoleted'''
108 txmbr1 = self.tsInfo.addUpdated(self.foo1,self.foo2)
109 txmbr2 = self.tsInfo.addObsoleted(self.bar1,self.bar2)
110 self.dumpTsInfo()
111 self.assertResult([txmbr1,txmbr2])
112 txmbr = self.tsInfo.getMembersWithState(output_states=[TS_UPDATED])[0]
113 self.assertEqual(txmbr.po, self.foo1)
114 txmbr = self.tsInfo.getMembersWithState(output_states=[TS_OBSOLETED])[0]
115 self.assertEqual(txmbr.po, self.bar1)
116
117
118 def testMatchNaevr(self):
119 ''' test MatchNaevr '''
120 self.tsInfo.addInstall(self.foo1)
121 self.tsInfo.addObsoleting(self.bar2,self.bar1)
122 self.tsInfo.addUpdate(self.foogui2,self.foogui1)
123 self.dumpTsInfo()
124 res = self.tsInfo.matchNaevr( name='foogui')
125 self.assertEqual(len(res),2) # foogui-1.0, foogui-2.0
126 res = self.tsInfo.matchNaevr( arch='noarch')
127 self.assertEqual(len(res),3) # foo-1.0, bar-2.0, foogui-2.0
128 res = self.tsInfo.matchNaevr( epoch='0',ver='1', rel='0')
129 self.assertEqual(len(res),2) # foo-1.0, foogui-1.0
130
131 def testgetMembersWithState(self):
132 ''' test getMembersWithState'''
133 self.tsInfo.addInstall(self.foo1)
134 self.tsInfo.addObsoleting(self.bar2,self.bar1)
135 self.tsInfo.addUpdate(self.foogui2,self.foogui1)
136 self.dumpTsInfo()
137 res = self.tsInfo.getMembersWithState(output_states=[TS_INSTALL,TS_UPDATE])
138 self.assertEqual(len(res),2) # foo-1.0, bar-2.0
139 res = self.tsInfo.getMembersWithState(output_states=[TS_UPDATED])
140 self.assertEqual(len(res),1) # bar-1.0
141
142 def assertResult(self, txmbrs):
143 """Check if self.tsInfo contains the given txmbr.
144 """
145 errors = ["Problems with members in txInfo \n\n"]
146 txmbrs = set(txmbrs)
147 found = set(self.tsInfo.getMembers())
148
149 # Look for needed members
150 for txmbr in txmbrs:
151 if not self.tsInfo.exists(txmbr.po.pkgtup):
152 errors.append(" %s was not found in tsInfo!\n" % txmbr)
153
154 for txmbr in found - txmbrs:
155 errors.append("%s should not be in tsInfo\n" % txmbr)
156
157 if len(errors) > 1:
158 errors.append("\nTest case was:\n\n")
159 errors.extend(inspect.getsource(inspect.stack()[1][0].f_code))
160 errors.append("\n")
161 self.fail("".join(errors))
162
163 def dumpTsInfo(self):
164 for txmbr in self.tsInfo:
165 print txmbr
Note: See TracBrowser for help on using the repository browser.