[py-svn] pytest-xdist commit f724a1ad7e58: some changes to make remote testing work better - slightly hackish and will remain so until 'tox' is used to create environments and properly set things up.
commits-noreply at bitbucket.org
commits-noreply at bitbucket.org
Sat Nov 13 19:47:09 CET 2010
# HG changeset patch -- Bitbucket.org
# Project pytest-xdist
# URL http://bitbucket.org/hpk42/pytest-xdist/overview
# User holger krekel <holger at merlinux.eu>
# Date 1289674021 -3600
# Node ID f724a1ad7e5828e2b7512d5a7413abfe867d2b9c
# Parent 2bda8b5eecd3cc2b9f4eb991826a88f3821ab17b
some changes to make remote testing work better - slightly hackish and will remain so until 'tox' is used to create environments and properly set things up.
--- a/ISSUES.txt
+++ b/ISSUES.txt
@@ -1,3 +1,10 @@
+next release critical
+-----------------------------------------------
+tag: bug
+
+miserably fails: --dist=each --tx popen --tx socket=...
+
+
rename / hooks
-----------------------------------------------
tag: bug
--- a/xdist/dsession.py
+++ b/xdist/dsession.py
@@ -247,10 +247,14 @@ class DSession:
def slave_errordown(self, node, error):
self.config.hook.pytest_testnodedown(node=node, error=error)
- crashitem = self.sched.remove_node(node)
- if crashitem:
- self.handle_crashitem(crashitem, node)
- #self.report_line("item crashed on node: %s" % crashitem)
+ try:
+ crashitem = self.sched.remove_node(node)
+ except KeyError:
+ pass
+ else:
+ if crashitem:
+ self.handle_crashitem(crashitem, node)
+ #self.report_line("item crashed on node: %s" % crashitem)
if not self.sched.hasnodes():
self.session_finished = True
--- a/testing/test_plugin.py
+++ b/testing/test_plugin.py
@@ -41,9 +41,10 @@ class TestDistOptions:
def test_getrsyncdirs(self, testdir):
config = testdir.parseconfigure('--rsyncdir=' + str(testdir.tmpdir))
nm = NodeManager(config, specs=[execnet.XSpec("popen")])
- roots = nm._getrsyncdirs()
- assert len(roots) == 1 + 1 # pylib
- assert testdir.tmpdir in roots
+ assert not nm._getrsyncdirs()
+ nm = NodeManager(config, specs=[execnet.XSpec("popen//chdir=qwe")])
+ assert nm.roots
+ assert testdir.tmpdir in nm.roots
def test_getrsyncdirs_with_conftest(self, testdir):
p = py.path.local()
@@ -55,7 +56,7 @@ class TestDistOptions:
""")
config = testdir.parseconfigure(
testdir.tmpdir, '--rsyncdir=y', '--rsyncdir=z')
- nm = NodeManager(config, specs=[execnet.XSpec("popen")])
+ nm = NodeManager(config, specs=[execnet.XSpec("popen//chdir=xyz")])
roots = nm._getrsyncdirs()
#assert len(roots) == 3 + 1 # pylib
assert py.path.local('y') in roots
--- a/testing/test_remote.py
+++ b/testing/test_remote.py
@@ -88,6 +88,8 @@ class TestReportSerialization:
assert newrep.passed == rep.passed
assert newrep.failed == rep.failed
assert newrep.skipped == rep.skipped
+ if newrep.skipped:
+ assert len(newrep.reprcrash) == 3
assert newrep.outcome == rep.outcome
assert newrep.when == rep.when
assert newrep.keywords == rep.keywords
--- a/xdist/slavemanage.py
+++ b/xdist/slavemanage.py
@@ -10,8 +10,9 @@ class NodeManager(object):
self.config = config
if specs is None:
specs = self._getxspecs()
+ self.gwmanager = GatewayManager(specs, config.hook)
+ self.specs = self.gwmanager.specs
self.roots = self._getrsyncdirs()
- self.gwmanager = GatewayManager(specs, config.hook)
self._nodesready = py.std.threading.Event()
def trace(self, msg):
@@ -34,12 +35,6 @@ class NodeManager(object):
# send each rsync root
for root in self.roots:
self.gwmanager.rsync(root, **options)
- else:
- XXX # do we want to care for situations without explicit rsyncdirs?
- # we transfer our topdir as the root
- self.gwmanager.rsync(self.config.topdir, **options)
- # and cd into it
- self.gwmanager.multi_chdir(self.config.topdir.basename, inplacelocal=False)
def makegateways(self):
# we change to the topdir sot that
@@ -83,8 +78,16 @@ class NodeManager(object):
return [execnet.XSpec(x) for x in xspeclist]
def _getrsyncdirs(self):
+ for spec in self.specs:
+ if not spec.popen or spec.chdir:
+ break
+ else:
+ return []
+ import pytest, _pytest
+ pytestpath = pytest.__file__.rstrip("co")
+ pytestdir = py.path.local(_pytest.__file__).dirpath()
config = self.config
- candidates = [py._pydir]
+ candidates = [py._pydir,pytestpath,pytestdir]
candidates += config.option.rsyncdir
conftestroots = config.getini("rsyncdirs")
if conftestroots:
--- a/xdist/remote.py
+++ b/xdist/remote.py
@@ -121,6 +121,11 @@ def remote_initconfig(option_dict, args)
if __name__ == '__channelexec__':
slaveinput,args,option_dict = channel.receive()
+ importpath = os.getcwd()
+ sys.path.insert(0, importpath) # XXX only for remote situations
+ os.environ['PYTHONPATH'] = (importpath + os.pathsep +
+ os.environ.get('PYTHONPATH', ''))
+ #os.environ['PYTHONPATH'] = importpath
import py
config = remote_initconfig(option_dict, args)
config.slaveinput = slaveinput
More information about the pytest-commit
mailing list