53
53
def test_hashcache_initial_miss(self):
54
54
"""Get correct hash from an empty hashcache"""
55
55
hc = self.make_hashcache()
56
self.build_tree_contents([('foo', 'hello')])
56
self.build_tree_contents([('foo', b'hello')])
57
57
self.assertEqual(hc.get_sha1('foo'),
58
'aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d')
58
b'aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d')
59
59
self.assertEqual(hc.miss_count, 1)
60
60
self.assertEqual(hc.hit_count, 0)
62
62
def test_hashcache_new_file(self):
63
63
hc = self.make_hashcache()
64
self.build_tree_contents([('foo', 'goodbye')])
64
self.build_tree_contents([('foo', b'goodbye')])
65
65
# now read without pausing; it may not be possible to cache it as its
67
self.assertEqual(hc.get_sha1('foo'), sha1('goodbye'))
67
self.assertEqual(hc.get_sha1('foo'), sha1(b'goodbye'))
69
69
def test_hashcache_nonexistent_file(self):
70
70
hc = self.make_hashcache()
73
73
def test_hashcache_replaced_file(self):
74
74
hc = self.make_hashcache()
75
self.build_tree_contents([('foo', 'goodbye')])
76
self.assertEqual(hc.get_sha1('foo'), sha1('goodbye'))
75
self.build_tree_contents([('foo', b'goodbye')])
76
self.assertEqual(hc.get_sha1('foo'), sha1(b'goodbye'))
78
78
self.assertEqual(hc.get_sha1('foo'), None)
79
self.build_tree_contents([('foo', 'new content')])
80
self.assertEqual(hc.get_sha1('foo'), sha1('new content'))
79
self.build_tree_contents([('foo', b'new content')])
80
self.assertEqual(hc.get_sha1('foo'), sha1(b'new content'))
82
82
def test_hashcache_not_file(self):
83
83
hc = self.make_hashcache()
87
87
def test_hashcache_load(self):
88
88
hc = self.make_hashcache()
89
self.build_tree_contents([('foo', 'contents')])
89
self.build_tree_contents([('foo', b'contents')])
91
self.assertEqual(hc.get_sha1('foo'), sha1('contents'))
91
self.assertEqual(hc.get_sha1('foo'), sha1(b'contents'))
93
93
hc = self.reopen_hashcache()
94
self.assertEqual(hc.get_sha1('foo'), sha1('contents'))
94
self.assertEqual(hc.get_sha1('foo'), sha1(b'contents'))
95
95
self.assertEqual(hc.hit_count, 1)
97
97
def test_hammer_hashcache(self):
98
98
hc = self.make_hashcache()
99
99
for i in range(10000):
100
self.log('start writing at %s', time.time())
103
last_content = '%08x' % i
100
with open('foo', 'wb') as f:
101
last_content = b'%08x' % i
104
102
f.write(last_content)
107
103
last_sha1 = sha1(last_content)
108
104
self.log("iteration %d: %r -> %r",
109
105
i, last_content, last_sha1)
172
168
def test_hashcache_miss_new_file(self):
173
169
"""A new file gives the right sha1 but misses"""
174
170
hc = self.make_hashcache()
175
hc.put_file('foo', 'hello')
176
self.assertEqual(hc.get_sha1('foo'), sha1('hello'))
171
hc.put_file('foo', b'hello')
172
self.assertEqual(hc.get_sha1('foo'), sha1(b'hello'))
177
173
self.assertEqual(hc.miss_count, 1)
178
174
self.assertEqual(hc.hit_count, 0)
179
175
# if we try again it's still too new;
180
self.assertEqual(hc.get_sha1('foo'), sha1('hello'))
176
self.assertEqual(hc.get_sha1('foo'), sha1(b'hello'))
181
177
self.assertEqual(hc.miss_count, 2)
182
178
self.assertEqual(hc.hit_count, 0)
184
180
def test_hashcache_old_file(self):
185
181
"""An old file gives the right sha1 and hits"""
186
182
hc = self.make_hashcache()
187
hc.put_file('foo', 'hello')
183
hc.put_file('foo', b'hello')
188
184
hc.pretend_to_sleep(20)
189
185
# file is new; should get the correct hash but miss
190
self.assertEqual(hc.get_sha1('foo'), sha1('hello'))
186
self.assertEqual(hc.get_sha1('foo'), sha1(b'hello'))
191
187
self.assertEqual(hc.miss_count, 1)
192
188
self.assertEqual(hc.hit_count, 0)
193
189
# and can now be hit
194
self.assertEqual(hc.get_sha1('foo'), sha1('hello'))
190
self.assertEqual(hc.get_sha1('foo'), sha1(b'hello'))
195
191
self.assertEqual(hc.miss_count, 1)
196
192
self.assertEqual(hc.hit_count, 1)
197
193
hc.pretend_to_sleep(3)
199
self.assertEqual(hc.get_sha1('foo'), sha1('hello'))
195
self.assertEqual(hc.get_sha1('foo'), sha1(b'hello'))
200
196
self.assertEqual(hc.miss_count, 1)
201
197
self.assertEqual(hc.hit_count, 2)
203
199
def test_hashcache_invalidates(self):
204
200
hc = self.make_hashcache()
205
hc.put_file('foo', 'hello')
201
hc.put_file('foo', b'hello')
206
202
hc.pretend_to_sleep(20)
207
203
hc.get_sha1('foo')
208
hc.put_file('foo', 'h1llo')
209
self.assertEqual(hc.get_sha1('foo'), sha1('h1llo'))
204
hc.put_file('foo', b'h1llo')
205
self.assertEqual(hc.get_sha1('foo'), sha1(b'h1llo'))
210
206
self.assertEqual(hc.miss_count, 2)
211
207
self.assertEqual(hc.hit_count, 0)