~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/selftest/testhashcache.py

  • Committer: Robert Collins
  • Date: 2005-10-16 00:22:17 UTC
  • mto: This revision was merged to the branch mainline in revision 1457.
  • Revision ID: robertc@lifelesslap.robertcollins.net-20051016002217-aa38f9c1eb13ee48
Plugins are now loaded under bzrlib.plugins, not bzrlib.plugin.

Plugins are also made available for other plugins to use by making them 
accessible via import bzrlib.plugins.NAME. You should not import other
plugins during the __init__ of your plugin though, as no ordering is
guaranteed, and the plugins directory is not on the python path.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# (C) 2005 Canonical Ltd
 
2
 
 
3
# This program is free software; you can redistribute it and/or modify
 
4
# it under the terms of the GNU General Public License as published by
 
5
# the Free Software Foundation; either version 2 of the License, or
 
6
# (at your option) any later version.
 
7
 
 
8
# This program is distributed in the hope that it will be useful,
 
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
11
# GNU General Public License for more details.
 
12
 
 
13
# You should have received a copy of the GNU General Public License
 
14
# along with this program; if not, write to the Free Software
 
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
16
 
 
17
import os
 
18
import time
 
19
from bzrlib.selftest import TestCaseInTempDir
 
20
 
 
21
 
 
22
 
 
23
def sha1(t):
 
24
    import sha
 
25
    return sha.new(t).hexdigest()
 
26
 
 
27
 
 
28
def pause():
 
29
    if False:
 
30
        return
 
31
    if os.name == 'nt':
 
32
        time.sleep(3)
 
33
        return
 
34
    # allow it to stabilize
 
35
    start = int(time.time())
 
36
    while int(time.time()) == start:
 
37
        time.sleep(0.2)
 
38
    
 
39
 
 
40
class TestHashCache(TestCaseInTempDir):
 
41
 
 
42
    def test_hashcache(self):
 
43
        """Functional tests for hashcache"""
 
44
        from bzrlib.hashcache import HashCache
 
45
        import os
 
46
 
 
47
        # make a dummy bzr directory just to hold the cache
 
48
        os.mkdir('.bzr')
 
49
        hc = HashCache('.')
 
50
 
 
51
        file('foo', 'wb').write('hello')
 
52
        os.mkdir('subdir')
 
53
        pause()
 
54
 
 
55
        self.assertEquals(hc.get_sha1('foo'),
 
56
                          'aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d')
 
57
        self.assertEquals(hc.miss_count, 1)
 
58
        self.assertEquals(hc.hit_count, 0)
 
59
 
 
60
        # check we hit without re-reading
 
61
        self.assertEquals(hc.get_sha1('foo'),
 
62
                          'aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d')
 
63
        ##self.assertEquals(hc.miss_count, 1)
 
64
        ##self.assertEquals(hc.hit_count, 1)
 
65
 
 
66
        # check again without re-reading
 
67
        self.assertEquals(hc.get_sha1('foo'),
 
68
                          'aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d')
 
69
        ##self.assertEquals(hc.miss_count, 1)
 
70
        ##self.assertEquals(hc.hit_count, 2)
 
71
 
 
72
        # write new file and make sure it is seen
 
73
        file('foo', 'wb').write('goodbye')
 
74
        pause()
 
75
        self.assertEquals(hc.get_sha1('foo'),
 
76
                          '3c8ec4874488f6090a157b014ce3397ca8e06d4f')
 
77
        ##self.assertEquals(hc.miss_count, 2)
 
78
 
 
79
        # quickly write new file of same size and make sure it is seen
 
80
        # this may rely on detection of timestamps that are too close
 
81
        # together to be safe
 
82
        file('foo', 'wb').write('g00dbye')
 
83
        self.assertEquals(hc.get_sha1('foo'),
 
84
                          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'))
 
94
 
 
95
        self.assertEquals(hc.get_sha1('subdir'), None)
 
96
 
 
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'))