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.
This commit is contained in:
@@ -1,3 +1,10 @@
|
|||||||
|
next release critical
|
||||||
|
-----------------------------------------------
|
||||||
|
tag: bug
|
||||||
|
|
||||||
|
miserably fails: --dist=each --tx popen --tx socket=...
|
||||||
|
|
||||||
|
|
||||||
rename / hooks
|
rename / hooks
|
||||||
-----------------------------------------------
|
-----------------------------------------------
|
||||||
tag: bug
|
tag: bug
|
||||||
|
|||||||
@@ -41,9 +41,10 @@ class TestDistOptions:
|
|||||||
def test_getrsyncdirs(self, testdir):
|
def test_getrsyncdirs(self, testdir):
|
||||||
config = testdir.parseconfigure('--rsyncdir=' + str(testdir.tmpdir))
|
config = testdir.parseconfigure('--rsyncdir=' + str(testdir.tmpdir))
|
||||||
nm = NodeManager(config, specs=[execnet.XSpec("popen")])
|
nm = NodeManager(config, specs=[execnet.XSpec("popen")])
|
||||||
roots = nm._getrsyncdirs()
|
assert not nm._getrsyncdirs()
|
||||||
assert len(roots) == 1 + 1 # pylib
|
nm = NodeManager(config, specs=[execnet.XSpec("popen//chdir=qwe")])
|
||||||
assert testdir.tmpdir in roots
|
assert nm.roots
|
||||||
|
assert testdir.tmpdir in nm.roots
|
||||||
|
|
||||||
def test_getrsyncdirs_with_conftest(self, testdir):
|
def test_getrsyncdirs_with_conftest(self, testdir):
|
||||||
p = py.path.local()
|
p = py.path.local()
|
||||||
@@ -55,7 +56,7 @@ class TestDistOptions:
|
|||||||
""")
|
""")
|
||||||
config = testdir.parseconfigure(
|
config = testdir.parseconfigure(
|
||||||
testdir.tmpdir, '--rsyncdir=y', '--rsyncdir=z')
|
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()
|
roots = nm._getrsyncdirs()
|
||||||
#assert len(roots) == 3 + 1 # pylib
|
#assert len(roots) == 3 + 1 # pylib
|
||||||
assert py.path.local('y') in roots
|
assert py.path.local('y') in roots
|
||||||
|
|||||||
@@ -88,6 +88,8 @@ class TestReportSerialization:
|
|||||||
assert newrep.passed == rep.passed
|
assert newrep.passed == rep.passed
|
||||||
assert newrep.failed == rep.failed
|
assert newrep.failed == rep.failed
|
||||||
assert newrep.skipped == rep.skipped
|
assert newrep.skipped == rep.skipped
|
||||||
|
if newrep.skipped:
|
||||||
|
assert len(newrep.reprcrash) == 3
|
||||||
assert newrep.outcome == rep.outcome
|
assert newrep.outcome == rep.outcome
|
||||||
assert newrep.when == rep.when
|
assert newrep.when == rep.when
|
||||||
assert newrep.keywords == rep.keywords
|
assert newrep.keywords == rep.keywords
|
||||||
|
|||||||
@@ -247,10 +247,14 @@ class DSession:
|
|||||||
|
|
||||||
def slave_errordown(self, node, error):
|
def slave_errordown(self, node, error):
|
||||||
self.config.hook.pytest_testnodedown(node=node, error=error)
|
self.config.hook.pytest_testnodedown(node=node, error=error)
|
||||||
crashitem = self.sched.remove_node(node)
|
try:
|
||||||
if crashitem:
|
crashitem = self.sched.remove_node(node)
|
||||||
self.handle_crashitem(crashitem, node)
|
except KeyError:
|
||||||
#self.report_line("item crashed on node: %s" % crashitem)
|
pass
|
||||||
|
else:
|
||||||
|
if crashitem:
|
||||||
|
self.handle_crashitem(crashitem, node)
|
||||||
|
#self.report_line("item crashed on node: %s" % crashitem)
|
||||||
if not self.sched.hasnodes():
|
if not self.sched.hasnodes():
|
||||||
self.session_finished = True
|
self.session_finished = True
|
||||||
|
|
||||||
|
|||||||
@@ -121,6 +121,11 @@ def remote_initconfig(option_dict, args):
|
|||||||
|
|
||||||
if __name__ == '__channelexec__':
|
if __name__ == '__channelexec__':
|
||||||
slaveinput,args,option_dict = channel.receive()
|
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
|
import py
|
||||||
config = remote_initconfig(option_dict, args)
|
config = remote_initconfig(option_dict, args)
|
||||||
config.slaveinput = slaveinput
|
config.slaveinput = slaveinput
|
||||||
|
|||||||
@@ -10,8 +10,9 @@ class NodeManager(object):
|
|||||||
self.config = config
|
self.config = config
|
||||||
if specs is None:
|
if specs is None:
|
||||||
specs = self._getxspecs()
|
specs = self._getxspecs()
|
||||||
self.roots = self._getrsyncdirs()
|
|
||||||
self.gwmanager = GatewayManager(specs, config.hook)
|
self.gwmanager = GatewayManager(specs, config.hook)
|
||||||
|
self.specs = self.gwmanager.specs
|
||||||
|
self.roots = self._getrsyncdirs()
|
||||||
self._nodesready = py.std.threading.Event()
|
self._nodesready = py.std.threading.Event()
|
||||||
|
|
||||||
def trace(self, msg):
|
def trace(self, msg):
|
||||||
@@ -34,12 +35,6 @@ class NodeManager(object):
|
|||||||
# send each rsync root
|
# send each rsync root
|
||||||
for root in self.roots:
|
for root in self.roots:
|
||||||
self.gwmanager.rsync(root, **options)
|
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):
|
def makegateways(self):
|
||||||
# we change to the topdir sot that
|
# we change to the topdir sot that
|
||||||
@@ -83,8 +78,16 @@ class NodeManager(object):
|
|||||||
return [execnet.XSpec(x) for x in xspeclist]
|
return [execnet.XSpec(x) for x in xspeclist]
|
||||||
|
|
||||||
def _getrsyncdirs(self):
|
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
|
config = self.config
|
||||||
candidates = [py._pydir]
|
candidates = [py._pydir,pytestpath,pytestdir]
|
||||||
candidates += config.option.rsyncdir
|
candidates += config.option.rsyncdir
|
||||||
conftestroots = config.getini("rsyncdirs")
|
conftestroots = config.getini("rsyncdirs")
|
||||||
if conftestroots:
|
if conftestroots:
|
||||||
|
|||||||
Reference in New Issue
Block a user