comparison wibble/tests.py @ 8:685479d1f0a7

Tests available for both py2 and py3
author Ben Croston <ben@croston.org>
date Sun, 04 Sep 2011 23:37:41 +0100
parents 3a6f3193cc7d
children 23743b0f67ab
comparison
equal deleted inserted replaced
7:3a6f3193cc7d 8:685479d1f0a7
6 from wsgiref import simple_server 6 from wsgiref import simple_server
7 import platform 7 import platform
8 8
9 ##### server vvv ##### 9 ##### server vvv #####
10 class api(object): 10 class api(object):
11 def mymethod(self): 11 def mymethod(self):
12 return 'wibbler woz ere' 12 return 'wibbler woz ere'
13 13
14 def echo(self, mystring): 14 def echo(self, mystring):
15 return 'ECHO: ' + mystring 15 return 'ECHO: ' + mystring
16 16
17 def raiseexception(self): 17 def raiseexception(self):
18 dividebyzeroerror = 1/0 18 dividebyzeroerror = 1/0
19 19
20 def myauth(username, password, useragent=None): 20 def myauth(username, password, useragent=None):
21 return username == 'testuser' and \ 21 return username == 'testuser' and \
22 hashlib.md5('s3cr3t').hexdigest() == password and \ 22 hashlib.md5('s3cr3t').hexdigest() == password and \
23 useragent == 'wibble_unittest' 23 useragent == 'wibble_unittest'
24 24
25 def make_server(): 25 def make_server():
26 from server import JsonRpcApp 26 from server import JsonRpcApp
27 class myhandler(simple_server.WSGIRequestHandler): 27 class myhandler(simple_server.WSGIRequestHandler):
28 def log_request(self, *a, **b): 28 def log_request(self, *a, **b):
36 def runTest(self): 36 def runTest(self):
37 from client.ServerProxy import ServerProxy, UnauthorisedException 37 from client.ServerProxy import ServerProxy, UnauthorisedException
38 self.client = ServerProxy('http://localhost:1337/', 38 self.client = ServerProxy('http://localhost:1337/',
39 username='testuser', 39 username='testuser',
40 password='s3cr3t', 40 password='s3cr3t',
41 user_agent='InternerExploiter') 41 user_agent='InternetExploiter')
42 with self.assertRaises(UnauthorisedException): 42 with self.assertRaises(UnauthorisedException):
43 self.assertEqual(self.client.api.mymethod(),self.client.mymethod()) 43 self.assertEqual(self.client.api.mymethod(),self.client.mymethod())
44 44
45 class WibbleTests(unittest.TestCase): 45 class WibbleTests(unittest.TestCase):
46 def setUp(self): 46 def setUp(self):
65 with self.assertRaises(BadRequestException): 65 with self.assertRaises(BadRequestException):
66 self.client.FunctionDoesNotExist() 66 self.client.FunctionDoesNotExist()
67 67
68 class EchoTest(WibbleTests): 68 class EchoTest(WibbleTests):
69 def runTest(self): 69 def runTest(self):
70 POUND = '\xc2\xa3' 70 if platform.python_version().startswith('3'):
71 POUND = '\u00A3'
72 else:
73 POUND = unicode('\u00A3')
71 self.assertEqual(self.client.echo(POUND), 'ECHO: ' + POUND) 74 self.assertEqual(self.client.echo(POUND), 'ECHO: ' + POUND)
72 self.assertEqual(self.client.echo('hello mum!'), 'ECHO: hello mum!') 75 self.assertEqual(self.client.echo('hello mum!'), 'ECHO: hello mum!')
73 ##### client ^^^ ##### 76 ##### client ^^^ #####
74 77
75 finished = False 78 finished = False
76 def suite(): 79 def suite():
77 if platform.python_version().startswith('3'): 80 if platform.python_version().startswith('2'):
78 # no tests for python 3 because server not ported yet 81 # create server
79 return unittest.TestSuite() 82 def test_wrapper():
80 83 server = make_server()
81 # create server 84 while not finished:
82 def test_wrapper(): 85 server.handle_request()
83 server = make_server() 86 thread = Thread(target=test_wrapper)
84 while not finished: 87 thread.start()
85 server.handle_request() 88 time.sleep(0.1) # wait for server thread to start
86 thread = Thread(target=test_wrapper)
87 thread.start()
88 time.sleep(0.1) # wait for server thread to start
89 89
90 # tests are as client 90 # tests are as client
91 suite = unittest.TestSuite() 91 suite = unittest.TestSuite()
92 suite.addTest(NotAuthTest()) 92 suite.addTest(NotAuthTest())
93 suite.addTest(IgnoreClassNameTest()) 93 suite.addTest(IgnoreClassNameTest())
95 suite.addTest(BadRequestTest()) 95 suite.addTest(BadRequestTest())
96 suite.addTest(EchoTest()) 96 suite.addTest(EchoTest())
97 return suite 97 return suite
98 98
99 if __name__ == '__main__': 99 if __name__ == '__main__':
100 import sys
101 if platform.python_version().startswith('2 ') and 'serve' in sys.argv:
102 print 'Listening on port 1337 (Ctrl-C qo quit)...'
103 server = make_server()
104 try:
105 server.serve_forever()
106 except KeyboardInterrupt:
107 sys.exit()
108
100 unittest.TextTestRunner(verbosity=2).run(suite()) 109 unittest.TextTestRunner(verbosity=2).run(suite())
101 finished = True 110 finished = True
102 111
103 # make a dummy request to get server thread out of loop 112 # make a dummy request to get server thread out of loop
104 try: 113 try: