/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
0.358.2 by Jelmer Vernooij
Refresh copyright headers, add my email.
1
# Copyright (C) 2010-2018 Jelmer Vernooij <jelmer@jelmer.uk>
0.200.799 by Jelmer Vernooij
Add trivial object store tests.
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
0.358.1 by Jelmer Vernooij
Fix FSF address.
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
0.200.799 by Jelmer Vernooij
Add trivial object store tests.
16
17
"""Tests for bzr-git's object store."""
18
0.358.3 by Jelmer Vernooij
Enable absolute import.
19
from __future__ import absolute_import
20
0.200.799 by Jelmer Vernooij
Add trivial object store tests.
21
from dulwich.objects import (
22
    Blob,
0.421.3 by Jelmer Vernooij
Move directory_to_tree to object_store.
23
    Tree,
0.200.799 by Jelmer Vernooij
Add trivial object store tests.
24
    )
25
0.200.1642 by Jelmer Vernooij
Use relative imports in tests.
26
from ....branchbuilder import (
0.200.963 by Jelmer Vernooij
Add some tests for LRUTreeCache.
27
    BranchBuilder,
28
    )
0.421.3 by Jelmer Vernooij
Move directory_to_tree to object_store.
29
from ....bzr.inventory import (
30
    InventoryDirectory,
31
    InventoryFile,
32
    )
0.200.1642 by Jelmer Vernooij
Use relative imports in tests.
33
from ....errors import (
0.200.963 by Jelmer Vernooij
Add some tests for LRUTreeCache.
34
    NoSuchRevision,
35
    )
0.200.1642 by Jelmer Vernooij
Use relative imports in tests.
36
from ....graph import (
0.200.899 by Jelmer Vernooij
Add tests for find_missing_bzr_revids.
37
    DictParentsProvider,
0.200.1059 by Jelmer Vernooij
Fix graph tests.
38
    Graph,
0.200.899 by Jelmer Vernooij
Add tests for find_missing_bzr_revids.
39
    )
0.200.1642 by Jelmer Vernooij
Use relative imports in tests.
40
from ....tests import (
0.200.799 by Jelmer Vernooij
Add trivial object store tests.
41
    TestCase,
0.200.963 by Jelmer Vernooij
Add some tests for LRUTreeCache.
42
    TestCaseWithTransport,
0.200.799 by Jelmer Vernooij
Add trivial object store tests.
43
    )
44
0.200.1642 by Jelmer Vernooij
Use relative imports in tests.
45
from ..cache import (
0.200.1016 by Jelmer Vernooij
add basic test for tree_to_objects.
46
    DictGitShaMap,
47
    )
0.200.1642 by Jelmer Vernooij
Use relative imports in tests.
48
from ..object_store import (
0.200.964 by Jelmer Vernooij
Add some tests for object store.
49
    BazaarObjectStore,
0.200.963 by Jelmer Vernooij
Add some tests for LRUTreeCache.
50
    LRUTreeCache,
0.421.3 by Jelmer Vernooij
Move directory_to_tree to object_store.
51
    directory_to_tree,
0.200.799 by Jelmer Vernooij
Add trivial object store tests.
52
    _check_expected_sha,
0.200.899 by Jelmer Vernooij
Add tests for find_missing_bzr_revids.
53
    _find_missing_bzr_revids,
0.200.1016 by Jelmer Vernooij
add basic test for tree_to_objects.
54
    _tree_to_objects,
0.200.799 by Jelmer Vernooij
Add trivial object store tests.
55
    )
56
57
58
class ExpectedShaTests(TestCase):
59
60
    def setUp(self):
61
        super(ExpectedShaTests, self).setUp()
62
        self.obj = Blob()
63
        self.obj.data = "foo"
64
65
    def test_none(self):
66
        _check_expected_sha(None, self.obj)
67
68
    def test_hex(self):
69
        _check_expected_sha(self.obj.sha().hexdigest(), self.obj)
70
        self.assertRaises(AssertionError, _check_expected_sha, 
71
            "0" * 40, self.obj)
72
73
    def test_binary(self):
74
        _check_expected_sha(self.obj.sha().digest(), self.obj)
75
        self.assertRaises(AssertionError, _check_expected_sha, 
76
            "x" * 20, self.obj)
0.200.899 by Jelmer Vernooij
Add tests for find_missing_bzr_revids.
77
78
79
class FindMissingBzrRevidsTests(TestCase):
80
81
    def _find_missing(self, ancestry, want, have):
82
        return _find_missing_bzr_revids(
0.200.1059 by Jelmer Vernooij
Fix graph tests.
83
            Graph(DictParentsProvider(ancestry)),
0.200.899 by Jelmer Vernooij
Add tests for find_missing_bzr_revids.
84
            set(want), set(have))
85
86
    def test_simple(self):
87
        self.assertEquals(set(), self._find_missing({}, [], []))
88
89
    def test_up_to_date(self):
90
        self.assertEquals(set(),
91
                self._find_missing({"a": ["b"]}, ["a"], ["a"]))
92
93
    def test_one_missing(self):
