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>
71 <project name="server:mail"/>
72 <project name="frox"/>
73 <project name="home:cthiel1"/>
74 <project name="server:php"/>
75 <project name="Apache"/>
76 <project name="server:httpd-trunk"/>
77 <project name="server:isc-dhcp"/>
78 <project name="Subversion"/>
79 <project name="Tidy"/>
80 <project name="validators"/>
82 <project name="home:poeml"/>
83 <project name="Apache:Modules"/>
89 self.out, self.err = runosc('usermeta poeml')
90 self.assertEqual(self.err, '')
91 self.assertEqual(self.out, expect)
94 #####################################################################
97 self.out, self.err = runosc('ls')
98 self.assertEqual(self.err, '')
99 self.assert_('Apache' in self.out)
100 self.assert_(PRJ in self.out)
104 self.out, self.err = runosc('ls Apache')
105 self.assertEqual(self.err, '')
106 self.assert_('apache2' in self.out)
110 self.out, self.err = runosc('ls Apache apache2')
111 self.assertEqual(self.err, '')
112 self.assert_('favicon.ico' in self.out)
114 #####################################################################
116 def testMetaPrj(self):
117 self.out, self.err = runosc('meta Apache')
118 self.assertEqual(self.err, '')
119 self.assert_('<project name="Apache">' in self.out)
122 def testMetaPac(self):
123 self.out, self.err = runosc('meta Apache apache2')
124 self.assertEqual(self.err, '')
125 self.assert_('<package name="apache2" project="Apache">' in self.out)
128 #####################################################################
130 def testPlatforms(self):
131 self.out, self.err = runosc('platforms')
132 self.assertEqual(self.err, '')
133 self.assert_('Factory/standard' in self.out)
134 self.assert_('SUSE:SL-10.1/standard' in self.out)
137 def testPlatformsPac(self):
138 self.out, self.err = runosc('platforms Apache')
139 self.assertEqual(self.err, '')
140 self.assert_('openSUSE_Factory' in self.out)
143 #####################################################################
147 wc1 = os.path.join(BASEDIR, TESTPACDIR)
148 wc2 = os.path.join(BASEDIR, 'otherwc')
150 checkout_and_clean(self)
152 # from wc1, create and check in a file
153 open('foo', 'w').write(dedent("""\
162 # create second working copy, and do a local modification
165 runosc('init %s %s' % (PRJ, PAC))
167 open('foo', 'w').write(dedent("""\
173 self.out, self.err = runosc('st')
174 self.assertEqual(self.err, '')
175 self.assertEqual(self.out, 'M foo\n')
177 # from wc1, commit a change
179 open('foo', 'a').write("""geht aus""")
182 # in wc2, update, and the change should be merged in
184 self.out, self.err = runosc('up')
185 self.assertEqual(self.err, '')
186 self.assertEqual(remove_revid(self.out), 'G foo\nAt revision XX.\n')
188 self.out, self.err = runosc('st')
189 self.assertEqual(self.err, '')
190 self.assertEqual(self.out, 'M foo\n')
192 # successful merge is one thing, but checking the local modification
193 # makes sure that the store copy has been updated to the upstream revision
194 self.out, self.err = runosc('diff')
195 self.assertEqual(self.err, '')
196 expected = dedent("""\
198 ===================================================================
199 --- foo (revision XX)
200 +++ foo (working copy)
208 self.assertEqual(remove_revid(self.out), expected)
212 #####################################################################
215 self.out, self.err = runosc('co %s' % PRJ)
216 self.assertEqual(self.err, '')
217 self.assert_('A %s/%s' %(PRJ, PAC) in self.out)
221 # check out package dir
222 self.out, self.err = runosc('co %s %s' % (PRJ, PAC))
223 self.assertEqual(self.err, '')
224 self.assert_('A %s/%s' %(PRJ, PAC) in self.out)
226 def testCoPacAndDoStuff(self):
227 checkout_and_clean(self)
230 # give an error if it doesn't exist
231 self.out, self.err = runosc('add foo1')
232 self.assertEqual(self.err, '')
233 self.assertEqual(self.out, 'file \'foo1\' does not exist\n')
236 self.out, self.err = runosc('add foo1')
237 self.assertEqual(self.err, '')
238 self.assertEqual(self.out, 'A foo1\n')
240 self.out, self.err = runosc('ci')
241 self.assertEqual(self.err, '')
242 self.assertEqual(self.out, """Sending foo1
243 Transmitting file data .
248 self.out, self.err = runosc('rm foo1')
249 self.assertEqual(self.err, '')
250 self.assertEqual(self.out, 'D foo1\n')
252 self.out, self.err = runosc('ci')
253 self.assertEqual(self.err, '')
254 self.assertEqual(self.out, """Deleting foo1
255 Transmitting file data
261 self.out, self.err = runosc('st')
262 self.assertEqual(self.err, '')
263 self.assertEqual(self.out, '? onlyinwc\n')
266 self.out, self.err = runosc('add foo2')
267 self.out, self.err = runosc('st')
268 self.assertEqual(self.err, '')
269 self.assertEqual(self.out, '? onlyinwc\nA foo2\n')
271 # status with an absolute directory as argument
272 self.out, self.err = runosc('st %s' % os.getcwd())
273 self.assertEqual(self.err, '')
274 self.assertEqual(self.out, '? %s/onlyinwc\nA %s/foo2\n' % (os.getcwd(), os.getcwd()))
276 # status with an absolute directory as argument
277 self.out, self.err = runosc('st %s' % os.getcwd())
278 self.assertEqual(self.err, '')
279 self.assertEqual(self.out, '? %s/onlyinwc\nA %s/foo2\n' % (os.getcwd(), os.getcwd()))
281 # status with a single file as argument
282 reldir = os.path.basename(os.getcwd())
283 self.out, self.err = runosc('st foo2')
284 self.assertEqual(self.err, '')
285 self.assertEqual(self.out, 'A foo2\n')
287 # check in a single argument
288 self.out, self.err = runosc('ci foo2')
289 self.assertEqual(self.err, '')
290 self.assertEqual(self.out, """Sending foo2
291 Transmitting file data .
295 self.out, self.err = runosc('st')
296 self.assertEqual(self.err, '')
297 self.assertEqual(self.out, '? onlyinwc\n')
298 os.unlink('onlyinwc')
304 self.out, self.err = runosc('addremove')
305 self.assertEqual(self.err, '')
306 self.assertEqual(self.out, 'D foo2\nA bar1\n')
307 self.out, self.err = runosc('ci')
308 self.assertEqual(self.err, '')
309 self.assertEqual(self.out, """Sending bar1
311 Transmitting file data .
321 #####################################################################
324 def runosc(argstring):
325 #time.sleep(1) # don't stress the server
327 # we test the osc in this directory, not a system one
328 return runcmd(os.path.join(startdir, 'osc-wrapper.py'), argstring)
331 def runcmd(cmd, argstring):
332 child_stdin, child_stdout, child_stderr = os.popen3(cmd + ' ' + argstring)
333 return child_stdout.read(), child_stderr.read()
337 open(filename, 'w').close();
340 if __name__ == '__main__':
343 startdir = os.getcwd()
344 suite = unittest.makeSuite(TestOsc)
345 unittest.TextTestRunner(verbosity=2).run(suite)