iro/tests/testWorker.py
changeset 49 b1d0f7ffbb64
parent 48 32763e344d3b
equal deleted inserted replaced
48:32763e344d3b 49:b1d0f7ffbb64
     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()