~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_tuned_gzip.py

  • Committer: Vincent Ladeuil
  • Date: 2012-01-18 14:09:19 UTC
  • mto: This revision was merged to the branch mainline in revision 6468.
  • Revision ID: v.ladeuil+lp@free.fr-20120118140919-rlvdrhpc0nq1lbwi
Change set/remove to require a lock for the branch config files.

This means that tests (or any plugin for that matter) do not requires an
explicit lock on the branch anymore to change a single option. This also
means the optimisation becomes "opt-in" and as such won't be as
spectacular as it may be and/or harder to get right (nothing fails
anymore).

This reduces the diff by ~300 lines.

Code/tests that were updating more than one config option is still taking
a lock to at least avoid some IOs and demonstrate the benefits through
the decreased number of hpss calls.

The duplication between BranchStack and BranchOnlyStack will be removed
once the same sharing is in place for local config files, at which point
the Stack class itself may be able to host the changes.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006 Canonical Ltd
 
1
# Copyright (C) 2006, 2009, 2010, 2011 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
21
21
# do not use bzrlib test cases here - this should be suitable for sending
22
22
# upstream.
23
23
from cStringIO import StringIO
24
 
from unittest import TestCase
25
24
import zlib
26
25
 
27
26
 
28
 
from bzrlib import tuned_gzip
 
27
from bzrlib import (
 
28
    symbol_versioning,
 
29
    tuned_gzip,
 
30
    tests,
 
31
    )
29
32
 
30
33
 
31
34
class FakeDecompress(object):
42
45
        return ''
43
46
 
44
47
 
45
 
class TestFakeDecompress(TestCase):
 
48
class TestFakeDecompress(tests.TestCase):
46
49
    """We use a fake decompressor to test GzipFile.
47
50
 
48
51
    This class tests the behaviours we want from it.
67
70
        self.assertEqual('1234567', decompress.unused_data)
68
71
 
69
72
 
70
 
class TestGzip(TestCase):
 
73
class TestGzip(tests.TestCase):
71
74
 
72
75
    def test__read_short_remainder(self):
73
76
        # a _read call at the end of a compressed hunk should
74
77
        # read more bytes if there is less than 8 bytes (the
75
78
        # gzip trailer) unread.
76
79
        stream = StringIO('\0\0\0\0\0\0\0\0')
77
 
        myfile = tuned_gzip.GzipFile(fileobj=stream)
 
80
        myfile = self.applyDeprecated(
 
81
            symbol_versioning.deprecated_in((2, 3, 0)),
 
82
            tuned_gzip.GzipFile, fileobj=stream)
78
83
        # disable the _new_member check, we are microtesting.
79
84
        myfile._new_member = False
80
85
        myfile.crc = zlib.crc32('')
84
89
        # all the data should have been read now
85
90
        self.assertEqual('', stream.read())
86
91
        # and it should be new member time in the stream.
87
 
        self.failUnless(myfile._new_member)
88
 
 
89
 
 
90
 
class TestToGzip(TestCase):
 
92
        self.assertTrue(myfile._new_member)
 
93
 
 
94
    def test_negative_crc(self):
 
95
        """Content with a negative crc should not break when written"""
 
96
        sio = StringIO()
 
97
        gfile = self.applyDeprecated(
 
98
            symbol_versioning.deprecated_in((2, 3, 0)),
 
99
            tuned_gzip.GzipFile, mode="w", fileobj=sio)
 
100
        gfile.write("\xFF")
 
101
        gfile.close()
 
102
        self.assertEqual(gfile.crc & 0xFFFFFFFFL, 0xFF000000L)
 
103
        self.assertEqual(sio.getvalue()[-8:-4], "\x00\x00\x00\xFF")
 
104
 
 
105
 
 
106
class TestToGzip(tests.TestCase):
91
107
 
92
108
    def assertToGzip(self, chunks):
93
109
        bytes = ''.join(chunks)
94
110
        gzfromchunks = tuned_gzip.chunks_to_gzip(chunks)
95
111
        gzfrombytes = tuned_gzip.bytes_to_gzip(bytes)
96
112
        self.assertEqual(gzfrombytes, gzfromchunks)
97
 
        decoded = tuned_gzip.GzipFile(fileobj=StringIO(gzfromchunks)).read()
 
113
        decoded = self.applyDeprecated(
 
114
            symbol_versioning.deprecated_in((2, 3, 0)),
 
115
            tuned_gzip.GzipFile, fileobj=StringIO(gzfromchunks)).read()
98
116
        self.assertEqual(bytes, decoded)
99
117
 
100
118
    def test_single_chunk(self):