~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/selftest/teststore.py

  • Committer: John Arbash Meinel
  • Date: 2005-09-29 20:34:25 UTC
  • mfrom: (1185.11.24)
  • mto: (1393.1.12)
  • mto: This revision was merged to the branch mainline in revision 1396.
  • Revision ID: john@arbash-meinel.com-20050929203425-7fc2ea87f449dfe8
Merged in split-storage-2 branch. Need to cleanup a little bit more still.

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
 
17
17
"""Test Store implementation
18
18
"""
19
 
 
20
19
from StringIO import StringIO
21
20
import os
22
21
 
23
 
from bzrlib.remotebranch import RemoteStore
24
 
from bzrlib.store import ImmutableStore, copy_all
 
22
from bzrlib.store import copy_all
 
23
from bzrlib.transport.local import LocalTransport
 
24
from bzrlib.transport import NoSuchFile
 
25
from bzrlib.store.compressed_text import CompressedTextStore
25
26
from bzrlib.selftest import TestCaseInTempDir
26
27
from bzrlib.errors import BzrError, UnlistableStore
27
28
 
28
29
 
29
 
class TestStore(TestCaseInTempDir):
 
30
def fill_store(store):
 
31
    store.add(StringIO('hello'), 'a')
 
32
    store.add(StringIO('other'), 'b')
 
33
    store.add(StringIO('something'), 'c')
 
34
    store.add(StringIO('goodbye'), '123123')
 
35
 
 
36
def check_equals(tester, store, files, values, permit_failure=False):
 
37
    files = store.get(files, permit_failure=permit_failure)
 
38
    count = 0
 
39
    for f, v in zip(files, values):
 
40
        count += 1
 
41
        if v is None:
 
42
            tester.assert_(f is None)
 
43
        else:
 
44
            tester.assertEquals(f.read(), v)
 
45
    tester.assertEquals(count, len(values))
 
46
    # We need to check to make sure there are no more
 
47
    # files to be returned, I'm using a cheezy way
 
48
    # Convert to a list, and there shouldn't be any left
 
49
    tester.assertEquals(len(list(files)), 0)
 
50
 
 
51
def test_multiple_add(tester, store):
 
52
    fill_store(store)
 
53
    tester.assertRaises(BzrError, store.add, StringIO('goodbye'), '123123')
 
54
 
 
55
def test_get(tester, store):
 
56
    fill_store(store)
 
57
 
 
58
    check_equals(tester, store, ['a'], ['hello'])
 
59
    check_equals(tester, store, ['b', 'c'], ['other', 'something'])
 
60
 
 
61
    # Make sure that requesting a non-existing file fails
 
62
    tester.assertRaises(NoSuchFile, check_equals, tester, store,
 
63
            ['d'], [None])
 
64
    tester.assertRaises(NoSuchFile, check_equals, tester, store,
 
65
            ['a', 'd'], ['hello', None])
 
66
    tester.assertRaises(NoSuchFile, check_equals, tester, store,
 
67
            ['d', 'a'], [None, 'hello'])
 
68
    tester.assertRaises(NoSuchFile, check_equals, tester, store,
 
69
            ['d', 'd', 'd'], [None, None, None])
 
70
    tester.assertRaises(NoSuchFile, check_equals, tester, store,
 
71
            ['a', 'd', 'b'], ['hello', None, 'other'])
 
72
 
 
73
def test_ignore_get(tester, store):
 
74
    fill_store(store)
 
75
 
 
76
    files = store.get(['d'], permit_failure=True)
 
77
    files = list(files)
 
78
    tester.assertEquals(len(files), 1)
 
79
    tester.assert_(files[0] is None)
 
80
 
 
81
    check_equals(tester, store, ['a', 'd'], ['hello', None],
 
82
            permit_failure=True)
 
83
    check_equals(tester, store, ['d', 'a'], [None, 'hello'],
 
84
            permit_failure=True)
 
85
    check_equals(tester, store, ['d', 'd'], [None, None],
 
86
            permit_failure=True)
 
87
    check_equals(tester, store, ['a', 'd', 'b'], ['hello', None, 'other'],
 
88
            permit_failure=True)
 
89
    check_equals(tester, store, ['a', 'd', 'b'], ['hello', None, 'other'],
 
90
            permit_failure=True)
 
91
    check_equals(tester, store, ['b', 'd', 'c'], ['other', None, 'something'],
 
92
            permit_failure=True)
 
93
 
 
94
def get_compressed_store():
 
95
    t = LocalTransport('.')
 
96
    return CompressedTextStore(t)
 
97
 
 
98
class TestCompressedTextStore(TestCaseInTempDir):
30
99
    def test_multiple_add(self):
31
100
        """Multiple add with same ID should raise a BzrError"""
32
 
        store = ImmutableStore('.')
33
 
        store.add(StringIO('goodbye'), '123123')
34
 
        self.assertRaises(BzrError, store.add, StringIO('goodbye'), '123123')
 
101
        store = get_compressed_store()
 
102
        test_multiple_add(self, store)
 
103
 
 
104
    def test_get(self):
 
105
        store = get_compressed_store()
 
106
        test_get(self, store)
 
107
 
 
108
    def test_ignore_get(self):
 
109
        store = get_compressed_store()
 
110
        test_ignore_get(self, store)
 
111
 
35
112
 
36
113
    def test_copy_all(self):
37
114
        """Test copying"""
38
115
        os.mkdir('a')
39
 
        store_a = ImmutableStore('a')
 
116
        store_a = CompressedTextStore('a')
40
117
        store_a.add('foo', '1')
41
118
        os.mkdir('b')
42
 
        store_b = ImmutableStore('b')
 
119
        store_b = CompressedTextStore('b')
43
120
        copy_all(store_a, store_b)
44
121
        self.assertEqual(store_a['1'].read(), 'foo')
45
122
        self.assertEqual(store_b['1'].read(), 'foo')
46
 
        store_c = RemoteStore('http://example.com/')
47
 
        self.assertRaises(UnlistableStore, copy_all, store_c, store_b)
 
123
        # TODO: Switch the exception form UnlistableStore to
 
124
        #       or make Stores throw UnlistableStore if their
 
125
        #       Transport doesn't support listing
 
126
        # store_c = RemoteStore('http://example.com/')
 
127
        # self.assertRaises(UnlistableStore, copy_all, store_c, store_b)
 
128