diff wibble/tests.py @ 4:ad5a8748afcf

Add test framework
author Ben Croston <ben@croston.org>
date Wed, 31 Aug 2011 21:35:14 +0100
parents
children f5e3ba8cfcd0
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wibble/tests.py	Wed Aug 31 21:35:14 2011 +0100
@@ -0,0 +1,71 @@
+#!/usr/bin/env python
+import unittest
+import hashlib
+from threading import Thread
+import time
+from wsgiref import simple_server
+import platform
+
+##### server vvv #####
+class api(object):
+  def mymethod(self):
+      #raise Exception("This is a test error")
+      return 'wibbler woz ere'
+
+def myauth(username, password, useragent=None):
+  #raise Exception("This is a test error in auth")
+  return username == 'testuser' and hashlib.md5('s3cr3t').hexdigest() == password and useragent == 'wibble_unittest'
+
+def make_server():
+    from wibble.server import JsonRpcApp
+    class myhandler(simple_server.WSGIRequestHandler):
+        def log_request(self, *a, **b):
+            pass # do not output log messages
+    application = JsonRpcApp(api(), auth=myauth)
+    return simple_server.make_server('localhost', 1337, application, handler_class=myhandler)
+##### server ^^^ #####
+
+##### client vvv #####
+class WibbleTests(unittest.TestCase):
+    def setUp(self):
+        from wibble.client.ServerProxy import ServerProxy
+        self.client = ServerProxy('http://localhost:1337/',
+                                  username='testuser',
+                                  password='s3cr3t',
+                                  user_agent='wibble_unittest')
+
+class IgnoreModuleNameTest(WibbleTests):
+    def runTest(self):
+        self.assertEqual(self.client.api.mymethod(),self.client.mymethod())
+
+#def client_tests():
+#    try:
+#        print(jsonrpc_client.wibble('this should fail'))
+#    except BadRequestException:
+#        pass # test passed
+#    else:
+#       raise Exception('Test failed (calling unknown method)')
+#
+#    print 'All tests passed'
+
+##### client ^^^ #####
+
+def suite():
+    if platform.python_version().startswith('3'):
+        # no tests for python 3 because server not ported yet
+        return unittest.TestSuite()
+    def test_wrapper():
+        server = make_server()
+        server.log_request = None
+        server.serve_forever()
+    thread = Thread(target=test_wrapper)
+    thread.start()
+    time.sleep(0.1) # wait for server thread to start
+    suite = unittest.TestSuite()
+    suite.addTest(IgnoreModuleNameTest())
+    return suite
+
+if __name__ == '__main__':
+#    unittest.main()
+    main()
+