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_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_run_command(self): hosts = ['localhost', '127.0.0.1', 'st2build001'] client = ParallelSSHClient(hosts=hosts, user='******', pkey='~/.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_delete_dir(self): hosts = ['localhost', '127.0.0.1', 'st2build001'] client = ParallelSSHClient(hosts=hosts, user='******', pkey='~/.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='~/.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 } for host in hosts: hostname, _ = client._get_host_port_info(host) client._hosts_client[hostname].run.assert_called_with('pwd', **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=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_random_ports(self): hosts = ['localhost:22', '127.0.0.1:55', 'st2build001'] client = ParallelSSHClient(hosts=hosts, user='******', password='******', connect=False) client.connect() expected_conn = { 'allow_agent': False, 'look_for_keys': False, 'password': '******', 'username': '******', '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': '******', '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)
def test_connect_with_random_ports(self): hosts = ['localhost:22', '127.0.0.1:55', 'st2build001'] client = ParallelSSHClient(hosts=hosts, user='******', password='******', connect=False) client.connect() expected_conn = { 'allow_agent': False, 'look_for_keys': False, 'password': '******', 'username': '******', '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)