Mercurial > p > roundup > code
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) |
