def test_remaining_tasks_in_block(self): # Tasks should be submitted to works for one block (of sites) at a # time. For each block, we want to look at Redis counters to determine # when the block is finished calculating. # `remaining_tasks_in_block` is a generator that yields the remaining # number of tasks in a block. When there are no more tasks left in the # block, a `StopIteration` is raised. gen = remaining_tasks_in_block(self.job_id, 4, 0) incr_count = lambda: stats.pk_inc(self.job_id, "nhzrd_done") self.assertEqual(4, gen.next()) incr_count() self.assertEqual(3, gen.next()) incr_count() incr_count() self.assertEqual(1, gen.next()) incr_count() self.assertRaises(StopIteration, gen.next)
def test_remaining_tasks_in_block_nonzero_start_count(self): # Same as the above test, except test with the start_count # set to something > 0 (to simulate a mid-calculation block). incr_count = lambda: stats.pk_inc(self.job_id, "nhzrd_done") # Just for variety, set 5 successful and 5 failed task counters: for _ in xrange(5): stats.pk_inc(self.job_id, "nhzrd_done") for _ in xrange(5): stats.pk_inc(self.job_id, "nhzrd_failed") # count starts at 10 gen = remaining_tasks_in_block(self.job_id, 4, 10) self.assertEqual(4, gen.next()) incr_count() self.assertEqual(3, gen.next()) incr_count() incr_count() self.assertEqual(1, gen.next()) incr_count() self.assertRaises(StopIteration, gen.next)