~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/selftest/testtransport.py

  • Committer: John Arbash Meinel
  • Date: 2005-09-18 20:08:07 UTC
  • mto: (1393.2.1)
  • mto: This revision was merged to the branch mainline in revision 1396.
  • Revision ID: john@arbash-meinel.com-20050918200807-e5bb2fb0fe383d74
Testing put and append, also testing agaist file-like objects as well as strings.

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
from bzrlib.selftest import TestCaseInTempDir
19
19
from bzrlib.selftest.HTTPTestUtil import TestCaseWithWebserver
20
20
from bzrlib.transport import NoSuchFile, FileExists
 
21
from cStringIO import StringIO
 
22
 
 
23
def _append(fn, txt):
 
24
    """Append the given text (file-like object) to the supplied filename."""
 
25
    f = open(fn, 'ab')
 
26
    f.write(txt)
 
27
    f.flush()
 
28
    f.close()
 
29
    del f
21
30
 
22
31
def test_transport(tester, t, readonly=False):
23
32
    """Test a transport object. Basically, it assumes that the
71
80
    else:
72
81
        t.put('c', 'some text for c\n')
73
82
    tester.assert_(os.path.exists('c'))
74
 
    tester.assertEqual(open('c').read(), 'some text for c\n')
 
83
    tester.check_file_contents('c', 'some text for c\n')
75
84
    tester.assertEqual(t.get('c').read(), 'some text for c\n')
76
85
    # Make sure 'has' is updated
77
86
    tester.assertEqual(list(t.has_multi(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])),
86
95
                         2)
87
96
    tester.assertEqual(list(t.has_multi(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])),
88
97
            [True, True, True, True, True, False, True, False])
89
 
    tester.assertEqual(open('a').read(), 'new\ncontents for\na\n')
90
 
    tester.assertEqual(open('d').read(), 'contents\nfor d\n')
 
98
    tester.check_file_contents('a', 'new\ncontents for\na\n')
 
99
    tester.check_file_contents('d', 'contents\nfor d\n')
91
100
 
92
101
    if readonly:
93
102
        open('a', 'wb').write('diff\ncontents for\na\n')
97
106
            t.put_multi(iter([('a', 'diff\ncontents for\na\n'),
98
107
                              ('d', 'another contents\nfor d\n')]))
99
108
                         , 2)
100
 
    tester.assertEqual(open('a').read(), 'diff\ncontents for\na\n')
101
 
    tester.assertEqual(open('d').read(), 'another contents\nfor d\n')
 
109
    tester.check_file_contents('a', 'diff\ncontents for\na\n')
 
110
    tester.check_file_contents('d', 'another contents\nfor d\n')
102
111
 
103
112
    if not readonly:
104
113
        tester.assertRaises(NoSuchFile, t.put, 'path/doesnt/exist/c', 'contents')
163
172
    for f in files:
164
173
        tester.assertEquals(open(f).read(), open(os.path.join(dtmp_base, f)).read())
165
174
 
166
 
    # TODO: Test append
 
175
    del dtmp, dtmp_base
 
176
 
 
177
    # Test append, and append_multi
 
178
    if readonly:
 
179
        _append('a', 'add\nsome\nmore\ncontents\n')
 
180
    else:
 
181
        t.append('a', 'add\nsome\nmore\ncontents\n')
 
182
 
 
183
    tester.check_file_contents('a', 
 
184
        'diff\ncontents for\na\nadd\nsome\nmore\ncontents\n')
 
185
 
 
186
    if readonly:
 
187
        _append('a', 'and\nthen\nsome\nmore\n')
 
188
        _append('d', 'some\nmore\nfor\nd\n')
 
189
    else:
 
190
        t.append_multi([('a', 'and\nthen\nsome\nmore\n'),
 
191
                ('d', 'some\nmore\nfor\nd\n')])
 
192
    tester.check_file_contents('a', 
 
193
        'diff\ncontents for\na\n'
 
194
        'add\nsome\nmore\ncontents\n'
 
195
        'and\nthen\nsome\nmore\n')
 
196
    tester.check_file_contents('d', 
 
197
            'another contents\nfor d\n'
 
198
            'some\nmore\nfor\nd\n')
 
199
 
 
200
    # Test that StringIO can be used as a file-like object with put
 
201
    f1 = StringIO('this is a string\nand some more stuff\n')
 
202
    if readonly:
 
203
        open('f1', 'wb').write(f1.read())
 
204
    else:
 
205
        t.put('f1', f1)
 
206
 
 
207
    del f1
 
208
 
 
209
    tester.check_file_contents('f1', 
 
210
            'this is a string\nand some more stuff\n')
 
211
 
 
212
    f2 = StringIO('here is some text\nand a bit more\n')
 
213
    f3 = StringIO('some text for the\nthird file created\n')
 
214
 
 
215
    if readonly:
 
216
        open('f2', 'wb').write(f2.read())
 
217
        open('f3', 'wb').write(f3.read())
 
218
    else:
 
219
        t.put_multi([('f2', f2), ('f3', f3)])
 
220
 
 
221
    del f2, f3
 
222
 
 
223
    tester.check_file_contents('f2', 'here is some text\nand a bit more\n')
 
224
    tester.check_file_contents('f3', 'some text for the\nthird file created\n')
 
225
 
 
226
    # Test that an actual file object can be used with put
 
227
    f4 = open('f1', 'rb')
 
228
    if readonly:
 
229
        open('f4', 'wb').write(f4.read())
 
230
    else:
 
231
        t.put('f4', f4)
 
232
 
 
233
    del f4
 
234
 
 
235
    tester.check_file_contents('f4', 
 
236
            'this is a string\nand some more stuff\n')
 
237
 
 
238
    f5 = open('f2', 'rb')
 
239
    f6 = open('f3', 'rb')
 
240
    if readonly:
 
241
        open('f5', 'wb').write(f5.read())
 
242
        open('f6', 'wb').write(f6.read())
 
243
    else:
 
244
        t.put_multi([('f5', f5), ('f6', f6)])
 
245
 
 
246
    del f5, f6
 
247
 
 
248
    tester.check_file_contents('f5', 'here is some text\nand a bit more\n')
 
249
    tester.check_file_contents('f6', 'some text for the\nthird file created\n')
 
250
 
 
251
    # Test that StringIO can be used as a file-like object with append
 
252
    a1 = StringIO('appending to\none\n')
 
253
    if readonly:
 
254
        _append('f1', a1.read())
 
255
    else:
 
256
        t.append('f1', a1)
 
257
 
 
258
    del a1
 
259
 
 
260
    tester.check_file_contents('f1', 
 
261
            'this is a string\nand some more stuff\n'
 
262
            'appending to\none\n')
 
263
 
 
264
    a2 = StringIO('adding more\ntext to two\n')
 
265
    a3 = StringIO('some garbage\nto put in three\n')
 
266
 
 
267
    if readonly:
 
268
        _append('f2', a2.read())
 
269
        _append('f3', a3.read())
 
270
    else:
 
271
        t.append_multi([('f2', a2), ('f3', a3)])
 
272
 
 
273
    del a2, a3
 
274
 
 
275
    tester.check_file_contents('f2',
 
276
            'here is some text\nand a bit more\n'
 
277
            'adding more\ntext to two\n')
 
278
    tester.check_file_contents('f3', 
 
279
            'some text for the\nthird file created\n'
 
280
            'some garbage\nto put in three\n')
 
281
 
 
282
    # Test that an actual file object can be used with put
 
283
    a4 = open('f1', 'rb')
 
284
    if readonly:
 
285
        _append('f4', a4.read())
 
286
    else:
 
287
        t.append('f4', a4)
 
288
 
 
289
    del a4
 
290
 
 
291
    tester.check_file_contents('f4', 
 
292
            'this is a string\nand some more stuff\n'
 
293
            'this is a string\nand some more stuff\n'
 
294
            'appending to\none\n')
 
295
 
 
296
    a5 = open('f2', 'rb')
 
297
    a6 = open('f3', 'rb')
 
298
    if readonly:
 
299
        _append('f5', a5.read())
 
300
        _append('f6', a6.read())
 
301
    else:
 
302
        t.append_multi([('f5', a5), ('f6', a6)])
 
303
 
 
304
    del a5, a6
 
305
 
 
306
    tester.check_file_contents('f5',
 
307
            'here is some text\nand a bit more\n'
 
308
            'here is some text\nand a bit more\n'
 
309
            'adding more\ntext to two\n')
 
310
    tester.check_file_contents('f6',
 
311
            'some text for the\nthird file created\n'
 
312
            'some text for the\nthird file created\n'
 
313
            'some garbage\nto put in three\n')
 
314
 
167
315
    # TODO: Make sure all entries support file-like objects as well as strings.
168
316
    # TODO: Test get_partial()
169
317