~bzr-pqm/bzr/bzr.dev

1563.2.21 by Robert Collins
Smoke test for RevisionStore factories creating revision stores.
1
# Copyright (C) 2006 by Canonical Ltd
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
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
17
"""Revision store tests."""
18
19
1563.2.22 by Robert Collins
Move responsibility for repository.has_revision into RevisionStore
20
import bzrlib.errors as errors
21
from bzrlib.revision import Revision
1563.2.21 by Robert Collins
Smoke test for RevisionStore factories creating revision stores.
22
from bzrlib.store.revision import RevisionStore
23
from bzrlib.tests import TestCaseWithTransport
1563.2.22 by Robert Collins
Move responsibility for repository.has_revision into RevisionStore
24
from bzrlib.transactions import PassThroughTransaction
25
26
27
class TestFactory(TestCaseWithTransport):
1563.2.21 by Robert Collins
Smoke test for RevisionStore factories creating revision stores.
28
29
    def test_factory_keeps_smoke_in(self):
30
        s = self.store_factory.create(self.get_url('.'))
31
        self.assertTrue(isinstance(s, RevisionStore))
1563.2.22 by Robert Collins
Move responsibility for repository.has_revision into RevisionStore
32
33
34
class TestAll(TestCaseWithTransport):
35
36
    def setUp(self):
37
        super(TestAll, self).setUp()
38
        self.store = self.store_factory.create(self.get_url('.'))
39
        self.transaction = PassThroughTransaction()
40
1563.2.23 by Robert Collins
Add add_revision and get_revision methods to RevisionStore
41
    def test_add_has_get(self):
1563.2.28 by Robert Collins
Add total_size to the revision_store api.
42
        rev = self.add_sample_rev()
43
        self.assertTrue(self.store.has_revision_id('A', self.transaction))
44
        rev2 = self.store.get_revision('A', self.transaction)
45
        self.assertEqual(rev, rev2)
46
47
    def add_sample_rev(self):
1563.2.22 by Robert Collins
Move responsibility for repository.has_revision into RevisionStore
48
        rev = Revision(timestamp=0,
49
                       timezone=None,
50
                       committer="Foo Bar <foo@example.com>",
51
                       message="Message",
1563.2.23 by Robert Collins
Add add_revision and get_revision methods to RevisionStore
52
                       inventory_sha1='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
53
                       revision_id='A')
54
        self.store.add_revision(rev, self.transaction)
1563.2.28 by Robert Collins
Add total_size to the revision_store api.
55
        return rev
1563.2.22 by Robert Collins
Move responsibility for repository.has_revision into RevisionStore
56
57
    def test_has_missing(self):
58
        # has of a non present id -> False
59
        self.assertFalse(self.store.has_revision_id('missing', self.transaction))
60
61
    def test_has_None(self):
62
        # has of None -> True
63
        self.assertTrue(self.store.has_revision_id(None, self.transaction))
1563.2.23 by Robert Collins
Add add_revision and get_revision methods to RevisionStore
64
65
    def test_get_revision_none(self):
66
        # get_revision(None) -> raises NoSuchRevision
67
        self.assertRaises(errors.NoSuchRevision,
68
                          self.store.get_revision,
69
                          'B',
70
                          self.transaction)
1563.2.27 by Robert Collins
Add signature text addition to the revisionstore api.
71
72
    def test_add_signature_text_missing(self):
1563.2.30 by Robert Collins
Remove all but fetch references to revision_store, making the repository references that are weave specific use the RevisionTextStore.text_store attribute.
73
        # add of a text signature for a missing revision must work, to allow
74
        # revisions to be added after the signature.
75
        self.store.add_revision_signature_text('A', 'foo\nbar', self.transaction)
76
        # but must not be visible
1563.2.29 by Robert Collins
Remove all but fetch references to repository.revision_store.
77
        self.assertRaises(errors.NoSuchRevision,
78
                          self.store.has_signature,
1563.2.30 by Robert Collins
Remove all but fetch references to revision_store, making the repository references that are weave specific use the RevisionTextStore.text_store attribute.
79
                          'A',
80
                          self.transaction)
81
        # at all
82
        self.assertRaises(errors.NoSuchRevision,
83
                          self.store.get_signature_text,
84
                          'A',
85
                          self.transaction)
86
        # until the revision is added
87
        self.add_sample_rev()
88
        self.assertTrue(self.store.has_signature('A', self.transaction))
89
        self.assertEqual('foo\nbar',
90
                         self.store.get_signature_text('A', self.transaction))
1563.2.29 by Robert Collins
Remove all but fetch references to repository.revision_store.
91
    
92
    def test_add_signature_text(self):
93
        # add a signature to a existing revision works.
94
        self.add_sample_rev()
95
        self.assertFalse(self.store.has_signature('A', self.transaction))
1563.2.30 by Robert Collins
Remove all but fetch references to revision_store, making the repository references that are weave specific use the RevisionTextStore.text_store attribute.
96
        self.assertRaises(errors.NoSuchRevision,
97
                          self.store.get_signature_text,
98
                          'A',
99
                          self.transaction)
1563.2.29 by Robert Collins
Remove all but fetch references to repository.revision_store.
100
        self.store.add_revision_signature_text('A', 'foo\nbar', self.transaction)
101
        self.assertTrue(self.store.has_signature('A', self.transaction))
1563.2.30 by Robert Collins
Remove all but fetch references to revision_store, making the repository references that are weave specific use the RevisionTextStore.text_store attribute.
102
        self.assertEqual('foo\nbar',
103
                         self.store.get_signature_text('A', self.transaction))
1563.2.28 by Robert Collins
Add total_size to the revision_store api.
104
105
    def test_total_size(self):
106
        # we get a revision count and a numeric size figure from total_size().
107
        count, bytes = self.store.total_size(self.transaction)
108
        self.assertEqual(0, count)
1666.1.6 by Robert Collins
Make knit the default format.
109
        # some stores use disk immediately that they are created so we just 
110
        # check that its an int.
111
        self.assertIsInstance(bytes, (int, long))
1563.2.28 by Robert Collins
Add total_size to the revision_store api.
112
        self.add_sample_rev()
113
        count, bytes = self.store.total_size(self.transaction)
114
        self.assertEqual(1, count)
115
        self.assertNotEqual(0, bytes)
116
        
1563.2.29 by Robert Collins
Remove all but fetch references to repository.revision_store.
117
    def test_all_revision_ids(self):
118
        self.assertEqual([], self.store.all_revision_ids(self.transaction))
119
        self.add_sample_rev()
120
        self.assertEqual(['A'], self.store.all_revision_ids(self.transaction))