~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_hashcache.py

  • Committer: Martin Pool
  • Date: 2006-03-22 18:03:25 UTC
  • mto: This revision was merged to the branch mainline in revision 1626.
  • Revision ID: mbp@sourcefrog.net-20060322180325-eff9250dcb85c390
Add missing selftest modules to setup.py

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
 
from bzrlib.selftest import InTempDir
 
17
import os
 
18
import sha
 
19
import sys
 
20
import time
18
21
 
 
22
from bzrlib.errors import BzrError
 
23
from bzrlib.hashcache import HashCache
 
24
from bzrlib.tests import TestCaseInTempDir
19
25
 
20
26
 
21
27
def sha1(t):
22
 
    import sha
23
28
    return sha.new(t).hexdigest()
24
29
 
25
30
 
26
31
def pause():
27
 
    import time
 
32
    if False:
 
33
        return
 
34
    if sys.platform in ('win32', 'cygwin'):
 
35
        time.sleep(3)
 
36
        return
28
37
    # allow it to stabilize
29
38
    start = int(time.time())
30
39
    while int(time.time()) == start:
31
40
        time.sleep(0.2)
 
41
 
 
42
 
 
43
class FixThisError(Exception):
 
44
    pass
32
45
    
33
46
 
 
47
class TestHashCache(TestCaseInTempDir):
34
48
 
35
 
class TestHashCache(InTempDir):
36
 
    """Functional tests for hashcache"""
37
 
    def runTest(self):
38
 
        from bzrlib.hashcache import HashCache
39
 
        import os
40
 
        import time
 
49
    def test_hashcache(self):
 
50
        """Functional tests for hashcache"""
41
51
 
42
52
        # make a dummy bzr directory just to hold the cache
43
53
        os.mkdir('.bzr')
44
 
        hc = HashCache('.')
 
54
        hc = HashCache('.', '.bzr/stat-cache')
45
55
 
46
56
        file('foo', 'wb').write('hello')
47
57
        os.mkdir('subdir')
89
99
 
90
100
        self.assertEquals(hc.get_sha1('subdir'), None)
91
101
 
92
 
        # it's likely neither are cached at the moment because they 
93
 
        # changed recently, but we can't be sure
 
102
        # pause briefly to make sure they're not treated as new uncacheable
 
103
        # files
94
104
        pause()
95
105
 
96
 
        # should now be safe to cache it if we reread them
97
106
        self.assertEquals(hc.get_sha1('foo'), sha1('g00dbye'))
98
 
        self.assertEquals(len(hc._cache), 1)
99
107
        self.assertEquals(hc.get_sha1('foo2'), sha1('new content'))
100
 
        self.assertEquals(len(hc._cache), 2)
101
108
 
102
109
        # write out, read back in and check that we don't need to
103
110
        # re-read any files
104
111
        hc.write()
105
112
        del hc
106
113
 
107
 
        hc = HashCache('.')
 
114
        hc = HashCache('.', '.bzr/stat-cache')
108
115
        hc.read()
109
116
 
110
117
        self.assertEquals(len(hc._cache), 2)
113
120
        self.assertEquals(hc.miss_count, 0)
114
121
        self.assertEquals(hc.get_sha1('foo2'), sha1('new content'))
115
122
 
116
 
        
117
 
 
118
 
        
119
 
 
 
123
    def test_hashcache_raise(self):
 
124
        """check that hashcache can raise BzrError"""
 
125
 
 
126
        os.mkdir('.bzr')
 
127
        hc = HashCache('.', '.bzr/stat-cache')
 
128
        ok = False
 
129
 
 
130
        # make a best effort to create a weird kind of file
 
131
        funcs = (os.mkfifo, os.mknod)
 
132
        for func in funcs:
 
133
            try:
 
134
                func('a')
 
135
                ok = True
 
136
                break
 
137
            except FixThisError:
 
138
                pass
 
139
 
 
140
        if ok:
 
141
            self.assertRaises(BzrError, hc.get_sha1, 'a')
 
142
        else:
 
143
            raise BzrError("no weird file type could be created: extend this test case for your os")