SftpClientTests.cs 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. using Renci.SshNet.Common;
  2. namespace Renci.SshNet.IntegrationTests
  3. {
  4. /// <summary>
  5. /// The SFTP client integration tests
  6. /// </summary>
  7. [TestClass]
  8. public class SftpClientTests : IntegrationTestBase, IDisposable
  9. {
  10. private readonly SftpClient _sftpClient;
  11. public SftpClientTests()
  12. {
  13. _sftpClient = new SftpClient(SshServerHostName, SshServerPort, User.UserName, User.Password);
  14. _sftpClient.Connect();
  15. }
  16. [TestMethod]
  17. public void Create_directory_with_contents_and_list_it()
  18. {
  19. var testDirectory = "/home/sshnet/sshnet-test";
  20. var testFileName = "test-file.txt";
  21. var testFilePath = $"{testDirectory}/{testFileName}";
  22. var testContent = "file content";
  23. // Create new directory and check if it exists
  24. _sftpClient.CreateDirectory(testDirectory);
  25. Assert.IsTrue(_sftpClient.Exists(testDirectory));
  26. // Upload file and check if it exists
  27. using var fileStream = new MemoryStream(Encoding.UTF8.GetBytes(testContent));
  28. _sftpClient.UploadFile(fileStream, testFilePath);
  29. Assert.IsTrue(_sftpClient.Exists(testFilePath));
  30. // Check if ListDirectory works
  31. var expectedFiles = new List<(string FullName, bool IsRegularFile, bool IsDirectory)>()
  32. {
  33. ("/home/sshnet/sshnet-test/.", IsRegularFile: false, IsDirectory: true),
  34. ("/home/sshnet/sshnet-test/..", IsRegularFile: false, IsDirectory: true),
  35. ("/home/sshnet/sshnet-test/test-file.txt", IsRegularFile: true, IsDirectory: false),
  36. };
  37. var actualFiles = _sftpClient.ListDirectory(testDirectory)
  38. .Select(f => (f.FullName, f.IsRegularFile, f.IsDirectory))
  39. .ToList();
  40. _sftpClient.DeleteFile(testFilePath);
  41. _sftpClient.DeleteDirectory(testDirectory);
  42. CollectionAssert.AreEquivalent(expectedFiles, actualFiles);
  43. }
  44. [TestMethod]
  45. public async Task Create_directory_with_contents_and_list_it_async()
  46. {
  47. var testDirectory = "/home/sshnet/sshnet-test";
  48. var testFileName = "test-file.txt";
  49. var testFilePath = $"{testDirectory}/{testFileName}";
  50. var testContent = "file content";
  51. // Create new directory and check if it exists
  52. await _sftpClient.CreateDirectoryAsync(testDirectory, CancellationToken.None).ConfigureAwait(false);
  53. Assert.IsTrue(await _sftpClient.ExistsAsync(testDirectory));
  54. // Upload file and check if it exists
  55. using var fileStream = new MemoryStream(Encoding.UTF8.GetBytes(testContent));
  56. _sftpClient.UploadFile(fileStream, testFilePath);
  57. Assert.IsTrue(await _sftpClient.ExistsAsync(testFilePath));
  58. // Check if ListDirectory works
  59. var expectedFiles = new List<(string FullName, bool IsRegularFile, bool IsDirectory)>()
  60. {
  61. ("/home/sshnet/sshnet-test/.", IsRegularFile: false, IsDirectory: true),
  62. ("/home/sshnet/sshnet-test/..", IsRegularFile: false, IsDirectory: true),
  63. ("/home/sshnet/sshnet-test/test-file.txt", IsRegularFile: true, IsDirectory: false),
  64. };
  65. var actualFiles = new List<(string FullName, bool IsRegularFile, bool IsDirectory)>();
  66. await foreach (var file in _sftpClient.ListDirectoryAsync(testDirectory, CancellationToken.None))
  67. {
  68. actualFiles.Add((file.FullName, file.IsRegularFile, file.IsDirectory));
  69. }
  70. await _sftpClient.DeleteFileAsync(testFilePath, CancellationToken.None);
  71. await _sftpClient.DeleteDirectoryAsync(testDirectory, CancellationToken.None);
  72. CollectionAssert.AreEquivalent(expectedFiles, actualFiles);
  73. }
  74. [TestMethod]
  75. public void Test_Sftp_ListDirectory_Permission_Denied()
  76. {
  77. Assert.ThrowsException<SftpPermissionDeniedException>(() => _sftpClient.ListDirectory("/root"));
  78. }
  79. [TestMethod]
  80. public async Task Create_directory_and_delete_it_async()
  81. {
  82. var testDirectory = "/home/sshnet/sshnet-test";
  83. // Create new directory and check if it exists
  84. await _sftpClient.CreateDirectoryAsync(testDirectory);
  85. Assert.IsTrue(await _sftpClient.ExistsAsync(testDirectory).ConfigureAwait(false));
  86. await _sftpClient.DeleteDirectoryAsync(testDirectory, CancellationToken.None).ConfigureAwait(false);
  87. Assert.IsFalse(await _sftpClient.ExistsAsync(testDirectory).ConfigureAwait(false));
  88. }
  89. [TestMethod]
  90. public async Task Create_directory_with_contents_and_delete_contents_then_directory_async()
  91. {
  92. var testDirectory = "/home/sshnet/sshnet-test";
  93. var testFileName = "test-file.txt";
  94. var testFilePath = $"{testDirectory}/{testFileName}";
  95. var testContent = "file content";
  96. // Create new directory and check if it exists
  97. await _sftpClient.CreateDirectoryAsync(testDirectory);
  98. Assert.IsTrue(await _sftpClient.ExistsAsync(testDirectory).ConfigureAwait(false));
  99. // Upload file and check if it exists
  100. using var fileStream = new MemoryStream(Encoding.UTF8.GetBytes(testContent));
  101. _sftpClient.UploadFile(fileStream, testFilePath);
  102. Assert.IsTrue(await _sftpClient.ExistsAsync(testFilePath).ConfigureAwait(false));
  103. await _sftpClient.DeleteFileAsync(testFilePath, CancellationToken.None).ConfigureAwait(false);
  104. Assert.IsFalse(await _sftpClient.ExistsAsync(testFilePath).ConfigureAwait(false));
  105. Assert.IsTrue(await _sftpClient.ExistsAsync(testDirectory).ConfigureAwait(false));
  106. await _sftpClient.DeleteDirectoryAsync(testDirectory, CancellationToken.None).ConfigureAwait(false);
  107. Assert.IsFalse(await _sftpClient.ExistsAsync(testDirectory).ConfigureAwait(false));
  108. }
  109. [TestMethod]
  110. public async Task Create_directory_and_delete_it_using_DeleteAsync()
  111. {
  112. var testDirectory = "/home/sshnet/sshnet-test";
  113. // Create new directory and check if it exists
  114. await _sftpClient.CreateDirectoryAsync(testDirectory);
  115. Assert.IsTrue(await _sftpClient.ExistsAsync(testDirectory).ConfigureAwait(false));
  116. await _sftpClient.DeleteAsync(testDirectory, CancellationToken.None).ConfigureAwait(false);
  117. Assert.IsFalse(await _sftpClient.ExistsAsync(testDirectory).ConfigureAwait(false));
  118. }
  119. [TestMethod]
  120. public async Task Create_file_and_delete_using_DeleteAsync()
  121. {
  122. var testFileName = "test-file.txt";
  123. var testContent = "file content";
  124. // Upload file and check if it exists
  125. using var fileStream = new MemoryStream(Encoding.UTF8.GetBytes(testContent));
  126. _sftpClient.UploadFile(fileStream, testFileName);
  127. Assert.IsTrue(await _sftpClient.ExistsAsync(testFileName).ConfigureAwait(false));
  128. await _sftpClient.DeleteAsync(testFileName, CancellationToken.None).ConfigureAwait(false);
  129. Assert.IsFalse(await _sftpClient.ExistsAsync(testFileName).ConfigureAwait(false));
  130. }
  131. public void Dispose()
  132. {
  133. _sftpClient.Disconnect();
  134. _sftpClient.Dispose();
  135. }
  136. }
  137. }