comparison test/test_xmlrpc.py @ 4083:bbab97f8ffb2

XMLRPC improvements: * Add support for actions to XMLRPC interface. * Provide bridge so user actions may be executed either via CGI or XMLRPC. * Adjust XMLRPC tests to recent work. * Cleanup.
author Stefan Seefeld <stefan@seefeld.name>
date Fri, 27 Feb 2009 17:46:47 +0000
parents fe2af84a5ca5
children d8c2d214d688
comparison
equal deleted inserted replaced
4082:5eb5f7e66c37 4083:bbab97f8ffb2
6 6
7 import unittest, os, shutil, errno, sys, difflib, cgi, re 7 import unittest, os, shutil, errno, sys, difflib, cgi, re
8 8
9 from roundup.cgi.exceptions import * 9 from roundup.cgi.exceptions import *
10 from roundup import init, instance, password, hyperdb, date 10 from roundup import init, instance, password, hyperdb, date
11 from roundup.xmlrpc import RoundupServer 11 from roundup.xmlrpc import RoundupInstance
12 from roundup.backends import list_backends 12 from roundup.backends import list_backends
13 13
14 import db_test_base 14 import db_test_base
15 15
16 NEEDS_INSTANCE = 1 16 NEEDS_INSTANCE = 1
30 password=password.Password('random'), address='random@home.org', 30 password=password.Password('random'), address='random@home.org',
31 realname='Joe Random', roles='User') 31 realname='Joe Random', roles='User')
32 32
33 self.db.commit() 33 self.db.commit()
34 self.db.close() 34 self.db.close()
35 35 self.db = self.instance.open('joe')
36 self.server = RoundupServer(self.dirname) 36 self.server = RoundupInstance(self.db, self.instance.actions, None)
37 37
38 def tearDown(self): 38 def tearDown(self):
39 try: 39 try:
40 shutil.rmtree(self.dirname) 40 shutil.rmtree(self.dirname)
41 except OSError, error: 41 except OSError, error:
42 if error.errno not in (errno.ENOENT, errno.ESRCH): raise 42 if error.errno not in (errno.ENOENT, errno.ESRCH): raise
43 43
44 def testAccess(self): 44 def testAccess(self):
45 # Retrieve all three users. 45 # Retrieve all three users.
46 results = self.server.list('joe', 'random', 'user', 'id') 46 results = self.server.list('user', 'id')
47 self.assertEqual(len(results), 3) 47 self.assertEqual(len(results), 3)
48 48
49 # Obtain data for 'joe'. 49 # Obtain data for 'joe'.
50 results = self.server.display('joe', 'random', self.joeid) 50 results = self.server.display(self.joeid)
51 self.assertEqual(results['username'], 'joe') 51 self.assertEqual(results['username'], 'joe')
52 self.assertEqual(results['realname'], 'Joe Random') 52 self.assertEqual(results['realname'], 'Joe Random')
53 53
54 def testChange(self): 54 def testChange(self):
55 # Reset joe's 'realname'. 55 # Reset joe's 'realname'.
56 results = self.server.set('joe', 'random', self.joeid, 56 results = self.server.set(self.joeid, 'realname=Joe Doe')
57 'realname=Joe Doe') 57 results = self.server.display(self.joeid, 'realname')
58 results = self.server.display('joe', 'random', self.joeid,
59 'realname')
60 self.assertEqual(results['realname'], 'Joe Doe') 58 self.assertEqual(results['realname'], 'Joe Doe')
61 59
62 # check we can't change admin's details 60 # check we can't change admin's details
63 self.assertRaises(Unauthorised, self.server.set, 'joe', 'random', 61 self.assertRaises(Unauthorised, self.server.set, 'user1', 'realname=Joe Doe')
64 'user1', 'realname=Joe Doe')
65 62
66 def testCreate(self): 63 def testCreate(self):
67 results = self.server.create('joe', 'random', 'issue', 'title=foo') 64 results = self.server.create('issue', 'title=foo')
68 issueid = 'issue' + results 65 issueid = 'issue' + results
69 results = self.server.display('joe', 'random', issueid, 'title') 66 results = self.server.display(issueid, 'title')
70 self.assertEqual(results['title'], 'foo') 67 self.assertEqual(results['title'], 'foo')
71 68
72 def testFileCreate(self): 69 def testFileCreate(self):
73 results = self.server.create('joe', 'random', 'file', 'content=hello\r\nthere') 70 results = self.server.create('file', 'content=hello\r\nthere')
74 fileid = 'file' + results 71 fileid = 'file' + results
75 results = self.server.display('joe', 'random', fileid, 'content') 72 results = self.server.display(fileid, 'content')
76 self.assertEqual(results['content'], 'hello\r\nthere') 73 self.assertEqual(results['content'], 'hello\r\nthere')
77 74
78 def testAuthUnknown(self): 75 def testAction(self):
79 # Unknown user (caught in XMLRPC frontend). 76 # As this action requires special previledges, we temporarily switch
80 self.assertRaises(Unauthorised, self.server.list, 77 # to 'admin'
81 'nobody', 'nobody', 'user', 'id') 78 self.db.setCurrentUser('admin')
79 users_before = self.server.list('user')
80 try:
81 tmp = 'user' + self.db.user.create(username='tmp')
82 self.server.action('retire', tmp)
83 finally:
84 self.db.setCurrentUser('joe')
85 users_after = self.server.list('user')
86 self.assertEqual(users_before, users_after)
82 87
83 def testAuthDeniedEdit(self): 88 def testAuthDeniedEdit(self):
84 # Wrong permissions (caught by roundup security module). 89 # Wrong permissions (caught by roundup security module).
85 self.assertRaises(Unauthorised, self.server.set, 90 self.assertRaises(Unauthorised, self.server.set,
86 'joe', 'random', 'user1', 'realname=someone') 91 'user1', 'realname=someone')
87 92
88 def testAuthDeniedCreate(self): 93 def testAuthDeniedCreate(self):
89 self.assertRaises(Unauthorised, self.server.create, 94 self.assertRaises(Unauthorised, self.server.create,
90 'joe', 'random', 'user', {'username': 'blah'}) 95 'user', {'username': 'blah'})
91 96
92 def testAuthAllowedEdit(self): 97 def testAuthAllowedEdit(self):
98 self.db.setCurrentUser('admin')
93 try: 99 try:
94 self.server.set('admin', 'sekrit', 'user2', 'realname=someone') 100 self.server.set('user2', 'realname=someone')
95 except Unauthorised, err: 101 except Unauthorised, err:
96 self.fail('raised %s'%err) 102 self.fail('raised %s'%err)
103 finally:
104 self.db.setCurrentUser('joe')
97 105
98 def testAuthAllowedCreate(self): 106 def testAuthAllowedCreate(self):
107 self.db.setCurrentUser('admin')
99 try: 108 try:
100 self.server.create('admin', 'sekrit', 'user', 'username=blah') 109 self.server.create('user', 'username=blah')
101 except Unauthorised, err: 110 except Unauthorised, err:
102 self.fail('raised %s'%err) 111 self.fail('raised %s'%err)
112 finally:
113 self.db.setCurrentUser('joe')
103 114
104 def test_suite(): 115 def test_suite():
105 suite = unittest.TestSuite() 116 suite = unittest.TestSuite()
106 for l in list_backends(): 117 for l in list_backends():
107 dct = dict(backend = l) 118 dct = dict(backend = l)

Roundup Issue Tracker: http://roundup-tracker.org/