/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_hashcache.py

  • Committer: Richard Wilbur
  • Date: 2016-02-04 19:07:28 UTC
  • mto: This revision was merged to the branch mainline in revision 6618.
  • Revision ID: richard.wilbur@gmail.com-20160204190728-p0zvfii6zase0fw7
Update COPYING.txt from the original http://www.gnu.org/licenses/gpl-2.0.txt  (Only differences were in whitespace.)  Thanks to Petr Stodulka for pointing out the discrepancy.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005-2011, 2016 Canonical Ltd
 
1
# Copyright (C) 2005-2009, 2011 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
18
18
import stat
19
19
import time
20
20
 
21
 
from .. import osutils
22
 
from ..errors import BzrError
23
 
from ..hashcache import HashCache
24
 
from . import (
 
21
from bzrlib import osutils
 
22
from bzrlib.errors import BzrError
 
23
from bzrlib.hashcache import HashCache
 
24
from bzrlib.tests import (
25
25
    TestCaseInTempDir,
26
26
    )
27
 
from .features import (
 
27
from bzrlib.tests.features import (
28
28
    OsFifoFeature,
29
29
    )
30
30
 
42
42
    def make_hashcache(self):
43
43
        # make a dummy bzr directory just to hold the cache
44
44
        os.mkdir('.bzr')
45
 
        hc = HashCache(u'.', '.bzr/stat-cache')
 
45
        hc = HashCache('.', '.bzr/stat-cache')
46
46
        return hc
47
47
 
48
48
    def reopen_hashcache(self):
49
 
        hc = HashCache(u'.', '.bzr/stat-cache')
 
49
        hc = HashCache('.', '.bzr/stat-cache')
50
50
        hc.read()
51
51
        return hc
52
52
 
53
53
    def test_hashcache_initial_miss(self):
54
54
        """Get correct hash from an empty hashcache"""
55
55
        hc = self.make_hashcache()
56
 
        self.build_tree_contents([('foo', b'hello')])
57
 
        self.assertEqual(hc.get_sha1('foo'),
58
 
                          b'aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d')
59
 
        self.assertEqual(hc.miss_count, 1)
60
 
        self.assertEqual(hc.hit_count, 0)
 
56
        self.build_tree_contents([('foo', 'hello')])
 
57
        self.assertEquals(hc.get_sha1('foo'),
 
58
                          'aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d')
 
59
        self.assertEquals(hc.miss_count, 1)
 
60
        self.assertEquals(hc.hit_count, 0)
61
61
 
62
62
    def test_hashcache_new_file(self):
63
63
        hc = self.make_hashcache()
64
 
        self.build_tree_contents([('foo', b'goodbye')])
 
64
        self.build_tree_contents([('foo', 'goodbye')])
65
65
        # now read without pausing; it may not be possible to cache it as its
66
66
        # so new
67
 
        self.assertEqual(hc.get_sha1('foo'), sha1(b'goodbye'))
 
67
        self.assertEquals(hc.get_sha1('foo'), sha1('goodbye'))
68
68
 
69
69
    def test_hashcache_nonexistent_file(self):
70
70
        hc = self.make_hashcache()
71
 
        self.assertEqual(hc.get_sha1('no-name-yet'), None)
 
71
        self.assertEquals(hc.get_sha1('no-name-yet'), None)
72
72
 
73
73
    def test_hashcache_replaced_file(self):
74
74
        hc = self.make_hashcache()
75
 
        self.build_tree_contents([('foo', b'goodbye')])
76
 
        self.assertEqual(hc.get_sha1('foo'), sha1(b'goodbye'))
 
75
        self.build_tree_contents([('foo', 'goodbye')])
 
76
        self.assertEquals(hc.get_sha1('foo'), sha1('goodbye'))
77
77
        os.remove('foo')
78
 
        self.assertEqual(hc.get_sha1('foo'), None)
79
 
        self.build_tree_contents([('foo', b'new content')])
80
 
        self.assertEqual(hc.get_sha1('foo'), sha1(b'new content'))
 
78
        self.assertEquals(hc.get_sha1('foo'), None)
 
79
        self.build_tree_contents([('foo', 'new content')])
 
80
        self.assertEquals(hc.get_sha1('foo'), sha1('new content'))
81
81
 
82
82
    def test_hashcache_not_file(self):
83
83
        hc = self.make_hashcache()
84
84
        self.build_tree(['subdir/'])
85
 
        self.assertEqual(hc.get_sha1('subdir'), None)
 
85
        self.assertEquals(hc.get_sha1('subdir'), None)
86
86
 
87
87
    def test_hashcache_load(self):
88
88
        hc = self.make_hashcache()
89
 
        self.build_tree_contents([('foo', b'contents')])
 
89
        self.build_tree_contents([('foo', 'contents')])
90
90
        pause()
91
 
        self.assertEqual(hc.get_sha1('foo'), sha1(b'contents'))
 
91
        self.assertEquals(hc.get_sha1('foo'), sha1('contents'))
92
92
        hc.write()
93
93
        hc = self.reopen_hashcache()
94
 
        self.assertEqual(hc.get_sha1('foo'), sha1(b'contents'))
95
 
        self.assertEqual(hc.hit_count, 1)
 
94
        self.assertEquals(hc.get_sha1('foo'), sha1('contents'))
 
95
        self.assertEquals(hc.hit_count, 1)
96
96
 
97
97
    def test_hammer_hashcache(self):
98
98
        hc = self.make_hashcache()
99
 
        for i in range(10000):
100
 
            with open('foo', 'wb') as f:
101
 
                last_content = b'%08x' % i
 
99
        for i in xrange(10000):
 
100
            self.log('start writing at %s', time.time())
 
101
            f = file('foo', 'w')
 
102
            try:
 
103
                last_content = '%08x' % i
102
104
                f.write(last_content)
 
105
            finally:
 
106
                f.close()
103
107
            last_sha1 = sha1(last_content)
104
108
            self.log("iteration %d: %r -> %r",
105
109
                     i, last_content, last_sha1)
106
110
            got_sha1 = hc.get_sha1('foo')
107
 
            self.assertEqual(got_sha1, last_sha1)
 
111
            self.assertEquals(got_sha1, last_sha1)
108
112
            hc.write()
109
113
            hc = self.reopen_hashcache()
110
114
 
129
133
    def __init__(self):
130
134
        # set root and cache file name to none to make sure we won't touch the
131
135
        # real filesystem
132
 
        HashCache.__init__(self, u'.', 'hashcache')
 
136
        HashCache.__init__(self, '.', 'hashcache')
133
137
        self._files = {}
134
138
        # simulated clock running forward as operations happen
135
139
        self._clock = 0
143
147
        return (len(entry[0]),
144
148
                entry[1], entry[1],
145
149
                10, 20,
146
 
                stat.S_IFREG | 0o600)
 
150
                stat.S_IFREG | 0600)
147
151
 
148
152
    def _really_sha1_file(self, abspath, filters):
149
153
        if abspath in self._files:
168
172
    def test_hashcache_miss_new_file(self):
169
173
        """A new file gives the right sha1 but misses"""
170
174
        hc = self.make_hashcache()
171
 
        hc.put_file('foo', b'hello')
172
 
        self.assertEqual(hc.get_sha1('foo'), sha1(b'hello'))
173
 
        self.assertEqual(hc.miss_count, 1)
174
 
        self.assertEqual(hc.hit_count, 0)
 
175
        hc.put_file('foo', 'hello')
 
176
        self.assertEquals(hc.get_sha1('foo'), sha1('hello'))
 
177
        self.assertEquals(hc.miss_count, 1)
 
178
        self.assertEquals(hc.hit_count, 0)
175
179
        # if we try again it's still too new;
176
 
        self.assertEqual(hc.get_sha1('foo'), sha1(b'hello'))
177
 
        self.assertEqual(hc.miss_count, 2)
178
 
        self.assertEqual(hc.hit_count, 0)
 
180
        self.assertEquals(hc.get_sha1('foo'), sha1('hello'))
 
181
        self.assertEquals(hc.miss_count, 2)
 
182
        self.assertEquals(hc.hit_count, 0)
179
183
 
180
184
    def test_hashcache_old_file(self):
181
185
        """An old file gives the right sha1 and hits"""
182
186
        hc = self.make_hashcache()
183
 
        hc.put_file('foo', b'hello')
 
187
        hc.put_file('foo', 'hello')
184
188
        hc.pretend_to_sleep(20)
185
189
        # file is new; should get the correct hash but miss
186
 
        self.assertEqual(hc.get_sha1('foo'), sha1(b'hello'))
187
 
        self.assertEqual(hc.miss_count, 1)
188
 
        self.assertEqual(hc.hit_count, 0)
 
190
        self.assertEquals(hc.get_sha1('foo'), sha1('hello'))
 
191
        self.assertEquals(hc.miss_count, 1)
 
192
        self.assertEquals(hc.hit_count, 0)
189
193
        # and can now be hit
190
 
        self.assertEqual(hc.get_sha1('foo'), sha1(b'hello'))
191
 
        self.assertEqual(hc.miss_count, 1)
192
 
        self.assertEqual(hc.hit_count, 1)
 
194
        self.assertEquals(hc.get_sha1('foo'), sha1('hello'))
 
195
        self.assertEquals(hc.miss_count, 1)
 
196
        self.assertEquals(hc.hit_count, 1)
193
197
        hc.pretend_to_sleep(3)
194
198
        # and again
195
 
        self.assertEqual(hc.get_sha1('foo'), sha1(b'hello'))
196
 
        self.assertEqual(hc.miss_count, 1)
197
 
        self.assertEqual(hc.hit_count, 2)
 
199
        self.assertEquals(hc.get_sha1('foo'), sha1('hello'))
 
200
        self.assertEquals(hc.miss_count, 1)
 
201
        self.assertEquals(hc.hit_count, 2)
198
202
 
199
203
    def test_hashcache_invalidates(self):
200
204
        hc = self.make_hashcache()
201
 
        hc.put_file('foo', b'hello')
 
205
        hc.put_file('foo', 'hello')
202
206
        hc.pretend_to_sleep(20)
203
207
        hc.get_sha1('foo')
204
 
        hc.put_file('foo', b'h1llo')
205
 
        self.assertEqual(hc.get_sha1('foo'), sha1(b'h1llo'))
206
 
        self.assertEqual(hc.miss_count, 2)
207
 
        self.assertEqual(hc.hit_count, 0)
 
208
        hc.put_file('foo', 'h1llo')
 
209
        self.assertEquals(hc.get_sha1('foo'), sha1('h1llo'))
 
210
        self.assertEquals(hc.miss_count, 2)
 
211
        self.assertEquals(hc.hit_count, 0)