Use self.store rather than explicitly creating a DiskObjectStore.
[jelmer/dulwich-libgit2.git] / dulwich / tests / test_object_store.py
1 # test_object_store.py -- tests for object_store.py
2 # Copyright (C) 2008 Jelmer Vernooij <jelmer@samba.org>
3 #
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; version 2
7 # or (at your option) any later version of the License.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 # GNU General Public License for more details.
13 #
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
17 # MA  02110-1301, USA.
18
19 """Tests for the object store interface."""
20
21
22 import os
23 import shutil
24 import tempfile
25
26 from dulwich.objects import (
27     Blob,
28     )
29 from dulwich.object_store import (
30     DiskObjectStore,
31     MemoryObjectStore,
32     )
33 from dulwich.tests import (
34     TestCase,
35     )
36 from utils import (
37     make_object,
38     )
39
40
41 testobject = make_object(Blob, data="yummy data")
42
43
44 class ObjectStoreTests(object):
45
46     def test_iter(self):
47         self.assertEquals([], list(self.store))
48
49     def test_get_nonexistant(self):
50         self.assertRaises(KeyError, lambda: self.store["a" * 40])
51
52     def test_contains_nonexistant(self):
53         self.assertFalse(("a" * 40) in self.store)
54
55     def test_add_objects_empty(self):
56         self.store.add_objects([])
57
58     def test_add_commit(self):
59         # TODO: Argh, no way to construct Git commit objects without 
60         # access to a serialized form.
61         self.store.add_objects([])
62
63     def test_add_object(self):
64         self.store.add_object(testobject)
65         self.assertEquals(set([testobject.id]), set(self.store))
66         self.assertTrue(testobject.id in self.store)
67         r = self.store[testobject.id]
68         self.assertEquals(r, testobject)
69
70     def test_add_objects(self):
71         data = [(testobject, "mypath")]
72         self.store.add_objects(data)
73         self.assertEquals(set([testobject.id]), set(self.store))
74         self.assertTrue(testobject.id in self.store)
75         r = self.store[testobject.id]
76         self.assertEquals(r, testobject)
77
78
79 class MemoryObjectStoreTests(ObjectStoreTests, TestCase):
80
81     def setUp(self):
82         TestCase.setUp(self)
83         self.store = MemoryObjectStore()
84
85
86 class PackBasedObjectStoreTests(ObjectStoreTests):
87
88     def test_empty_packs(self):
89         self.assertEquals([], self.store.packs)
90
91     def test_pack_loose_objects(self):
92         b1 = make_object(Blob, data="yummy data")
93         self.store.add_object(b1)
94         b2 = make_object(Blob, data="more yummy data")
95         self.store.add_object(b2)
96         self.assertEquals([], self.store.packs)
97         self.assertEquals(2, self.store.pack_loose_objects())
98         self.assertNotEquals([], self.store.packs)
99         self.assertEquals(0, self.store.pack_loose_objects())
100
101
102 class DiskObjectStoreTests(PackBasedObjectStoreTests, TestCase):
103
104     def setUp(self):
105         TestCase.setUp(self)
106         self.store_dir = tempfile.mkdtemp()
107         self.store = DiskObjectStore.init(self.store_dir)
108
109     def tearDown(self):
110         TestCase.tearDown(self)
111         shutil.rmtree(self.store_dir)
112
113     def test_pack_dir(self):
114         o = DiskObjectStore(self.store_dir)
115         self.assertEquals(os.path.join(self.store_dir, "pack"), o.pack_dir)
116
117 # TODO: MissingObjectFinderTests