3 import unittest |
3 import unittest |
4 import logging |
4 import logging |
5 from time import sleep |
5 from time import sleep |
6 |
6 |
7 from multiprocessing import Queue |
7 from multiprocessing import Queue |
8 from multiprocessing.managers import BaseManager,ListProxy |
8 from multiprocessing.managers import BaseManager, ListProxy |
9 |
9 |
10 from iro.worker import Worker |
10 from iro.worker import Worker |
11 from iro.job import Job |
11 from iro.job import Job, SMSJob |
|
12 from iro.anbieter.anbieter import anbieter |
|
13 from iro.anbieter.content import SMS |
|
14 from iro.providerlist import Providerlist |
12 |
15 |
13 from logging.handlers import BufferingHandler |
16 from logging.handlers import BufferingHandler |
14 |
17 |
15 class MyHandler(BufferingHandler): |
18 class MyHandler(BufferingHandler): |
16 def __init__(self,buffer=None): |
19 def __init__(self,buffer=None): |
26 def shouldFlush(self): |
29 def shouldFlush(self): |
27 return False |
30 return False |
28 |
31 |
29 def emit(self, record): |
32 def emit(self, record): |
30 if record.exc_info: #sonst geht das append schief, weil nicht picklebar |
33 if record.exc_info: #sonst geht das append schief, weil nicht picklebar |
31 print record.exc_info |
|
32 record.exc_info=record.exc_info[:-1] |
34 record.exc_info=record.exc_info[:-1] |
33 self.buffer.append(record.__dict__) |
35 self.buffer.append(record.__dict__) |
34 |
36 |
35 |
37 |
36 class BadJob(Job): |
38 class BadJob(Job): |
40 |
42 |
41 #einen Manager anlegen, der Job und eine Liste anbietet |
43 #einen Manager anlegen, der Job und eine Liste anbietet |
42 class MyManager(BaseManager): |
44 class MyManager(BaseManager): |
43 pass |
45 pass |
44 MyManager.register('Job', Job) |
46 MyManager.register('Job', Job) |
|
47 MyManager.register('SMSJob', SMSJob) |
45 MyManager.register('BadJob', BadJob) |
48 MyManager.register('BadJob', BadJob) |
46 MyManager.register('list', list, ListProxy) |
49 MyManager.register('list', list, ListProxy) |
|
50 MyManager.register('Providerlist',Providerlist) |
47 |
51 |
48 class TestWorker(unittest.TestCase): |
52 class TestWorker(unittest.TestCase): |
49 def setUp(self): |
53 def setUp(self): |
50 #erstelle eine Queue&Manager |
54 #erstelle eine Queue&Manager |
51 self.manager = MyManager() |
55 self.manager = MyManager() |
53 |
57 |
54 #manager starten, damit wir Logging anpassen können |
58 #manager starten, damit wir Logging anpassen können |
55 self.manager.start() |
59 self.manager.start() |
56 self.setUpLogging() |
60 self.setUpLogging() |
57 |
61 |
|
62 self.providerlist=self.manager.Providerlist() |
|
63 self.providerlist.add("test", anbieter() , ["sms", ]) |
|
64 |
58 #eigentlich Workerprocess starten |
65 #eigentlich Workerprocess starten |
59 self.worker= Worker(self.queue) |
66 self.worker= Worker(self.queue) |
60 self.worker.start() |
67 self.worker.start() |
61 |
68 |
62 def tearDown(self): |
69 def tearDown(self): |
113 self.assertEqual(job.getStatus(),("init",{})) |
120 self.assertEqual(job.getStatus(),("init",{})) |
114 self.queue.put(job) |
121 self.queue.put(job) |
115 sleep(.1) |
122 sleep(.1) |
116 self.stop() |
123 self.stop() |
117 self.assertEqual(job.getStatus(),("error",{})) |
124 self.assertEqual(job.getStatus(),("error",{})) |
118 print self.buffer |
|
119 self.assertEqual([(l['levelno'],l['msg']) for l in self.buffer if l['name']=="iro.worker"], |
125 self.assertEqual([(l['levelno'],l['msg']) for l in self.buffer if l['name']=="iro.worker"], |
120 [(20,'Workerprocess läuft nun...'), |
126 [(20,'Workerprocess läuft nun...'), |
121 (20,'ein neuer Job(1)'), |
127 (20,'ein neuer Job(1)'), |
122 (40,'Job(1) fehlgeschlagen :(')]) |
128 (40,'Job(1) fehlgeschlagen :(')]) |
123 error=Exception('Error') |
129 error=Exception('Error') |
124 self.assertEqual(self.buffer[-1]['exc_info'][0],type(error)) |
130 self.assertEqual(self.buffer[-1]['exc_info'][0],type(error)) |
125 self.assertEqual(str(self.buffer[-1]['exc_info'][1]),str(error)) |
131 self.assertEqual(str(self.buffer[-1]['exc_info'][1]),str(error)) |
126 |
132 |
|
133 def testSMSJob(self): |
|
134 job=self.manager.SMSJob(self.providerlist, "test", "name", SMS("message"),[012345]) |
|
135 self.assertEqual(job.getStatus(),("init",{})) |
|
136 self.queue.put(job) |
|
137 sleep(.1) |
|
138 self.stop() |
|
139 self.assertEqual(job.getStatus(),("sended",{'failed': [], 'good': []})) |
|
140 self.assertEqual([(l['levelno'],l['msg']) for l in self.buffer if l['name']=="iro.worker"], |
|
141 [(20,'Workerprocess läuft nun...'), |
|
142 (20,'ein neuer Job(1)'), |
|
143 (20,'Job(1) fertig ;)')]) |
127 |
144 |
128 |
145 |
129 if __name__ == "__main__": |
146 if __name__ == "__main__": |
130 unittest.main() |
147 unittest.main() |