1
# Copyright (C) 2005-2010 Canonical Ltd
1
# Copyright (C) 2005-2011 Canonical Ltd
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
14
14
# along with this program; if not, write to the Free Software
15
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
from StringIO import StringIO
25
from bzrlib.errors import BzrBadParameterNotString, NoSuchFile, ReadOnlyError
26
from bzrlib.lockable_files import LockableFiles, TransportLock
27
from bzrlib.symbol_versioning import (
30
from bzrlib.tests import (
24
from ..lockable_files import LockableFiles, TransportLock
34
from bzrlib.tests.test_smart import TestCaseWithSmartMedium
35
from bzrlib.tests.test_transactions import DummyWeave
36
from bzrlib.transactions import (PassThroughTransaction,
40
from bzrlib.transport import get_transport
29
from .test_smart import TestCaseWithSmartMedium
30
from .test_transactions import DummyWeave
31
from ..transactions import (PassThroughTransaction,
43
37
# these tests are applied in each parameterized suite for LockableFiles
82
76
self.lockable.unlock()
83
77
raise TestNotApplicable("%r is not breakable" % (self.lockable,))
84
78
l2 = self.get_lockable()
85
orig_factory = bzrlib.ui.ui_factory
79
orig_factory = breezy.ui.ui_factory
86
80
# silent ui - no need for stdout
87
bzrlib.ui.ui_factory = bzrlib.ui.CannedInputUIFactory([True])
81
breezy.ui.ui_factory = breezy.ui.CannedInputUIFactory([True])
91
bzrlib.ui.ui_factory = orig_factory
85
breezy.ui.ui_factory = orig_factory
125
119
# This test does not apply, because this lockable refuses
128
different_token = token + 'xxx'
122
different_token = token + b'xxx'
129
123
# Re-using the same lockable instance with a different token will
130
124
# raise TokenMismatch.
131
125
self.assertRaises(errors.TokenMismatch,
278
272
_TestLockableFiles_mixin):
281
TestCaseInTempDir.setUp(self)
282
transport = get_transport('.')
283
transport.mkdir('.bzr')
284
self.sub_transport = transport.clone('.bzr')
275
super(TestLockableFiles_TransportLock, self).setUp()
276
t = transport.get_transport_from_path('.')
278
self.sub_transport = t.clone('.bzr')
285
279
self.lockable = self.get_lockable()
286
280
self.lockable.create_lock()
301
295
class TestLockableFiles_LockDir(TestCaseInTempDir,
302
_TestLockableFiles_mixin):
296
_TestLockableFiles_mixin):
303
297
"""LockableFile tests run with LockDir underneath"""
306
TestCaseInTempDir.setUp(self)
307
self.transport = get_transport('.')
300
super(TestLockableFiles_LockDir, self).setUp()
301
self.transport = transport.get_transport_from_path('.')
308
302
self.lockable = self.get_lockable()
309
303
# the lock creation here sets mode - test_permissions on branch
310
304
# tests that implicitly, but it might be a good idea to factor
329
323
lockable = LockableFiles(self.transport.clone('readonly'), 'test-lock',
331
325
# The directory mode should be read-write-execute for the current user
332
self.assertEqual(00700, lockable._dir_mode & 00700)
326
self.assertEqual(0o0700, lockable._dir_mode & 0o0700)
333
327
# Files should be read-write for the current user
334
self.assertEqual(00600, lockable._file_mode & 00700)
328
self.assertEqual(0o0600, lockable._file_mode & 0o0700)
337
331
class TestLockableFiles_RemoteLockDir(TestCaseWithSmartMedium,
338
_TestLockableFiles_mixin):
332
_TestLockableFiles_mixin):
339
333
"""LockableFile tests run with RemoteLockDir on a branch."""
342
TestCaseWithSmartMedium.setUp(self)
336
super(TestLockableFiles_RemoteLockDir, self).setUp()
343
337
# can only get a RemoteLockDir with some RemoteObject...
344
338
# use a branch as thats what we want. These mixin tests test the end
345
339
# to end behaviour, so stubbing out the backend and simulating would
346
340
# defeat the purpose. We test the protocol implementation separately
347
341
# in test_remote and test_smart as usual.
348
342
b = self.make_branch('foo')
349
self.addCleanup(b.bzrdir.transport.disconnect)
350
self.transport = get_transport('.')
343
self.addCleanup(b.controldir.transport.disconnect)
344
self.transport = transport.get_transport_from_path('.')
351
345
self.lockable = self.get_lockable()
353
347
def get_lockable(self):
354
348
# getting a new lockable involves opening a new instance of the branch
355
branch = bzrlib.branch.Branch.open(self.get_url('foo'))
356
self.addCleanup(branch.bzrdir.transport.disconnect)
349
branch = breezy.branch.Branch.open(self.get_url('foo'))
350
self.addCleanup(branch.controldir.transport.disconnect)
357
351
return branch.control_files