595
595
('key3',): "yet another text which won't be extracted\n"
596
596
"with a reasonable amount of compressible bytes\n",
597
597
('key4',): "this will be extracted\n"
598
"but references bytes from\n"
598
"but references most of its bytes from\n"
599
599
"yet another text which won't be extracted\n"
600
600
"with a reasonable amount of compressible bytes\n",
661
661
entries, block = self.make_block(self._texts)
662
662
manager = groupcompress._LazyGroupContentManager(block)
663
663
self.add_key_to_manager(('key1',), entries, block, manager)
664
self.add_key_to_manager(('key3',), entries, block, manager)
665
664
self.add_key_to_manager(('key4',), entries, block, manager)
666
665
block_bytes = block.to_bytes()
667
666
wire_bytes = manager._wire_bytes()
671
670
header_len = int(header_len)
672
671
block_len = int(block_len)
673
672
self.assertEqual('groupcompress-block', storage_kind)
674
self.assertEqual(41, z_header_len)
675
self.assertEqual(39, header_len)
673
self.assertEqual(33, z_header_len)
674
self.assertEqual(25, header_len)
676
675
self.assertEqual(len(block_bytes), block_len)
677
676
z_header = rest[:z_header_len]
678
677
header = zlib.decompress(z_header)
679
678
self.assertEqual(header_len, len(header))
680
679
entry1 = entries[('key1',)]
681
entry3 = entries[('key3',)]
682
680
entry4 = entries[('key4',)]
683
681
self.assertEqualDiff('key1\n'
684
682
'\n' # no parents
685
683
'%d\n' # start offset
695
689
% (entry1.start, entry1.end,
696
entry3.start, entry3.end,
697
690
entry4.start, entry4.end),
699
692
z_block = rest[z_header_len:]
703
696
entries, block = self.make_block(self._texts)
704
697
manager = groupcompress._LazyGroupContentManager(block)
705
698
self.add_key_to_manager(('key1',), entries, block, manager)
706
self.add_key_to_manager(('key3',), entries, block, manager)
707
699
self.add_key_to_manager(('key4',), entries, block, manager)
708
700
wire_bytes = manager._wire_bytes()
709
701
self.assertStartsWith(wire_bytes, 'groupcompress-block\n')
710
702
manager = groupcompress._LazyGroupContentManager.from_bytes(wire_bytes)
711
703
self.assertIsInstance(manager, groupcompress._LazyGroupContentManager)
712
self.assertEqual(3, len(manager._factories))
704
self.assertEqual(2, len(manager._factories))
713
705
self.assertEqual(block._z_content, manager._block._z_content)
714
706
result_order = []
715
707
for record in manager.get_record_stream():
716
708
result_order.append(record.key)
717
709
text = self._texts[record.key]
718
710
self.assertEqual(text, record.get_bytes_as('fulltext'))
719
self.assertEqual([('key1',), ('key3',), ('key4',)], result_order)
711
self.assertEqual([('key1',), ('key4',)], result_order)
721
713
def test__check_rebuild_no_changes(self):
722
714
entries, block = self.make_block(self._texts)