From df3448c6f9b8bd23fb5af582f40ba768d6057b93 Mon Sep 17 00:00:00 2001 From: hpk Date: Sun, 28 Jan 2007 18:53:43 +0100 Subject: [PATCH] [svn r37494] the start of factoring out common and unified host handling within py.test --HG-- branch : trunk --- py/test/host.py | 37 ++++++++++++++++++++++++ py/test/testing/test_host.py | 56 ++++++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 py/test/host.py create mode 100644 py/test/testing/test_host.py diff --git a/py/test/host.py b/py/test/host.py new file mode 100644 index 000000000..46ac5715f --- /dev/null +++ b/py/test/host.py @@ -0,0 +1,37 @@ + +class InvalidHostSpec(ValueError): + pass + +def parsehostspec(spec): + parts = spec.split(":", 2) + if len(parts) < 2: + raise InvalidHostSpec(spec) + type = parts.pop(0) + if type == 'ssh': + sshaddress = parts.pop(0) + basedir = parts and ":".join(parts) or '' + return SpecSSH(sshaddress, basedir) + elif type == 'socket': + host = parts.pop(0) + if not parts: + raise InvalidHostSpec(spec) + remainder = parts.pop(0) + parts = remainder.split(":", 1) + port = int(parts.pop(0)) + basedir = parts and ":".join(parts) or '' + return SpecSocket(host, port, basedir) + else: + raise InvalidHostSpec(spec) + +class SpecSSH(object): + def __init__(self, sshaddress, basedir): + self.sshaddress = sshaddress + self.basedir = basedir + self.host = sshaddress.split('@', 1)[-1] + +class SpecSocket(object): + def __init__(self, host, port, basedir): + self.host = host + self.port = port + self.basedir = basedir + diff --git a/py/test/testing/test_host.py b/py/test/testing/test_host.py new file mode 100644 index 000000000..b1d699e45 --- /dev/null +++ b/py/test/testing/test_host.py @@ -0,0 +1,56 @@ +""" + +Testing Host setup and rsyncing operations. + +""" + +import py +from py.__.test.host import parsehostspec + +def test_parse_hostspec_ssh(): + hostspec = parsehostspec("ssh:xyz@domain.net:directory") + assert hostspec.host == "domain.net" + assert hostspec.basedir == "directory" + assert hostspec.sshaddress == "xyz@domain.net" + + hostspec = parsehostspec("ssh:xyz@domain.net:direc:tory") + assert hostspec.host == "domain.net" + assert hostspec.basedir == "direc:tory" + assert hostspec.sshaddress == "xyz@domain.net" + + hostspec = parsehostspec("ssh:xyz@domain.net") + assert hostspec.host == "domain.net" + assert hostspec.basedir == "" + assert hostspec.sshaddress == "xyz@domain.net" + + hostspec = parsehostspec("ssh:domain.net:directory") + assert hostspec.host == "domain.net" + assert hostspec.basedir == "directory" + assert hostspec.sshaddress == "domain.net" + + hostspec = parsehostspec("ssh:domain.net:/tmp/hello") + assert hostspec.host == "domain.net" + assert hostspec.basedir == "/tmp/hello" + assert hostspec.sshaddress == "domain.net" + +def test_parse_hostspec_socket(): + hostspec = parsehostspec("socket:domain.net:1234:directory") + assert hostspec.host == "domain.net" + assert hostspec.port == 1234 + assert hostspec.basedir == "directory" + + hostspec = parsehostspec("socket:domain.net:1234") + assert hostspec.host == "domain.net" + assert hostspec.port == 1234 + assert hostspec.basedir == "" + +def test_parse_hostspec_error(): + py.test.raises(ValueError, """ + parsehostspec('alksd:qweqwe') + """) + py.test.raises(ValueError, """ + parsehostspec('ssh') + """) + py.test.raises(ValueError, """ + parsehostspec('socket:qweqwe') + """)