Read the number of unscanned clair images from the block allocator
This commit is contained in:
parent
0214b1ba9f
commit
b03e03c389
5 changed files with 61 additions and 15 deletions
|
@ -9,6 +9,7 @@ from util.migrate.allocator import CompletedKeys, NoAvailableKeysError, yield_ra
|
|||
class CompletedTestCase(unittest.TestCase):
|
||||
def test_merge_blocks_operations(self):
|
||||
candidates = CompletedKeys(10)
|
||||
self.assertEqual(10, candidates.num_remaining)
|
||||
candidates.mark_completed(1, 5)
|
||||
|
||||
self.assertTrue(candidates.is_available(5))
|
||||
|
@ -18,84 +19,104 @@ class CompletedTestCase(unittest.TestCase):
|
|||
self.assertFalse(candidates.is_available(11))
|
||||
self.assertFalse(candidates.is_available(10))
|
||||
self.assertEqual(1, len(candidates._slabs))
|
||||
self.assertEqual(6, candidates.num_remaining)
|
||||
|
||||
candidates.mark_completed(5, 6)
|
||||
self.assertFalse(candidates.is_available(5))
|
||||
self.assertTrue(candidates.is_available(6))
|
||||
self.assertEqual(1, len(candidates._slabs))
|
||||
self.assertEqual(5, candidates.num_remaining)
|
||||
|
||||
candidates.mark_completed(3, 8)
|
||||
self.assertTrue(candidates.is_available(9))
|
||||
self.assertTrue(candidates.is_available(8))
|
||||
self.assertFalse(candidates.is_available(7))
|
||||
self.assertEqual(1, len(candidates._slabs))
|
||||
self.assertEqual(3, candidates.num_remaining)
|
||||
|
||||
def test_adjust_max(self):
|
||||
candidates = CompletedKeys(10)
|
||||
self.assertEqual(10, candidates.num_remaining)
|
||||
self.assertEqual(0, len(candidates._slabs))
|
||||
|
||||
self.assertTrue(candidates.is_available(9))
|
||||
candidates.mark_completed(5, 12)
|
||||
self.assertEqual(0, len(candidates._slabs))
|
||||
self.assertEqual(5, candidates.num_remaining)
|
||||
|
||||
self.assertFalse(candidates.is_available(9))
|
||||
self.assertTrue(candidates.is_available(4))
|
||||
|
||||
def test_adjust_min(self):
|
||||
candidates = CompletedKeys(10)
|
||||
self.assertEqual(10, candidates.num_remaining)
|
||||
self.assertEqual(0, len(candidates._slabs))
|
||||
|
||||
self.assertTrue(candidates.is_available(2))
|
||||
candidates.mark_completed(0, 3)
|
||||
self.assertEqual(0, len(candidates._slabs))
|
||||
self.assertEqual(7, candidates.num_remaining)
|
||||
|
||||
self.assertFalse(candidates.is_available(2))
|
||||
self.assertTrue(candidates.is_available(4))
|
||||
|
||||
def test_inside_block(self):
|
||||
candidates = CompletedKeys(10)
|
||||
self.assertEqual(10, candidates.num_remaining)
|
||||
candidates.mark_completed(1, 8)
|
||||
self.assertEqual(1, len(candidates._slabs))
|
||||
self.assertEqual(3, candidates.num_remaining)
|
||||
|
||||
candidates.mark_completed(2, 5)
|
||||
self.assertEqual(1, len(candidates._slabs))
|
||||
self.assertEqual(3, candidates.num_remaining)
|
||||
self.assertFalse(candidates.is_available(1))
|
||||
self.assertFalse(candidates.is_available(5))
|
||||
|
||||
def test_wrap_block(self):
|
||||
candidates = CompletedKeys(10)
|
||||
self.assertEqual(10, candidates.num_remaining)
|
||||
candidates.mark_completed(2, 5)
|
||||
self.assertEqual(1, len(candidates._slabs))
|
||||
self.assertEqual(7, candidates.num_remaining)
|
||||
|
||||
candidates.mark_completed(1, 8)
|
||||
self.assertEqual(1, len(candidates._slabs))
|
||||
self.assertEqual(3, candidates.num_remaining)
|
||||
self.assertFalse(candidates.is_available(1))
|
||||
self.assertFalse(candidates.is_available(5))
|
||||
|
||||
def test_non_contiguous(self):
|
||||
candidates = CompletedKeys(10)
|
||||
self.assertEqual(10, candidates.num_remaining)
|
||||
|
||||
candidates.mark_completed(1, 5)
|
||||
self.assertEqual(1, len(candidates._slabs))
|
||||
self.assertEqual(6, candidates.num_remaining)
|
||||
self.assertTrue(candidates.is_available(5))
|
||||
self.assertTrue(candidates.is_available(6))
|
||||
|
||||
candidates.mark_completed(6, 8)
|
||||
self.assertEqual(2, len(candidates._slabs))
|
||||
self.assertEqual(4, candidates.num_remaining)
|
||||
self.assertTrue(candidates.is_available(5))
|
||||
self.assertFalse(candidates.is_available(6))
|
||||
|
||||
def test_big_merge(self):
|
||||
candidates = CompletedKeys(10)
|
||||
self.assertEqual(10, candidates.num_remaining)
|
||||
|
||||
candidates.mark_completed(1, 5)
|
||||
self.assertEqual(1, len(candidates._slabs))
|
||||
self.assertEqual(6, candidates.num_remaining)
|
||||
|
||||
candidates.mark_completed(6, 8)
|
||||
self.assertEqual(2, len(candidates._slabs))
|
||||
self.assertEqual(4, candidates.num_remaining)
|
||||
|
||||
candidates.mark_completed(5, 6)
|
||||
self.assertEqual(1, len(candidates._slabs))
|
||||
self.assertEqual(3, candidates.num_remaining)
|
||||
|
||||
def test_range_limits(self):
|
||||
candidates = CompletedKeys(10)
|
||||
|
@ -113,6 +134,8 @@ class CompletedTestCase(unittest.TestCase):
|
|||
self.assertTrue(candidates.is_available(start))
|
||||
candidates.mark_completed(start, start + 10)
|
||||
|
||||
self.assertEqual(0, candidates.num_remaining)
|
||||
|
||||
def test_huge_dataset(self):
|
||||
candidates = CompletedKeys(1024 * 1024)
|
||||
start_time = datetime.now()
|
||||
|
@ -125,6 +148,7 @@ class CompletedTestCase(unittest.TestCase):
|
|||
iterations += 1
|
||||
|
||||
self.assertGreater(iterations, 1024)
|
||||
self.assertEqual(0, candidates.num_remaining)
|
||||
|
||||
|
||||
class FakeQuery(object):
|
||||
|
|
Reference in a new issue