def test_iteritems(self): idx = NSIndex() for x in range(100): idx[bytes('%-0.32d' % x, 'ascii')] = x, x all = list(idx.iteritems()) self.assert_equal(len(all), 100) second_half = list(idx.iteritems(marker=all[49][0])) self.assert_equal(len(second_half), 50) self.assert_equal(second_half, all[50:])
def test_read_only(self): """Make sure read_only indices work even they contain a lot of tombstones """ idx_name = tempfile.NamedTemporaryFile() idx = NSIndex.create(idx_name.name) for x in range(100): idx[bytes('%-0.32d' % x, 'ascii')] = x, x for x in range(99): del idx[bytes('%-0.32d' % x, 'ascii')] idx.flush() idx2 = NSIndex(idx_name.name, readonly=True) self.assert_equal(idx2[bytes('%-0.32d' % 99, 'ascii')], (99, 99))
def test_iteritems(self): idx_name = tempfile.NamedTemporaryFile() idx = NSIndex.create(idx_name.name) for x in range(100): idx[bytes('%-0.32d' % x, 'ascii')] = x, x all = list(idx.iteritems()) self.assert_equal(len(all), 100) second_half = list(idx.iteritems(marker=all[49][0])) self.assert_equal(len(second_half), 50) self.assert_equal(second_half, all[50:])
def test_resize(self): n = 2000 # Must be >= MIN_BUCKETS idx_name = tempfile.NamedTemporaryFile() idx = NSIndex() idx.write(idx_name.name) initial_size = os.path.getsize(idx_name.name) self.assert_equal(len(idx), 0) for x in range(n): idx[bytes('%-32d' % x, 'ascii')] = x, x idx.write(idx_name.name) self.assert_true(initial_size < os.path.getsize(idx_name.name)) for x in range(n): del idx[bytes('%-32d' % x, 'ascii')] self.assert_equal(len(idx), 0) idx.write(idx_name.name) self.assert_equal(initial_size, os.path.getsize(idx_name.name))
def open_index(self): return NSIndex.read( os.path.join(self.tmppath, 'repository', 'index.{}'.format(self.get_head())))
def extract_and_unlink_index(): index_name = [n for n in os.listdir(os.path.join(self.tmppath, 'repository')) if n.startswith('index')][0] idx = NSIndex(os.path.join(self.tmppath, 'repository', index_name)) os.unlink(os.path.join(self.tmppath, 'repository', index_name)) return list(idx.iteritems())