8 import threading, xmlrpclib |
8 import threading, xmlrpclib |
9 from multiprocessing import Queue |
9 from multiprocessing import Queue |
10 from multiprocessing.managers import BaseManager |
10 from multiprocessing.managers import BaseManager |
11 |
11 |
12 class StoppableXMLRPCServer(iro.SecureUserDBXMLRPCServer, threading.Thread): |
12 class StoppableXMLRPCServer(iro.SecureUserDBXMLRPCServer, threading.Thread): |
13 running=True |
13 running=False |
14 def __init__(self, *args, **kwargs): |
14 def __init__(self, *args, **kwargs): |
15 iro.SecureUserDBXMLRPCServer.__init__(self, *args, **kwargs) |
15 iro.SecureUserDBXMLRPCServer.__init__(self, *args, **kwargs) |
16 threading.Thread.__init__(self) |
16 threading.Thread.__init__(self) |
|
17 self.timeout=.5 |
17 |
18 |
|
19 def start(self): |
|
20 self.running=True |
|
21 threading.Thread.start(self) |
|
22 |
18 |
23 |
19 def run(self): |
24 def run(self): |
20 # *serve_forever* muss in einem eigenen Thread laufen, damit man es |
25 # *serve_forever* muss in einem eigenen Thread laufen, damit man es |
21 # unterbrechen kann! |
26 # unterbrochen werden kann! |
22 while (self.running): |
27 while (self.running): |
23 self.handle_request() |
28 self.handle_request() |
24 |
29 |
25 |
|
26 def stop(self): |
30 def stop(self): |
27 self.running=False |
31 if (self.running): |
28 self.server_close() |
32 self.running=False |
|
33 self.server_close() |
|
34 self.join() |
|
35 |
|
36 def __del__(self): |
|
37 self.stop() |
|
38 |
|
39 def __enter__(self): |
|
40 self.start() |
|
41 return self |
|
42 |
|
43 def __exit__(self,type,value,traceback): |
|
44 self.stop() |
|
45 |
29 |
46 |
30 |
47 |
31 def init_server(): |
48 def init_server(): |
32 userlist=[{"name":"test","password":"test", "class":iro.User}, |
49 userlist=[{"name":"test","password":"test", "class":iro.User}, |
33 {"name":"test2","password":"test2", "class": iro.User}, |
50 {"name":"test2","password":"test2", "class": iro.User}, |
77 cp.read(["iro.conf"]) |
94 cp.read(["iro.conf"]) |
78 cert=cp.get('server', 'cert') |
95 cert=cp.get('server', 'cert') |
79 key=cp.get('server', 'key') |
96 key=cp.get('server', 'key') |
80 serv = StoppableXMLRPCServer(addr=("localhost", 8000), |
97 serv = StoppableXMLRPCServer(addr=("localhost", 8000), |
81 userdb=userdb, |
98 userdb=userdb, |
82 certificate=cert,privatekey=key) |
99 certificate=cert,privatekey=key, |
|
100 logRequests=False) |
83 serv.relam="xmlrpc" |
101 serv.relam="xmlrpc" |
84 return serv |
102 return serv |
85 |
103 |
86 |
104 |
87 class TestServer(unittest.TestCase): |
105 class TestServer(unittest.TestCase): |
88 |
106 |
89 def setUp(self): |
107 def setUp(self): |
90 self.serv = init_server() |
108 self.serv = init_server() |
91 self.serv.start() |
109 self.serv.start() |
92 |
110 |
93 def tearDown(self): |
111 def tearDown(self): |
94 self.serv.stop() |
112 self.serv.stop() |
95 xmlrpclib.Server("https://test:test@localhost:8000").status() #letzte nachricht abrufen, damit richt geschlossen wird |
|
96 |
113 |
97 def testLogin(self): |
114 def testLogin(self): |
98 self.assertEqual(xmlrpclib.Server("https://test:test@localhost:8000").status(), {}) |
115 self.assertEqual(xmlrpclib.Server("https://test:test@localhost:8000").status(), {}) |
99 self.assertEqual(xmlrpclib.Server("https://test2:test2@localhost:8000").status(), {}) |
116 self.assertEqual(xmlrpclib.Server("https://test2:test2@localhost:8000").status(), {}) |
100 self.assertRaises(xmlrpclib.ProtocolError, xmlrpclib.Server("https://test2:test@localhost:8000").status) |
117 self.assertRaises(xmlrpclib.ProtocolError, xmlrpclib.Server("https://test2:test@localhost:8000").status) |
131 client=xmlrpclib.Server(servstr) |
148 client=xmlrpclib.Server(servstr) |
132 self.assertEqual(client.getProvider("sms"), ["fax.de","geonet", "sipgate", "smstrade"]) |
149 self.assertEqual(client.getProvider("sms"), ["fax.de","geonet", "sipgate", "smstrade"]) |
133 self.assertEqual(client.getProvider("fax"), ["fax.de","geonet", "sipgate"]) |
150 self.assertEqual(client.getProvider("fax"), ["fax.de","geonet", "sipgate"]) |
134 self.assertEqual(client.getProvider("mail"), ["localhost"]) |
151 self.assertEqual(client.getProvider("mail"), ["localhost"]) |
135 |
152 |
136 self.assertRaises(xmlrpclib.Fault,client.getProvider, "temp") |
153 self.assertRaises(xmlrpclib.ProtocolError,client.getProvider, "temp") |
137 |
154 |
138 def testGetDefault(self): |
155 def testGetDefault(self): |
139 servstr="https://test:test@localhost:8000" |
156 servstr="https://test:test@localhost:8000" |
140 client=xmlrpclib.Server(servstr) |
157 client=xmlrpclib.Server(servstr) |
141 self.assertEqual(client.getDefaultProvider("sms"), "smstrade") |
158 self.assertEqual(client.getDefaultProvider("sms"), "smstrade") |
142 self.assertEqual(client.getDefaultProvider("fax"),"sipgate") |
159 self.assertEqual(client.getDefaultProvider("fax"),"sipgate") |
143 self.assertEqual(client.getDefaultProvider("mail"), "localhost") |
160 self.assertEqual(client.getDefaultProvider("mail"), "localhost") |
144 |
161 |
145 self.assertRaises(xmlrpclib.Fault,client.getDefaultProvider, "temp") |
162 self.assertRaises(xmlrpclib.ProtocolError,client.getDefaultProvider, "temp") |
146 |
163 |
147 |
164 |
148 if __name__ == "__main__": |
165 if __name__ == "__main__": |
149 unittest.main() |
166 unittest.main() |