~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to doc/developers/testing.txt

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2010-04-15 18:09:55 UTC
  • mfrom: (5159.1.1 integration)
  • Revision ID: pqm@pqm.ubuntu.com-20100415180955-v9jh960r07pva92c
(vila) Merge 2.1 into bzr.dev including fixes for #262450, #373898,
        #498409

Show diffs side-by-side

added added

removed removed

Lines of Context:
458
458
Testing locking behaviour
459
459
-------------------------
460
460
 
461
 
You may want to write tests that particular objects are or aren't locked
462
 
during particular operations: see for example `bug 498409`__.  
463
 
 
464
 
 __ https://launchpad.net/bugs/498409
465
 
 
466
 
The `TestCase` base class registers hooks that record lock actions into 
467
 
``._lock_actions`` in this format::
468
 
 
469
 
  [
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)),
476
 
    ...
477
 
 
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.)
 
464
 
 
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`.
 
467
 
 
468
Example::
 
469
 
 
470
    locks_acquired = []
 
471
    locks_released = []
 
472
 
 
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)
 
477
 
 
478
`locks_acquired` will now receive a LockResult instance for all locks acquired
 
479
since the time the hook is installed.
 
480
 
 
481
The last part of the `lock_url` allows you to identify the type of object that is locked.
 
482
 
 
483
- BzrDir: `/branch-lock`
 
484
- Working tree: `/checkout/lock`
 
485
- Branch: `/branch/lock`
 
486
- Repository: `/repository/lock`
 
487
 
 
488
To test if a lock is a write lock on a working tree, one can do the following::
 
489
 
 
490
    self.assertEndsWith(locks_acquired[0].lock_url, "/checkout/lock")
 
491
 
 
492
See bzrlib/tests/commands/test_revert.py for an example of how to use this for
 
493
testing locks.
 
494
 
480
495
 
481
496
Skipping tests
482
497
--------------