[svn r63050] * disabled classes or modules will now lead to a skip during setup of the colitem

* more graceful handling when "ssh" is not present

--HG--
branch : trunk
This commit is contained in:
hpk 2009-03-18 18:54:45 +01:00
parent 6ba07a82ba
commit f013f0a54b
6 changed files with 37 additions and 25 deletions

View File

@ -564,17 +564,23 @@ class SocketGatewaySetup:
## def teardown_class(cls): ## def teardown_class(cls):
## cls.gw.exit() ## cls.gw.exit()
## cls.proxygw.exit() ## cls.proxygw.exit()
def getsshhost():
sshhost = py.test.config.getvalueorskip("sshhost")
if sshhost.find(":") != -1:
sshhost = sshhost.split(":")[0]
ssh = py.path.local.sysfind("ssh")
if not ssh:
py.test.skip("command not found: ssh")
return sshhost
class TestSocketGateway(SocketGatewaySetup, BasicRemoteExecution): class TestSocketGateway(SocketGatewaySetup, BasicRemoteExecution):
pass pass
class TestSshGateway(BasicRemoteExecution): class TestSshGateway(BasicRemoteExecution):
def setup_class(cls): def setup_class(cls):
sshhost = py.test.config.getvalueorskip("sshhost") cls.sshhost = getsshhost()
if sshhost.find(":") != -1: cls.gw = py.execnet.SshGateway(cls.sshhost)
sshhost = sshhost.split(":")[0]
cls.sshhost = sshhost
cls.gw = py.execnet.SshGateway(sshhost)
def test_sshconfig_functional(self): def test_sshconfig_functional(self):
tmpdir = py.test.ensuretemp("test_sshconfig") tmpdir = py.test.ensuretemp("test_sshconfig")

View File

@ -3,6 +3,7 @@
""" """
import py import py
from test_gateway import getsshhost
class TestGatewaySpec: class TestGatewaySpec:
""" """
@ -88,7 +89,7 @@ class TestGatewaySpecAPI:
gw.exit() gw.exit()
def test_ssh(self): def test_ssh(self):
sshhost = py.test.config.getvalueorskip("sshhost") sshhost = getsshhost()
spec = py.execnet.GatewaySpec("ssh:" + sshhost) spec = py.execnet.GatewaySpec("ssh:" + sshhost)
gw = spec.makegateway() gw = spec.makegateway()
p = gw.remote_exec("import os ; channel.send(os.getcwd())").receive() p = gw.remote_exec("import os ; channel.send(os.getcwd())").receive()

View File

@ -89,6 +89,7 @@ class HostManager(object):
for root in self.roots: for root in self.roots:
self.gwmanager.rsync(root, **options) self.gwmanager.rsync(root, **options)
else: else:
XXX # do we want to care for situations without explicit rsyncdirs?
# we transfer our topdir as the root # we transfer our topdir as the root
self.gwmanager.rsync(self.config.topdir, **options) self.gwmanager.rsync(self.config.topdir, **options)
# and cd into it # and cd into it

View File

@ -31,8 +31,8 @@ class ExecnetcleanupPlugin:
for gw in self._gateways: for gw in self._gateways:
gw.exit() gw.exit()
l.append(gw) l.append(gw)
for gw in l: #for gw in l:
gw.join() # gw.join()
def test_generic(plugintester): def test_generic(plugintester):
plugintester.apicheck(ExecnetcleanupPlugin) plugintester.apicheck(ExecnetcleanupPlugin)

View File

@ -160,11 +160,6 @@ class PyCollectorMixin(PyobjMixin, py.test.collect.Collector):
return self.Function(name, parent=self) return self.Function(name, parent=self)
class Module(py.test.collect.File, PyCollectorMixin): class Module(py.test.collect.File, PyCollectorMixin):
def collect(self):
if self.fspath.ext == ".py" and getattr(self.obj, 'disabled', 0):
return []
return super(Module, self).collect()
def _getobj(self): def _getobj(self):
return self._memoizedcall('_obj', self._importtestmodule) return self._memoizedcall('_obj', self._importtestmodule)
@ -176,6 +171,8 @@ class Module(py.test.collect.File, PyCollectorMixin):
return mod return mod
def setup(self): def setup(self):
if getattr(self.obj, 'disabled', 0):
py.test.skip("%r is disabled" %(self.obj,))
if not self.config.option.nomagic: if not self.config.option.nomagic:
#print "*" * 20, "INVOKE assertion", self #print "*" * 20, "INVOKE assertion", self
py.magic.invoke(assertion=1) py.magic.invoke(assertion=1)
@ -195,14 +192,14 @@ class Module(py.test.collect.File, PyCollectorMixin):
class Class(PyCollectorMixin, py.test.collect.Collector): class Class(PyCollectorMixin, py.test.collect.Collector):
def collect(self): def collect(self):
if getattr(self.obj, 'disabled', 0):
return []
l = self._deprecated_collect() l = self._deprecated_collect()
if l is not None: if l is not None:
return l return l
return [self.Instance(name="()", parent=self)] return [self.Instance(name="()", parent=self)]
def setup(self): def setup(self):
if getattr(self.obj, 'disabled', 0):
py.test.skip("%r is disabled" %(self.obj,))
setup_class = getattr(self.obj, 'setup_class', None) setup_class = getattr(self.obj, 'setup_class', None)
if setup_class is not None: if setup_class is not None:
setup_class = getattr(setup_class, 'im_func', setup_class) setup_class = getattr(setup_class, 'im_func', setup_class)

View File

@ -1,5 +1,7 @@
import py import py
from py.__.test.outcome import Skipped
class TestModule: class TestModule:
def test_module_file_not_found(self, testdir): def test_module_file_not_found(self, testdir):
tmpdir = testdir.tmpdir tmpdir = testdir.tmpdir
@ -38,15 +40,6 @@ class TestModule:
x = l.pop() x = l.pop()
assert x is None assert x is None
def test_disabled_module(self, testdir):
modcol = testdir.getmodulecol("""
disabled = True
def setup_module(mod):
raise ValueError
""")
assert not modcol.collect()
assert not modcol.run()
def test_module_participates_as_plugin(self, testdir): def test_module_participates_as_plugin(self, testdir):
modcol = testdir.getmodulecol("") modcol = testdir.getmodulecol("")
modcol.setup() modcol.setup()
@ -58,6 +51,18 @@ class TestModule:
modcol = testdir.getmodulecol("pytest_plugins='xasdlkj',") modcol = testdir.getmodulecol("pytest_plugins='xasdlkj',")
py.test.raises(ImportError, "modcol.obj") py.test.raises(ImportError, "modcol.obj")
def test_disabled_module(self, testdir):
modcol = testdir.getmodulecol("""
disabled = True
def setup_module(mod):
raise ValueError
def test_method():
pass
""")
l = modcol.collect()
assert len(l) == 1
py.test.raises(Skipped, "modcol.setup()")
class TestClass: class TestClass:
def test_disabled_class(self, testdir): def test_disabled_class(self, testdir):
modcol = testdir.getmodulecol(""" modcol = testdir.getmodulecol("""
@ -70,7 +75,9 @@ class TestClass:
assert len(l) == 1 assert len(l) == 1
modcol = l[0] modcol = l[0]
assert isinstance(modcol, py.test.collect.Class) assert isinstance(modcol, py.test.collect.Class)
assert not modcol.collect() l = modcol.collect()
assert len(l) == 1
py.test.raises(Skipped, "modcol.setup()")
class TestGenerator: class TestGenerator:
def test_generative_functions(self, testdir): def test_generative_functions(self, testdir):