~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_hashcache.py

  • Committer: Andrew Bennetts
  • Date: 2010-10-08 08:15:14 UTC
  • mto: This revision was merged to the branch mainline in revision 5498.
  • Revision ID: andrew.bennetts@canonical.com-20101008081514-dviqzrdfwyzsqbz2
Split NEWS into per-release doc/en/release-notes/bzr-*.txt

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
16
16
 
17
17
import os
18
18
import stat
 
19
import sys
19
20
import time
20
21
 
21
22
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 osutils.sha(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
 
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)
 
173
        self.assertEquals(hc.get_sha1('foo'), sha1('hello'))
 
174
        self.assertEquals(hc.miss_count, 1)
 
175
        self.assertEquals(hc.hit_count, 0)
179
176
        # 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)
 
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)