/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)
0.424.1 by Jelmer Vernooij
Fix error message about .git directory.
70
        self.assertRaises(AssertionError, _check_expected_sha,
0.200.799 by Jelmer Vernooij
Add trivial object store tests.
71
            "0" * 40, self.obj)
72
73
    def test_binary(self):
74
        _check_expected_sha(self.obj.sha().digest(), self.obj)
0.424.1 by Jelmer Vernooij
Fix error message about .git directory.
75
        self.assertRaises(AssertionError, _check_expected_sha,
0.200.799 by Jelmer Vernooij
Add trivial object store tests.
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
0.424.1 by Jelmer Vernooij
Fix error message about .git directory.
219
    def test_with_gitdir(self):
220
        tree = self.make_branch_and_tree('.')
221
        self.build_tree(['.git', 'foo'])
222
        tree.add(['.git', 'foo'])
223
        revid = tree.commit('commit')
224
        revtree = tree.branch.repository.revision_tree(revid)
225
        self.addCleanup(revtree.lock_read().unlock)
226
        entries = list(_tree_to_objects(revtree, [], self.idmap, {}))
227
        self.assertEquals(['foo', ''], [p[0] for p in entries])
228
0.421.2 by Jelmer Vernooij
Move directory_to_tree.
229
0.421.3 by Jelmer Vernooij
Move directory_to_tree to object_store.
230
class DirectoryToTreeTests(TestCase):
0.421.2 by Jelmer Vernooij
Move directory_to_tree.
231
232
    def test_empty(self):
0.421.6 by Jelmer Vernooij
Some more simplifications.
233
        t = directory_to_tree('', [], None, {}, None, allow_empty=False)
0.421.2 by Jelmer Vernooij
Move directory_to_tree.
234
        self.assertEquals(None, t)
235
236
    def test_empty_dir(self):
237
        child_ie = InventoryDirectory('bar', 'bar', 'bar')
0.421.6 by Jelmer Vernooij
Some more simplifications.
238
        t = directory_to_tree('', [child_ie], lambda p, x: None, {}, None,
0.421.2 by Jelmer Vernooij
Move directory_to_tree.
239
                allow_empty=False)
240
        self.assertEquals(None, t)
241
242
    def test_empty_dir_dummy_files(self):
243
        child_ie = InventoryDirectory('bar', 'bar', 'bar')
0.421.6 by Jelmer Vernooij
Some more simplifications.
244
        t = directory_to_tree('', [child_ie], lambda p, x: None, {}, ".mydummy",
0.421.2 by Jelmer Vernooij
Move directory_to_tree.
245
                allow_empty=False)
246
        self.assertTrue(".mydummy" in t)
247
248
    def test_empty_root(self):
249
        child_ie = InventoryDirectory('bar', 'bar', 'bar')
0.421.6 by Jelmer Vernooij
Some more simplifications.
250
        t = directory_to_tree('', [child_ie], lambda p, x: None, {}, None,
0.421.2 by Jelmer Vernooij
Move directory_to_tree.
251
                allow_empty=True)
252
        self.assertEquals(Tree(), t)
253
254
    def test_with_file(self):
255
        child_ie = InventoryFile('bar', 'bar', 'bar')
256
        b = Blob.from_string("bla")
0.421.6 by Jelmer Vernooij
Some more simplifications.
257
        t1 = directory_to_tree('', [child_ie], lambda p, x: b.id, {}, None,
0.421.2 by Jelmer Vernooij
Move directory_to_tree.
258
                allow_empty=False)
259
        t2 = Tree()
260
        t2.add("bar", 0100644, b.id)
261
        self.assertEquals(t1, t2)
0.424.1 by Jelmer Vernooij
Fix error message about .git directory.
262
263
    def test_with_gitdir(self):
264
        child_ie = InventoryFile('bar', 'bar', 'bar')
265
        git_file_ie = InventoryFile('gitid', '.git', 'bar')
266
        b = Blob.from_string("bla")
267
        t1 = directory_to_tree('', [child_ie, git_file_ie],
268
                lambda p, x: b.id, {}, None,
269
                allow_empty=False)
270
        t2 = Tree()
271
        t2.add("bar", 0100644, b.id)
272
        self.assertEquals(t1, t2)