def test_add_error_method_should_add_an_error_instance(self): e = ErrorTests.ExceptionWithCode('the answer', 42) job = Job.add_job(identifier='job:1', queue_name='test') error1 = Error.add_error(queue_name='test', job=job, error=e) self.assertListEqual(list(Error.collection()), [error1.pk.get()]) Error.add_error(queue_name='test', job=job, error=e) self.assertEqual(len(Error.collection()), 2)
def test_add_error_method_should_add_an_error_instance(self): e = ErrorTests.ExceptionWithCode('the answer', 42) job = Job.add_job(identifier='job:1', queue_name='test') error1 = Error.add_error(queue_name='test', job=job, error=e) self.assertEqual(list(Error.collection()), [error1.pk.get()]) Error.add_error(queue_name='test', job=job, error=e) self.assertEqual(len(Error.collection()), 2)
def test_job_error_method_should_be_called(self): class ExceptionWithCode(Exception): def __init__(self, message, code): super(ExceptionWithCode, self).__init__(message) self.message = message self.code = code def callback(job, queue): raise ExceptionWithCode('foobar', 42) job1 = Job.add_job(identifier='job:1', queue_name='test') queue = Queue.get_queue(name='test') worker = Worker(name='test', max_loops=1) # no callback worker.run() self.assertEqual(job1.status.hget(), STATUSES.ERROR) self.assertIn(job1.get_pk(), queue.errors.lmembers()) self.assertEqual(len(Error.collection()), 1) error = Error.get(identifier='job:1') self.assertEqual(error.message.hget(), 'You must implement your own action') self.assertEqual(error.code.hget(), None) job2 = Job.add_job(identifier='job:2', queue_name='test') queue = Queue.get_queue(name='test') worker = Worker(name='test', max_loops=1, callback=callback) # callback with exception worker.run() self.assertEqual(job2.status.hget(), STATUSES.ERROR) self.assertIn(job2.get_pk(), queue.errors.lmembers()) self.assertEqual(len(Error.collection()), 2) error = Error.get(identifier='job:2') self.assertEqual(error.message.hget(), 'foobar') self.assertEqual(error.code.hget(), '42')
def test_add_error_should_store_the_name_of_the_exception(self): e = Exception('foo') job = Job.add_job(identifier='job:1', queue_name='test') error = Error.add_error(queue_name='test', job=job, error=e) self.assertEqual(error.type.hget(), 'Exception') e = ErrorTests.ExceptionWithCode('the answer', 42) error = Error.add_error(queue_name='test', job=job, error=e) self.assertEqual(error.type.hget(), 'ExceptionWithCode')
def test_new_error_save_date_and_time_appart(self): e = ErrorTests.ExceptionWithCode('the answer', 42) when = datetime(2012, 9, 29, 22, 58, 56) job = Job.add_job(identifier='job:1', queue_name='test') error = Error.add_error(queue_name='test', job=job, error=e, when=when) self.assertEqual(error.date.hget(), '2012-09-29') self.assertEqual(error.time.hget(), '22:58:56') self.assertEqual(error.datetime, when) self.assertEqual(list(Error.collection(date='2012-09-29')), [error.pk.get()])
def test_new_error_save_job_pk_and_identifier_appart(self): e = ErrorTests.ExceptionWithCode('the answer', 42) when = datetime(2012, 9, 29, 22, 58, 56) job = Job.add_job(identifier='job:1', queue_name='test') error = Error.add_error(queue_name='test', job=job, error=e, when=when) self.assertEqual(error.job_model_repr.hget(), job.get_model_repr()) self.assertEqual(error.job_pk.hget(), job.pk.get()) self.assertEqual(error.identifier.hget(), 'job:1') self.assertEqual(list(Error.collection(job_pk=job.pk.get())), [error.pk.get()]) self.assertEqual(list(Error.collection(identifier=job.identifier.hget())), [error.pk.get()])
def test_new_error_save_job_pk_and_identifier_appart(self): e = ErrorTests.ExceptionWithCode('the answer', 42) when = datetime(2012, 9, 29, 22, 58, 56) job = Job.add_job(identifier='job:1', queue_name='test') error = Error.add_error(queue_name='test', job=job, error=e, when=when) self.assertEqual(error.job_model_repr.hget(), job.get_model_repr()) self.assertEqual(error.job_pk.hget(), job.pk.get()) self.assertEqual(error.identifier.hget(), 'job:1') self.assertListEqual(list(Error.collection(job_pk=job.pk.get())), [error.pk.get()]) self.assertListEqual(list(Error.collection(identifier=job.identifier.hget())), [error.pk.get()])
def test_new_error_save_date_and_time_appart(self): e = ErrorTests.ExceptionWithCode('the answer', 42) when = datetime(2012, 9, 29, 22, 58, 56) job = Job.add_job(identifier='job:1', queue_name='test') error = Error.add_error(queue_name='test', job=job, error=e, when=when) self.assertEqual(error.date.hget(), '2012-09-29') self.assertEqual(error.time.hget(), '22:58:56') self.assertEqual(error.date_time.hget(), '2012-09-29 22:58:56') self.assertEqual(error.datetime, when) self.assertListEqual(list(Error.collection(date='2012-09-29')), [error.pk.get()]) self.assertListEqual(list(Error.collection(date_time__date__gt='2012-09-01')), [error.pk.get()])
def test_add_error_should_store_the_traceback(self): job = Job.add_job(identifier='job:1', queue_name='test') try: foo = bar except Exception as e: trace = traceback.format_exc() error = Error.add_error(queue_name='test', job=job, error=e, trace=trace) self.assertRegexpMatches(error.traceback.hget(), "NameError:[^\n]+bar[^\n]+ is not defined")
def test_add_error_can_accept_an_exception_without_code(self): e = Exception('no code') job = Job.add_job(identifier='job:1', queue_name='test') error = Error.add_error(queue_name='test', job=job, error=e) self.assertEqual(error.code.hget(), None)