~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_branch.py

  • Committer: Martin Pool
  • Date: 2009-07-27 06:28:35 UTC
  • mto: This revision was merged to the branch mainline in revision 4587.
  • Revision ID: mbp@sourcefrog.net-20090727062835-o66p8it658tq1sma
Add CountedLock.get_physical_lock_status

Show diffs side-by-side

added added

removed removed

Lines of Context:
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
 
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
16
 
17
17
"""Tests for the Branch facility that are not interface  tests.
18
18
 
19
 
For interface tests see tests/branch_implementations/*.py.
 
19
For interface tests see tests/per_branch/*.py.
20
20
 
21
21
For concrete class tests see this file, and for meta-branch tests
22
22
also see this file.
43
43
    PullResult,
44
44
    _run_with_write_locked_target,
45
45
    )
46
 
from bzrlib.bzrdir import (BzrDirMetaFormat1, BzrDirMeta1, 
 
46
from bzrlib.bzrdir import (BzrDirMetaFormat1, BzrDirMeta1,
47
47
                           BzrDir, BzrDirFormat)
48
48
from bzrlib.errors import (NotBranchError,
49
49
                           UnknownFormatError,
64
64
 
65
65
    def test_default_format_is_same_as_bzrdir_default(self):
66
66
        # XXX: it might be nice if there was only one place the default was
67
 
        # set, but at the moment that's not true -- mbp 20070814 -- 
 
67
        # set, but at the moment that's not true -- mbp 20070814 --
68
68
        # https://bugs.launchpad.net/bzr/+bug/132376
69
69
        self.assertEqual(BranchFormat.get_default_format(),
70
70
                BzrDirFormat.get_default_format().get_branch_format())
134
134
class SampleBranchFormat(BranchFormat):
135
135
    """A sample format
136
136
 
137
 
    this format is initializable, unsupported to aid in testing the 
 
137
    this format is initializable, unsupported to aid in testing the
138
138
    open and open_downlevel routines.
