/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

Merge bzr.dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
27
27
        builder = GraphIndexBuilder()
28
28
        stream = builder.finish()
29
29
        contents = stream.read()
30
 
        self.assertEqual("Bazaar Graph Index 1\nnode_ref_lists=0\nkey_elements=1\n\n", contents)
 
30
        self.assertEqual(
 
31
            "Bazaar Graph Index 1\nnode_ref_lists=0\nkey_elements=1\nlen=0\n\n",
 
32
            contents)
31
33
 
32
34
    def test_build_index_empty_two_element_keys(self):
33
35
        builder = GraphIndexBuilder(key_elements=2)
34
36
        stream = builder.finish()
35
37
        contents = stream.read()
36
 
        self.assertEqual("Bazaar Graph Index 1\nnode_ref_lists=0\nkey_elements=2\n\n", contents)
 
38
        self.assertEqual(
 
39
            "Bazaar Graph Index 1\nnode_ref_lists=0\nkey_elements=2\nlen=0\n\n",
 
40
            contents)
37
41
 
38
42
    def test_build_index_one_reference_list_empty(self):
39
43
        builder = GraphIndexBuilder(reference_lists=1)
40
44
        stream = builder.finish()
41
45
        contents = stream.read()
42
 
        self.assertEqual("Bazaar Graph Index 1\nnode_ref_lists=1\nkey_elements=1\n\n", contents)
 
46
        self.assertEqual(
 
47
            "Bazaar Graph Index 1\nnode_ref_lists=1\nkey_elements=1\nlen=0\n\n",
 
48
            contents)
43
49
 
44
50
    def test_build_index_two_reference_list_empty(self):
45
51
        builder = GraphIndexBuilder(reference_lists=2)
46
52
        stream = builder.finish()
47
53
        contents = stream.read()
48
 
        self.assertEqual("Bazaar Graph Index 1\nnode_ref_lists=2\nkey_elements=1\n\n", contents)
 
54
        self.assertEqual(
 
55
            "Bazaar Graph Index 1\nnode_ref_lists=2\nkey_elements=1\nlen=0\n\n",
 
56
            contents)
49
57
 
50
58
    def test_build_index_one_node_no_refs(self):
51
59
        builder = GraphIndexBuilder()
52
60
        builder.add_node(('akey', ), 'data')
53
61
        stream = builder.finish()
54
62
        contents = stream.read()
