15
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19
from bzrlib.selftest import TestCaseInTempDir
22
from bzrlib.errors import BzrError
23
from bzrlib.hashcache import HashCache
24
from bzrlib.tests import TestCaseInTempDir
25
28
return sha.new(t).hexdigest()
34
if sys.platform in ('win32', 'cygwin'):
34
37
# allow it to stabilize
35
38
start = int(time.time())
36
39
while int(time.time()) == start:
43
class FixThisError(Exception):
40
47
class TestHashCache(TestCaseInTempDir):
42
49
def test_hashcache(self):
43
50
"""Functional tests for hashcache"""
44
from bzrlib.hashcache import HashCache
47
52
# make a dummy bzr directory just to hold the cache
54
hc = HashCache('.', '.bzr/stat-cache')
51
56
file('foo', 'wb').write('hello')
60
65
# check we hit without re-reading
61
66
self.assertEquals(hc.get_sha1('foo'),
62
67
'aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d')
63
##self.assertEquals(hc.miss_count, 1)
64
##self.assertEquals(hc.hit_count, 1)
68
self.assertEquals(hc.miss_count, 1)
69
self.assertEquals(hc.hit_count, 1)
66
71
# check again without re-reading
67
72
self.assertEquals(hc.get_sha1('foo'),
68
73
'aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d')
69
##self.assertEquals(hc.miss_count, 1)
70
##self.assertEquals(hc.hit_count, 2)
74
self.assertEquals(hc.miss_count, 1)
75
self.assertEquals(hc.hit_count, 2)
72
77
# write new file and make sure it is seen
73
78
file('foo', 'wb').write('goodbye')
75
80
self.assertEquals(hc.get_sha1('foo'),
76
81
'3c8ec4874488f6090a157b014ce3397ca8e06d4f')
77
##self.assertEquals(hc.miss_count, 2)
82
self.assertEquals(hc.miss_count, 2)
79
84
# quickly write new file of same size and make sure it is seen
80
85
# this may rely on detection of timestamps that are too close
101
106
# should now be safe to cache it if we reread them
102
107
self.assertEquals(hc.get_sha1('foo'), sha1('g00dbye'))
103
##self.assertEquals(len(hc._cache), 1)
108
self.assertEquals(len(hc._cache), 1)
104
109
self.assertEquals(hc.get_sha1('foo2'), sha1('new content'))
105
##self.assertEquals(len(hc._cache), 2)
110
self.assertEquals(len(hc._cache), 2)
107
112
# write out, read back in and check that we don't need to
108
113
# re-read any files
117
hc = HashCache('.', '.bzr/stat-cache')
115
##self.assertEquals(len(hc._cache), 2)
120
self.assertEquals(len(hc._cache), 2)
116
121
self.assertEquals(hc.get_sha1('foo'), sha1('g00dbye'))
117
##self.assertEquals(hc.hit_count, 1)
118
##self.assertEquals(hc.miss_count, 0)
122
self.assertEquals(hc.hit_count, 1)
123
self.assertEquals(hc.miss_count, 0)
119
124
self.assertEquals(hc.get_sha1('foo2'), sha1('new content'))
126
def test_hashcache_raise(self):
127
"""check that hashcache can raise BzrError"""
130
hc = HashCache('.', '.bzr/stat-cache')
133
# make a best effort to create a weird kind of file
134
funcs = (os.mkfifo, os.mknod)
144
self.assertRaises(BzrError, hc.get_sha1, 'a')
146
raise BzrError("no weird file type could be created: extend this test case for your os")