[svn r63144] have socket and ssh gateways
--HG-- branch : trunk
This commit is contained in:
parent
5f3fac94b6
commit
e383082b5b
|
@ -27,8 +27,8 @@ version = "1.0.0a1"
|
||||||
|
|
||||||
initpkg(__name__,
|
initpkg(__name__,
|
||||||
description = "pylib and py.test: agile development and test support library",
|
description = "pylib and py.test: agile development and test support library",
|
||||||
revision = int('$LastChangedRevision: 63089 $'.split(':')[1][:-1]),
|
revision = int('$LastChangedRevision: 63144 $'.split(':')[1][:-1]),
|
||||||
lastchangedate = '$LastChangedDate: 2009-03-19 18:05:41 +0100 (Thu, 19 Mar 2009) $',
|
lastchangedate = '$LastChangedDate: 2009-03-20 16:36:45 +0100 (Fri, 20 Mar 2009) $',
|
||||||
version = version,
|
version = version,
|
||||||
url = "http://pylib.org",
|
url = "http://pylib.org",
|
||||||
download_url = "http://codespeak.net/py/0.9.2/download.html",
|
download_url = "http://codespeak.net/py/0.9.2/download.html",
|
||||||
|
@ -152,6 +152,8 @@ initpkg(__name__,
|
||||||
'execnet.PopenGateway' : ('./execnet/register.py', 'PopenGateway'),
|
'execnet.PopenGateway' : ('./execnet/register.py', 'PopenGateway'),
|
||||||
'execnet.SshGateway' : ('./execnet/register.py', 'SshGateway'),
|
'execnet.SshGateway' : ('./execnet/register.py', 'SshGateway'),
|
||||||
'execnet.GatewaySpec' : ('./execnet/gwmanage.py', 'GatewaySpec'),
|
'execnet.GatewaySpec' : ('./execnet/gwmanage.py', 'GatewaySpec'),
|
||||||
|
'execnet.XSpec' : ('./execnet/xspec.py', 'XSpec'),
|
||||||
|
'execnet.makegateway' : ('./execnet/xspec.py', 'makegateway'),
|
||||||
'execnet.MultiGateway' : ('./execnet/multi.py', 'MultiGateway'),
|
'execnet.MultiGateway' : ('./execnet/multi.py', 'MultiGateway'),
|
||||||
'execnet.MultiChannel' : ('./execnet/multi.py', 'MultiChannel'),
|
'execnet.MultiChannel' : ('./execnet/multi.py', 'MultiChannel'),
|
||||||
|
|
||||||
|
|
|
@ -1,20 +1,45 @@
|
||||||
dist_rsync_roots = ['.'] # XXX
|
|
||||||
|
|
||||||
pytest_plugins = 'pytest_doctest', 'pytest_pytester', 'pytest_restdoc'
|
pytest_plugins = 'pytest_doctest', 'pytest_pytester', 'pytest_restdoc'
|
||||||
|
|
||||||
rsyncignore = ['c-extension/greenlet/build']
|
rsyncignore = ['c-extension/greenlet/build']
|
||||||
|
|
||||||
import py
|
import py
|
||||||
class PylibTestPlugin:
|
class PylibTestconfigPlugin:
|
||||||
|
def pytest_pyfuncarg_specssh(self, pyfuncitem):
|
||||||
|
return getspecssh(pyfuncitem.config)
|
||||||
|
def pytest_pyfuncarg_specsocket(self, pyfuncitem):
|
||||||
|
return getsocketspec(pyfuncitem.config)
|
||||||
|
|
||||||
def pytest_addoption(self, parser):
|
def pytest_addoption(self, parser):
|
||||||
group = parser.addgroup("pylib", "py lib testing options")
|
group = parser.addgroup("pylib", "py lib testing options")
|
||||||
group.addoption('--sshhost',
|
group.addoption('--sshhost',
|
||||||
action="store", dest="sshhost", default=None,
|
action="store", dest="sshhost", default=None,
|
||||||
help=("target to run tests requiring ssh, e.g. "
|
help=("target to run tests requiring ssh, e.g. "
|
||||||
"user@codespeak.net"))
|
"user@codespeak.net"))
|
||||||
|
group.addoption('--gx',
|
||||||
|
action="append", dest="gspecs", default=None,
|
||||||
|
help=("add a global test environment, XSpec-syntax. ")),
|
||||||
group.addoption('--runslowtests',
|
group.addoption('--runslowtests',
|
||||||
action="store_true", dest="runslowtests", default=False,
|
action="store_true", dest="runslowtests", default=False,
|
||||||
help="run slow tests")
|
help=("run slow tests"))
|
||||||
|
|
||||||
ConftestPlugin = PylibTestPlugin
|
ConftestPlugin = PylibTestconfigPlugin
|
||||||
|
|
||||||
|
# configuration information for tests
|
||||||
|
def getgspecs(config=None):
|
||||||
|
if config is None:
|
||||||
|
config = py.test.config
|
||||||
|
return [py.execnet.XSpec(spec)
|
||||||
|
for spec in config.getvalueorskip("gspecs")]
|
||||||
|
|
||||||
|
def getspecssh(config=None):
|
||||||
|
xspecs = getgspecs(config)
|
||||||
|
for spec in xspecs:
|
||||||
|
if spec.ssh:
|
||||||
|
if not py.path.local.sysfind("ssh"):
|
||||||
|
py.test.skip("command not found: ssh")
|
||||||
|
return spec
|
||||||
|
|
||||||
|
def getsocketspec(config=None):
|
||||||
|
xspecs = getgspecs(config)
|
||||||
|
for spec in xspecs:
|
||||||
|
if spec.socket:
|
||||||
|
return spec
|
||||||
|
|
|
@ -542,8 +542,8 @@ class TestPopenGateway(PopenGatewayTestSetup, BasicRemoteExecution):
|
||||||
ret = channel.receive()
|
ret = channel.receive()
|
||||||
assert ret == 42
|
assert ret == 42
|
||||||
|
|
||||||
|
@py.test.mark.xfail("fix needed: dying remote process does not cause waitclose() to fail")
|
||||||
def test_waitclose_on_remote_killed(self):
|
def test_waitclose_on_remote_killed(self):
|
||||||
py.test.skip("fix needed: dying remote process does not cause waitclose() to fail")
|
|
||||||
gw = py.execnet.PopenGateway()
|
gw = py.execnet.PopenGateway()
|
||||||
channel = gw.remote_exec("""
|
channel = gw.remote_exec("""
|
||||||
import os
|
import os
|
||||||
|
@ -591,21 +591,13 @@ class SocketGatewaySetup:
|
||||||
## cls.gw.exit()
|
## cls.gw.exit()
|
||||||
## cls.proxygw.exit()
|
## cls.proxygw.exit()
|
||||||
|
|
||||||
def getsshhost(withpython=False):
|
|
||||||
sshhost = py.test.config.getvalueorskip("sshhost")
|
|
||||||
if not withpython and 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):
|
||||||
cls.sshhost = getsshhost()
|
from py.__.conftest import getspecssh
|
||||||
|
cls.sshhost = getspecssh().ssh
|
||||||
cls.gw = py.execnet.SshGateway(cls.sshhost)
|
cls.gw = py.execnet.SshGateway(cls.sshhost)
|
||||||
|
|
||||||
def test_sshconfig_functional(self):
|
def test_sshconfig_functional(self):
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import py
|
import py
|
||||||
from test_gateway import getsshhost
|
|
||||||
|
|
||||||
class TestGatewaySpec:
|
class TestGatewaySpec:
|
||||||
"""
|
"""
|
||||||
|
@ -88,8 +87,8 @@ class TestGatewaySpecAPI:
|
||||||
assert py.std.sys.executable == py.std.sys.executable
|
assert py.std.sys.executable == py.std.sys.executable
|
||||||
gw.exit()
|
gw.exit()
|
||||||
|
|
||||||
def test_ssh(self):
|
def test_ssh(self, specssh):
|
||||||
sshhost = getsshhost()
|
sshhost = specssh.ssh
|
||||||
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()
|
||||||
|
|
|
@ -72,3 +72,27 @@ class TestMakegateway:
|
||||||
assert rinfo.executable == cpython26
|
assert rinfo.executable == cpython26
|
||||||
assert rinfo.cwd == py.std.os.getcwd()
|
assert rinfo.cwd == py.std.os.getcwd()
|
||||||
assert rinfo.version_info[:2] == (2,6)
|
assert rinfo.version_info[:2] == (2,6)
|
||||||
|
|
||||||
|
def test_ssh(self, specssh):
|
||||||
|
sshhost = specssh.ssh
|
||||||
|
gw = py.execnet.makegateway("ssh=%s" % sshhost)
|
||||||
|
rinfo = gw._rinfo()
|
||||||
|
gw2 = py.execnet.SshGateway(sshhost)
|
||||||
|
rinfo2 = gw2._rinfo()
|
||||||
|
assert rinfo.executable == rinfo2.executable
|
||||||
|
assert rinfo.cwd == rinfo2.cwd
|
||||||
|
assert rinfo.version_info == rinfo2.version_info
|
||||||
|
|
||||||
|
def test_socket(self, specsocket):
|
||||||
|
gw = py.execnet.makegateway("socket=%s" % specsocket.socket)
|
||||||
|
rinfo = gw._rinfo()
|
||||||
|
assert rinfo.executable
|
||||||
|
assert rinfo.cwd
|
||||||
|
assert rinfo.version_info
|
||||||
|
# we cannot instantiate a second gateway
|
||||||
|
|
||||||
|
#gw2 = py.execnet.SocketGateway(*specsocket.socket.split(":"))
|
||||||
|
#rinfo2 = gw2._rinfo()
|
||||||
|
#assert rinfo.executable == rinfo2.executable
|
||||||
|
#assert rinfo.cwd == rinfo2.cwd
|
||||||
|
#assert rinfo.version_info == rinfo2.version_info
|
||||||
|
|
|
@ -31,5 +31,11 @@ def makegateway(spec):
|
||||||
spec = XSpec(spec)
|
spec = XSpec(spec)
|
||||||
if spec.popen:
|
if spec.popen:
|
||||||
gw = py.execnet.PopenGateway(python=spec.python)
|
gw = py.execnet.PopenGateway(python=spec.python)
|
||||||
|
elif spec.ssh:
|
||||||
|
gw = py.execnet.SshGateway(spec.ssh, remotepython=spec.python)
|
||||||
|
elif spec.socket:
|
||||||
|
assert not spec.python, "socket: specifying python executables not supported"
|
||||||
|
hostport = spec.socket.split(":")
|
||||||
|
gw = py.execnet.SocketGateway(*hostport)
|
||||||
gw.spec = spec
|
gw.spec = spec
|
||||||
return gw
|
return gw
|
||||||
|
|
Loading…
Reference in New Issue