~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/selftest/testhashcache.py

  • Committer: Martin Pool
  • Date: 2005-09-16 09:56:24 UTC
  • Revision ID: mbp@sourcefrog.net-20050916095623-ca0dff452934f21f
- make progress bar more tolerant of out-of-range values

Show diffs side-by-side

added added

removed removed

Lines of Context:
14
14
# along with this program; if not, write to the Free Software
15
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
 
17
 
import os
18
 
import sha
19
 
import sys
20
 
import time
 
17
from bzrlib.selftest import TestCaseInTempDir
21
18
 
22
 
from bzrlib.errors import BzrError
23
 
from bzrlib.hashcache import HashCache
24
 
from bzrlib.tests import TestCaseInTempDir
25
19
 
26
20
 
27
21
def sha1(t):
 
22
    import sha
28
23
    return sha.new(t).hexdigest()
29
24
 
30
25
 
31
26
def pause():
32
27
    if False:
33
 
        return
34
 
    if sys.platform in ('win32', 'cygwin'):
35
 
        time.sleep(3)
36
 
        return
37
 
    # allow it to stabilize
38
 
    start = int(time.time())
39
 
    while int(time.time()) == start:
40
 
        time.sleep(0.2)
41
 
 
42
 
 
43
 
class FixThisError(Exception):
44
 
    pass
 
28
        # enable this to get more accurate testing
 
29
        import time
 
30
        # allow it to stabilize
 
31
        start = int(time.time())
 
32
        while int(time.time()) == start:
 
33
            time.sleep(0.2)
45
34
    
46
35
 
47
36
class TestHashCache(TestCaseInTempDir):
48
37
 
49
38
    def test_hashcache(self):
50
39
        """Functional tests for hashcache"""
 
40
        from bzrlib.hashcache import HashCache
 
41
        import os
51
42
 
52
43
        # make a dummy bzr directory just to hold the cache
53
44
        os.mkdir('.bzr')
54
 
        hc = HashCache('.', '.bzr/stat-cache')
 
45
        hc = HashCache('.')
55
46
 
56
47
        file('foo', 'wb').write('hello')
57
48
        os.mkdir('subdir')
65
56
        # check we hit without re-reading
66
57
        self.assertEquals(hc.get_sha1('foo'),
67
58
                          'aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d')
68
 
        self.assertEquals(hc.miss_count, 1)
69
 
        self.assertEquals(hc.hit_count, 1)
 
59
        ##self.assertEquals(hc.miss_count, 1)
 
60
        ##self.assertEquals(hc.hit_count, 1)
70
61
 
71
62
        # check again without re-reading
72
63
        self.assertEquals(hc.get_sha1('foo'),
73
64
                          'aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d')
74
 
        self.assertEquals(hc.miss_count, 1)
75
 
        self.assertEquals(hc.hit_count, 2)
 
65
        ##self.assertEquals(hc.miss_count, 1)
 
66
        ##self.assertEquals(hc.hit_count, 2)
76
67
 
77
68
        # write new file and make sure it is seen
78
69
        file('foo', 'wb').write('goodbye')
79
70
        pause()
80
71
        self.assertEquals(hc.get_sha1('foo'),
81
72
                          '3c8ec4874488f6090a157b014ce3397ca8e06d4f')
82
 
        self.assertEquals(hc.miss_count, 2)
 
73
        ##self.assertEquals(hc.miss_count, 2)
83
74
 
84
75
        # quickly write new file of same size and make sure it is seen
85
76
        # this may rely on detection of timestamps that are too close
105
96
 
106
97
        # should now be safe to cache it if we reread them
107
98
        self.assertEquals(hc.get_sha1('foo'), sha1('g00dbye'))
108
 
        self.assertEquals(len(hc._cache), 1)
 
99
        ##self.assertEquals(len(hc._cache), 1)
109
100
        self.assertEquals(hc.get_sha1('foo2'), sha1('new content'))
110
 
        self.assertEquals(len(hc._cache), 2)
 
101
        ##self.assertEquals(len(hc._cache), 2)
111
102
 
112
103
        # write out, read back in and check that we don't need to
113
104
        # re-read any files
114
105
        hc.write()
115
106
        del hc
116
107
 
117
 
        hc = HashCache('.', '.bzr/stat-cache')
 
108
        hc = HashCache('.')
118
109
        hc.read()
119
110
 
120
 
        self.assertEquals(len(hc._cache), 2)
 
111
        ##self.assertEquals(len(hc._cache), 2)
121
112
        self.assertEquals(hc.get_sha1('foo'), sha1('g00dbye'))
122
 
        self.assertEquals(hc.hit_count, 1)
123
 
        self.assertEquals(hc.miss_count, 0)
 
113
        ##self.assertEquals(hc.hit_count, 1)
 
114
        ##self.assertEquals(hc.miss_count, 0)
124
115
        self.assertEquals(hc.get_sha1('foo2'), sha1('new content'))
125
 
 
126
 
    def test_hashcache_raise(self):
127
 
        """check that hashcache can raise BzrError"""
128
 
 
129
 
        os.mkdir('.bzr')
130
 
        hc = HashCache('.', '.bzr/stat-cache')
131
 
        ok = False
132
 
 
133
 
        # make a best effort to create a weird kind of file
134
 
        funcs = (os.mkfifo, os.mknod)
135
 
        for func in funcs:
136
 
            try:
137
 
                func('a')
138
 
                ok = True
139
 
                break
140
 
            except FixThisError:
141
 
                pass
142
 
 
143
 
        if ok:
144
 
            self.assertRaises(BzrError, hc.get_sha1, 'a')
145
 
        else:
146
 
            raise BzrError("no weird file type could be created: extend this test case for your os")