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