/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_index.py

  • Committer: Parth Malwankar
  • Date: 2010-04-19 13:04:30 UTC
  • mfrom: (5165 +trunk)
  • mto: This revision was merged to the branch mainline in revision 5166.
  • Revision ID: parth.malwankar@gmail.com-20100419130430-njvxdaka6xbqwvjw
merged in trunk and moved NEWS entry to right location.

Show diffs side-by-side

added added

removed removed

Lines of Context:
388
388
        size = trans.put_file('index', stream)
389
389
        return GraphIndex(trans, 'index', size)
390
390
 
 
391
    def make_index_with_offset(self, ref_lists=0, key_elements=1, nodes=[],
 
392
                               offset=0):
 
393
        builder = GraphIndexBuilder(ref_lists, key_elements=key_elements)
 
394
        for key, value, references in nodes:
 
395
            builder.add_node(key, value, references)
 
396
        content = builder.finish().read()
 
397
        size = len(content)
 
398
        trans = self.get_transport()
 
399
        trans.put_bytes('index', (' '*offset) + content)
 
400
        return GraphIndex(trans, 'index', size, offset=offset)
 
401
 
391
402
    def test_clear_cache(self):
392
403
        index = self.make_index()
393
404
        # For now, we just want to make sure the api is available. As this is
399
410
        trans.put_bytes('name', "not an index\n")
400
411
        index = GraphIndex(trans, 'name', 13)
401
412
 
 
413
    def test_with_offset(self):
 
414
        nodes = self.make_nodes(200)
 
415
        index = self.make_index_with_offset(offset=1234567, nodes=nodes)
 
416
        self.assertEqual(200, index.key_count())
 
417
 
 
418
    def test_buffer_all_with_offset(self):
 
419
        nodes = self.make_nodes(200)
 
420
        index = self.make_index_with_offset(offset=1234567, nodes=nodes)
 
421
        index._buffer_all()
 
422
        self.assertEqual(200, index.key_count())
 
423
 
 
424
    def test_side_effect_buffering_with_offset(self):
 
425
        nodes = self.make_nodes(20)
 
426
        index = self.make_index_with_offset(offset=1234567, nodes=nodes)
 
427
        index._transport.recommended_page_size = lambda:64*1024
 
428
        subset_nodes = [nodes[0][0], nodes[10][0], nodes[19][0]]
 
429
        entries = [n[1] for n in index.iter_entries(subset_nodes)]
 
430
        self.assertEqual(sorted(subset_nodes), sorted(entries))
 
431
        self.assertEqual(20, index.key_count())
 
432
 
402
433
    def test_open_sets_parsed_map_empty(self):
403
434
        index = self.make_index()
404
435
        self.assertEqual([], index._parsed_byte_map)
1349
1380
        self.assertListRaises(errors.NoSuchFile, index.iter_entries_prefix,
1350
1381
                                                 [('1',)])
1351
1382
 
 
1383
 
 
1384
    def make_index_with_simple_nodes(self, name, num_nodes=1):
 
1385
        """Make an index named after 'name', with keys named after 'name' too.
 
1386
 
 
1387
        Nodes will have a value of '' and no references.
 
1388
        """
 
1389
        nodes = [
 
1390
            (('index-%s-key-%s' % (name, n),), '', ())
 
1391
            for n in range(1, num_nodes+1)]
 
1392
        return self.make_index('index-%s' % name, 0, nodes=nodes)
 
1393
 
 
1394
    def test_reorder_after_iter_entries(self):
 
1395
        # Four indices: [key1] in index1, [key2,key3] in index2, [] in index3,
 
1396
        # [key4] in index4.
 
1397
        index = CombinedGraphIndex([])
 
1398
        index.insert_index(0, self.make_index_with_simple_nodes('1'), '1')
 
1399
        index.insert_index(1, self.make_index_with_simple_nodes('2'), '2')
 
1400
        index.insert_index(2, self.make_index_with_simple_nodes('3'), '3')
 
1401
        index.insert_index(3, self.make_index_with_simple_nodes('4'), '4')
 
1402
        index1, index2, index3, index4 = index._indices
 
1403
        # Query a key from index4 and index2.
 
1404
        self.assertLength(2, list(index.iter_entries(
 
1405
            [('index-4-key-1',), ('index-2-key-1',)])))
 
1406
        # Now index2 and index4 should be moved to the front (and index1 should
 
1407
        # still be before index3).
 
1408
        self.assertEqual([index2, index4, index1, index3], index._indices)
 
1409
        self.assertEqual(['2', '4', '1', '3'], index._index_names)
 
1410
 
 
1411
    def test_reorder_propagates_to_siblings(self):
 
1412
        # Two CombinedGraphIndex objects, with the same number of indicies with
 
1413
        # matching names.
 
1414
        cgi1 = CombinedGraphIndex([])
 
1415
        cgi2 = CombinedGraphIndex([])
 
1416
        cgi1.insert_index(0, self.make_index_with_simple_nodes('1-1'), 'one')
 
1417
        cgi1.insert_index(1, self.make_index_with_simple_nodes('1-2'), 'two')
 
1418
        cgi2.insert_index(0, self.make_index_with_simple_nodes('2-1'), 'one')
 
1419
        cgi2.insert_index(1, self.make_index_with_simple_nodes('2-2'), 'two')
 
1420
        index2_1, index2_2 = cgi2._indices
 
1421
        cgi1.set_sibling_indices([cgi2])
 
1422
        # Trigger a reordering in cgi1.  cgi2 will be reordered as well.
 
1423
        list(cgi1.iter_entries([('index-1-2-key-1',)]))
 
1424
        self.assertEqual([index2_2, index2_1], cgi2._indices)
 
1425
        self.assertEqual(['two', 'one'], cgi2._index_names)
 
1426
 
1352
1427
    def test_validate_reloads(self):
1353
1428
        index, reload_counter = self.make_combined_index_with_missing()
1354
1429
        index.validate()