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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
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
# 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)
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)
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)