22
21
from bzrlib import osutils
23
22
from bzrlib.errors import BzrError
24
23
from bzrlib.hashcache import HashCache
25
from bzrlib.tests import OsFifoFeature, TestCaseInTempDir, TestCase
29
return osutils.sha(t).hexdigest()
24
from bzrlib.tests import (
27
from bzrlib.tests.features import (
32
sha1 = osutils.sha_string
51
54
"""Get correct hash from an empty hashcache"""
52
55
hc = self.make_hashcache()
53
56
self.build_tree_contents([('foo', 'hello')])
54
self.assertEquals(hc.get_sha1('foo'),
57
self.assertEqual(hc.get_sha1('foo'),
55
58
'aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d')
56
self.assertEquals(hc.miss_count, 1)
57
self.assertEquals(hc.hit_count, 0)
59
self.assertEqual(hc.miss_count, 1)
60
self.assertEqual(hc.hit_count, 0)
59
62
def test_hashcache_new_file(self):
60
63
hc = self.make_hashcache()
61
64
self.build_tree_contents([('foo', 'goodbye')])
62
65
# now read without pausing; it may not be possible to cache it as its
64
self.assertEquals(hc.get_sha1('foo'), sha1('goodbye'))
67
self.assertEqual(hc.get_sha1('foo'), sha1('goodbye'))
66
69
def test_hashcache_nonexistent_file(self):
67
70
hc = self.make_hashcache()
68
self.assertEquals(hc.get_sha1('no-name-yet'), None)
71
self.assertEqual(hc.get_sha1('no-name-yet'), None)
70
73
def test_hashcache_replaced_file(self):
71
74
hc = self.make_hashcache()
72
75
self.build_tree_contents([('foo', 'goodbye')])
73
self.assertEquals(hc.get_sha1('foo'), sha1('goodbye'))
76
self.assertEqual(hc.get_sha1('foo'), sha1('goodbye'))
75
self.assertEquals(hc.get_sha1('foo'), None)
78
self.assertEqual(hc.get_sha1('foo'), None)
76
79
self.build_tree_contents([('foo', 'new content')])
77
self.assertEquals(hc.get_sha1('foo'), sha1('new content'))
80
self.assertEqual(hc.get_sha1('foo'), sha1('new content'))
79
82
def test_hashcache_not_file(self):
80
83
hc = self.make_hashcache()
81
84
self.build_tree(['subdir/'])
82
self.assertEquals(hc.get_sha1('subdir'), None)
85
self.assertEqual(hc.get_sha1('subdir'), None)
84
87
def test_hashcache_load(self):
85
88
hc = self.make_hashcache()
86
89
self.build_tree_contents([('foo', 'contents')])
88
self.assertEquals(hc.get_sha1('foo'), sha1('contents'))
91
self.assertEqual(hc.get_sha1('foo'), sha1('contents'))
90
93
hc = self.reopen_hashcache()
91
self.assertEquals(hc.get_sha1('foo'), sha1('contents'))
92
self.assertEquals(hc.hit_count, 1)
94
self.assertEqual(hc.get_sha1('foo'), sha1('contents'))
95
self.assertEqual(hc.hit_count, 1)
94
97
def test_hammer_hashcache(self):
95
98
hc = self.make_hashcache()
170
173
"""A new file gives the right sha1 but misses"""
171
174
hc = self.make_hashcache()
172
175
hc.put_file('foo', 'hello')
173
self.assertEquals(hc.get_sha1('foo'), sha1('hello'))
174
self.assertEquals(hc.miss_count, 1)
175
self.assertEquals(hc.hit_count, 0)
176
self.assertEqual(hc.get_sha1('foo'), sha1('hello'))
177
self.assertEqual(hc.miss_count, 1)
178
self.assertEqual(hc.hit_count, 0)
176
179
# 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)
180
self.assertEqual(hc.get_sha1('foo'), sha1('hello'))
181
self.assertEqual(hc.miss_count, 2)
182
self.assertEqual(hc.hit_count, 0)
181
184
def test_hashcache_old_file(self):
182
185
"""An old file gives the right sha1 and hits"""
184
187
hc.put_file('foo', 'hello')
185
188
hc.pretend_to_sleep(20)
186
189
# file is new; should get the correct hash but miss
187
self.assertEquals(hc.get_sha1('foo'), sha1('hello'))
188
self.assertEquals(hc.miss_count, 1)
189
self.assertEquals(hc.hit_count, 0)
190
self.assertEqual(hc.get_sha1('foo'), sha1('hello'))
191
self.assertEqual(hc.miss_count, 1)
192
self.assertEqual(hc.hit_count, 0)
190
193
# and can now be hit
191
self.assertEquals(hc.get_sha1('foo'), sha1('hello'))
192
self.assertEquals(hc.miss_count, 1)
193
self.assertEquals(hc.hit_count, 1)
194
self.assertEqual(hc.get_sha1('foo'), sha1('hello'))
195
self.assertEqual(hc.miss_count, 1)
196
self.assertEqual(hc.hit_count, 1)
194
197
hc.pretend_to_sleep(3)
196
self.assertEquals(hc.get_sha1('foo'), sha1('hello'))
197
self.assertEquals(hc.miss_count, 1)
198
self.assertEquals(hc.hit_count, 2)
199
self.assertEqual(hc.get_sha1('foo'), sha1('hello'))
200
self.assertEqual(hc.miss_count, 1)
201
self.assertEqual(hc.hit_count, 2)
200
203
def test_hashcache_invalidates(self):
201
204
hc = self.make_hashcache()
203
206
hc.pretend_to_sleep(20)
204
207
hc.get_sha1('foo')
205
208
hc.put_file('foo', 'h1llo')
206
self.assertEquals(hc.get_sha1('foo'), sha1('h1llo'))
207
self.assertEquals(hc.miss_count, 2)
208
self.assertEquals(hc.hit_count, 0)
209
self.assertEqual(hc.get_sha1('foo'), sha1('h1llo'))
210
self.assertEqual(hc.miss_count, 2)
211
self.assertEqual(hc.hit_count, 0)