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.assertRaises(KeyError, self.store.__getitem__, b.id)
145
bb = BranchBuilder(branch=self.branch)
147
bb.build_snapshot('BASE-id', None,
148
[('add', ('', None, 'directory', None)),
149
('add', ('foo', 'foo-id', 'file', 'a\nb\nc\nd\ne\n')),
152
self.assertEquals(b, self.store[b.id])
154
def test_get_raw(self):
156
b.data = 'a\nb\nc\nd\ne\n'
157
self.assertRaises(KeyError, self.store.get_raw, b.id)
158
bb = BranchBuilder(branch=self.branch)
160
bb.build_snapshot('BASE-id', None,
161
[('add', ('', None, 'directory', None)),
162
('add', ('foo', 'foo-id', 'file', 'a\nb\nc\nd\ne\n')),
165
self.assertEquals(b.as_raw_string(), self.store.get_raw(b.id)[1])
167
def test_contains(self):
169
b.data = 'a\nb\nc\nd\ne\n'
170
self.assertFalse(b.id in self.store)
171
bb = BranchBuilder(branch=self.branch)
173
bb.build_snapshot('BASE-id', None,
174
[('add', ('', None, 'directory', None)),
175
('add', ('foo', 'foo-id', 'file', 'a\nb\nc\nd\ne\n')),
178
self.assertTrue(b.id in self.store)
181
class TreeToObjectsTests(TestCaseWithTransport):
184
super(TreeToObjectsTests, self).setUp()
185
self.idmap = DictGitShaMap()
187
def test_no_changes(self):
188
tree = self.make_branch_and_tree('.')
189
entries = list(_tree_to_objects(tree, [tree], self.idmap, {}))
190
self.assertEquals([], entries)