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') + """)