Пример #1
0
    def test_get_sftp_client(self):
        conn_params = {"hostname": "dummy.host.org", "username": "******"}
        client = ParamikoSSHClient(**conn_params)

        # 1. sftp connection is not opened yet, new one should be opened
        mock_client = Mock()
        mock_sft_client = Mock()
        mock_client.open_sftp.return_value = mock_sft_client
        client.client = mock_client

        self.assertEqual(mock_client.open_sftp.call_count, 0)
        self.assertEqual(client._get_sftp_client(), mock_sft_client)
        self.assertEqual(mock_client.open_sftp.call_count, 1)

        # 2. existing sftp connection which is already opened is re-used
        mock_client = Mock()
        mock_sft_client = Mock()
        client.client = mock_client
        client.sftp_client = mock_sft_client

        self.assertEqual(mock_client.open_sftp.call_count, 0)
        self.assertEqual(client._get_sftp_client(), mock_sft_client)
        self.assertEqual(mock_client.open_sftp.call_count, 0)

        # 3. existing connection is already opened, but it throws
        # "socket closed" error, we should establish a new one
        mock_client = Mock()
        mock_sftp_client = Mock()

        client.client = mock_client
        client.sftp_client = mock_sftp_client

        mock_sftp_client.listdir.side_effect = OSError("Socket is closed")

        self.assertEqual(mock_client.open_sftp.call_count, 0)
        sftp_client = client._get_sftp_client()
        self.assertTrue(sftp_client != mock_sft_client)
        self.assertTrue(sftp_client)
        self.assertTrue(client._get_sftp_client())
        self.assertEqual(mock_client.open_sftp.call_count, 1)

        # 4. fatal exceptions should be propagated
        mock_client = Mock()
        mock_sftp_client = Mock()

        client.client = mock_client
        client.sftp_client = mock_sftp_client

        mock_sftp_client.listdir.side_effect = Exception("Fatal exception")

        self.assertEqual(mock_client.open_sftp.call_count, 0)
        self.assertRaisesRegex(Exception, "Fatal exception",
                               client._get_sftp_client)
Пример #2
0
    def test_putfo_relative_path(self):
        conn_params = {"hostname": "dummy.host.org", "username": "******"}
        client = ParamikoSSHClient(**conn_params)

        mock_client = Mock()
        mock_sftp_client = Mock()
        mock_transport = Mock()

        mock_client.get_transport.return_value = mock_transport
        mock_sftp_client.getcwd.return_value = "/mock/cwd"
        client.client = mock_client
        client.sftp_client = mock_sftp_client

        mock_fo = StringIO("mock stream data 2")

        result = client.putfo(path="path2.txt", fo=mock_fo, chmod=466)
        self.assertEqual(result, "/mock/cwd/path2.txt")

        calls = [call(".")]
        mock_sftp_client.chdir.assert_has_calls(calls, any_order=False)

        mock_sftp_client.putfo.assert_called_once_with(mock_fo, "path2.txt")

        calls = [call("path2.txt"), call().chmod(466), call().close()]
        mock_sftp_client.file.assert_has_calls(calls, any_order=False)
