def test_host_port_info(self): client = ParallelSSHClient(hosts=['dummy'], user='******', pkey_file='~/.ssh/id_rsa', connect=True) # No port case. Port should be 22. host_str = '1.2.3.4' host, port = client._get_host_port_info(host_str) self.assertEqual(host, host_str) self.assertEqual(port, 22) # IPv6 with square brackets with port specified. host_str = '[fec2::10]:55' host, port = client._get_host_port_info(host_str) self.assertEqual(host, 'fec2::10') self.assertEqual(port, 55)
def test_run_command_timeout(self): # Make sure stdout and stderr is included on timeout hosts = ['localhost', '127.0.0.1', 'st2build001'] client = ParallelSSHClient(hosts=hosts, user='******', pkey_file='~/.ssh/id_rsa', connect=True) mock_run = Mock( side_effect=SSHCommandTimeoutError(cmd='pwd', timeout=10, stdout='a', stderr='b', ssh_connect_timeout=30)) for host in hosts: hostname, _ = client._get_host_port_info(host) host_client = client._hosts_client[host] host_client.run = mock_run results = client.run('pwd') for host in hosts: result = results[host] self.assertEqual(result['failed'], True) self.assertEqual(result['stdout'], 'a') self.assertEqual(result['stderr'], 'b') self.assertEqual(result['return_code'], -9)
def test_run_command_timeout(self): # Make sure stdout and stderr is included on timeout hosts = ["localhost", "127.0.0.1", "st2build001"] client = ParallelSSHClient(hosts=hosts, user="******", pkey_file="~/.ssh/id_rsa", connect=True) mock_run = Mock( side_effect=SSHCommandTimeoutError(cmd="pwd", timeout=10, stdout="a", stderr="b", ssh_connect_timeout=30)) for host in hosts: hostname, _ = client._get_host_port_info(host) host_client = client._hosts_client[host] host_client.run = mock_run results = client.run("pwd") for host in hosts: result = results[host] self.assertEqual(result["failed"], True) self.assertEqual(result["stdout"], "a") self.assertEqual(result["stderr"], "b") self.assertEqual(result["return_code"], -9)
def test_host_port_info(self): client = ParallelSSHClient(hosts=["dummy"], user="******", pkey_file="~/.ssh/id_rsa", connect=True) # No port case. Port should be 22. host_str = "1.2.3.4" host, port = client._get_host_port_info(host_str) self.assertEqual(host, host_str) self.assertEqual(port, 22) # IPv6 with square brackets with port specified. host_str = "[fec2::10]:55" host, port = client._get_host_port_info(host_str) self.assertEqual(host, "fec2::10") self.assertEqual(port, 55)
def test_delete_file(self): hosts = ['localhost', '127.0.0.1', 'st2build001'] client = ParallelSSHClient(hosts=hosts, user='******', pkey_file='~/.ssh/id_rsa', connect=True) client.delete_file('/remote/stuff') for host in hosts: hostname, _ = client._get_host_port_info(host) client._hosts_client[hostname].delete_file.assert_called_with('/remote/stuff')
def test_delete_file(self): hosts = ["localhost", "127.0.0.1", "st2build001"] client = ParallelSSHClient(hosts=hosts, user="******", pkey_file="~/.ssh/id_rsa", connect=True) client.delete_file("/remote/stuff") for host in hosts: hostname, _ = client._get_host_port_info(host) client._hosts_client[hostname].delete_file.assert_called_with( "/remote/stuff")
def test_delete_dir(self): hosts = ['localhost', '127.0.0.1', 'st2build001'] client = ParallelSSHClient(hosts=hosts, user='******', pkey_file='~/.ssh/id_rsa', connect=True) client.delete_dir('/remote/stuff/', force=True) expected_kwargs = {'force': True, 'timeout': None} for host in hosts: hostname, _ = client._get_host_port_info(host) client._hosts_client[hostname].delete_dir.assert_called_with( '/remote/stuff/', **expected_kwargs)
def test_delete_dir(self): hosts = ["localhost", "127.0.0.1", "st2build001"] client = ParallelSSHClient(hosts=hosts, user="******", pkey_file="~/.ssh/id_rsa", connect=True) client.delete_dir("/remote/stuff/", force=True) expected_kwargs = {"force": True, "timeout": None} for host in hosts: hostname, _ = client._get_host_port_info(host) client._hosts_client[hostname].delete_dir.assert_called_with( "/remote/stuff/", **expected_kwargs)
def test_put(self): hosts = ["localhost", "127.0.0.1", "st2build001"] client = ParallelSSHClient(hosts=hosts, user="******", pkey_file="~/.ssh/id_rsa", connect=True) client.put("/local/stuff", "/remote/stuff", mode=0o744) expected_kwargs = {"mode": 0o744, "mirror_local_mode": False} for host in hosts: hostname, _ = client._get_host_port_info(host) client._hosts_client[hostname].put.assert_called_with( "/local/stuff", "/remote/stuff", **expected_kwargs)
def test_run_command(self): hosts = ["localhost", "127.0.0.1", "st2build001"] client = ParallelSSHClient(hosts=hosts, user="******", pkey_file="~/.ssh/id_rsa", connect=True) client.run("pwd", timeout=60) expected_kwargs = {"timeout": 60, "call_line_handler_func": True} for host in hosts: hostname, _ = client._get_host_port_info(host) client._hosts_client[hostname].run.assert_called_with( "pwd", **expected_kwargs)
def test_put(self): hosts = ['localhost', '127.0.0.1', 'st2build001'] client = ParallelSSHClient(hosts=hosts, user='******', pkey_file='~/.ssh/id_rsa', connect=True) client.put('/local/stuff', '/remote/stuff', mode=0744) expected_kwargs = {'mode': 0744, 'mirror_local_mode': False} for host in hosts: hostname, _ = client._get_host_port_info(host) client._hosts_client[hostname].put.assert_called_with( '/local/stuff', '/remote/stuff', **expected_kwargs)
def test_connect_with_bastion(self): hosts = ['localhost', '127.0.0.1'] client = ParallelSSHClient(hosts=hosts, user='******', pkey_file='~/.ssh/id_rsa', bastion_host='testing_bastion_host', connect=False) client.connect() for host in hosts: hostname, _ = client._get_host_port_info(host) self.assertEqual(client._hosts_client[hostname].bastion_host, 'testing_bastion_host')
def test_run_command(self): hosts = ['localhost', '127.0.0.1', 'st2build001'] client = ParallelSSHClient(hosts=hosts, user='******', pkey_file='~/.ssh/id_rsa', connect=True) client.run('pwd', timeout=60) expected_kwargs = {'timeout': 60, 'call_line_handler_func': True} for host in hosts: hostname, _ = client._get_host_port_info(host) client._hosts_client[hostname].run.assert_called_with( 'pwd', **expected_kwargs)
def test_run_command(self): hosts = ['localhost', '127.0.0.1', 'st2build001'] client = ParallelSSHClient(hosts=hosts, user='******', pkey_file='~/.ssh/id_rsa', connect=True) client.run('pwd', timeout=60) expected_kwargs = { 'timeout': 60 } for host in hosts: hostname, _ = client._get_host_port_info(host) client._hosts_client[hostname].run.assert_called_with('pwd', **expected_kwargs)
def test_put(self): hosts = ['localhost', '127.0.0.1', 'st2build001'] client = ParallelSSHClient(hosts=hosts, user='******', pkey_file='~/.ssh/id_rsa', connect=True) client.put('/local/stuff', '/remote/stuff', mode=0o744) expected_kwargs = { 'mode': 0o744, 'mirror_local_mode': False } for host in hosts: hostname, _ = client._get_host_port_info(host) client._hosts_client[hostname].put.assert_called_with('/local/stuff', '/remote/stuff', **expected_kwargs)
def test_delete_dir(self): hosts = ['localhost', '127.0.0.1', 'st2build001'] client = ParallelSSHClient(hosts=hosts, user='******', pkey_file='~/.ssh/id_rsa', connect=True) client.delete_dir('/remote/stuff/', force=True) expected_kwargs = { 'force': True, 'timeout': None } for host in hosts: hostname, _ = client._get_host_port_info(host) client._hosts_client[hostname].delete_dir.assert_called_with('/remote/stuff/', **expected_kwargs)
def test_connect_with_bastion(self): hosts = ["localhost", "127.0.0.1"] client = ParallelSSHClient( hosts=hosts, user="******", pkey_file="~/.ssh/id_rsa", bastion_host="testing_bastion_host", connect=False, ) client.connect() for host in hosts: hostname, _ = client._get_host_port_info(host) self.assertEqual(client._hosts_client[hostname].bastion_host, "testing_bastion_host")
def test_connect_with_key(self): hosts = ['localhost', '127.0.0.1', 'st2build001'] client = ParallelSSHClient(hosts=hosts, user='******', pkey_file='~/.ssh/id_rsa', connect=False) client.connect() expected_conn = { 'allow_agent': False, 'look_for_keys': False, 'key_filename': '~/.ssh/id_rsa', 'username': '******', 'timeout': 60, 'port': 22 } for host in hosts: hostname, port = client._get_host_port_info(host) expected_conn['hostname'] = hostname expected_conn['port'] = port client._hosts_client[hostname].client.connect.assert_called_once_with(**expected_conn)
def test_connect_with_key(self): hosts = ["localhost", "127.0.0.1", "st2build001"] client = ParallelSSHClient(hosts=hosts, user="******", pkey_file="~/.ssh/id_rsa", connect=False) client.connect() expected_conn = { "allow_agent": False, "look_for_keys": False, "key_filename": "~/.ssh/id_rsa", "username": "******", "timeout": 60, "port": 22, } for host in hosts: hostname, port = client._get_host_port_info(host) expected_conn["hostname"] = hostname expected_conn["port"] = port client._hosts_client[ hostname].client.connect.assert_called_once_with( **expected_conn)
def test_run_command_timeout(self): # Make sure stdout and stderr is included on timeout hosts = ['localhost', '127.0.0.1', 'st2build001'] client = ParallelSSHClient(hosts=hosts, user='******', pkey_file='~/.ssh/id_rsa', connect=True) mock_run = Mock(side_effect=SSHCommandTimeoutError(cmd='pwd', timeout=10, stdout='a', stderr='b')) for host in hosts: hostname, _ = client._get_host_port_info(host) host_client = client._hosts_client[host] host_client.run = mock_run results = client.run('pwd') for host in hosts: result = results[host] self.assertEqual(result['failed'], True) self.assertEqual(result['stdout'], 'a') self.assertEqual(result['stderr'], 'b') self.assertEqual(result['return_code'], -9)