From 2807fde6c991596ac12853995c931c925128ee61 Mon Sep 17 00:00:00 2001 From: aiordache Date: Thu, 18 Feb 2021 12:56:46 +0100 Subject: Fix SSH port parsing and add regression tests Signed-off-by: aiordache --- docker/transport/sshconn.py | 8 ++++---- tests/unit/sshadapter_test.py | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 tests/unit/sshadapter_test.py diff --git a/docker/transport/sshconn.py b/docker/transport/sshconn.py index 7593b5b..fbfdf41 100644 --- a/docker/transport/sshconn.py +++ b/docker/transport/sshconn.py @@ -30,10 +30,10 @@ class SSHSocket(socket.socket): self.host = host self.port = None self.user = None - if ':' in host: - self.host, self.port = host.split(':') + if ':' in self.host: + self.host, self.port = self.host.split(':') if '@' in self.host: - self.user, self.host = host.split('@') + self.user, self.host = self.host.split('@') self.proc = None @@ -167,7 +167,7 @@ class SSHHTTPAdapter(BaseHTTPAdapter): def __init__(self, base_url, timeout=60, pool_connections=constants.DEFAULT_NUM_POOLS, max_pool_size=constants.DEFAULT_MAX_POOL_SIZE, - shell_out=True): + shell_out=False): self.ssh_client = None if not shell_out: self._create_paramiko_client(base_url) diff --git a/tests/unit/sshadapter_test.py b/tests/unit/sshadapter_test.py new file mode 100644 index 0000000..ddee592 --- /dev/null +++ b/tests/unit/sshadapter_test.py @@ -0,0 +1,32 @@ +import unittest +import docker +from docker.transport.sshconn import SSHSocket + +class SSHAdapterTest(unittest.TestCase): + def test_ssh_hostname_prefix_trim(self): + conn = docker.transport.SSHHTTPAdapter(base_url="ssh://user@hostname:1234", shell_out=True) + assert conn.ssh_host == "user@hostname:1234" + + def test_ssh_parse_url(self): + c = SSHSocket(host="user@hostname:1234") + assert c.host == "hostname" + assert c.port == "1234" + assert c.user == "user" + + def test_ssh_parse_hostname_only(self): + c = SSHSocket(host="hostname") + assert c.host == "hostname" + assert c.port == None + assert c.user == None + + def test_ssh_parse_user_and_hostname(self): + c = SSHSocket(host="user@hostname") + assert c.host == "hostname" + assert c.port == None + assert c.user == "user" + + def test_ssh_parse_hostname_and_port(self): + c = SSHSocket(host="hostname:22") + assert c.host == "hostname" + assert c.port == "22" + assert c.user == None \ No newline at end of file -- cgit v1.2.1