using System.Diagnostics; using Renci.SshNet.Common; namespace Renci.SshNet.IntegrationTests.OldIntegrationTests { /// /// Implementation of the SSH File Transfer Protocol (SFTP) over SSH. /// 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.ThrowsException(() => 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.ThrowsException(() => 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.IsTrue(files.Count() > 0); foreach (var file in files) { Debug.WriteLine(file.FullName); } sftp.Disconnect(); } } #if NET6_0_OR_GREATER [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.IsTrue(count > 0); 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.IsTrue(files.Count() > 0); 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.ThrowsException(() => 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.IsTrue(files.Count() > 10000); 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.IsTrue(files.First().FullName.StartsWith(string.Format("{0}", sftp.WorkingDirectory))); 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.IsTrue(files.First().FullName.StartsWith(string.Format("{0}/test1/test1_1", sftp.WorkingDirectory))); 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.IsTrue(files.First().FullName.StartsWith(string.Format("{0}", sftp.WorkingDirectory))); 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.IsTrue(files.First().FullName.StartsWith(string.Format("{0}/test1/test1_1", sftp.WorkingDirectory))); 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.ThrowsException(() => 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.ThrowsExceptionAsync(() => 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.ThrowsException(() => sftp.EndListDirectory(ar)); } } } }