- fix 'status' to work with project directories as arguments, and print proper relati...
[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   <watchlist>
42     <project name="server:mail"/>
43     <project name="frox"/>
44     <project name="home:cthiel1"/>
45     <project name="server:php"/>
46     <project name="Apache"/>
47     <project name="server:httpd-trunk"/>
48     <project name="server:isc-dhcp"/>
49     <project name="Subversion"/>
50     <project name="Tidy"/>
51     <project name="validators"/>
52     <project name="zsh"/>
53   </watchlist>
54 </person>
55
56 """
57
58         self.out, self.err = runosc('id poeml')
59         self.assertEqual(self.err, '')
60         self.assertEqual(self.out, expect)
61
62
63 #####################################################################
64
65     def testLs(self):
66         self.out, self.err = runosc('ls')
67         self.assertEqual(self.err, '')
68         self.assert_('Apache' in self.out)
69         self.assert_(PRJ in self.out)
70
71
72     def testLsPrj(self):
73         self.out, self.err = runosc('ls Apache')
74         self.assertEqual(self.err, '')
75         self.assert_('apache2' in self.out)
76
77
78     def testLsPac(self):
79         self.out, self.err = runosc('ls Apache apache2')
80         self.assertEqual(self.err, '')
81         self.assert_('favicon.ico' in self.out)
82
83 #####################################################################
84
85     def testMetaPrj(self):
86         self.out, self.err = runosc('meta Apache')
87         self.assertEqual(self.err, '')
88         self.assert_('<project name="Apache">' in self.out)
89
90
91     def testMetaPac(self):
92         self.out, self.err = runosc('meta Apache apache2')
93         self.assertEqual(self.err, '')
94         self.assert_('<package name="apache2" project="Apache">' in self.out)
95
96
97 #####################################################################
98
99     def testPlatforms(self):
100         self.out, self.err = runosc('platforms')
101         self.assertEqual(self.err, '')
102         self.assert_('Factory/standard' in self.out)
103         self.assert_('SUSE:SL-10.1/standard' in self.out)
104
105
106     def testPlatformsPac(self):
107         self.out, self.err = runosc('platforms Apache')
108         self.assertEqual(self.err, '')
109         self.assert_('SUSE_Linux_Factory' in self.out)
110
111
112 #####################################################################
113
114     def testCoPrj(self):
115         os.chdir(self.wd)
116         self.out, self.err = runosc('co %s' % PRJ)
117         self.assertEqual(self.err, '')
118         self.assert_('A    %s/%s' %(PRJ, PAC) in self.out)
119
120
121     def testCoPac(self):
122         # check out package dir
123         os.chdir(self.wd)
124         self.out, self.err = runosc('co %s %s' % (PRJ, PAC))
125         self.assertEqual(self.err, '')
126         self.assert_('A    %s/%s' %(PRJ, PAC) in self.out)
127
128         # work in the package dir
129         os.chdir(testpacdir)
130
131
132         # delete all existing files
133         self.upstream_files, err = runosc('ls %s %s' %(PRJ, PAC))
134         self.upstream_files = self.upstream_files.strip().split('\n')
135         if self.upstream_files != ['']:
136             for file in self.upstream_files:
137                 self.out, self.err = runosc('rm %s' % file)
138                 self.assertEqual(self.err, '')
139                 self.assert_('D    %s' % file in self.out)
140             self.out, self.err = runosc('ci')
141
142
143         # check in a file
144         # give an error if it doesn't exist
145         self.out, self.err = runosc('add foo1')
146         self.assertEqual(self.err, '')
147         self.assertEqual(self.out, 'file \'foo1\' does not exist\n')
148
149         touch('foo1')
150         self.out, self.err = runosc('add foo1')
151         self.assertEqual(self.err, '')
152         self.assertEqual(self.out, 'A    foo1\n')
153
154         self.out, self.err = runosc('ci')
155         self.assertEqual(self.err, '')
156         self.assertEqual(self.out, """Sending        foo1
157 Transmitting file data .
158 """)
159
160
161         # delete a file
162         self.out, self.err = runosc('rm foo1')
163         self.assertEqual(self.err, '')
164         self.assertEqual(self.out, 'D    foo1\n')
165
166         self.out, self.err = runosc('ci')
167         self.assertEqual(self.err, '')
168         self.assertEqual(self.out, """Deleting       foo1
169 Transmitting file data 
170 """)
171
172
173         # test 'status'
174         touch('onlyinwc')
175         self.out, self.err = runosc('st')
176         self.assertEqual(self.err, '')
177         self.assertEqual(self.out, '?    onlyinwc\n')
178
179         touch('foo2')
180         self.out, self.err = runosc('add foo2')
181         self.out, self.err = runosc('st')
182         self.assertEqual(self.err, '')
183         self.assertEqual(self.out, 'A    foo2\n?    onlyinwc\n')
184
185         # status with an absolute directory as argument
186         self.out, self.err = runosc('st %s' % os.getcwd())
187         self.assertEqual(self.err, '')
188         self.assertEqual(self.out, 'A    %s/foo2\n?    %s/onlyinwc\n' % (os.getcwd(), os.getcwd()))
189
190         # status with a relative directory as argument
191         reldir = os.path.basename(os.getcwd())
192         self.out, self.err = runosc('st ../%s' % reldir)
193         self.assertEqual(self.err, '')
194         self.assertEqual(self.out, 'A    ../%s/foo2\n?    ../%s/onlyinwc\n' % (reldir, reldir))
195
196         # check in a single argument
197         self.out, self.err = runosc('ci foo2')
198         self.assertEqual(self.err, '')
199         self.assertEqual(self.out, """Sending        foo2
200 Transmitting file data .
201 """)
202
203         # clean up
204         self.out, self.err = runosc('st')
205         self.assertEqual(self.err, '')
206         self.assertEqual(self.out, '?    onlyinwc\n')
207         os.unlink('onlyinwc')
208
209
210         # test 'addremove'
211         touch('bar1')
212         os.unlink('foo2')
213         self.out, self.err = runosc('addremove')
214         self.assertEqual(self.err, '')
215         self.assertEqual(self.out, 'D    foo2\nA    bar1\n')
216         self.out, self.err = runosc('ci')
217         self.assertEqual(self.err, '')
218         self.assertEqual(self.out, """Sending        bar1
219 Deleting       foo2
220 Transmitting file data .
221 """)
222
223
224
225
226
227
228
229
230 #####################################################################
231
232
233 def runosc(argstring):
234     time.sleep(1) # don't stress the server
235     return runcmd(os.path.join(oldpwd, 'osc-wrapper.py'), argstring)
236
237
238 def runcmd(cmd, argstring):
239     child_stdin, child_stdout, child_stderr = os.popen3(cmd + ' ' + argstring)
240     return child_stdout.read(), child_stderr.read()
241
242
243 def touch(filename):
244     open(filename, 'w').close();
245
246
247 if __name__ == '__main__':
248
249     init_basicauth()
250
251     #unittest.main()
252     oldpwd = os.getcwd()
253     suite = unittest.makeSuite(TestOsc)
254     unittest.TextTestRunner(verbosity=2).run(suite)