1
# Copyright (C) 2010 Jelmer Vernooij <jelmer@samba.org>
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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
"""Tests for bzr-git's object store."""
19
from dulwich.objects import (
23
from bzrlib.branchbuilder import (
26
from bzrlib.errors import (
29
from bzrlib.graph import (
33
from bzrlib.tests import (
35
TestCaseWithTransport,
38
from bzrlib.plugins.git.cache import (
41
from bzrlib.plugins.git.object_store import (
45
_find_missing_bzr_revids,
50
class ExpectedShaTests(TestCase):
53
super(ExpectedShaTests, self).setUp()
58
_check_expected_sha(None, self.obj)
61
_check_expected_sha(self.obj.sha().hexdigest(), self.obj)
62
self.assertRaises(AssertionError, _check_expected_sha,
65
def test_binary(self):
66
_check_expected_sha(self.obj.sha().digest(), self.obj)
67
self.assertRaises(AssertionError, _check_expected_sha,
71
class FindMissingBzrRevidsTests(TestCase):
73
def _find_missing(self, ancestry, want, have):
74
return _find_missing_bzr_revids(
75
Graph(DictParentsProvider(ancestry)),
78
def test_simple(self):
79
self.assertEquals(set(), self._find_missing({}, [], []))
81
def test_up_to_date(self):
82
self.assertEquals(set(),
83
self._find_missing({"a": ["b"]}, ["a"], ["a"]))
85
def test_one_missing(self):
86
self.assertEquals(set(["a"]),
87
self._find_missing({"a": ["b"]}, ["a"], ["b"]))
89
def test_two_missing(self):
90
self.assertEquals(set(["a", "b"]),
91
self._find_missing({"a": ["b"], "b": ["c"]}, ["a"], ["c"]))
93
def test_two_missing_history(self):
94
self.assertEquals(set(["a", "b"]),
95
self._find_missing({"a": ["b"], "b": ["c"], "c": ["d"]},
99
class LRUTreeCacheTests(TestCaseWithTransport):
102
super(LRUTreeCacheTests, self).setUp()
103
self.branch = self.make_branch(".")
104
self.branch.lock_write()
105
self.addCleanup(self.branch.unlock)
106
self.cache = LRUTreeCache(self.branch.repository)
108
def test_get_not_present(self):
109
self.assertRaises(NoSuchRevision, self.cache.revision_tree,
112
def test_revision_trees(self):
113
self.assertRaises(NoSuchRevision, self.cache.revision_trees,
116
def test_iter_revision_trees(self):
117
self.assertRaises(NoSuchRevision, self.cache.iter_revision_trees,
121
bb = BranchBuilder(branch=self.branch)
123
bb.build_snapshot('BASE-id', None,
124
[('add', ('', None, 'directory', None)),
125
('add', ('foo', 'foo-id', 'file', 'a\nb\nc\nd\ne\n')),
128
tree = self.cache.revision_tree("BASE-id")
129
self.assertEquals("BASE-id", tree.get_revision_id())
132
class BazaarObjectStoreTests(TestCaseWithTransport):
135
super(BazaarObjectStoreTests, self).setUp()
136
self.branch = self.make_branch(".")
137
self.branch.lock_write()
138
self.addCleanup(self.branch.unlock)
139
self.store = BazaarObjectStore(self.branch.repository)
141
def test_get_blob(self):
143
b.data = 'a\nb\nc\nd\ne\n'
144
self.store.lock_read()
145
self.addCleanup(self.store.unlock)
146
self.assertRaises(KeyError, self.store.__getitem__, b.id)
147
bb = BranchBuilder(branch=self.branch)
149
bb.build_snapshot('BASE-id', None,
150
[('add', ('', None, 'directory', None)),
151
('add', ('foo', 'foo-id', 'file', 'a\nb\nc\nd\ne\n')),
155
self.assertRaises(KeyError, self.store.__getitem__, b.id)
157
self.store.lock_read()
158
self.assertEquals(b, self.store[b.id])
160
def test_get_raw(self):
162
b.data = 'a\nb\nc\nd\ne\n'
163
self.store.lock_read()
164
self.addCleanup(self.store.unlock)
165
self.assertRaises(KeyError, self.store.get_raw, b.id)
166
bb = BranchBuilder(branch=self.branch)
168
bb.build_snapshot('BASE-id', None,
169
[('add', ('', None, 'directory', None)),
170
('add', ('foo', 'foo-id', 'file', 'a\nb\nc\nd\ne\n')),
174
self.assertRaises(KeyError, self.store.get_raw, b.id)
176
self.store.lock_read()
177
self.assertEquals(b.as_raw_string(), self.store.get_raw(b.id)[1])
179
def test_contains(self):
181
b.data = 'a\nb\nc\nd\ne\n'
182
self.store.lock_read()
183
self.addCleanup(self.store.unlock)
184
self.assertFalse(b.id in self.store)
185
bb = BranchBuilder(branch=self.branch)
187
bb.build_snapshot('BASE-id', None,
188
[('add', ('', None, 'directory', None)),
189
('add', ('foo', 'foo-id', 'file', 'a\nb\nc\nd\ne\n')),
193
self.assertFalse(b.id in self.store)
195
self.store.lock_read()
196
self.assertTrue(b.id in self.store)
199
class TreeToObjectsTests(TestCaseWithTransport):
202
super(TreeToObjectsTests, self).setUp()
203
self.idmap = DictGitShaMap()
205
def test_no_changes(self):
206
tree = self.make_branch_and_tree('.')
207
entries = list(_tree_to_objects(tree, [tree], self.idmap, {}))
208
self.assertEquals([], entries)