~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_btree_index.py

  • Committer: Jelmer Vernooij
  • Date: 2012-01-04 16:10:04 UTC
  • mto: This revision was merged to the branch mainline in revision 6424.
  • Revision ID: jelmer@samba.org-20120104161004-2gepg7c0famy3lq6
Fix config name.

Show diffs side-by-side

added added

removed removed

Lines of Context:
33
33
    TestCaseWithTransport,
34
34
    scenarios,
35
35
    )
 
36
from bzrlib.tests import (
 
37
    features,
 
38
    )
36
39
 
37
40
 
38
41
load_tests = scenarios.load_tests_apply_scenarios
47
50
    return scenarios
48
51
 
49
52
 
50
 
compiled_btreeparser_feature = tests.ModuleAvailableFeature(
 
53
compiled_btreeparser_feature = features.ModuleAvailableFeature(
51
54
    'bzrlib._btree_serializer_pyx')
52
55
 
53
56
 
278
281
 
279
282
        for node in nodes:
280
283
            builder.add_node(*node)
281
 
        t = transport.get_transport('trace+' + self.get_url(''))
 
284
        t = transport.get_transport_from_url('trace+' + self.get_url(''))
282
285
        size = t.put_file('index', self.time(builder.finish))
283
286
        del builder
284
287
        index = btree_index.BTreeGraphIndex(t, 'index', size)
605
608
        for key, value, references in nodes:
606
609
            builder.add_node(key, value, references)
607
610
        stream = builder.finish()
608
 
        trans = transport.get_transport('trace+' + self.get_url())
 
611
        trans = transport.get_transport_from_url('trace+' + self.get_url())
609
612
        size = trans.put_file('index', stream)
610
613
        return btree_index.BTreeGraphIndex(trans, 'index', size)
611
614
 
646
649
        self.assertEqual(0, len(index._leaf_node_cache))
647
650
 
648
651
    def test_trivial_constructor(self):
649
 
        t = transport.get_transport('trace+' + self.get_url(''))
 
652
        t = transport.get_transport_from_url('trace+' + self.get_url(''))
650
653
        index = btree_index.BTreeGraphIndex(t, 'index', None)
651
654
        # Checks the page size at load, but that isn't logged yet.
652
655
        self.assertEqual([], t._activity)
653
656
 
654
657
    def test_with_size_constructor(self):
655
 
        t = transport.get_transport('trace+' + self.get_url(''))
 
658
        t = transport.get_transport_from_url('trace+' + self.get_url(''))
656
659
        index = btree_index.BTreeGraphIndex(t, 'index', 1)
657
660
        # Checks the page size at load, but that isn't logged yet.
658
661
        self.assertEqual([], t._activity)
659
662
 
660
663
    def test_empty_key_count_no_size(self):
661
664
        builder = btree_index.BTreeBuilder(key_elements=1, reference_lists=0)
662
 
        t = transport.get_transport('trace+' + self.get_url(''))
 
665
        t = transport.get_transport_from_url('trace+' + self.get_url(''))
663
666
        t.put_file('index', builder.finish())
664
667
        index = btree_index.BTreeGraphIndex(t, 'index', None)
665
668
        del t._activity[:]
672
675
 
673
676
    def test_empty_key_count(self):
674
677
        builder = btree_index.BTreeBuilder(key_elements=1, reference_lists=0)
675
 
        t = transport.get_transport('trace+' + self.get_url(''))
 
678
        t = transport.get_transport_from_url('trace+' + self.get_url(''))
676
679
        size = t.put_file('index', builder.finish())
677
680
        self.assertEqual(72, size)
678
681
        index = btree_index.BTreeGraphIndex(t, 'index', size)
688
691
        nodes = self.make_nodes(35, 2, 2)
689
692
        for node in nodes:
690
693
            builder.add_node(*node)
691
 
        t = transport.get_transport('trace+' + self.get_url(''))
 
694
        t = transport.get_transport_from_url('trace+' + self.get_url(''))
692
695
        size = t.put_file('index', builder.finish())
693
696
        index = btree_index.BTreeGraphIndex(t, 'index', size)
694
697
        del t._activity[:]
720
723
 
721
724
    def test__read_nodes_no_size_one_page_reads_once(self):
722
725
        self.make_index(nodes=[(('key',), 'value', ())])
723
 
        trans = transport.get_transport('trace+' + self.get_url())
 
726
        trans = transport.get_transport_from_url('trace+' + self.get_url())
724
727
        index = btree_index.BTreeGraphIndex(trans, 'index', None)
725
728
        del trans._activity[:]
726
729
        nodes = dict(index._read_nodes([0]))
734
737
        index.key_count()
735
738
        num_pages = index._row_offsets[-1]
736
739
        # Reopen with a traced transport and no size
737
 
        trans = transport.get_transport('trace+' + self.get_url())
 
740
        trans = transport.get_transport_from_url('trace+' + self.get_url())
738
741
        index = btree_index.BTreeGraphIndex(trans, 'index', None)
739
742
        del trans._activity[:]
740
743
        nodes = dict(index._read_nodes([0]))
745
748
        nodes = self.make_nodes(160, 2, 2)
746
749
        for node in nodes:
747
750
            builder.add_node(*node)
748
 
        t = transport.get_transport('trace+' + self.get_url(''))
 
751
        t = transport.get_transport_from_url('trace+' + self.get_url(''))
749
752
        size = t.put_file('index', builder.finish())
750
753
        self.assertEqual(17692, size)
751
754
        index = btree_index.BTreeGraphIndex(t, 'index', size)
761
764
        nodes = self.make_nodes(45, 2, 2)
762
765
        for node in nodes:
763
766
            builder.add_node(*node)
764
 
        t = transport.get_transport('trace+' + self.get_url(''))
 
767
        t = transport.get_transport_from_url('trace+' + self.get_url(''))
765
768
        size = t.put_file('index', builder.finish())
766
769
        index = btree_index.BTreeGraphIndex(t, 'index', size)
767
770
        del t._activity[:]
777
780
        nodes = self.make_nodes(80, 2, 2)
778
781
        for node in nodes:
779
782
            builder.add_node(*node)
780
 
        t = transport.get_transport('trace+' + self.get_url(''))
 
783
        t = transport.get_transport_from_url('trace+' + self.get_url(''))
781
784
        size = t.put_file('index', builder.finish())
782
785
        # Root page, 2 leaf pages
783
786
        self.assertEqual(9339, size)
795
798
 
796
799
    def test_eq_ne(self):
797
800
        # two indices are equal when constructed with the same parameters:
798
 
        t1 = transport.get_transport('trace+' + self.get_url(''))
 
801
        t1 = transport.get_transport_from_url('trace+' + self.get_url(''))
799
802
        t2 = self.get_transport()
800
803
        self.assertTrue(
801
804
            btree_index.BTreeGraphIndex(t1, 'index', None) ==
828
831
            btree_index.BTreeGraphIndex(t1, 'index', 10) !=
829
832
            btree_index.BTreeGraphIndex(t1, 'index', 20))
830
833
 
 
834
    def test_key_too_big(self):
 
835
        # the size that matters here is the _compressed_ size of the key, so we can't
 
836
        # do a simple character repeat.
 
837
        bigKey = ''.join(map(repr, xrange(btree_index._PAGE_SIZE)))
 
838
        self.assertRaises(errors.BadIndexKey,
 
839
                          self.make_index,
 
840
                          nodes=[((bigKey,), 'value', ())])
 
841
        
831
842
    def test_iter_all_only_root_no_size(self):
832
843
        self.make_index(nodes=[(('key',), 'value', ())])
833
 
        t = transport.get_transport('trace+' + self.get_url(''))
 
844
        t = transport.get_transport_from_url('trace+' + self.get_url(''))
834
845
        index = btree_index.BTreeGraphIndex(t, 'index', None)
835
846
        del t._activity[:]
836
847
        self.assertEqual([(('key',), 'value')],
847
858
        nodes = self.make_nodes(10000, 2, 2)
848
859
        for node in nodes:
849
860
            builder.add_node(*node)
850
 
        t = transport.get_transport('trace+' + self.get_url(''))
 
861
        t = transport.get_transport_from_url('trace+' + self.get_url(''))
851
862
        size = t.put_file('index', builder.finish())
852
863
        self.assertEqual(1303220, size, 'number of expected bytes in the'
853
864
                                        ' output changed')
902
913
        nodes = self.make_nodes(160, 2, 2)
903
914
        for node in nodes:
904
915
            builder.add_node(*node)
905
 
        t = transport.get_transport('trace+' + self.get_url(''))
 
916
        t = transport.get_transport_from_url('trace+' + self.get_url(''))
906
917
        size = t.put_file('index', builder.finish())
907
918
        del builder
908
919
        index = btree_index.BTreeGraphIndex(t, 'index', size)
1351
1362
        BTreeGraphIndex with the recommended information.
1352
1363
        """
1353
1364
        index = btree_index.BTreeGraphIndex(
1354
 
            transport.get_transport('memory:///'), 'test-index', size=size)
 
1365
            transport.get_transport_from_url('memory:///'),
 
1366
            'test-index', size=size)
1355
1367
        if recommended_pages is not None:
1356
1368
            index._recommended_pages = recommended_pages
1357
1369
        return index