1
# Copyright (C) 2010-2018 Jelmer Vernooij <jelmer@jelmer.uk>
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.
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.
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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
"""Tests for bzr-git's object store."""
19
from __future__ import absolute_import
21
from dulwich.objects import (
25
from ....branchbuilder import (
28
from ....errors import (
31
from ....graph import (
35
from ....tests import (
37
TestCaseWithTransport,
43
from ..object_store import (
47
_find_missing_bzr_revids,
52
class ExpectedShaTests(TestCase):
55
super(ExpectedShaTests, self).setUp()
60
_check_expected_sha(None, self.obj)
63
_check_expected_sha(self.obj.sha().hexdigest(), self.obj)
64
self.assertRaises(AssertionError, _check_expected_sha,
67
def test_binary(self):
68
_check_expected_sha(self.obj.sha().digest(), self.obj)
69
self.assertRaises(AssertionError, _check_expected_sha,
73
class FindMissingBzrRevidsTests(TestCase):
75
def _find_missing(self, ancestry, want, have):
76
return _find_missing_bzr_revids(
77
Graph(DictParentsProvider(ancestry)),
80
def test_simple(self):
81
self.assertEquals(set(), self._find_missing({}, [], []))
83
def test_up_to_date(self):
84
self.assertEquals(set(),
85
self._find_missing({"a": ["b"]}, ["a"], ["a"]))
87
def test_one_missing(self):
88
self.assertEquals(set(["a"]),
89
self._find_missing({"a": ["b"]}, ["a"], ["b"]))
91
def test_two_missing(self):
92
self.assertEquals(set(["a", "b"]),
93
self._find_missing({"a": ["b"], "b": ["c"]}, ["a"], ["c"]))
95
def test_two_missing_history(self):
96
self.assertEquals(set(["a", "b"]),
97
self._find_missing({"a": ["b"], "b": ["c"], "c": ["d"]},
101
class LRUTreeCacheTests(TestCaseWithTransport):
104
super(LRUTreeCacheTests, self).setUp()
105
self.branch = self.make_branch(".")
106
self.branch.lock_write()
107
self.addCleanup(self.branch.unlock)
108
self.cache = LRUTreeCache(self.branch.repository)
110
def test_get_not_present(self):
111
self.assertRaises(NoSuchRevision, self.cache.revision_tree,
114
def test_revision_trees(self):
115
self.assertRaises(NoSuchRevision, self.cache.revision_trees,
118
def test_iter_revision_trees(self):
119
self.assertRaises(NoSuchRevision, self.cache.iter_revision_trees,
123
bb = BranchBuilder(branch=self.branch)
125
revid = bb.build_snapshot(None,
126
[('add', ('', None, 'directory', None)),
127
('add', ('foo', 'foo-id', 'file', 'a\nb\nc\nd\ne\n')),
130
tree = self.cache.revision_tree(revid)
131
self.assertEquals(revid, tree.get_revision_id())
134
class BazaarObjectStoreTests(TestCaseWithTransport):
137
super(BazaarObjectStoreTests, self).setUp()
138
self.branch = self.make_branch(".")
139
self.branch.lock_write()
140
self.addCleanup(self.branch.unlock)
141
self.store = BazaarObjectStore(self.branch.repository)
143
def test_get_blob(self):
145
b.data = 'a\nb\nc\nd\ne\n'
146
self.store.lock_read()
147
self.addCleanup(self.store.unlock)
148
self.assertRaises(KeyError, self.store.__getitem__, b.id)
149
bb = BranchBuilder(branch=self.branch)
151
bb.build_snapshot(None,
152
[('add', ('', None, 'directory', None)),
153
('add', ('foo', 'foo-id', 'file', 'a\nb\nc\nd\ne\n')),
157
self.assertRaises(KeyError, self.store.__getitem__, b.id)
159
self.store.lock_read()
160
self.assertEquals(b, self.store[b.id])
162
def test_get_raw(self):
164
b.data = 'a\nb\nc\nd\ne\n'
165
self.store.lock_read()
166
self.addCleanup(self.store.unlock)
167
self.assertRaises(KeyError, self.store.get_raw, b.id)
168
bb = BranchBuilder(branch=self.branch)
170
bb.build_snapshot(None,
171
[('add', ('', None, 'directory', None)),
172
('add', ('foo', 'foo-id', 'file', 'a\nb\nc\nd\ne\n')),
176
self.assertRaises(KeyError, self.store.get_raw, b.id)
178
self.store.lock_read()
179
self.assertEquals(b.as_raw_string(), self.store.get_raw(b.id)[1])
181
def test_contains(self):
183
b.data = 'a\nb\nc\nd\ne\n'
184
self.store.lock_read()
185
self.addCleanup(self.store.unlock)
186
self.assertFalse(b.id in self.store)
187
bb = BranchBuilder(branch=self.branch)
189
bb.build_snapshot(None,
190
[('add', ('', None, 'directory', None)),
191
('add', ('foo', 'foo-id', 'file', 'a\nb\nc\nd\ne\n')),
195
self.assertFalse(b.id in self.store)
197
self.store.lock_read()
198
self.assertTrue(b.id in self.store)
201
class TreeToObjectsTests(TestCaseWithTransport):
204
super(TreeToObjectsTests, self).setUp()
205
self.idmap = DictGitShaMap()
207
def test_no_changes(self):
208
tree = self.make_branch_and_tree('.')
209
self.addCleanup(tree.lock_read().unlock)
210
entries = list(_tree_to_objects(tree, [tree], self.idmap, {}))
211
self.assertEquals([], entries)