mirror of
https://github.com/sshnet/SSH.NET.git
synced 2026-09-10 17:25:51 +00:00
933613e31c
* Update to MSTest 4 * fix TestMethodForPlatformAttribute replace Execute with ExecuteAsync and fix MSTEST0057 https://learn.microsoft.com/en-us/dotnet/core/testing/mstest-analyzers/mstest0057 (link currently dead) * fix compilation error * fix MSTEST0037 https://learn.microsoft.com/en-us/dotnet/core/testing/mstest-analyzers/mstest0037 * fix MSTEST0052 https://learn.microsoft.com/en-us/dotnet/core/testing/mstest-analyzers/mstest0052 * fix MSTEST0045 Fixing this properly would require the tests to respect testContext.CancellationToken. I'm not sure this is worth fixing or how to even do it for the sync methods. https://learn.microsoft.com/en-us/dotnet/core/testing/mstest-analyzers/mstest0045 * fix MSTEST0001 I assume that parallelization would break a lot of stuff. https://learn.microsoft.com/en-us/dotnet/core/testing/mstest-analyzers/mstest0001 * Workaround for new Sonar warnings because of MSTest4 * revert analyzer fixes in OrderedDictionaryTest * use custom sync console logger for MSTest to work around https://github.com/microsoft/testfx/issues/6457 * remove redundant args --------- Co-authored-by: Wojciech Nagórski <wojtpl2@gmail.com> Co-authored-by: Rob Hague <rob.hague00@gmail.com>
320 lines
11 KiB
C#
320 lines
11 KiB
C#
using System.Diagnostics;
|
|
|
|
using Renci.SshNet.Common;
|
|
|
|
namespace Renci.SshNet.IntegrationTests.OldIntegrationTests
|
|
{
|
|
/// <summary>
|
|
/// Implementation of the SSH File Transfer Protocol (SFTP) over SSH.
|
|
/// </summary>
|
|
public partial class SftpClientTest : IntegrationTestBase
|
|
{
|
|
[TestMethod]
|
|
[TestCategory("Sftp")]
|
|
public void Test_Sftp_ListDirectory_Permission_Denied()
|
|
{
|
|
using (var sftp = new SftpClient(SshServerHostName, SshServerPort, User.UserName, User.Password))
|
|
{
|
|
sftp.Connect();
|
|
|
|
Assert.ThrowsExactly<SftpPermissionDeniedException>(() => sftp.ListDirectory("/root"));
|
|
}
|
|
}
|
|
|
|
[TestMethod]
|
|
[TestCategory("Sftp")]
|
|
public void Test_Sftp_ListDirectory_Not_Exists()
|
|
{
|
|
using (var sftp = new SftpClient(SshServerHostName, SshServerPort, User.UserName, User.Password))
|
|
{
|
|
sftp.Connect();
|
|
|
|
Assert.ThrowsExactly<SftpPathNotFoundException>(() => sftp.ListDirectory("/asdfgh"));
|
|
}
|
|
}
|
|
|
|
[TestMethod]
|
|
[TestCategory("Sftp")]
|
|
public void Test_Sftp_ListDirectory_Current()
|
|
{
|
|
using (var sftp = new SftpClient(SshServerHostName, SshServerPort, User.UserName, User.Password))
|
|
{
|
|
sftp.Connect();
|
|
|
|
var files = sftp.ListDirectory(".");
|
|
|
|
Assert.IsGreaterThan(0, files.Count());
|
|
|
|
foreach (var file in files)
|
|
{
|
|
Debug.WriteLine(file.FullName);
|
|
}
|
|
|
|
sftp.Disconnect();
|
|
}
|
|
}
|
|
|
|
#if NET
|
|
[TestMethod]
|
|
[TestCategory("Sftp")]
|
|
public async Task Test_Sftp_ListDirectoryAsync_Current()
|
|
{
|
|
using (var sftp = new SftpClient(SshServerHostName, SshServerPort, User.UserName, User.Password))
|
|
{
|
|
sftp.Connect();
|
|
var cts = new CancellationTokenSource();
|
|
cts.CancelAfter(TimeSpan.FromMinutes(1));
|
|
var count = 0;
|
|
await foreach (var file in sftp.ListDirectoryAsync(".", cts.Token))
|
|
{
|
|
count++;
|
|
Debug.WriteLine(file.FullName);
|
|
}
|
|
|
|
Assert.IsGreaterThan(0, count);
|
|
|
|
sftp.Disconnect();
|
|
}
|
|
}
|
|
#endif
|
|
[TestMethod]
|
|
[TestCategory("Sftp")]
|
|
public void Test_Sftp_ListDirectory_Empty()
|
|
{
|
|
using (var sftp = new SftpClient(SshServerHostName, SshServerPort, User.UserName, User.Password))
|
|
{
|
|
sftp.Connect();
|
|
|
|
var files = sftp.ListDirectory(string.Empty);
|
|
|
|
Assert.IsGreaterThan(0, files.Count());
|
|
|
|
foreach (var file in files)
|
|
{
|
|
Debug.WriteLine(file.FullName);
|
|
}
|
|
|
|
sftp.Disconnect();
|
|
}
|
|
}
|
|
|
|
[TestMethod]
|
|
[TestCategory("Sftp")]
|
|
[Description("Test passing null to ListDirectory.")]
|
|
public void Test_Sftp_ListDirectory_Null()
|
|
{
|
|
using (var sftp = new SftpClient(SshServerHostName, SshServerPort, User.UserName, User.Password))
|
|
{
|
|
sftp.Connect();
|
|
|
|
Assert.ThrowsExactly<ArgumentNullException>(() => sftp.ListDirectory(null));
|
|
}
|
|
}
|
|
|
|
[TestMethod]
|
|
[TestCategory("Sftp")]
|
|
public void Test_Sftp_ListDirectory_HugeDirectory()
|
|
{
|
|
using (var sftp = new SftpClient(SshServerHostName, SshServerPort, User.UserName, User.Password))
|
|
{
|
|
sftp.Connect();
|
|
|
|
// Create 10000 directory items
|
|
for (int i = 0; i < 10000; i++)
|
|
{
|
|
sftp.CreateDirectory(string.Format("test_{0}", i));
|
|
}
|
|
|
|
var files = sftp.ListDirectory(".");
|
|
|
|
// Ensure that directory has at least 10000 items
|
|
Assert.IsGreaterThan(10000, files.Count());
|
|
|
|
sftp.Disconnect();
|
|
}
|
|
|
|
RemoveAllFiles();
|
|
}
|
|
|
|
[TestMethod]
|
|
[TestCategory("Sftp")]
|
|
public void Test_Sftp_Change_Directory()
|
|
{
|
|
using (var sftp = new SftpClient(SshServerHostName, SshServerPort, User.UserName, User.Password))
|
|
{
|
|
sftp.Connect();
|
|
|
|
Assert.AreEqual("/home/sshnet", sftp.WorkingDirectory);
|
|
|
|
sftp.CreateDirectory("test1");
|
|
|
|
sftp.ChangeDirectory("test1");
|
|
|
|
Assert.AreEqual("/home/sshnet/test1", sftp.WorkingDirectory);
|
|
|
|
sftp.CreateDirectory("test1_1");
|
|
sftp.CreateDirectory("test1_2");
|
|
sftp.CreateDirectory("test1_3");
|
|
|
|
var files = sftp.ListDirectory(".");
|
|
|
|
Assert.StartsWith(string.Format("{0}", sftp.WorkingDirectory), files.First().FullName);
|
|
|
|
sftp.ChangeDirectory("test1_1");
|
|
|
|
Assert.AreEqual("/home/sshnet/test1/test1_1", sftp.WorkingDirectory);
|
|
|
|
sftp.ChangeDirectory("../test1_2");
|
|
|
|
Assert.AreEqual("/home/sshnet/test1/test1_2", sftp.WorkingDirectory);
|
|
|
|
sftp.ChangeDirectory("..");
|
|
|
|
Assert.AreEqual("/home/sshnet/test1", sftp.WorkingDirectory);
|
|
|
|
sftp.ChangeDirectory("..");
|
|
|
|
Assert.AreEqual("/home/sshnet", sftp.WorkingDirectory);
|
|
|
|
files = sftp.ListDirectory("test1/test1_1");
|
|
|
|
Assert.StartsWith(string.Format("{0}/test1/test1_1", sftp.WorkingDirectory), files.First().FullName);
|
|
|
|
sftp.ChangeDirectory("test1/test1_1");
|
|
|
|
Assert.AreEqual("/home/sshnet/test1/test1_1", sftp.WorkingDirectory);
|
|
|
|
sftp.ChangeDirectory("/home/sshnet/test1/test1_1");
|
|
|
|
Assert.AreEqual("/home/sshnet/test1/test1_1", sftp.WorkingDirectory);
|
|
|
|
sftp.ChangeDirectory("/home/sshnet/test1/test1_1/../test1_2");
|
|
|
|
Assert.AreEqual("/home/sshnet/test1/test1_2", sftp.WorkingDirectory);
|
|
|
|
sftp.ChangeDirectory("../../");
|
|
|
|
sftp.DeleteDirectory("test1/test1_1");
|
|
sftp.DeleteDirectory("test1/test1_2");
|
|
sftp.DeleteDirectory("test1/test1_3");
|
|
sftp.DeleteDirectory("test1");
|
|
|
|
sftp.Disconnect();
|
|
}
|
|
|
|
RemoveAllFiles();
|
|
}
|
|
|
|
[TestMethod]
|
|
[TestCategory("Sftp")]
|
|
public async Task Test_Sftp_Change_DirectoryAsync()
|
|
{
|
|
using (var sftp = new SftpClient(SshServerHostName, SshServerPort, User.UserName, User.Password))
|
|
{
|
|
await sftp.ConnectAsync(CancellationToken.None).ConfigureAwait(false);
|
|
|
|
Assert.AreEqual("/home/sshnet", sftp.WorkingDirectory);
|
|
|
|
await sftp.CreateDirectoryAsync("test1", CancellationToken.None).ConfigureAwait(false);
|
|
|
|
await sftp.ChangeDirectoryAsync("test1", CancellationToken.None).ConfigureAwait(false);
|
|
|
|
Assert.AreEqual("/home/sshnet/test1", sftp.WorkingDirectory);
|
|
|
|
await sftp.CreateDirectoryAsync("test1_1", CancellationToken.None).ConfigureAwait(false);
|
|
await sftp.CreateDirectoryAsync("test1_2", CancellationToken.None).ConfigureAwait(false);
|
|
await sftp.CreateDirectoryAsync("test1_3", CancellationToken.None).ConfigureAwait(false);
|
|
|
|
var files = sftp.ListDirectory(".");
|
|
|
|
Assert.StartsWith(string.Format("{0}", sftp.WorkingDirectory), files.First().FullName);
|
|
|
|
await sftp.ChangeDirectoryAsync("test1_1", CancellationToken.None).ConfigureAwait(false);
|
|
|
|
Assert.AreEqual("/home/sshnet/test1/test1_1", sftp.WorkingDirectory);
|
|
|
|
await sftp.ChangeDirectoryAsync("../test1_2", CancellationToken.None).ConfigureAwait(false);
|
|
|
|
Assert.AreEqual("/home/sshnet/test1/test1_2", sftp.WorkingDirectory);
|
|
|
|
await sftp.ChangeDirectoryAsync("..", CancellationToken.None).ConfigureAwait(false);
|
|
|
|
Assert.AreEqual("/home/sshnet/test1", sftp.WorkingDirectory);
|
|
|
|
await sftp.ChangeDirectoryAsync("..", CancellationToken.None).ConfigureAwait(false);
|
|
|
|
Assert.AreEqual("/home/sshnet", sftp.WorkingDirectory);
|
|
|
|
files = sftp.ListDirectory("test1/test1_1");
|
|
|
|
Assert.StartsWith(string.Format("{0}/test1/test1_1", sftp.WorkingDirectory), files.First().FullName);
|
|
|
|
await sftp.ChangeDirectoryAsync("test1/test1_1", CancellationToken.None).ConfigureAwait(false);
|
|
|
|
Assert.AreEqual("/home/sshnet/test1/test1_1", sftp.WorkingDirectory);
|
|
|
|
await sftp.ChangeDirectoryAsync("/home/sshnet/test1/test1_1", CancellationToken.None).ConfigureAwait(false);
|
|
|
|
Assert.AreEqual("/home/sshnet/test1/test1_1", sftp.WorkingDirectory);
|
|
|
|
await sftp.ChangeDirectoryAsync("/home/sshnet/test1/test1_1/../test1_2", CancellationToken.None).ConfigureAwait(false);
|
|
|
|
Assert.AreEqual("/home/sshnet/test1/test1_2", sftp.WorkingDirectory);
|
|
|
|
await sftp.ChangeDirectoryAsync("../../", CancellationToken.None).ConfigureAwait(false);
|
|
|
|
await sftp.DeleteDirectoryAsync("test1/test1_1", CancellationToken.None).ConfigureAwait(false);
|
|
await sftp.DeleteDirectoryAsync("test1/test1_2", CancellationToken.None).ConfigureAwait(false);
|
|
await sftp.DeleteDirectoryAsync("test1/test1_3", CancellationToken.None).ConfigureAwait(false);
|
|
await sftp.DeleteDirectoryAsync("test1", CancellationToken.None).ConfigureAwait(false);
|
|
|
|
sftp.Disconnect();
|
|
}
|
|
|
|
RemoveAllFiles();
|
|
}
|
|
|
|
[TestMethod]
|
|
[TestCategory("Sftp")]
|
|
[Description("Test passing null to ChangeDirectory.")]
|
|
public void Test_Sftp_ChangeDirectory_Null()
|
|
{
|
|
using (var sftp = new SftpClient(SshServerHostName, SshServerPort, User.UserName, User.Password))
|
|
{
|
|
sftp.Connect();
|
|
|
|
Assert.ThrowsExactly<ArgumentNullException>(() => sftp.ChangeDirectory(null));
|
|
}
|
|
}
|
|
|
|
[TestMethod]
|
|
[TestCategory("Sftp")]
|
|
[Description("Test passing null to ChangeDirectory.")]
|
|
public async Task Test_Sftp_ChangeDirectory_NullAsync()
|
|
{
|
|
using (var sftp = new SftpClient(SshServerHostName, SshServerPort, User.UserName, User.Password))
|
|
{
|
|
await sftp.ConnectAsync(CancellationToken.None).ConfigureAwait(false);
|
|
|
|
await Assert.ThrowsExactlyAsync<ArgumentNullException>(() => sftp.ChangeDirectoryAsync(null));
|
|
}
|
|
}
|
|
|
|
[TestMethod]
|
|
[TestCategory("Sftp")]
|
|
[Description("Test calling EndListDirectory method more than once.")]
|
|
public void Test_Sftp_Call_EndListDirectory_Twice()
|
|
{
|
|
using (var sftp = new SftpClient(SshServerHostName, SshServerPort, User.UserName, User.Password))
|
|
{
|
|
sftp.Connect();
|
|
var ar = sftp.BeginListDirectory("/", null, null);
|
|
var result = sftp.EndListDirectory(ar);
|
|
|
|
// TODO there is no reason that this should throw
|
|
Assert.ThrowsExactly<ArgumentException>(() => sftp.EndListDirectory(ar));
|
|
}
|
|
}
|
|
}
|
|
}
|