test mit fehlschlagendem Job
job
->setStatus damit das threadsafe gesetzt werden kann
->getStatus gibt nun kein leeres Dict mehr zurück
--- 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))
+