add testsuite
[opensuse:osc.git] / tests.py
1 #!/usr/bin/python
2
3 import os, sys, time
4 import unittest
5 import shutil
6
7 from osc.core import init_basicauth
8 from osc import commandline
9
10 PRJ = 'home:poeml'
11 PAC = 'test'
12 testpacdir = os.path.join(PRJ, PAC)
13 testdir = 't'
14
15 class TestOsc(unittest.TestCase):
16     
17     def setUp(self):
18         os.chdir(oldpwd)
19         self.wd = testdir
20         shutil.rmtree(self.wd, ignore_errors=True)
21         os.mkdir(self.wd)
22
23         pass
24
25
26 #####################################################################
27
28     def testId(self):
29         expect = """<person>
30   <login>poeml</login>
31   <email>poeml@suse.de</email>
32   <realname>Dr. Peter Peoml</realname>
33   <source_backend>
34     <host></host>
35     <port></port>
36   </source_backend>
37   <rpm_backend>
38     <host></host>
39     <port></port>
40   </rpm_backend>
41 </person>
42
43 """
44
45         self.out, self.err = runosc('id poeml')
46         self.assertEqual(self.err, '')
47         self.assertEqual(self.out, expect)
48
49
50 #####################################################################
51
52     def testLs(self):
53         self.out, self.err = runosc('ls')
54         self.assertEqual(self.err, '')
55         self.assert_('Apache' in self.out)
56         self.assert_(PRJ in self.out)
57
58
59     def testLsPrj(self):
60         self.out, self.err = runosc('ls Apache')
61         self.assertEqual(self.err, '')
62         self.assert_('apache2' in self.out)
63
64
65     def testLsPac(self):
66         self.out, self.err = runosc('ls Apache apache2')
67         self.assertEqual(self.err, '')
68         self.assert_('favicon.ico' in self.out)
69
70 #####################################################################
71
72     def testMetaPrj(self):
73         self.out, self.err = runosc('meta Apache')
74         self.assertEqual(self.err, '')
75         self.assert_('<project name="Apache">' in self.out)
76
77
78     def testMetaPac(self):
79         self.out, self.err = runosc('meta Apache apache2')
80         self.assertEqual(self.err, '')
81         self.assert_('<package name="apache2">' in self.out)
82
83
84 #####################################################################
85
86     def testPlatforms(self):
87         self.out, self.err = runosc('platforms')
88         self.assertEqual(self.err, '')
89         self.assert_('Factory/standard' in self.out)
90         self.assert_('SUSE:SL-10.1/standard' in self.out)
91
92
93     def testPlatformsPac(self):
94         self.out, self.err = runosc('platforms Apache')
95         self.assertEqual(self.err, '')
96         self.assert_('SUSE_Linux_Factory' in self.out)
97
98
99 #####################################################################
100
101     def testCoPrj(self):
102         os.chdir(self.wd)
103         self.out, self.err = runosc('co %s' % PRJ)
104         self.assertEqual(self.err, '')
105         self.assert_('A    %s/%s' %(PRJ, PAC) in self.out)
106
107
108     def testCoPac(self):
109         # check out package dir
110         os.chdir(self.wd)
111         self.out, self.err = runosc('co %s %s' % (PRJ, PAC))
112         self.assertEqual(self.err, '')
113         self.assert_('A    %s/%s' %(PRJ, PAC) in self.out)
114
115         # work in the package dir
116         os.chdir(testpacdir)
117
118
119         # delete all existing files
120         self.upstream_files, err = runosc('ls %s %s' %(PRJ, PAC))
121         self.upstream_files = self.upstream_files.strip().split('\n')
122         if self.upstream_files != ['']:
123             for file in self.upstream_files:
124                 self.out, self.err = runosc('rm %s' % file)
125                 self.assertEqual(self.err, '')
126                 self.assert_('D    %s' % file in self.out)
127             self.out, self.err = runosc('ci')
128
129
130         # check in a file
131         # give an error if it doesn't exist
132         self.out, self.err = runosc('add foo1')
133         self.assertEqual(self.err, '')
134         self.assertEqual(self.out, 'file \'foo1\' does not exist\n')
135
136         touch('foo1')
137         self.out, self.err = runosc('add foo1')
138         self.assertEqual(self.err, '')
139         self.assertEqual(self.out, 'A    foo1\n')
140
141         self.out, self.err = runosc('ci')
142         self.assertEqual(self.err, '')
143         self.assertEqual(self.out, """Sending        foo1
144 Transmitting file data .
145 """)
146
147
148         # delete a file
149         self.out, self.err = runosc('rm foo1')
150         self.assertEqual(self.err, '')
151         self.assertEqual(self.out, 'D    foo1\n')
152
153         self.out, self.err = runosc('ci')
154         self.assertEqual(self.err, '')
155         self.assertEqual(self.out, """Deleting       foo1
156 Transmitting file data 
157 """)
158
159
160         # test 'status'
161         touch('onlyinwc')
162         self.out, self.err = runosc('st')
163         self.assertEqual(self.err, '')
164         self.assertEqual(self.out, '?    onlyinwc\n')
165
166         touch('foo2')
167         self.out, self.err = runosc('add foo2')
168         self.out, self.err = runosc('st')
169         self.assertEqual(self.err, '')
170         self.assertEqual(self.out, '?    onlyinwc\nA    foo2\n')
171
172         # status with directory as argument
173         self.out, self.err = runosc('st %s' % os.getcwd())
174         self.assertEqual(self.err, '')
175         self.assertEqual(self.out, '?    onlyinwc\nA    foo2\n')
176
177         # check in a single argument
178         self.out, self.err = runosc('ci foo2')
179         self.assertEqual(self.err, '')
180         self.assertEqual(self.out, """Sending        foo2
181 Transmitting file data .
182 """)
183
184         # clean up
185         self.out, self.err = runosc('st')
186         self.assertEqual(self.err, '')
187         self.assertEqual(self.out, '?    onlyinwc\n')
188         os.unlink('onlyinwc')
189
190
191         # test 'addremove'
192         touch('bar1')
193         os.unlink('foo2')
194         self.out, self.err = runosc('addremove')
195         self.assertEqual(self.err, '')
196         self.assertEqual(self.out, 'D    foo2\nA    bar1\n')
197         self.out, self.err = runosc('ci')
198         self.assertEqual(self.err, '')
199         self.assertEqual(self.out, """Sending        bar1
200 Deleting       foo2
201 Transmitting file data .
202 """)
203
204
205
206
207
208
209
210
211 #####################################################################
212
213
214 def runosc(argstring):
215     time.sleep(1) # don't stress the server
216     return runcmd(os.path.join(oldpwd, 'osc-wrapper.py'), argstring)
217
218
219 def runcmd(cmd, argstring):
220     child_stdin, child_stdout, child_stderr = os.popen3(cmd + ' ' + argstring)
221     return child_stdout.read(), child_stderr.read()
222
223
224 def touch(filename):
225     open(filename, 'w').close();
226
227
228 if __name__ == '__main__':
229
230     init_basicauth()
231
232     #unittest.main()
233     oldpwd = os.getcwd()
234     suite = unittest.makeSuite(TestOsc)
235     unittest.TextTestRunner(verbosity=2).run(suite)