~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_hashcache.py

[merge] jam-integration

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 sys
18
19
import time
19
 
from bzrlib.selftest import TestCaseInTempDir
 
20
from bzrlib.tests import TestCaseInTempDir
20
21
 
21
22
 
22
23
 
28
29
def pause():
29
30
    if False:
30
31
        return
31
 
    if os.name == 'nt':
 
32
    if sys.platform in ('win32', 'cygwin'):
32
33
        time.sleep(3)
33
34
        return
34
35
    # allow it to stabilize
35
36
    start = int(time.time())
36
37
    while int(time.time()) == start:
37
38
        time.sleep(0.2)
 
39
 
 
40
 
 
41
class FixThisError(Exception):
 
42
    pass
38
43
    
39
44
 
40
45
class TestHashCache(TestCaseInTempDir):
46
51
 
47
52
        # make a dummy bzr directory just to hold the cache
48
53
        os.mkdir('.bzr')
49
 
        hc = HashCache('.')
 
54
        hc = HashCache(u'.')
50
55
 
51
56
        file('foo', 'wb').write('hello')
52
57
        os.mkdir('subdir')
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)
65
70
 
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)
71
76
 
72
77
        # write new file and make sure it is seen
73
78
        file('foo', 'wb').write('goodbye')
74
79
        pause()
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)
78
83
 
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
100
105
 
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)
106
111
 
107
112
        # write out, read back in and check that we don't need to
108
113
        # re-read any files
109
114
        hc.write()
110
115
        del hc
111
116
 
112
 
        hc = HashCache('.')
 
117
        hc = HashCache(u'.')
113
118
        hc.read()
114
119
 
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'))
 
125
 
 
126
    def test_hashcache_raise(self):
 
127
        """check that hashcache can raise BzrError"""
 
128
        from bzrlib.hashcache import HashCache
 
129
        import os
 
130
 
 
131
        os.mkdir('.bzr')
 
132
        hc = HashCache(u'.')
 
133
        ok = False
 
134
 
 
135
        # make a best effort to create a weird kind of file
 
136
        funcs = (os.mkfifo, os.mknod)
 
137
        for func in funcs:
 
138
            try:
 
139
                func('a')
 
140
                ok = True
 
141
                break
 
142
            except FixThisError:
 
143
                pass
 
144
 
 
145
        from bzrlib.errors import BzrError
 
146
        if ok:
 
147
            self.assertRaises(BzrError, hc.get_sha1, 'a')
 
148
        else:
 
149
            raise BzrError("no weird file type could be created: extend this test case for your os")