55
 
        self.assertEqual("Bazaar Graph Index 1\nnode_ref_lists=0\nkey_elements=1\n"
 
63
        self.assertEqual(
 
64
            "Bazaar Graph Index 1\nnode_ref_lists=0\nkey_elements=1\nlen=1\n"
56
65
            "akey\x00\x00\x00data\n\n", contents)
57
66
 
58
67
    def test_build_index_one_node_no_refs_accepts_empty_reflist(self):
60
69
        builder.add_node(('akey', ), 'data', ())
61
70
        stream = builder.finish()
62
71
        contents = stream.read()
63
 
        self.assertEqual("Bazaar Graph Index 1\nnode_ref_lists=0\nkey_elements=1\n"
 
72
        self.assertEqual(
 
73
            "Bazaar Graph Index 1\nnode_ref_lists=0\nkey_elements=1\nlen=1\n"
64
74
            "akey\x00\x00\x00data\n\n", contents)
65
75
 
66
76
    def test_build_index_one_node_2_element_keys(self):
71
81
        builder.add_node(('akey', 'secondpart'), 'data')
72
82
        stream = builder.finish()
73
83
        contents = stream.read()
74
 
        self.assertEqual("Bazaar Graph Index 1\nnode_ref_lists=0\nkey_elements=2\n"
 
84
        self.assertEqual(
 
85
            "Bazaar Graph Index 1\nnode_ref_lists=0\nkey_elements=2\nlen=1\n"
75
86
            "akey\x00secondpart\x00\x00\x00data\n\n", contents)
76
87
 
77
88
    def test_add_node_empty_value(self):
79
90
        builder.add_node(('akey', ), '')
80
91
        stream = builder.finish()
81
92
        contents = stream.read()
82
 
        self.assertEqual("Bazaar Graph Index 1\nnode_ref_lists=0\nkey_elements=1\n"
 
93
        self.assertEqual(
 
94
            "Bazaar Graph Index 1\nnode_ref_lists=0\nkey_elements=1\nlen=1\n"
83
95
            "akey\x00\x00\x00\n\n", contents)
84
96
 
85
97
    def test_build_index_nodes_sorted(self):
93
105
        builder.add_node(('2001', ), 'data')
94
106
        stream = builder.finish()
95
107
        contents = stream.read()
96
 
        self.assertEqual("Bazaar Graph Index 1\nnode_ref_lists=0\nkey_elements=1\n"
 
108
        self.assertEqual(
 
109
            "Bazaar Graph Index 1\nnode_ref_lists=0\nkey_elements=1\nlen=3\n"
97
110
            "2000\x00\x00\x00data\n"
98
111
            "2001\x00\x00\x00data\n"
99
112
            "2002\x00\x00\x00data\n"
116
129
        builder.add_node(('2001', '2001'), 'data')
117
130
        stream = builder.finish()
118
131
        contents = stream.read()
119
 
        self.assertEqual("Bazaar Graph Index 1\nnode_ref_lists=0\nkey_elements=2\n"
 
132
        self.assertEqual(
 
133
            "Bazaar Graph Index 1\nnode_ref_lists=0\nkey_elements=2\nlen=9\n"
120
134
            "2000\x002000\x00\x00\x00data\n"
121
135
            "2000\x002001\x00\x00\x00data\n"
122
136
            "2000\x002002\x00\x00\x00data\n"
133
147
        builder.add_node(('key', ), 'data', ([], ))
134
148
        stream = builder.finish()
135
149
        contents = stream.read()
136
 
        self.assertEqual("Bazaar Graph Index 1\nnode_ref_lists=1\nkey_elements=1\n"
 
150
        self.assertEqual(
 
151
            "Bazaar Graph Index 1\nnode_ref_lists=1\nkey_elements=1\nlen=1\n"
137
152
            "key\x00\x00\x00data\n"
138
153
            "\n", contents)
139
154
 
142
157
        builder.add_node(('key', 'key2'), 'data', ([], ))
143
158
        stream = builder.finish()
144
159
        contents = stream.read()
145
 
        self.assertEqual("Bazaar Graph Index 1\nnode_ref_lists=1\nkey_elements=2\n"
 
160
        self.assertEqual(
 
161
            "Bazaar Graph Index 1\nnode_ref_lists=1\nkey_elements=2\nlen=1\n"
146
162
            "key\x00key2\x00\x00\x00data\n"
147
163
            "\n", contents)
148
164
 
151
167
        builder.add_node(('key', ), 'data', ([], []))
152
168
        stream = builder.finish()
153
169
        contents = stream.read()
154
 
        self.assertEqual("Bazaar Graph Index 1\nnode_ref_lists=2\nkey_elements=1\n"
 
170
        self.assertEqual(
 
171
            "Bazaar Graph Index 1\nnode_ref_lists=2\nkey_elements=1\nlen=1\n"
155
172
            "key\x00\x00\t\x00data\n"
156
173
            "\n", contents)
157
174
 
161
178
        builder.add_node(('key', ), 'data', ([('reference', )], ))
162
179
        stream = builder.finish()
163
180
        contents = stream.read()
164
 
        self.assertEqual("Bazaar Graph Index 1\nnode_ref_lists=1\nkey_elements=1\n"
165
 
            "key\x00\x0066\x00data\n"
 
181
        self.assertEqual(
 
182
            "Bazaar Graph Index 1\nnode_ref_lists=1\nkey_elements=1\nlen=2\n"
 
183
            "key\x00\x0072\x00data\n"
166
184
            "reference\x00\x00\x00data\n"
167
185
            "\n", contents)
168
186
 
173
191
        builder.add_node(('key', ), 'data', ([('reference', ), ('reference2', )], ))
174
192
        stream = builder.finish()
175
193
        contents = stream.read()
176
 
        self.assertEqual("Bazaar Graph Index 1\nnode_ref_lists=1\nkey_elements=1\n"
177
 
            "key\x00\x00071\r088\x00data\n"
 
194
        self.assertEqual(
 
195
            "Bazaar Graph Index 1\nnode_ref_lists=1\nkey_elements=1\nlen=3\n"
 
196
            "key\x00\x00077\r094\x00data\n"
178
197
            "reference\x00\x00\x00data\n"
179
198
            "reference2\x00\x00\x00data\n"
180
199
            "\n", contents)
185
204
        builder.add_node(('rey', ), 'data', ([('keference', )], [('keference', )]))
186
205
        stream = builder.finish()
187
206
        contents = stream.read()
188
 
        self.assertEqual("Bazaar Graph Index 1\nnode_ref_lists=2\nkey_elements=1\n"
 
207
        self.assertEqual(
 
208
            "Bazaar Graph Index 1\nnode_ref_lists=2\nkey_elements=1\nlen=2\n"
189
209
            "keference\x00\x00\t\x00data\n"
190
 
            "rey\x00\x0053\t53\x00data\n"
 
210
            "rey\x00\x0059\t59\x00data\n"
191
211
            "\n", contents)
192
212
 
193
213
    def test_add_node_referencing_missing_key_makes_absent(self):
195
215
        builder.add_node(('rey', ), 'data', ([('beference', ), ('aeference2', )], ))
196
216
        stream = builder.finish()
197
217
        contents = stream.read()
198
 
        self.assertEqual("Bazaar Graph Index 1\nnode_ref_lists=1\nkey_elements=1\n"
 
218
        self.assertEqual(
 
219
            "Bazaar Graph Index 1\nnode_ref_lists=1\nkey_elements=1\nlen=1\n"
199
220
            "aeference2\x00a\x00\x00\n"
200
221
            "beference\x00a\x00\x00\n"
201
 
            "rey\x00\x0068\r53\x00data\n"
 
222
            "rey\x00\x00074\r059\x00data\n"
202
223
            "\n", contents)
203
224
 
204
225
    def test_node_references_three_digits(self):
208
229
        builder.add_node(('2-key', ), '', (references, ))
209
230
        stream = builder.finish()
210
231
        contents = stream.read()
211
 
        self.assertEqual("Bazaar Graph Index 1\nnode_ref_lists=1\nkey_elements=1\n"
 
232
        self.assertEqual(
 
233
            "Bazaar Graph Index 1\nnode_ref_lists=1\nkey_elements=1\nlen=1\n"
212
234
            "0\x00a\x00\x00\n"
213
235
            "1\x00a\x00\x00\n"
214
236
            "2\x00a\x00\x00\n"
215
 
            "2-key\x00\x00145\r139\r133\r127\r121\r115\r065\r059\r053\x00\n"
 
237
            "2-key\x00\x00151\r145\r139\r133\r127\r121\r071\r065\r059\x00\n"
216
238
            "3\x00a\x00\x00\n"
217
239
            "4\x00a\x00\x00\n"
218
240
            "5\x00a\x00\x00\n"
228
250
        builder.add_node(('parent', ), '', ([('aail', ), ('zther', )], []))
229
251
        stream = builder.finish()
230
252
        contents = stream.read()
231
 
        self.assertEqual("Bazaar Graph Index 1\nnode_ref_lists=2\nkey_elements=1\n"
 
253
        self.assertEqual(
 
254
            "Bazaar Graph Index 1\nnode_ref_lists=2\nkey_elements=1\nlen=1\n"
232
255
            "aail\x00a\x00\x00\n"
233
 
            "parent\x00\x0053\r78\t\x00\n"
 
256
            "parent\x00\x0059\r84\t\x00\n"
234
257
            "zther\x00a\x00\x00\n"
235
258
            "\n", contents)
236
259
 
331
354
 
332
355
    def make_index(self, ref_lists=0, key_elements=1, nodes=[]):
333
356
        builder = GraphIndexBuilder(ref_lists, key_elements=key_elements)
334
 
        for node, value, references in nodes:
335
 
            builder.add_node(node, value, references)
 
357
        for key, value, references in nodes:
 
358
            builder.add_node(key, value, references)
336
359
        stream = builder.finish()
337
360
        trans = self.get_transport()
338
361
        trans.put_file('index', stream)
455
478
            (index, ('name', 'fin2'), 'beta', ((), ))]),
456
479
            set(index.iter_entries_prefix([('name', None)])))
457
480
 
 
481
    def test_key_count_empty(self):
 
482
        index = self.make_index()
 
483
        self.assertEqual(0, index.key_count())
 
484
 
 
485
    def test_key_count_one(self):
 
486
        index = self.make_index(nodes=[(('name', ), '', ())])
 
487
        self.assertEqual(1, index.key_count())
 
488
 
 
489
    def test_key_count_two(self):
 
490
        index = self.make_index(nodes=[
 
491
            (('name', ), '', ()), (('foo', ), '', ())])
 
492
        self.assertEqual(2, index.key_count())
 
493
 
458
494
    def test_validate_bad_index_errors(self):
459
495
        trans = self.get_transport()
460
496
        trans.put_bytes('name', "not an index\n")
499
535
 
500
536
    def make_index(self, name, ref_lists=0, key_elements=1, nodes=[]):
501
537
        builder = GraphIndexBuilder(ref_lists, key_elements=key_elements)
502
 
        for node, value, references in nodes:
503
 
            builder.add_node(node, value, references)
 
538
        for key, value, references in nodes:
 
539
            builder.add_node(key, value, references)
504
540
        stream = builder.finish()
505
541
        trans = self.get_transport()
506
542
        trans.put_file(name, stream)
624
660
        self.assertEqual([(index1, ('key', ), '')],
625
661
            list(index.iter_entries([('key', )])))
626
662
 
 
663
    def test_key_count_empty(self):
 
664
        index1 = self.make_index('1', nodes=[])
 
665
        index2 = self.make_index('2', nodes=[])
 
666
        index = CombinedGraphIndex([index1, index2])
 
667
        self.assertEqual(0, index.key_count())
 
668
 
 
669
    def test_key_count_sums_index_keys(self):
 
670
        index1 = self.make_index('1', nodes=[
 
671
            (('1',), '', ()),
 
672
            (('2',), '', ())])
 
673
        index2 = self.make_index('2', nodes=[(('1',), '', ())])
 
674
        index = CombinedGraphIndex([index1, index2])
 
675
        self.assertEqual(3, index.key_count())
 
676
 
627
677
    def test_validate_bad_child_index_errors(self):
628
678
        trans = self.get_transport()
629
679
        trans.put_bytes('name', "not an index\n")
745
795
        index = self.make_index()
746
796
        self.assertEqual([], list(index.iter_entries(['a'])))
747
797
 
 
798
    def test_key_count_empty(self):
 
799
        index = self.make_index()
 
800
        self.assertEqual(0, index.key_count())
 
801
 
 
802
    def test_key_count_one(self):
 
803
        index = self.make_index(nodes=[(('name', ), '')])
 
804
        self.assertEqual(1, index.key_count())
 
805
 
 
806
    def test_key_count_two(self):
 
807
        index = self.make_index(nodes=[(('name', ), ''), (('foo', ), '')])
 
808
        self.assertEqual(2, index.key_count())
 
809
 
748
810
    def test_validate_empty(self):
749
811
        index = self.make_index()
750
812
        index.validate()
760
822
        result = InMemoryGraphIndex(ref_lists, key_elements=key_elements)
761
823
        result.add_nodes(nodes)
762
824
        if add_callback:
763
 
            add_nodes_callback=result.add_nodes
 
825
            add_nodes_callback = result.add_nodes
764
826
        else:
765
 
            add_nodes_callback=None
 
827
            add_nodes_callback = None
766
828
        adapter = GraphIndexPrefixAdapter(result, ('prefix', ), key_elements - 1,
767
829
            add_nodes_callback=add_nodes_callback)
768
830
        return result, adapter
833
895
            (index, ('prefix2', 'key2', ), 'data2', ((('prefix2', 'key1', ),),))]),
834
896
            set(adapter.iter_entries_prefix([('prefix2', None)])))
835
897
 
 
898
    def test_key_count_no_matching_keys(self):
 
899
        index, adapter = self.make_index(nodes=[
 
900
            (('notprefix', 'key1'), 'data', ((), ))])
 
901
        self.assertEqual(0, adapter.key_count())
 
902
 
 
903
    def test_key_count_some_keys(self):
 
904
        index, adapter = self.make_index(nodes=[
 
905
            (('notprefix', 'key1'), 'data', ((), )),
 
906
            (('prefix', 'key1'), 'data1', ((), )),
 
907
            (('prefix', 'key2'), 'data2', ((('prefix', 'key1'),),))])
 
908
        self.assertEqual(2, adapter.key_count())
 
909
 
836
910
    def test_validate(self):
837
911
        index, adapter = self.make_index()
838
912
        calls = []