~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_lockable_files.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2006-04-27 01:14:33 UTC
  • mfrom: (1686.1.1 integration)
  • Revision ID: pqm@pqm.ubuntu.com-20060427011433-95634ee1da8a2049
Merge in faster joins from weave to knit.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
# Copyright (C) 2005, 2006 by Canonical Ltd
2
 
#
 
2
 
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
5
5
# the Free Software Foundation; either version 2 of the License, or
6
6
# (at your option) any later version.
7
 
#
 
7
 
8
8
# This program is distributed in the hope that it will be useful,
9
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
11
# GNU General Public License for more details.
12
 
#
 
12
 
13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
 
17
17
from StringIO import StringIO
18
18
 
19
 
import bzrlib
20
19
from bzrlib.branch import Branch
21
 
import bzrlib.errors as errors
22
20
from bzrlib.errors import BzrBadParameterNotString, NoSuchFile, ReadOnlyError
23
21
from bzrlib.lockable_files import LockableFiles, TransportLock
24
22
from bzrlib.lockdir import LockDir
97
95
    def test__escape_empty(self):
98
96
        self.assertEqual('', self.lockable._escape(''))
99
97
 
100
 
    def test_break_lock(self):
101
 
        # some locks are not breakable
102
 
        self.lockable.lock_write()
103
 
        try:
104
 
            self.assertRaises(AssertionError, self.lockable.break_lock)
105
 
        except NotImplementedError:
106
 
            # this lock cannot be broken
107
 
            self.lockable.unlock()
108
 
            return
109
 
        l2 = self.get_lockable()
110
 
        orig_factory = bzrlib.ui.ui_factory
111
 
        # silent ui - no need for stdout
112
 
        bzrlib.ui.ui_factory = bzrlib.ui.SilentUIFactory()
113
 
        bzrlib.ui.ui_factory.stdin = StringIO("y\n")
114
 
        try:
115
 
            l2.break_lock()
116
 
        finally:
117
 
            bzrlib.ui.ui_factory = orig_factory
118
 
        try:
119
 
            l2.lock_write()
120
 
            l2.unlock()
121
 
        finally:
122
 
            self.assertRaises(errors.LockBroken, self.lockable.unlock)
123
 
            self.assertFalse(self.lockable.is_locked())
124
 
 
125
98
 
126
99
# This method of adapting tests to parameters is different to 
127
100
# the TestProviderAdapters used elsewhere, but seems simpler for this 
133
106
        super(TestLockableFiles_TransportLock, self).setUp()
134
107
        transport = get_transport('.')
135
108
        transport.mkdir('.bzr')
136
 
        self.sub_transport = transport.clone('.bzr')
137
 
        self.lockable = self.get_lockable()
 
109
        sub_transport = transport.clone('.bzr')
 
110
        self.lockable = LockableFiles(sub_transport, 'my-lock', TransportLock)
138
111
        self.lockable.create_lock()
139
 
 
140
 
    def tearDown(self):
141
 
        super(TestLockableFiles_TransportLock, self).tearDown()
142
 
        # free the subtransport so that we do not get a 5 second
143
 
        # timeout due to the SFTP connection cache.
144
 
        del self.sub_transport
145
 
 
146
 
    def get_lockable(self):
147
 
        return LockableFiles(self.sub_transport, 'my-lock', TransportLock)
148
112
        
149
113
 
150
114
class TestLockableFiles_LockDir(TestCaseInTempDir,
154
118
    def setUp(self):
155
119
        super(TestLockableFiles_LockDir, self).setUp()
156
120
        self.transport = get_transport('.')
157
 
        self.lockable = self.get_lockable()
 
121
        self.lockable = LockableFiles(self.transport, 'my-lock', LockDir)
158
122
        # the lock creation here sets mode - test_permissions on branch 
159
123
        # tests that implicitly, but it might be a good idea to factor 
160
124
        # out the mode checking logic and have it applied to loackable files
161
125
        # directly. RBC 20060418
162
126
        self.lockable.create_lock()
163
127
 
164
 
    def get_lockable(self):
165
 
        return LockableFiles(self.transport, 'my-lock', LockDir)
 
128
    def test_lock_is_lockdir(self):
 
129
        """Created instance should use a LockDir.
 
130
        
 
131
        This primarily tests the mixin adapter works properly.
 
132
        """
 
133
        ## self.assertIsInstance(self.lockable, LockableFiles)
 
134
        ## self.assertIsInstance(self.lockable._lock_strategy,
 
135
                              ## LockDirStrategy)
166
136
 
167
137
    def test_lock_created(self):
168
138
        self.assertTrue(self.transport.has('my-lock'))