diff test/test_xmlrpc.py @ 3937:3c3077582c16

Add security checks and tests for xmlrpc interface.
author Richard Jones <richard@users.sourceforge.net>
date Sat, 03 Nov 2007 00:50:38 +0000
parents cf6c45201980
children 85cbaa50eba1
line wrap: on
line diff
--- a/test/test_xmlrpc.py	Fri Nov 02 23:17:59 2007 +0000
+++ b/test/test_xmlrpc.py	Sat Nov 03 00:50:38 2007 +0000
@@ -14,75 +14,85 @@
 
 NEEDS_INSTANCE = 1
 
-class TestCaseBase(unittest.TestCase):
-
+class TestCase(unittest.TestCase):
     def setUp(self):
-
         self.dirname = '_test_xmlrpc'
         # set up and open a tracker
         self.instance = db_test_base.setupTracker(self.dirname)
 
         # open the database
         self.db = self.instance.open('admin')
-        self.db.user.create(username='joe', password=password.Password('random'),
-                            address='random@home.org',
-                            realname='Joe Random', roles='User')
+        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
 
-class AccessTestCase(TestCaseBase):
-
-    def test(self):
-
+    def testAccess(self):
         # Retrieve all three users.
         results = self.server.list('joe', 'random', 'user', 'id')
         self.assertEqual(len(results), 3)
+
         # Obtain data for 'joe'.
-        userid = 'user' + results[-1]
-        results = self.server.display('joe', 'random', userid)
+        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', userid, 'realname=Joe Doe')
-        results = self.server.display('joe', 'random', userid, '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')
-        # Create test
+
+    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')
 
-class AuthenticationTestCase(TestCaseBase):
-
-    def test(self):
-
+    def testAuthUnknown(self):
         # Unknown user (caught in XMLRPC frontend).
         self.assertRaises(Unauthorised, self.server.list,
-                          'nobody', 'nobody', 'user', 'id')
+            'nobody', 'nobody', 'user', 'id')
+
+    def testAuthDeniedEdit(self):
         # Wrong permissions (caught by roundup security module).
-        results = self.server.list('joe', 'random', 'user', 'id')
-        userid = 'user' + results[0] # admin
         self.assertRaises(Unauthorised, self.server.set,
-                          'joe', 'random', userid, 'realname=someone')
+            '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()
-    suite.addTest(unittest.makeSuite(AccessTestCase))
-    suite.addTest(unittest.makeSuite(AuthenticationTestCase))
+    suite.addTest(unittest.makeSuite(TestCase))
     return suite
 
 if __name__ == '__main__':
     runner = unittest.TextTestRunner()
     unittest.main(testRunner=runner)
+

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