~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_hashcache.py

  • Committer: John Arbash Meinel
  • Author(s): Mark Hammond
  • Date: 2008-09-09 17:02:21 UTC
  • mto: This revision was merged to the branch mainline in revision 3697.
  • Revision ID: john@arbash-meinel.com-20080909170221-svim3jw2mrz0amp3
An updated transparent icon for bzr.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005-2011, 2016 Canonical Ltd
 
1
# Copyright (C) 2005, 2006 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
12
12
#
13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
 
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
 
17
17
import os
 
18
import sha
18
19
import stat
 
20
import sys
19
21
import time
20
22
 
21
 
from bzrlib import osutils
22
23
from bzrlib.errors import BzrError
23
24
from bzrlib.hashcache import HashCache
24
 
from bzrlib.tests import (
25
 
    TestCaseInTempDir,
26
 
    )
27
 
from bzrlib.tests.features import (
28
 
    OsFifoFeature,
29
 
    )
30
 
 
31
 
 
32
 
sha1 = osutils.sha_string
 
25
from bzrlib.tests import OsFifoFeature, TestCaseInTempDir, TestCase
 
26
 
 
27
 
 
28
def sha1(t):
 
29
    return sha.new(t).hexdigest()
33
30
 
34
31
 
35
32
def pause():
54
51
        """Get correct hash from an empty hashcache"""
55
52
        hc = self.make_hashcache()
56
53
        self.build_tree_contents([('foo', 'hello')])
57
 
        self.assertEqual(hc.get_sha1('foo'),
 
54
        self.assertEquals(hc.get_sha1('foo'),
58
55
                          'aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d')
59
 
        self.assertEqual(hc.miss_count, 1)
60
 
        self.assertEqual(hc.hit_count, 0)
 
56
        self.assertEquals(hc.miss_count, 1)
 
57
        self.assertEquals(hc.hit_count, 0)
61
58
 
62
59
    def test_hashcache_new_file(self):
63
60
        hc = self.make_hashcache()
64
61
        self.build_tree_contents([('foo', 'goodbye')])
65
62
        # now read without pausing; it may not be possible to cache it as its
66
63
        # so new
67
 
        self.assertEqual(hc.get_sha1('foo'), sha1('goodbye'))
 
64
        self.assertEquals(hc.get_sha1('foo'), sha1('goodbye'))
68
65
 
69
66
    def test_hashcache_nonexistent_file(self):
70
67
        hc = self.make_hashcache()
71
 
        self.assertEqual(hc.get_sha1('no-name-yet'), None)
 
68
        self.assertEquals(hc.get_sha1('no-name-yet'), None)
72
69
 
73
70
    def test_hashcache_replaced_file(self):
74
71
        hc = self.make_hashcache()
75
72
        self.build_tree_contents([('foo', 'goodbye')])
76
 
        self.assertEqual(hc.get_sha1('foo'), sha1('goodbye'))
 
73
        self.assertEquals(hc.get_sha1('foo'), sha1('goodbye'))
77
74
        os.remove('foo')
78
 
        self.assertEqual(hc.get_sha1('foo'), None)
 
75
        self.assertEquals(hc.get_sha1('foo'), None)
79
76
        self.build_tree_contents([('foo', 'new content')])
80
 
        self.assertEqual(hc.get_sha1('foo'), sha1('new content'))
 
77
        self.assertEquals(hc.get_sha1('foo'), sha1('new content'))
81
78
 
82
79
    def test_hashcache_not_file(self):
83
80
        hc = self.make_hashcache()
84
81
        self.build_tree(['subdir/'])
85
 
        self.assertEqual(hc.get_sha1('subdir'), None)
 
82
        self.assertEquals(hc.get_sha1('subdir'), None)
86
83
 
87
84
    def test_hashcache_load(self):
88
85
        hc = self.make_hashcache()
89
86
        self.build_tree_contents([('foo', 'contents')])
90
87
        pause()
91
 
        self.assertEqual(hc.get_sha1('foo'), sha1('contents'))
 
88
        self.assertEquals(hc.get_sha1('foo'), sha1('contents'))
92
89
        hc.write()
93
90
        hc = self.reopen_hashcache()
94
 
        self.assertEqual(hc.get_sha1('foo'), sha1('contents'))
95
 
        self.assertEqual(hc.hit_count, 1)
 
91
        self.assertEquals(hc.get_sha1('foo'), sha1('contents'))
 
92
        self.assertEquals(hc.hit_count, 1)
96
93
 
97
94
    def test_hammer_hashcache(self):
98
95
        hc = self.make_hashcache()
108
105
            self.log("iteration %d: %r -> %r",
109
106
                     i, last_content, last_sha1)
110
107
            got_sha1 = hc.get_sha1('foo')
111
 
            self.assertEqual(got_sha1, last_sha1)
 
108
            self.assertEquals(got_sha1, last_sha1)
112
109
            hc.write()
113
110
            hc = self.reopen_hashcache()
114
111
 
149
146
                10, 20,
150
147
                stat.S_IFREG | 0600)
