~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/selftest/testhashcache.py

  • Committer: Martin Pool
  • Date: 2005-07-07 10:22:02 UTC
  • Revision ID: mbp@sourcefrog.net-20050707102201-2d2a13a25098b101
- rearrange and clear up merged weave

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
 
import os
18
 
import time
19
 
from bzrlib.selftest import TestCaseInTempDir
 
17
from bzrlib.selftest import InTempDir
20
18
 
21
19
 
22
20
 
26
24
 
27
25
 
28
26
def pause():
29
 
    if False:
30
 
        return
31
 
    if os.name == 'nt':
32
 
        time.sleep(3)
33
 
        return
 
27
    import time
34
28
    # allow it to stabilize
35
29
    start = int(time.time())
36
30
    while int(time.time()) == start:
37
31
        time.sleep(0.2)
38
32
    
39
33
 
40
 
class TestHashCache(TestCaseInTempDir):
41
34
 
42
 
    def test_hashcache(self):
43
 
        """Functional tests for hashcache"""
 
35
class TestStatCache(InTempDir):
 
36
    """Functional tests for statcache"""
 
37
    def runTest(self):
44
38
        from bzrlib.hashcache import HashCache
45
39
        import os
 
40
        import time
46
41
 
47
 
        # make a dummy bzr directory just to hold the cache
48
 
        os.mkdir('.bzr')
49
42
        hc = HashCache('.')
50
43
 
51
44
        file('foo', 'wb').write('hello')
60
53
        # check we hit without re-reading
61
54
        self.assertEquals(hc.get_sha1('foo'),
62
55
                          'aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d')
63
 
        ##self.assertEquals(hc.miss_count, 1)
64
 
        ##self.assertEquals(hc.hit_count, 1)
 
56
        self.assertEquals(hc.miss_count, 1)
 
57
        self.assertEquals(hc.hit_count, 1)
65
58
 
66
59
        # check again without re-reading
67
60
        self.assertEquals(hc.get_sha1('foo'),
68
61
                          'aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d')
69
 
        ##self.assertEquals(hc.miss_count, 1)
70
 
        ##self.assertEquals(hc.hit_count, 2)
 
62
        self.assertEquals(hc.miss_count, 1)
 
63
        self.assertEquals(hc.hit_count, 2)
71
64
 
72
65
        # write new file and make sure it is seen
73
66
        file('foo', 'wb').write('goodbye')
74
67
        pause()
75
68
        self.assertEquals(hc.get_sha1('foo'),
76
69
                          '3c8ec4874488f6090a157b014ce3397ca8e06d4f')
77
 
        ##self.assertEquals(hc.miss_count, 2)
 
70
        self.assertEquals(hc.miss_count, 2)
78
71
 
79
72
        # quickly write new file of same size and make sure it is seen
80
73
        # this may rely on detection of timestamps that are too close
82
75
        file('foo', 'wb').write('g00dbye')
83
76
        self.assertEquals(hc.get_sha1('foo'),
84
77
                          sha1('g00dbye'))
85
 
 
86
 
        file('foo2', 'wb').write('other file')
87
 
        self.assertEquals(hc.get_sha1('foo2'), sha1('other file'))
88
 
 
89
 
        os.remove('foo2')
90
 
        self.assertEquals(hc.get_sha1('foo2'), None)
91
 
 
92
 
        file('foo2', 'wb').write('new content')
93
 
        self.assertEquals(hc.get_sha1('foo2'), sha1('new content'))
 
78
        
 
79
        # this is not quite guaranteed to be true; we might have
 
80
        # crossed a 1s boundary before
 
81
        self.assertEquals(hc.danger_count, 1)
94
82
 
95
83
        self.assertEquals(hc.get_sha1('subdir'), None)
96
84
 
97
 
        # it's likely neither are cached at the moment because they 
98
 
        # changed recently, but we can't be sure
99
 
        pause()
100
 
 
101
 
        # should now be safe to cache it if we reread them
102
 
        self.assertEquals(hc.get_sha1('foo'), sha1('g00dbye'))
103
 
        ##self.assertEquals(len(hc._cache), 1)
104
 
        self.assertEquals(hc.get_sha1('foo2'), sha1('new content'))
105
 
        ##self.assertEquals(len(hc._cache), 2)
106
 
 
107
 
        # write out, read back in and check that we don't need to
108
 
        # re-read any files
109
 
        hc.write()
110
 
        del hc
111
 
 
112
 
        hc = HashCache('.')
113
 
        hc.read()
114
 
 
115
 
        ##self.assertEquals(len(hc._cache), 2)
116
 
        self.assertEquals(hc.get_sha1('foo'), sha1('g00dbye'))
117
 
        ##self.assertEquals(hc.hit_count, 1)
118
 
        ##self.assertEquals(hc.miss_count, 0)
119
 
        self.assertEquals(hc.get_sha1('foo2'), sha1('new content'))
 
85
 
 
86
 
 
87
TEST_CLASSES = [
 
88
    TestStatCache,
 
89
    ]