test mit fehlschlagendem Job
authorSandro Knauß <knauss@netzguerilla.net>
Wed, 06 Oct 2010 04:31:54 +0200
changeset 42 1a9f191389a4
parent 41 02e9b54ef4f0
child 43 72c472c87460
test mit fehlschlagendem Job job ->setStatus damit das threadsafe gesetzt werden kann ->getStatus gibt nun kein leeres Dict mehr zurück
iro/job.py
iro/tests/testWorker.py
iro/worker.py
--- a/iro/job.py	Wed Oct 06 04:28:19 2010 +0200
+++ b/iro/job.py	Wed Oct 06 04:31:54 2010 +0200
@@ -32,11 +32,14 @@
     def stop(self):
         self.status = "stopped"
         
-    def getStatus(self,detailed):
+    def getStatus(self,detailed=False):
         if detailed and self.status == "started" or self.status == "sended":
             return self.status, self.dStatus
-        return self.status, {}
+        return self.status
     
+    def setStatus(self,status):
+        self.status=status
+
     def getName(self):
         return self.name
         
--- a/iro/tests/testWorker.py	Wed Oct 06 04:28:19 2010 +0200
+++ b/iro/tests/testWorker.py	Wed Oct 06 04:31:54 2010 +0200
@@ -32,9 +32,17 @@
             record.exc_info=record.exc_info[:-1]                                              
         self.buffer.append(record.__dict__)
 
+
+class BadJob(Job):
+    def start(self):
+        Job.start(self)
+        raise Exception("Error")
+
+#einen Manager anlegen, der Job und eine Liste anbietet
 class MyManager(BaseManager):
     pass
 MyManager.register('Job', Job) 
+MyManager.register('BadJob', BadJob) 
 MyManager.register('list', list, ListProxy)
 
 class TestWorker(unittest.TestCase):
@@ -99,6 +107,24 @@
                  (20,'ein neuer Job(1)'),
                  (20,'Job(1) fertig ;)')])
 
+    def testBadJob(self):
+        '''einen Job verarbeiten, der fehlschlägt'''
+        job=self.manager.BadJob(None,None,"test")
+        self.assertEqual(job.getStatus(),"init")
+        self.queue.put(job)
+        sleep(.1)
+        self.stop()
+        self.assertEqual(job.getStatus(),"error")
+        print self.buffer
+        self.assertEqual([(l['levelno'],l['msg']) for l in self.buffer if l['name']=="iro.worker"],
+                [(20,'Workerprocess läuft nun...'),
+                 (20,'ein neuer Job(1)'),
+                 (40,'Job(1) fehlgeschlagen :(')])
+        error=Exception('Error')
+        self.assertEqual(self.buffer[-1]['exc_info'][0],type(error))
+        self.assertEqual(str(self.buffer[-1]['exc_info'][1]),str(error))
+
+
 
 if __name__ == "__main__":
     unittest.main()  
--- a/iro/worker.py	Wed Oct 06 04:28:19 2010 +0200
+++ b/iro/worker.py	Wed Oct 06 04:31:54 2010 +0200
@@ -21,7 +21,8 @@
             logger.info('ein neuer Job(%d)' %(id))
             try:
                 job.start()
-
                 logger.info('Job(%d) fertig ;)'%(id))
             except:
+                job.setStatus("error")
                 logger.exception('Job(%d) fehlgeschlagen :('%(id))
+