class JobStoreTest(TestCase): def setUp(self): self.redis = StrictRedis(**settings.REDISES['default']) self.store = JobStore(self.redis, 'Asia/Chongqing') self.store.clear() self.redis.delete('active_jobs_pool') self.init() def tearDown(self): self.redis.delete('active_jobs_pool') self.store.clear() def init(self): tz = self.store.timezone trigger = IntervalTrigger({}, minutes=5, timezone=tz) url = 'http://t.cn' now = datetime.now(tz) self.job1 = Job(1, trigger, url) self.job1.compute_next_run_time(now) self.job2 = Job(2, trigger, url) self.job2.compute_next_run_time(now) self.store.add_job(self.job1) self.store.add_job(self.job2) self.now = now self.url = url self.trigger = trigger def testLoadJob(self): Task.objects.all().delete() task = self.createTask() task.save() job = self.store.load_job(task.id, self.now) self.assertEqual(self.url, job.func) def testLoadJobs(self): Task.objects.all().delete() self.store.clear() for i in range(3): task = self.createTask() task.save() self.redis.sadd('active_jobs_pool', task.id) self.assertEqual(3, self.store.count()) self.assertEqual(0, len(self.store.jobs)) self.store.load_jobs() self.assertEqual(3, len(self.store.jobs)) def testAddJob(self): self.assertEqual(2, self.store.count()) job = Job(3, self.trigger, self.url) job.compute_next_run_time(self.now) self.store.add_job(job) self.assertEqual(3, self.store.count()) def testRemoveJob(self): self.assertEqual(2, self.store.count()) self.store.remove_job(id=1) self.assertEqual(1, self.store.count()) self.store.remove_job(id=3) self.assertEqual(1, self.store.count()) def createTask(self): import json task = Task() task.run_time = json.dumps({'minutes':10}) task.name = 'name' task.run_entry = self.url return task def testUpdateJob(self): task = self.createTask() task.name = 'name1' task.save() self.store.clear() self.redis.sadd(self.store.active_jobs_key, task.id) self.store.load_jobs() job = self.store.find_job(task.id) self.assertEqual(task.name, job.name) task.name = 'name2' task.save() self.store.update_job(id=task.id) job = self.store.find_job(task.id) self.assertEqual(task.name, job.name) def testFindJob(self): self.assertEqual(2, self.store.count()) job = self.store.find_job(1) self.assertEqual(1, job.id) self.assertIsNone(self.store.find_job(3)) def testHasJob(self): self.assertTrue(self.store.has_job(1)) self.assertFalse(self.store.has_job(3))