Mercurial > hg > AuthRPC
view wibble/tests.py @ 5:f5e3ba8cfcd0
Improved test framework
author | Ben Croston <ben@croston.org> |
---|---|
date | Wed, 31 Aug 2011 22:45:55 +0100 |
parents | ad5a8748afcf |
children | 3a6f3193cc7d |
line wrap: on
line source
#!/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): return 'wibbler woz ere' def myexception(self): raise Exception('This is a test error') 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 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 client.ServerProxy import ServerProxy self.client = ServerProxy('http://localhost:1337/', username='testuser', password='s3cr3t', user_agent='wibble_unittest') class IgnoreClassNameTest(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 ^^^ ##### finished = False 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() while not finished: server.handle_request() thread = Thread(target=test_wrapper) thread.start() time.sleep(0.1) # wait for server thread to start suite = unittest.TestSuite() suite.addTest(IgnoreClassNameTest()) return suite if __name__ == '__main__': finished = False unittest.TextTestRunner(verbosity=2).run(suite()) finished = True # make a dummy request to get server thread out of loop try: import urllib urllib.urlopen('http://localhost:1337/') except: pass