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