[py-svn] r34551 - in py/dist/py/test/rsession: . testing
fijal at codespeak.net
fijal at codespeak.net
Mon Nov 13 12:22:16 CET 2006
Author: fijal
Date: Mon Nov 13 12:22:13 2006
New Revision: 34551
Added:
py/dist/py/test/rsession/testing/test_config.py (contents, props changed)
Modified:
py/dist/py/test/rsession/local.py
py/dist/py/test/rsession/master.py
py/dist/py/test/rsession/rsession.py
Log:
Refactored session options (starting point) for having central point for those.
Modified: py/dist/py/test/rsession/local.py
==============================================================================
--- py/dist/py/test/rsession/local.py (original)
+++ py/dist/py/test/rsession/local.py Mon Nov 13 12:22:13 2006
@@ -33,6 +33,11 @@
outcome.stdout, outcome.stderr = finishcapture(session)
return outcome
+RunnerPolicy = {
+ 'plain_runner':plain_runner,
+ 'box_runner':box_runner
+}
+
def benchmark_runner(item, session, reporter):
raise NotImplementedError()
Modified: py/dist/py/test/rsession/master.py
==============================================================================
--- py/dist/py/test/rsession/master.py (original)
+++ py/dist/py/test/rsession/master.py Mon Nov 13 12:22:13 2006
@@ -5,8 +5,6 @@
from py.__.test.rsession.outcome import ReprOutcome
from py.__.test.rsession import report
-MAX_TASKS_PER_NODE = 15
-
class MasterNode(object):
def __init__(self, channel, reporter):
self.channel = channel
@@ -29,12 +27,14 @@
self.reporter(report.SendItem(self.channel, item))
def dispatch_loop(masternodes, itemgenerator, shouldstop,
- waiter = lambda: py.std.time.sleep(0.1),
- maxtasks_per_node = MAX_TASKS_PER_NODE):
+ waiter = lambda: py.std.time.sleep(0.1)):
+ from py.__.test.rsession.rsession import session_options
+
+ max_tasks_per_node = session_options.max_tasks_per_node
while 1:
try:
for node in masternodes:
- if len(node.pending) < maxtasks_per_node:
+ if len(node.pending) < max_tasks_per_node:
item = itemgenerator.next()
if shouldstop():
return
Modified: py/dist/py/test/rsession/rsession.py
==============================================================================
--- py/dist/py/test/rsession/rsession.py (original)
+++ py/dist/py/test/rsession/rsession.py Mon Nov 13 12:22:13 2006
@@ -14,7 +14,7 @@
from py.__.test.rsession.hostmanage import init_hosts, teardown_hosts
from py.__.test.rsession.local import local_loop, plain_runner, apigen_runner,\
- box_runner
+ box_runner, RunnerPolicy
from py.__.test.rsession.reporter import LocalReporter, RemoteReporter
class RemoteOptions(object):
@@ -31,6 +31,36 @@
# XXX: Must be initialised somehow
remote_options = RemoteOptions({'we_are_remote':False, 'exitfirst':False})
+
+class SessionOptions:
+ defaults = {
+ 'max_tasks_per_node' : 15,
+ 'runner_policy' : 'plain_runner'
+ }
+
+ config = None
+
+ def getvalue(self, opt):
+ try:
+ return getattr(self.config.getinitialvalue('SessionOptions'), opt)
+ except (ValueError, AttributeError):
+ try:
+ return self.defaults[opt]
+ except KeyError:
+ raise AttributeError("Option %s undeclared" % opt)
+
+ def bind_config(self, config):
+ self.config = config
+
+ def __repr__(self):
+ return "<SessionOptions %s>" % self.config
+
+ def __getattr__(self, attr):
+ if self.config is None:
+ raise NotImplementedError("Need to set up config first")
+ return self.getvalue(attr)
+
+session_options = SessionOptions()
class AbstractSession(object):
"""
@@ -158,7 +188,8 @@
for y in x.tryiter(reporterror = lambda x: self.reporterror(reporter, x), keyword = keyword):
yield y
- itemgenerator = itemgen()
+ itemgenerator = itemgen()
+ session_options.bind_config(self.config)
dispatch_loop(nodes, itemgenerator, checkfun)
teardown_hosts(reporter, [node.channel for node in nodes], nodes,
exitfirst=self.config.option.exitfirst)
@@ -191,6 +222,7 @@
pkgdir = self.getpkgdir(args[0])
colitems = self.make_colitems(args, baseon=pkgdir.dirpath())
reporter(report.RsyncFinished())
+ session_options.bind_config(self.config)
if runner is None and self.config.option.apigen:
from py.__.apigen.tracer.docstorage import DocStorage
@@ -206,7 +238,7 @@
#elif runner is None:
# runner = box_runner
elif runner is None:
- runner = plain_runner
+ runner = RunnerPolicy[session_options.runner_policy]
keyword = self.config.option.keyword
Added: py/dist/py/test/rsession/testing/test_config.py
==============================================================================
--- (empty file)
+++ py/dist/py/test/rsession/testing/test_config.py Mon Nov 13 12:22:13 2006
@@ -0,0 +1,21 @@
+
+""" test session config options
+"""
+
+import py
+from py.__.test.rsession.rsession import session_options, SessionOptions
+
+def test_session_opts():
+ tmpdir = py.test.ensuretemp("sessionopts")
+ tmpdir.ensure("conftest.py").write("""class SessionOptions:
+ max_tasks_per_node = 5
+ """)
+ tmp2 = py.test.ensuretemp("xxx")
+ args = [str(tmpdir)]
+ config, args = py.test.Config.parse(args)
+ session_options.bind_config(config)
+ assert session_options.max_tasks_per_node == 5
+ config, args = py.test.Config.parse([str(tmp2)])
+ session_options.bind_config(config)
+ assert session_options.max_tasks_per_node == \
+ SessionOptions.defaults['max_tasks_per_node']
More information about the pytest-commit
mailing list