9 from textwrap import dedent
11 from osc import commandline
16 # here, all tests will happen...
17 BASEDIR = os.path.join(os.getcwd(), 't')
21 TESTPACDIR = os.path.join(PRJ, PAC)
25 return re.sub('revision \d*', 'revision XX', s)
28 def checkout_and_clean(self):
29 """check out the package and delete all files
30 leave behind the empty package dir"""
31 runosc('co %s %s' % (PRJ, PAC))
34 files, err = runosc('ls %s %s' %(PRJ, PAC))
35 files = files.strip().split('\n')
38 runosc('rm %s' % file)
42 class TestOsc(unittest.TestCase):
46 if not os.path.isabs(BASEDIR):
47 sys.exit('BASEDIR must be absolute')
49 shutil.rmtree(BASEDIR, ignore_errors=True)
55 #####################################################################
57 def testUsermeta(self):
60 <email>poeml@suse.de</email>
61 <realname>Dr. Peter Poeml</realname>
63 <project name="server:mail"/>
64 <project name="frox"/>
65 <project name="home:cthiel1"/>
66 <project name="server:php"/>
67 <project name="Apache"/>
68 <project name="server:httpd-trunk"/>
69 <project name="server:isc-dhcp"/>
70 <project name="Subversion"/>
71 <project name="Tidy"/>
72 <project name="validators"/>
74 <project name="Apache:Modules"/>
75 <project name="home:poeml"/>
81 self.out, self.err = runosc('usermeta poeml')
82 self.assertEqual(self.err, '')
83 self.assertEqual(self.out, expect)
86 #####################################################################
89 self.out, self.err = runosc('ls')
90 self.assertEqual(self.err, '')
91 self.assert_('Apache' in self.out)
92 self.assert_(PRJ in self.out)
96 self.out, self.err = runosc('ls Apache')
97 self.assertEqual(self.err, '')
98 self.assert_('apache2' in self.out)
102 self.out, self.err = runosc('ls Apache apache2')
103 self.assertEqual(self.err, '')
104 self.assert_('favicon.ico' in self.out)
106 #####################################################################
108 def testMetaPrj(self):
109 self.out, self.err = runosc('meta Apache')
110 self.assertEqual(self.err, '')
111 self.assert_('<project name="Apache">' in self.out)
114 def testMetaPac(self):
115 self.out, self.err = runosc('meta Apache apache2')
116 self.assertEqual(self.err, '')
117 self.assert_('<package project="Apache" name="apache2">' in self.out)
120 #####################################################################
122 def testPlatforms(self):
123 self.out, self.err = runosc('platforms')
124 self.assertEqual(self.err, '')
125 self.assert_('Factory/standard' in self.out)
126 self.assert_('SUSE:SL-10.1/standard' in self.out)
129 def testPlatformsPac(self):
130 self.out, self.err = runosc('platforms Apache')
131 self.assertEqual(self.err, '')
132 self.assert_('openSUSE_Factory' in self.out)
135 #####################################################################
139 wc1 = os.path.join(BASEDIR, TESTPACDIR)
140 wc2 = os.path.join(BASEDIR, 'otherwc')
142 checkout_and_clean(self)
144 # from wc1, create and check in a file
145 open('foo', 'w').write(dedent("""\
154 # create second working copy, and do a local modification
157 runosc('init %s %s' % (PRJ, PAC))
159 open('foo', 'w').write(dedent("""\
165 self.out, self.err = runosc('st')
166 self.assertEqual(self.err, '')
167 self.assertEqual(self.out, 'M foo\n')
169 # from wc1, commit a change
171 open('foo', 'a').write("""geht aus""")
174 # in wc2, update, and the change should be merged in
176 self.out, self.err = runosc('up')
177 self.assertEqual(self.err, '')
178 self.assertEqual(remove_revid(self.out), 'G foo\nAt revision XX.\n')
180 self.out, self.err = runosc('st')
181 self.assertEqual(self.err, '')
182 self.assertEqual(self.out, 'M foo\n')
184 # successful merge is one thing, but checking the local modification
185 # makes sure that the store copy has been updated to the upstream revision
186 self.out, self.err = runosc('diff')
187 self.assertEqual(self.err, '')
188 expected = dedent("""\
190 ===================================================================
191 --- foo (revision XX)
192 +++ foo (working copy)
200 self.assertEqual(remove_revid(self.out), expected)
204 #####################################################################
206 def testUpdateLocalMod(self):
208 wc1 = os.path.join(BASEDIR, TESTPACDIR)
209 wc2 = os.path.join(BASEDIR, 'otherwc')
211 checkout_and_clean(self)
213 # in wc1, create and check in two files
220 # create second working copy, and do a local modification
223 runosc('init %s %s' % (PRJ, PAC))
225 open('f2', 'w').write('foo')
227 # from wc1, delete the files
233 # f1 should be deleted
236 self.out, self.err = runosc('up')
237 self.assertEqual(self.err, '')
238 self.assertEqual(remove_revid(self.out), 'D f1\nD f2\nAt revision XX.\n')
240 self.out, self.err = runosc('st')
241 self.assertEqual(self.err, '')
242 self.assertEqual(self.out, '? f2\n')
245 #####################################################################
248 self.out, self.err = runosc('co %s' % PRJ)
249 self.assertEqual(self.err, '')
250 self.assert_('A %s/%s' %(PRJ, PAC) in self.out)
254 # check out package dir
255 self.out, self.err = runosc('co %s %s' % (PRJ, PAC))
256 self.assertEqual(self.err, '')
257 self.assert_('A %s/%s' %(PRJ, PAC) in self.out)
259 def testCoPacAndDoStuff(self):
260 checkout_and_clean(self)
263 # give an error if it doesn't exist
264 self.out, self.err = runosc('add foo1')
265 self.assertEqual(self.err, 'file \'foo1\' does not exist\n')
266 self.assertEqual(self.out, '')
269 self.out, self.err = runosc('add foo1')
270 self.assertEqual(self.err, '')
271 self.assertEqual(self.out, 'A foo1\n')
273 self.out, self.err = runosc('ci')
274 self.assertEqual(self.err, '')
275 self.assertEqual(self.out, """Sending foo1
276 Transmitting file data .
281 self.out, self.err = runosc('rm foo1')
282 self.assertEqual(self.err, '')
283 self.assertEqual(self.out, 'D foo1\n')
285 self.out, self.err = runosc('ci')
286 self.assertEqual(self.err, '')
287 self.assertEqual(self.out, """Deleting foo1
288 Transmitting file data
294 self.out, self.err = runosc('st')
295 self.assertEqual(self.err, '')
296 self.assertEqual(self.out, '? onlyinwc\n')
299 self.out, self.err = runosc('add foo2')
300 self.out, self.err = runosc('st')
301 self.assertEqual(self.err, '')
302 self.assertEqual(self.out, '? onlyinwc\nA foo2\n')
304 # status with an absolute directory as argument
305 self.out, self.err = runosc('st %s' % os.getcwd())
306 self.assertEqual(self.err, '')
307 self.assertEqual(self.out, '? %s/onlyinwc\nA %s/foo2\n' % (os.getcwd(), os.getcwd()))
309 # status with an absolute directory as argument
310 self.out, self.err = runosc('st %s' % os.getcwd())
311 self.assertEqual(self.err, '')
312 self.assertEqual(self.out, '? %s/onlyinwc\nA %s/foo2\n' % (os.getcwd(), os.getcwd()))
314 # status with a single file as argument
315 reldir = os.path.basename(os.getcwd())
316 self.out, self.err = runosc('st foo2')
317 self.assertEqual(self.err, '')
318 self.assertEqual(self.out, 'A foo2\n')
320 # check in a single argument
321 self.out, self.err = runosc('ci foo2')
322 self.assertEqual(self.err, '')
323 self.assertEqual(self.out, """Sending foo2
324 Transmitting file data .
328 self.out, self.err = runosc('st')
329 self.assertEqual(self.err, '')
330 self.assertEqual(self.out, '? onlyinwc\n')
331 os.unlink('onlyinwc')
337 self.out, self.err = runosc('addremove')
338 self.assertEqual(self.err, '')
339 self.assertEqual(self.out, 'D foo2\nA bar1\n')
340 self.out, self.err = runosc('ci')
341 self.assertEqual(self.err, '')
342 self.assertEqual(self.out, """Sending bar1
344 Transmitting file data .
354 #####################################################################
357 def runosc(argstring):
358 #time.sleep(1) # don't stress the server
360 # we test the osc in this directory, not a system one
361 return runcmd(os.path.join(startdir, 'osc-wrapper.py'), argstring)
364 def runcmd(cmd, argstring):
365 child_stdin, child_stdout, child_stderr = os.popen3(cmd + ' ' + argstring)
366 return child_stdout.read(), child_stderr.read()
370 open(filename, 'w').close();
373 if __name__ == '__main__':
376 startdir = os.getcwd()
377 suite = unittest.makeSuite(TestOsc)
378 unittest.TextTestRunner(verbosity=2).run(suite)