94
        self.assertEquals(set(["a"]),
95
                self._find_missing({"a": ["b"]}, ["a"], ["b"]))
0.200.905 by Jelmer Vernooij
More find missing revision tests.
96
97
    def test_two_missing(self):
98
        self.assertEquals(set(["a", "b"]),
99
                self._find_missing({"a": ["b"], "b": ["c"]}, ["a"], ["c"]))
100
101
    def test_two_missing_history(self):
102
        self.assertEquals(set(["a", "b"]),
103
                self._find_missing({"a": ["b"], "b": ["c"], "c": ["d"]},
104
                    ["a"], ["c"]))
0.200.963 by Jelmer Vernooij
Add some tests for LRUTreeCache.
105
106
107
class LRUTreeCacheTests(TestCaseWithTransport):
108
109
    def setUp(self):
110
        super(LRUTreeCacheTests, self).setUp()
111
        self.branch = self.make_branch(".")
112
        self.branch.lock_write()
113
        self.addCleanup(self.branch.unlock)
114
        self.cache = LRUTreeCache(self.branch.repository)
115
116
    def test_get_not_present(self):
0.200.965 by Jelmer Vernooij
Formatting fixes.
117
        self.assertRaises(NoSuchRevision, self.cache.revision_tree,
0.200.963 by Jelmer Vernooij
Add some tests for LRUTreeCache.
118
                "unknown")
119
120
    def test_revision_trees(self):
0.200.965 by Jelmer Vernooij
Formatting fixes.
121
        self.assertRaises(NoSuchRevision, self.cache.revision_trees,
0.200.963 by Jelmer Vernooij
Add some tests for LRUTreeCache.
122
                ["unknown", "la"])
123
124
    def test_iter_revision_trees(self):
0.200.965 by Jelmer Vernooij
Formatting fixes.
125
        self.assertRaises(NoSuchRevision, self.cache.iter_revision_trees,
0.200.963 by Jelmer Vernooij
Add some tests for LRUTreeCache.
126
                ["unknown", "la"])
127
128
    def test_get(self):
129
        bb = BranchBuilder(branch=self.branch)
130
        bb.start_series()
0.285.8 by Jelmer Vernooij
Fix more tests for swapped arguments.
131
        revid = bb.build_snapshot(None,
0.200.963 by Jelmer Vernooij
Add some tests for LRUTreeCache.
132
            [('add', ('', None, 'directory', None)),
133
             ('add', ('foo', 'foo-id', 'file', 'a\nb\nc\nd\ne\n')),
134
             ])
135
        bb.finish_series()
0.285.8 by Jelmer Vernooij
Fix more tests for swapped arguments.
136
        tree = self.cache.revision_tree(revid)
137
        self.assertEquals(revid, tree.get_revision_id())
0.200.964 by Jelmer Vernooij
Add some tests for object store.
138
139
140
class BazaarObjectStoreTests(TestCaseWithTransport):
141
142
    def setUp(self):
143
        super(BazaarObjectStoreTests, self).setUp()
144
        self.branch = self.make_branch(".")
145
        self.branch.lock_write()
146
        self.addCleanup(self.branch.unlock)
147
        self.store = BazaarObjectStore(self.branch.repository)
148
149
    def test_get_blob(self):
150
        b = Blob()
151
        b.data = 'a\nb\nc\nd\ne\n'
0.200.1212 by Jelmer Vernooij
Support read locking object stores.
152
        self.store.lock_read()
153
        self.addCleanup(self.store.unlock)
0.200.964 by Jelmer Vernooij
Add some tests for object store.
154
        self.assertRaises(KeyError, self.store.__getitem__, b.id)
155
        bb = BranchBuilder(branch=self.branch)
156
        bb.start_series()
0.285.8 by Jelmer Vernooij
Fix more tests for swapped arguments.
157
        bb.build_snapshot(None,
0.200.964 by Jelmer Vernooij
Add some tests for object store.
158
            [('add', ('', None, 'directory', None)),
159
             ('add', ('foo', 'foo-id', 'file', 'a\nb\nc\nd\ne\n')),
160
             ])
161
        bb.finish_series()
0.200.1212 by Jelmer Vernooij
Support read locking object stores.
162
        # read locks cache
163
        self.assertRaises(KeyError, self.store.__getitem__, b.id)
164
        self.store.unlock()
165
        self.store.lock_read()
0.200.964 by Jelmer Vernooij
Add some tests for object store.
166
        self.assertEquals(b, self.store[b.id])
167
168
    def test_get_raw(self):
169
        b = Blob()
170
        b.data = 'a\nb\nc\nd\ne\n'
0.200.1212 by Jelmer Vernooij
Support read locking object stores.
171
        self.store.lock_read()
172
        self.addCleanup(self.store.unlock)
0.200.964 by Jelmer Vernooij
Add some tests for object store.
173
        self.assertRaises(KeyError, self.store.get_raw, b.id)
174
        bb = BranchBuilder(branch=self.branch)
175
        bb.start_series()
