~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_hashcache.py

  • Committer: Robert Collins
  • Date: 2006-02-15 08:11:37 UTC
  • mto: (1534.1.24 integration)
  • mto: This revision was merged to the branch mainline in revision 1554.
  • Revision ID: robertc@robertcollins.net-20060215081137-4c27377517e96dd1
Make format 4/5/6 branches share a single LockableFiles instance across wt/branch/repository.

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
20
 
from bzrlib.selftest import TestCaseInTempDir
21
21
 
 
22
from bzrlib.errors import BzrError
 
23
from bzrlib.hashcache import HashCache
 
24
from bzrlib.tests import TestCaseInTempDir
22
25
 
23
26
 
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('.')
 
54
        hc = HashCache('.', '.bzr/stat-cache')
51
55
 
52
56
        file('foo', 'wb').write('hello')
53
57
        os.mkdir('subdir')
61
65
        # check we hit without re-reading
62
66
        self.assertEquals(hc.get_sha1('foo'),
63
67
                          'aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d')
64
 
        ##self.assertEquals(hc.miss_count, 1)
65
 
        ##self.assertEquals(hc.hit_count, 1)
 
68
        self.assertEquals(hc.miss_count, 1)
 
69
        self.assertEquals(hc.hit_count, 1)
66
70
 
67
71
        # check again without re-reading
68
72
        self.assertEquals(hc.get_sha1('foo'),
69
73
                          'aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d')
70
 
        ##self.assertEquals(hc.miss_count, 1)
71
 
        ##self.assertEquals(hc.hit_count, 2)
 
74
        self.assertEquals(hc.miss_count, 1)
 
75
        self.assertEquals(hc.hit_count, 2)
72
76
 
73
77
        # write new file and make sure it is seen
74
78
        file('foo', 'wb').write('goodbye')
75
79
        pause()
76
80
        self.assertEquals(hc.get_sha1('foo'),
77
81
                          '3c8ec4874488f6090a157b014ce3397ca8e06d4f')
78
 
        ##self.assertEquals(hc.miss_count, 2)
 
82
        self.assertEquals(hc.miss_count, 2)
79
83
 
80
84
        # quickly write new file of same size and make sure it is seen
81
85
        # this may rely on detection of timestamps that are too close
101
105
 
102
106
        # should now be safe to cache it if we reread them
103
107
        self.assertEquals(hc.get_sha1('foo'), sha1('g00dbye'))
104
 
        ##self.assertEquals(len(hc._cache), 1)
 
108
        self.assertEquals(len(hc._cache), 1)
105
109
        self.assertEquals(hc.get_sha1('foo2'), sha1('new content'))
106
 
        ##self.assertEquals(len(hc._cache), 2)
 
110
        self.assertEquals(len(hc._cache), 2)
107
111
 
108
112
        # write out, read back in and check that we don't need to
109
113
        # re-read any files
110
114
        hc.write()
111
115
        del hc
112
116
 
113
 
        hc = HashCache('.')
 
117
        hc = HashCache('.', '.bzr/stat-cache')
114
118
        hc.read()
115
119
 
116
 
        ##self.assertEquals(len(hc._cache), 2)
 
120
        self.assertEquals(len(hc._cache), 2)
117
121
        self.assertEquals(hc.get_sha1('foo'), sha1('g00dbye'))
118
 
        ##self.assertEquals(hc.hit_count, 1)
119
 
        ##self.assertEquals(hc.miss_count, 0)
 
122
        self.assertEquals(hc.hit_count, 1)
 
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")