458
458
Testing locking behaviour
459
459
-------------------------
461
You may want to write tests that particular objects are or aren't locked
462
during particular operations: see for example `bug 498409`__.
464
__ https://launchpad.net/bugs/498409
466
The `TestCase` base class registers hooks that record lock actions into
467
``._lock_actions`` in this format::
470
('acquired', LockResult(file:///tmp/testbzr-J2pcy2.tmp/.bzr/branch-lockc4au55ppz8wdym11z1aq)),
471
('released', LockResult(file:///tmp/testbzr-J2pcy2.tmp/.bzr/branch-lockc4au55ppz8wdym11z1aq)),
472
('acquired', LockResult(file:///tmp/testbzr-J2pcy2.tmp/.bzr/repository/lockyxb3rn4sw1oyx1jzkt45)),
473
('released', LockResult(file:///tmp/testbzr-J2pcy2.tmp/.bzr/repository/lockyxb3rn4sw1oyx1jzkt45)),
474
('acquired', LockResult(file:///tmp/testbzr-J2pcy2.tmp/.bzr/branch/lockh8c6t28rcjdkgxtndbje)),
475
('released', LockResult(file:///tmp/testbzr-J2pcy2.tmp/.bzr/branch/lockh8c6t28rcjdkgxtndbje)),
478
Alternatively you can register your own hooks to make custom assertions:
479
see `TestCase._check_locks` for an example.
461
In order to test the locking behaviour of commands, it is possible to install
462
a hook that is called when a write lock is: acquired, released or broken.
463
(Read locks also exist, they cannot be discovered in this way.)
465
A hook can be installed by calling bzrlib.lock.Lock.hooks.install_named_hook.
466
The three valid hooks are: `lock_acquired`, `lock_released` and `lock_broken`.
473
lock.Lock.hooks.install_named_hook('lock_acquired',
474
locks_acquired.append, None)
475
lock.Lock.hooks.install_named_hook('lock_released',
476
locks_released.append, None)
478
`locks_acquired` will now receive a LockResult instance for all locks acquired
479
since the time the hook is installed.
481
The last part of the `lock_url` allows you to identify the type of object that is locked.
483
- BzrDir: `/branch-lock`
484
- Working tree: `/checkout/lock`
485
- Branch: `/branch/lock`
486
- Repository: `/repository/lock`
488
To test if a lock is a write lock on a working tree, one can do the following::
490
self.assertEndsWith(locks_acquired[0].lock_url, "/checkout/lock")
492
See bzrlib/tests/commands/test_revert.py for an example of how to use this for