Пример #3
0
    def test_put_relative_path(self):
        conn_params = {"hostname": "dummy.host.org", "username": "******"}
        client = ParamikoSSHClient(**conn_params)

        mock_client = Mock()
        mock_sftp_client = Mock()
        mock_transport = Mock()

        mock_client.get_transport.return_value = mock_transport
        mock_sftp_client.getcwd.return_value = "/mock/cwd"
        client.client = mock_client
        client.sftp_client = mock_sftp_client

        result = client.put(path="path2.txt",
                            contents="foo bar 2",
                            chmod=466,
                            mode="a")
        self.assertEqual(result, "/mock/cwd/path2.txt")

        calls = [call(".")]
        mock_sftp_client.chdir.assert_has_calls(calls, any_order=False)

        calls = [
            call("path2.txt", mode="a"),
            call().write("foo bar 2"),
            call().chmod(466),
            call().close(),
        ]
        mock_sftp_client.file.assert_has_calls(calls, any_order=False)
    def test_putfo_relative_path(self):
        conn_params = {'hostname': 'dummy.host.org', 'username': '******'}
        client = ParamikoSSHClient(**conn_params)

        mock_client = Mock()
        mock_sftp_client = Mock()
        mock_transport = Mock()

        mock_client.get_transport.return_value = mock_transport
        mock_sftp_client.getcwd.return_value = '/mock/cwd'
        client.client = mock_client
        client.sftp_client = mock_sftp_client

        mock_fo = StringIO('mock stream data 2')

        result = client.putfo(path='path2.txt', fo=mock_fo, chmod=466)
        self.assertEqual(result, '/mock/cwd/path2.txt')

        calls = [call('.')]
        mock_sftp_client.chdir.assert_has_calls(calls, any_order=False)

        mock_sftp_client.putfo.assert_called_once_with(mock_fo, "path2.txt")

        calls = [call('path2.txt'), call().chmod(466), call().close()]
        mock_sftp_client.file.assert_has_calls(calls, any_order=False)
    def test_put_relative_path(self):
        conn_params = {'hostname': 'dummy.host.org', 'username': '******'}
        client = ParamikoSSHClient(**conn_params)

        mock_client = Mock()
        mock_sftp_client = Mock()
        mock_transport = Mock()

        mock_client.get_transport.return_value = mock_transport
        mock_sftp_client.getcwd.return_value = '/mock/cwd'
        client.client = mock_client
        client.sftp_client = mock_sftp_client

        result = client.put(path='path2.txt',
                            contents='foo bar 2',
                            chmod=466,
                            mode='a')
        self.assertEqual(result, '/mock/cwd/path2.txt')

        calls = [call('.')]
        mock_sftp_client.chdir.assert_has_calls(calls, any_order=False)

        calls = [
            call('path2.txt', mode='a'),
            call().write('foo bar 2'),
            call().chmod(466),
            call().close()
        ]
        mock_sftp_client.file.assert_has_calls(calls, any_order=False)
Пример #6
0
    def test_put_absolute_path_windows(self):
        conn_params = {"hostname": "dummy.host.org", "username": "******"}
        client = ParamikoSSHClient(**conn_params)

        mock_client = Mock()
        mock_sftp_client = Mock()
        mock_transport = Mock()

        mock_client.get_transport.return_value = mock_transport
        mock_sftp_client.getcwd.return_value = "C:\\Administrator"
        client.client = mock_client
        client.sftp_client = mock_sftp_client

        result = client.put(path="C:\\users\\user1\\1.txt",
                            contents="foo bar",
                            chmod=455,
                            mode="w")
        self.assertEqual(result, "C:\\users\\user1\\1.txt")

        result = client.put(path="\\users\\user1\\1.txt",
                            contents="foo bar",
                            chmod=455,
                            mode="w")
        self.assertEqual(result, "\\users\\user1\\1.txt")

        result = client.put(path="1.txt",
                            contents="foo bar",
                            chmod=455,
                            mode="w")
        self.assertEqual(result, "C:\\Administrator\\1.txt")

        mock_client.get_transport.return_value = mock_transport
        mock_sftp_client.getcwd.return_value = "/C:\\User1"
        client.client = mock_client
        client.sftp_client = mock_sftp_client

        result = client.put(path="1.txt",
                            contents="foo bar",
                            chmod=455,
                            mode="w")
        self.assertEqual(result, "C:\\User1\\1.txt")
    def test_put_absolute_path_windows(self):
        conn_params = {'hostname': 'dummy.host.org', 'username': '******'}
        client = ParamikoSSHClient(**conn_params)

        mock_client = Mock()
        mock_sftp_client = Mock()
        mock_transport = Mock()

        mock_client.get_transport.return_value = mock_transport
        mock_sftp_client.getcwd.return_value = 'C:\\Administrator'
        client.client = mock_client
        client.sftp_client = mock_sftp_client

        result = client.put(path='C:\\users\\user1\\1.txt',
                            contents='foo bar',
                            chmod=455,
                            mode='w')
        self.assertEqual(result, 'C:\\users\\user1\\1.txt')

        result = client.put(path='\\users\\user1\\1.txt',
                            contents='foo bar',
                            chmod=455,
                            mode='w')
        self.assertEqual(result, '\\users\\user1\\1.txt')

        result = client.put(path='1.txt',
                            contents='foo bar',
                            chmod=455,
                            mode='w')
        self.assertEqual(result, 'C:\\Administrator\\1.txt')

        mock_client.get_transport.return_value = mock_transport
        mock_sftp_client.getcwd.return_value = '/C:\\User1'
        client.client = mock_client
        client.sftp_client = mock_sftp_client

        result = client.put(path='1.txt',
                            contents='foo bar',
                            chmod=455,
                            mode='w')
        self.assertEqual(result, 'C:\\User1\\1.txt')