Mercurial > hg > AuthRPC
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: |