139
139
    """
140
140
 
151
151
    def is_supported(self):
152
152
        return False
153
153
 
154
 
    def open(self, transport, _found=False):
 
154
    def open(self, transport, _found=False, ignore_fallbacks=False):
155
155
        return "opened branch."
156
156
 
157
157
 
161
161
    def test_find_format(self):
162
162
        # is the right format object found for a branch?
163
163
        # create a branch with a few known format objects.
164
 
        # this is not quite the same as 
 
164
        # this is not quite the same as
165
165
        self.build_tree(["foo/", "bar/"])
166
166
        def check_format(format, url):
167
167
            dir = format._matchingbzrdir.initialize(url)
170
170
            found_format = BranchFormat.find_format(dir)
171
171
            self.failUnless(isinstance(found_format, format.__class__))
172
172
        check_format(BzrBranchFormat5(), "bar")
173
 
        
 
173
 
174
174
    def test_find_format_not_branch(self):
175
175
        dir = bzrdir.BzrDirMetaFormat1().initialize(self.get_url())
176
176
        self.assertRaises(NotBranchError,
228
228
        branch = self.make_branch('a', format=self.get_format_name())
229
229
        self.failUnlessExists('a/.bzr/branch/last-revision')
230
230
        self.failIfExists('a/.bzr/branch/revision-history')
 
231
        self.failIfExists('a/.bzr/branch/references')
231
232
 
232
233
    def test_config(self):
233
234
        """Ensure that all configuration data is stored in the branch"""
334
335
        return _mod_branch.BzrBranch7
335
336
 
336
337
    def get_format_name(self):
337
 
        return "development"
 
338
        return "1.9"
338
339
 
339
340
    def get_format_name_subtree(self):
340
341
        return "development-subtree"
378
379
        self.assertTrue(branch.repository.has_revision(revid))
379
380
 
380
381
 
 
382
class BzrBranch8(TestCaseWithTransport):
 
383
 
 
384
    def make_branch(self, location, format=None):
 
385
        if format is None:
 
386
            format = bzrdir.format_registry.make_bzrdir('1.9')
 
387
            format.set_branch_format(_mod_branch.BzrBranchFormat8())
 
388
        return TestCaseWithTransport.make_branch(self, location, format=format)
 
389
 
 
390
    def create_branch_with_reference(self):
 
391
        branch = self.make_branch('branch')
 
392
        branch._set_all_reference_info({'file-id': ('path', 'location')})
 
393
        return branch
 
394
 
 
395
    @staticmethod
 
396
    def instrument_branch(branch, gets):
 
397
        old_get = branch._transport.get
 
398
        def get(*args, **kwargs):
 
399
            gets.append((args, kwargs))
 
400
            return old_get(*args, **kwargs)
 
401
        branch._transport.get = get
 
402
 
 
403
    def test_reference_info_caching_read_locked(self):
 
404
        gets = []
 
405
        branch = self.create_branch_with_reference()
 
406
        branch.lock_read()
 
407
        self.addCleanup(branch.unlock)
 
408
        self.instrument_branch(branch, gets)
 
409
        branch.get_reference_info('file-id')
 
410
        branch.get_reference_info('file-id')
 
411
        self.assertEqual(1, len(gets))
 
412
 
 
413
    def test_reference_info_caching_read_unlocked(self):
 
414
        gets = []
 
415
        branch = self.create_branch_with_reference()
 
416
        self.instrument_branch(branch, gets)
 
417
        branch.get_reference_info('file-id')
 
418
        branch.get_reference_info('file-id')
 
419
        self.assertEqual(2, len(gets))
 
420
 
 
421
    def test_reference_info_caching_write_locked(self):
 
422
        gets = []
 
423
        branch = self.make_branch('branch')
 
424
        branch.lock_write()
 
425
        self.instrument_branch(branch, gets)
 
426
        self.addCleanup(branch.unlock)
 
427
        branch._set_all_reference_info({'file-id': ('path2', 'location2')})
 
428
        path, location = branch.get_reference_info('file-id')
 
429
        self.assertEqual(0, len(gets))
 
430
        self.assertEqual('path2', path)
 
431
        self.assertEqual('location2', location)
 
432
 
 
433
    def test_reference_info_caches_cleared(self):
 
434
        branch = self.make_branch('branch')
 
435
        branch.lock_write()
 
436
        branch.set_reference_info('file-id', 'path2', 'location2')
 
437
        branch.unlock()
 
438
        doppelganger = Branch.open('branch')
 
439
        doppelganger.set_reference_info('file-id', 'path3', 'location3')
 
440
        self.assertEqual(('path3', 'location3'),
 
441
                         branch.get_reference_info('file-id'))
 
442
 
381
443
class TestBranchReference(TestCaseWithTransport):
382
444
    """Tests for the branch reference facility."""
383
445
 
424
486
    def test_installed_hooks_are_BranchHooks(self):
425
487
        """The installed hooks object should be a BranchHooks."""
426
488
        # the installed hooks are saved in self._preserved_hooks.
427
 
        self.assertIsInstance(self._preserved_hooks[_mod_branch.Branch], BranchHooks)
 
489
        self.assertIsInstance(self._preserved_hooks[_mod_branch.Branch][1],
 
490
            BranchHooks)
428
491
 
429
492
 
430
493
class TestPullResult(TestCase):
451
514
 
452
515
    def lock_write(self):
453
516
        self.calls.append('lock_write')
454
 
    
 
517
 
455
518
    def unlock(self):
456
519
        self.calls.append('unlock')
457
520
        if self.unlock_exc is not None:
470
533
    """Tests for _run_with_write_locked_target."""
471
534
 
472
535
    def setUp(self):
 
536
        TestCase.setUp(self)
473
537
        self._calls = []
474
538
 
475
539
    def func_that_returns_ok(self):