Code

svn repository setup
[roundup.git] / test / test_xmlrpc.py
1 #
2 # Copyright (C) 2007 Stefan Seefeld
3 # All rights reserved.
4 # For license terms see the file COPYING.txt.
5 #
7 import unittest, os, shutil, errno, sys, difflib, cgi, re
9 from roundup.cgi.exceptions import *
10 from roundup import init, instance, password, hyperdb, date
11 from roundup.xmlrpc import RoundupServer
12 from roundup.backends import list_backends
14 import db_test_base
16 NEEDS_INSTANCE = 1
18 class TestCase(unittest.TestCase):
20     backend = None
22     def setUp(self):
23         self.dirname = '_test_xmlrpc'
24         # set up and open a tracker
25         self.instance = db_test_base.setupTracker(self.dirname, self.backend)
27         # open the database
28         self.db = self.instance.open('admin')
29         self.joeid = 'user' + self.db.user.create(username='joe',
30             password=password.Password('random'), address='random@home.org',
31             realname='Joe Random', roles='User')
33         self.db.commit()
34         self.db.close()
36         self.server = RoundupServer(self.dirname)
38     def tearDown(self):
39         try:
40             shutil.rmtree(self.dirname)
41         except OSError, error:
42             if error.errno not in (errno.ENOENT, errno.ESRCH): raise
44     def testAccess(self):
45         # Retrieve all three users.
46         results = self.server.list('joe', 'random', 'user', 'id')
47         self.assertEqual(len(results), 3)
49         # Obtain data for 'joe'.
50         results = self.server.display('joe', 'random', self.joeid)
51         self.assertEqual(results['username'], 'joe')
52         self.assertEqual(results['realname'], 'Joe Random')
54     def testChange(self):
55         # Reset joe's 'realname'.
56         results = self.server.set('joe', 'random', self.joeid,
57             'realname=Joe Doe')
58         results = self.server.display('joe', 'random', self.joeid,
59             'realname')
60         self.assertEqual(results['realname'], 'Joe Doe')
62         # check we can't change admin's details
63         self.assertRaises(Unauthorised, self.server.set, 'joe', 'random',
64             'user1', 'realname=Joe Doe')
66     def testCreate(self):
67         results = self.server.create('joe', 'random', 'issue', 'title=foo')
68         issueid = 'issue' + results
69         results = self.server.display('joe', 'random', issueid, 'title')
70         self.assertEqual(results['title'], 'foo')
72     def testFileCreate(self):
73         results = self.server.create('joe', 'random', 'file', 'content=hello\r\nthere')
74         fileid = 'file' + results
75         results = self.server.display('joe', 'random', fileid, 'content')
76         self.assertEqual(results['content'], 'hello\r\nthere')
78     def testAuthUnknown(self):
79         # Unknown user (caught in XMLRPC frontend).
80         self.assertRaises(Unauthorised, self.server.list,
81             'nobody', 'nobody', 'user', 'id')
83     def testAuthDeniedEdit(self):
84         # Wrong permissions (caught by roundup security module).
85         self.assertRaises(Unauthorised, self.server.set,
86             'joe', 'random', 'user1', 'realname=someone')
88     def testAuthDeniedCreate(self):
89         self.assertRaises(Unauthorised, self.server.create,
90             'joe', 'random', 'user', {'username': 'blah'})
92     def testAuthAllowedEdit(self):
93         try:
94             self.server.set('admin', 'sekrit', 'user2', 'realname=someone')
95         except Unauthorised, err:
96             self.fail('raised %s'%err)
98     def testAuthAllowedCreate(self):
99         try:
100             self.server.create('admin', 'sekrit', 'user', 'username=blah')
101         except Unauthorised, err:
102             self.fail('raised %s'%err)
104 def test_suite():
105     suite = unittest.TestSuite()
106     for l in list_backends():
107         dct = dict(backend = l)
108         subcls = type(TestCase)('TestCase_%s'%l, (TestCase,), dct)
109         suite.addTest(unittest.makeSuite(subcls))
110     return suite
112 if __name__ == '__main__':
113     runner = unittest.TextTestRunner()
114     unittest.main(testRunner=runner)