~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_hashcache.py

Merge in bzrdir work to enable checkout improvements.

Show diffs side-by-side

added added

removed removed

Lines of Context:
15
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
 
17
17
import os
 
18
import sha
18
19
import sys
19
20
import time
 
21
 
 
22
from bzrlib.errors import BzrError
 
23
from bzrlib.hashcache import HashCache
20
24
from bzrlib.tests import TestCaseInTempDir
21
25
 
22
26
 
23
 
 
24
27
def sha1(t):
25
 
    import sha
26
28
    return sha.new(t).hexdigest()
27
29
 
28
30
 
36
38
    start = int(time.time())
37
39
    while int(time.time()) == start:
38
40
        time.sleep(0.2)
 
41
 
 
42
 
 
43
class FixThisError(Exception):
 
44
    pass
39
45
    
40
46
 
41
47
class TestHashCache(TestCaseInTempDir):
42
48
 
43
49
    def test_hashcache(self):
44
50
        """Functional tests for hashcache"""
45
 
        from bzrlib.hashcache import HashCache
46
 
        import os
47
51
 
48
52
        # make a dummy bzr directory just to hold the cache
49
53
        os.mkdir('.bzr')
50
 
        hc = HashCache(u'.')
 
54
        hc = HashCache('.', '.bzr/stat-cache')
51
55
 
52
56
        file('foo', 'wb').write('hello')
53
57
        os.mkdir('subdir')
110
114
        hc.write()
111
115
        del hc
112
116
 
113
 
        hc = HashCache(u'.')
 
117
        hc = HashCache('.', '.bzr/stat-cache')
114
118
        hc.read()
115
119
 
116
120
        self.assertEquals(len(hc._cache), 2)
118
122
        self.assertEquals(hc.hit_count, 1)
119
123
        self.assertEquals(hc.miss_count, 0)
120
124
        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")