예제 #1
0
    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)
예제 #2
0
    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)
예제 #3
0
 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')
예제 #4
0
 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')
예제 #5
0
 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)
예제 #6
0
 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)
예제 #7
0
 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)
예제 #8
0
    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')
예제 #9
0
 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)
예제 #10
0
 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)
예제 #11
0
 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)
예제 #12
0
 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)
예제 #13
0
 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)
예제 #14
0
 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)
예제 #15
0
    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)
예제 #16
0
 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)
예제 #17
0
    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)