151
148
 
152
 
    def _really_sha1_file(self, abspath, filters):
 
149
    def _really_sha1_file(self, abspath):
153
150
        if abspath in self._files:
154
151
            return sha1(self._files[abspath][0])
155
152
        else:
161
158
    def pretend_to_sleep(self, secs):
162
159
        self._clock += secs
163
160
 
164
 
 
 
161
    
165
162
class TestHashCacheFakeFilesystem(TestCaseInTempDir):
166
163
    """Tests the hashcache using a simulated OS.
167
164
    """
173
170
        """A new file gives the right sha1 but misses"""
174
171
        hc = self.make_hashcache()
175
172
        hc.put_file('foo', 'hello')
176
 
        self.assertEqual(hc.get_sha1('foo'), sha1('hello'))
177
 
        self.assertEqual(hc.miss_count, 1)
178
 
        self.assertEqual(hc.hit_count, 0)
179
 
        # if we try again it's still too new;
180
 
        self.assertEqual(hc.get_sha1('foo'), sha1('hello'))
181
 
        self.assertEqual(hc.miss_count, 2)
182
 
        self.assertEqual(hc.hit_count, 0)
 
173
        self.assertEquals(hc.get_sha1('foo'), sha1('hello'))
 
174
        self.assertEquals(hc.miss_count, 1)
 
175
        self.assertEquals(hc.hit_count, 0)
 
176
        # if we try again it's still too new; 
 
177
        self.assertEquals(hc.get_sha1('foo'), sha1('hello'))
 
178
        self.assertEquals(hc.miss_count, 2)
 
179
        self.assertEquals(hc.hit_count, 0)
183
180
 
184
181
    def test_hashcache_old_file(self):
185
182
        """An old file gives the right sha1 and hits"""
187
184
        hc.put_file('foo', 'hello')
188
185
        hc.pretend_to_sleep(20)
189
186
        # file is new; should get the correct hash but miss
190
 
        self.assertEqual(hc.get_sha1('foo'), sha1('hello'))
191
 
        self.assertEqual(hc.miss_count, 1)
192
 
        self.assertEqual(hc.hit_count, 0)
 
187
        self.assertEquals(hc.get_sha1('foo'), sha1('hello'))
 
188
        self.assertEquals(hc.miss_count, 1)
 
189
        self.assertEquals(hc.hit_count, 0)
193
190
        # and can now be hit
194
 
        self.assertEqual(hc.get_sha1('foo'), sha1('hello'))
195
 
        self.assertEqual(hc.miss_count, 1)
196
 
        self.assertEqual(hc.hit_count, 1)
 
191
        self.assertEquals(hc.get_sha1('foo'), sha1('hello'))
 
192
        self.assertEquals(hc.miss_count, 1)
 
193
        self.assertEquals(hc.hit_count, 1)
197
194
        hc.pretend_to_sleep(3)
198
195
        # and again
199
 
        self.assertEqual(hc.get_sha1('foo'), sha1('hello'))
200
 
        self.assertEqual(hc.miss_count, 1)
201
 
        self.assertEqual(hc.hit_count, 2)
 
196
        self.assertEquals(hc.get_sha1('foo'), sha1('hello'))
 
197
        self.assertEquals(hc.miss_count, 1)
 
198
        self.assertEquals(hc.hit_count, 2)
202
199
 
203
200
    def test_hashcache_invalidates(self):
204
201
        hc = self.make_hashcache()
206
203
        hc.pretend_to_sleep(20)
207
204
        hc.get_sha1('foo')
208
205
        hc.put_file('foo', 'h1llo')
209
 
        self.assertEqual(hc.get_sha1('foo'), sha1('h1llo'))
210
 
        self.assertEqual(hc.miss_count, 2)
211
 
        self.assertEqual(hc.hit_count, 0)
 
206
        self.assertEquals(hc.get_sha1('foo'), sha1('h1llo'))
 
207
        self.assertEquals(hc.miss_count, 2)
 
208
        self.assertEquals(hc.hit_count, 0)