~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_hashcache.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2006-02-22 07:59:56 UTC
  • mfrom: (1553.5.33 bzr.mbp.locks)
  • Revision ID: pqm@pqm.ubuntu.com-20060222075956-fb281c427e571da6
add LockDir and related fixes

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
 
19
import sys
18
20
import time
19
 
from bzrlib.selftest import TestCaseInTempDir
20
21
 
 
22
from bzrlib.errors import BzrError
 
23
from bzrlib.hashcache import HashCache
 
24
from bzrlib.tests import TestCaseInTempDir
21
25
 
22
26
 
23
27
def sha1(t):
24
 
    import sha
25
28
    return sha.new(t).hexdigest()
26
29
 
27
30
 
28
31
def pause():
29
32
    if False:
30
33
        return
31
 
    if os.name == 'nt':
 
34
    if sys.platform in ('win32', 'cygwin'):
32
35
        time.sleep(3)
33
36
        return
34
37
    # allow it to stabilize
35
38
    start = int(time.time())
36
39
    while int(time.time()) == start:
37
40
        time.sleep(0.2)
 
41
 
 
42
 
 
43
class FixThisError(Exception):
 
44
    pass
38
45
    
39
46
 
40
47
class TestHashCache(TestCaseInTempDir):
41
48
 
42
49
    def test_hashcache(self):
43
50
        """Functional tests for hashcache"""
44
 
        from bzrlib.hashcache import HashCache
45
 
        import os
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('.', '.bzr/stat-cache')
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('.', '.bzr/stat-cache')
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
 
 
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")