18
18
"""Benchmark test suite for bzr."""
21
from bzrlib.tests import TestLoader
20
from bzrlib import bzrdir, plugin
21
from bzrlib.tests.TestUtil import TestLoader
22
22
from bzrlib.tests.blackbox import ExternalBase
24
25
class Benchmark(ExternalBase):
26
27
def make_kernel_like_tree(self, url=None):
34
35
# we simulate this by three levels of dirs named 0-7, givin 512 dirs,
35
36
# and 20 files each.
36
37
if url is not None:
37
b = bzrlib.bzrdir.BzrDir.create_branch_convenience(url)
38
d = bzrlib.bzrdir.BzrDir.create('.')
38
b = bzrdir.BzrDir.create_branch_convenience(url)
39
d = bzrdir.BzrDir.create('.')
39
40
bzrlib.branch.BranchReferenceFormat().initialize(d, b)
40
41
d.create_workingtree()
51
52
files.extend([prefix + str(foo) for foo in range(20)])
52
53
self.build_tree(files)
55
def make_many_commit_tree(self, directory_name='.'):
56
"""Create a tree with many commits.
58
No files change are included.
60
tree = bzrdir.BzrDir.create_standalone_workingtree(directory_name)
62
tree.branch.lock_write()
63
tree.branch.repository.lock_write()
65
for i in xrange(1000):
66
tree.commit('no-changes commit %d' % i)
70
tree.branch.repository.unlock()
77
def make_heavily_merged_tree(self, directory_name='.'):
78
"""Create a tree in which almost every commit is a merge.
80
No files change are included. This produces two trees,
81
one of which is returned. Except for the first commit, every
82
commit in its revision-history is a merge another commit in the other
85
tree = bzrdir.BzrDir.create_standalone_workingtree(directory_name)
88
tree2 = tree.bzrdir.sprout('tree2').open_workingtree()
92
revision_id = tree.commit('no-changes commit %d-a' % i)
93
tree2.branch.fetch(tree.branch, revision_id)
94
tree2.set_pending_merges([revision_id])
95
revision_id = tree2.commit('no-changes commit %d-b' % i)
96
tree.branch.fetch(tree2.branch, revision_id)
97
tree.set_pending_merges([revision_id])
98
tree.set_pending_merges([])
56
107
"""Build and return a TestSuite which contains benchmark tests only."""
59
110
'bzrlib.benchmarks.bench_bench',
60
111
'bzrlib.benchmarks.bench_checkout',
61
112
'bzrlib.benchmarks.bench_commit',
113
'bzrlib.benchmarks.bench_inventory',
114
'bzrlib.benchmarks.bench_log',
115
'bzrlib.benchmarks.bench_osutils',
62
116
'bzrlib.benchmarks.bench_rocks',
63
'bzrlib.benchmarks.bench_osutils',
64
117
'bzrlib.benchmarks.bench_status',
65
118
'bzrlib.benchmarks.bench_transform',
66
119
'bzrlib.benchmarks.bench_workingtree',
68
return TestLoader().loadTestsFromModuleNames(testmod_names)
121
suite = TestLoader().loadTestsFromModuleNames(testmod_names)
123
# Load any benchmarks from plugins
124
for name, module in plugin.all_plugins().items():
125
if getattr(module, 'bench_suite', None) is not None:
126
suite.addTest(module.bench_suite())