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)
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)
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)
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')