~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_groupcompress.py

  • Committer: Martin Pool
  • Date: 2009-06-19 09:06:56 UTC
  • mfrom: (4463 +trunk)
  • mto: This revision was merged to the branch mainline in revision 4464.
  • Revision ID: mbp@sourcefrog.net-20090619090656-d5weqeecyscv8kqp
merge news

Show diffs side-by-side

added added

removed removed

Lines of Context:
25
25
    index as _mod_index,
26
26
    osutils,
27
27
    tests,
28
 
    trace,
29
28
    versionedfile,
30
29
    )
31
30
from bzrlib.osutils import sha_string
364
363
        raw_bytes = zlib.decompress(remaining_bytes)
365
364
        self.assertEqual(content, raw_bytes)
366
365
 
367
 
        # we should get the same results if using the chunked version
368
 
        gcb = groupcompress.GroupCompressBlock()
369
 
        gcb.set_chunked_content(['this is some content\n'
370
 
                                 'this content will be compressed\n'],
371
 
                                 len(content))
372
 
        old_bytes = bytes
373
 
        bytes = gcb.to_bytes()
374
 
        self.assertEqual(old_bytes, bytes)
375
 
 
376
366
    def test_partial_decomp(self):
377
367
        content_chunks = []
378
368
        # We need a sufficient amount of data so that zlib.decompress has
475
465
class TestCaseWithGroupCompressVersionedFiles(tests.TestCaseWithTransport):
476
466
 
477
467
    def make_test_vf(self, create_graph, keylength=1, do_cleanup=True,
478
 
                     dir='.', inconsistency_fatal=True):
 
468
                     dir='.'):
479
469
        t = self.get_transport(dir)
480
470
        t.ensure_base()
481
471
        vf = groupcompress.make_pack_factory(graph=create_graph,
482
 
            delta=False, keylength=keylength,
483
 
            inconsistency_fatal=inconsistency_fatal)(t)
 
472
            delta=False, keylength=keylength)(t)
484
473
        if do_cleanup:
485
474
            self.addCleanup(groupcompress.cleanup_pack_group, vf)
486
475
        return vf
660
649
            frozenset([('parent-1',), ('parent-2',)]),
661
650
            index.get_missing_parents())
662
651
 
663
 
    def make_source_with_b(self, a_parent, path):
664
 
        source = self.make_test_vf(True, dir=path)
665
 
        source.add_lines(('a',), (), ['lines\n'])
666
 
        if a_parent:
667
 
            b_parents = (('a',),)
668
 
        else:
669
 
            b_parents = ()
670
 
        source.add_lines(('b',), b_parents, ['lines\n'])
671
 
        return source
672
 
 
673
 
    def do_inconsistent_inserts(self, inconsistency_fatal):
674
 
        target = self.make_test_vf(True, dir='target',
675
 
                                   inconsistency_fatal=inconsistency_fatal)
676
 
        for x in range(2):
677
 
            source = self.make_source_with_b(x==1, 'source%s' % x)
678
 
            target.insert_record_stream(source.get_record_stream(
679
 
                [('b',)], 'unordered', False))
680
 
 
681
 
    def test_inconsistent_redundant_inserts_warn(self):
682
 
        """Should not insert a record that is already present."""
683
 
        warnings = []
684
 
        def warning(template, args):
685
 
            warnings.append(template % args)
686
 
        _trace_warning = trace.warning
687
 
        trace.warning = warning
688
 
        try:
689
 
            self.do_inconsistent_inserts(inconsistency_fatal=False)
690
 
        finally:
691
 
            trace.warning = _trace_warning
692
 
        self.assertEqual(["inconsistent details in skipped record: ('b',)"
693
 
                          " ('42 32 0 8', ((),)) ('74 32 0 8', ((('a',),),))"],
694
 
                         warnings)
695
 
 
696
 
    def test_inconsistent_redundant_inserts_raises(self):
697
 
        e = self.assertRaises(errors.KnitCorrupt, self.do_inconsistent_inserts,
698
 
                              inconsistency_fatal=True)
699
 
        self.assertContainsRe(str(e), "Knit.* corrupt: inconsistent details"
700
 
                              " in add_records:"
701
 
                              " \('b',\) \('42 32 0 8', \(\(\),\)\) \('74 32"
702
 
                              " 0 8', \(\(\('a',\),\),\)\)")
703
 
 
704
652
 
705
653
class TestLazyGroupCompress(tests.TestCaseWithTransport):
706
654