0.285.8 by Jelmer Vernooij
Fix more tests for swapped arguments.
176
        bb.build_snapshot(None,
0.200.964 by Jelmer Vernooij
Add some tests for object store.
177
            [('add', ('', None, 'directory', None)),
178
             ('add', ('foo', 'foo-id', 'file', 'a\nb\nc\nd\ne\n')),
179
             ])
180
        bb.finish_series()
0.200.1212 by Jelmer Vernooij
Support read locking object stores.
181
        # read locks cache
182
        self.assertRaises(KeyError, self.store.get_raw, b.id)
183
        self.store.unlock()
184
        self.store.lock_read()
0.200.964 by Jelmer Vernooij
Add some tests for object store.
185
        self.assertEquals(b.as_raw_string(), self.store.get_raw(b.id)[1])
186
187
    def test_contains(self):
188
        b = Blob()
189
        b.data = 'a\nb\nc\nd\ne\n'
0.200.1212 by Jelmer Vernooij
Support read locking object stores.
190
        self.store.lock_read()
191
        self.addCleanup(self.store.unlock)
0.200.964 by Jelmer Vernooij
Add some tests for object store.
192
        self.assertFalse(b.id in self.store)
193
        bb = BranchBuilder(branch=self.branch)
194
        bb.start_series()
0.285.8 by Jelmer Vernooij
Fix more tests for swapped arguments.
195
        bb.build_snapshot(None,
0.200.964 by Jelmer Vernooij
Add some tests for object store.
196
            [('add', ('', None, 'directory', None)),
197
             ('add', ('foo', 'foo-id', 'file', 'a\nb\nc\nd\ne\n')),
198
             ])
199
        bb.finish_series()
0.200.1212 by Jelmer Vernooij
Support read locking object stores.
200
        # read locks cache
201
        self.assertFalse(b.id in self.store)
202
        self.store.unlock()
203
        self.store.lock_read()
0.200.964 by Jelmer Vernooij
Add some tests for object store.
204
        self.assertTrue(b.id in self.store)
205
0.200.1016 by Jelmer Vernooij
add basic test for tree_to_objects.
206
207
class TreeToObjectsTests(TestCaseWithTransport):
208
209
    def setUp(self):
210
        super(TreeToObjectsTests, self).setUp()
211
        self.idmap = DictGitShaMap()
212
213
    def test_no_changes(self):
214
        tree = self.make_branch_and_tree('.')
0.275.5 by Jelmer Vernooij
Cope with root_inventory and inventory.
215
        self.addCleanup(tree.lock_read().unlock)
0.200.1016 by Jelmer Vernooij
add basic test for tree_to_objects.
216
        entries = list(_tree_to_objects(tree, [tree], self.idmap, {}))
217
        self.assertEquals([], entries)
0.421.2 by Jelmer Vernooij
Move directory_to_tree.
218
219
0.421.3 by Jelmer Vernooij
Move directory_to_tree to object_store.
220
class DirectoryToTreeTests(TestCase):
0.421.2 by Jelmer Vernooij
Move directory_to_tree.
221
222
    def test_empty(self):
0.421.6 by Jelmer Vernooij
Some more simplifications.
223
        t = directory_to_tree('', [], None, {}, None, allow_empty=False)
0.421.2 by Jelmer Vernooij
Move directory_to_tree.
224
        self.assertEquals(None, t)
225
226
    def test_empty_dir(self):
227
        child_ie = InventoryDirectory('bar', 'bar', 'bar')
0.421.6 by Jelmer Vernooij
Some more simplifications.
228
        t = directory_to_tree('', [child_ie], lambda p, x: None, {}, None,
0.421.2 by Jelmer Vernooij
Move directory_to_tree.
229
                allow_empty=False)
230
        self.assertEquals(None, t)
231
232
    def test_empty_dir_dummy_files(self):
233
        child_ie = InventoryDirectory('bar', 'bar', 'bar')
0.421.6 by Jelmer Vernooij
Some more simplifications.
234
        t = directory_to_tree('', [child_ie], lambda p, x: None, {}, ".mydummy",
0.421.2 by Jelmer Vernooij
Move directory_to_tree.
235
                allow_empty=False)
236
        self.assertTrue(".mydummy" in t)
237
238
    def test_empty_root(self):
239
        child_ie = InventoryDirectory('bar', 'bar', 'bar')
0.421.6 by Jelmer Vernooij
Some more simplifications.
240
        t = directory_to_tree('', [child_ie], lambda p, x: None, {}, None,
0.421.2 by Jelmer Vernooij
Move directory_to_tree.
241
                allow_empty=True)
242
        self.assertEquals(Tree(), t)
243
244
    def test_with_file(self):
245
        child_ie = InventoryFile('bar', 'bar', 'bar')
246
        b = Blob.from_string("bla")
0.421.6 by Jelmer Vernooij
Some more simplifications.
247
        t1 = directory_to_tree('', [child_ie], lambda p, x: b.id, {}, None,
0.421.2 by Jelmer Vernooij
Move directory_to_tree.
248
                allow_empty=False)
249
        t2 = Tree()
250
        t2.add("bar", 0100644, b.id)
251
        self.assertEquals(t1, t2)