def test_start_increments_attempt_count(self): """Job.start should increment the attempt count.""" job = Job(date_finished=UTC_NOW) self.assertEqual(0, job.attempt_count) job.start() self.assertEqual(1, job.attempt_count) job.queue() job.start() self.assertEqual(2, job.attempt_count)
def test_queue(self): """Job.queue should update the job appropriately. It should set date_finished, and set status to WAITING. """ job = Job(_status=JobStatus.RUNNING) self.assertEqual(None, job.date_finished) job.queue() self.assertNotEqual(None, job.date_finished) self.assertEqual(job.status, JobStatus.WAITING)
def test_queue_manages_transactions(self): # Job.queue() does not commit the transaction by default. job = Job() job.start() with TransactionRecorder() as recorder: job.queue() self.assertEqual([], recorder.transaction_calls) # If explicitly specified, Job.queue() commits the transaction. # Note that there is an additional commit to update the job status. job = Job() job.start() with TransactionRecorder() as recorder: job.queue(manage_transaction=True) self.assertEqual(['commit', 'commit'], recorder.transaction_calls) # If abort_transaction=True is also passed to Job.queue() # the transaction is first aborted, then two times committed. job = Job() job.start() with TransactionRecorder() as recorder: job.queue(manage_transaction=True, abort_transaction=True) self.assertEqual( ['abort', 'commit', 'commit'], recorder.transaction_calls)
def test_queue_clears_lease_expires(self): """Queueing a job releases its lease.""" job = Job(_status=JobStatus.RUNNING) job.lease_expires = UTC_NOW job.queue() self.assertIsNone(job.lease_expires)