SftpClientTests.cs 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  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
  9. {
  10. private readonly SftpClient _sftpClient;
  11. public SftpClientTests()
  12. {
  13. _sftpClient = new SftpClient(SshServerHostName, SshServerPort, User.UserName, User.Password);
  14. }
  15. [TestInitialize]
  16. public async Task InitializeAsync()
  17. {
  18. await _sftpClient.ConnectAsync(CancellationToken.None).ConfigureAwait(false);
  19. }
  20. [TestCleanup]
  21. public void Cleanup()
  22. {
  23. _sftpClient.Disconnect();
  24. _sftpClient.Dispose();
  25. }
  26. [TestMethod]
  27. public void Create_directory_with_contents_and_list_it()
  28. {
  29. var testDirectory = "/home/sshnet/sshnet-test";
  30. var testFileName = "test-file.txt";
  31. var testFilePath = $"{testDirectory}/{testFileName}";
  32. var testContent = "file content";
  33. // Create new directory and check if it exists
  34. _sftpClient.CreateDirectory(testDirectory);
  35. Assert.IsTrue(_sftpClient.Exists(testDirectory));
  36. // Upload file and check if it exists
  37. using var fileStream = new MemoryStream(Encoding.UTF8.GetBytes(testContent));
  38. _sftpClient.UploadFile(fileStream, testFilePath);
  39. Assert.IsTrue(_sftpClient.Exists(testFilePath));
  40. // Check if ListDirectory works
  41. var expectedFiles = new List<(string FullName, bool IsRegularFile, bool IsDirectory)>()
  42. {
  43. ("/home/sshnet/sshnet-test/.", IsRegularFile: false, IsDirectory: true),
  44. ("/home/sshnet/sshnet-test/..", IsRegularFile: false, IsDirectory: true),
  45. ("/home/sshnet/sshnet-test/test-file.txt", IsRegularFile: true, IsDirectory: false),
  46. };
  47. var actualFiles = _sftpClient.ListDirectory(testDirectory)
  48. .Select(f => (f.FullName, f.IsRegularFile, f.IsDirectory))
  49. .ToList();
  50. _sftpClient.DeleteFile(testFilePath);
  51. _sftpClient.DeleteDirectory(testDirectory);
  52. CollectionAssert.AreEquivalent(expectedFiles, actualFiles);
  53. }
  54. [TestMethod]
  55. public async Task Create_directory_with_contents_and_list_it_async()
  56. {
  57. var testDirectory = "/home/sshnet/sshnet-test";
  58. var testFileName = "test-file.txt";
  59. var testFilePath = $"{testDirectory}/{testFileName}";
  60. var testContent = "file content";
  61. // Create new directory and check if it exists
  62. await _sftpClient.CreateDirectoryAsync(testDirectory, CancellationToken.None).ConfigureAwait(false);
  63. Assert.IsTrue(await _sftpClient.ExistsAsync(testDirectory));
  64. // Upload file and check if it exists
  65. using var fileStream = new MemoryStream(Encoding.UTF8.GetBytes(testContent));
  66. await _sftpClient.UploadFileAsync(fileStream, testFilePath).ConfigureAwait(false);
  67. Assert.IsTrue(await _sftpClient.ExistsAsync(testFilePath));
  68. // Check if ListDirectory works
  69. var expectedFiles = new List<(string FullName, bool IsRegularFile, bool IsDirectory)>()
  70. {
  71. ("/home/sshnet/sshnet-test/.", IsRegularFile: false, IsDirectory: true),
  72. ("/home/sshnet/sshnet-test/..", IsRegularFile: false, IsDirectory: true),
  73. ("/home/sshnet/sshnet-test/test-file.txt", IsRegularFile: true, IsDirectory: false),
  74. };
  75. var actualFiles = new List<(string FullName, bool IsRegularFile, bool IsDirectory)>();
  76. await foreach (var file in _sftpClient.ListDirectoryAsync(testDirectory, CancellationToken.None))
  77. {
  78. actualFiles.Add((file.FullName, file.IsRegularFile, file.IsDirectory));
  79. }
  80. await _sftpClient.DeleteFileAsync(testFilePath, CancellationToken.None);
  81. await _sftpClient.DeleteDirectoryAsync(testDirectory, CancellationToken.None);
  82. CollectionAssert.AreEquivalent(expectedFiles, actualFiles);
  83. }
  84. [TestMethod]
  85. public void Test_Sftp_ListDirectory_Permission_Denied()
  86. {
  87. Assert.ThrowsException<SftpPermissionDeniedException>(() => _sftpClient.ListDirectory("/root"));
  88. }
  89. [TestMethod]
  90. public async Task Create_directory_and_delete_it_async()
  91. {
  92. var testDirectory = "/home/sshnet/sshnet-test";
  93. // Create new directory and check if it exists
  94. await _sftpClient.CreateDirectoryAsync(testDirectory);
  95. Assert.IsTrue(await _sftpClient.ExistsAsync(testDirectory).ConfigureAwait(false));
  96. await _sftpClient.DeleteDirectoryAsync(testDirectory, CancellationToken.None).ConfigureAwait(false);
  97. Assert.IsFalse(await _sftpClient.ExistsAsync(testDirectory).ConfigureAwait(false));
  98. }
  99. [TestMethod]
  100. public async Task Create_directory_with_contents_and_delete_contents_then_directory_async()
  101. {
  102. var testDirectory = "/home/sshnet/sshnet-test";
  103. var testFileName = "test-file.txt";
  104. var testFilePath = $"{testDirectory}/{testFileName}";
  105. var testContent = "file content";
  106. // Create new directory and check if it exists
  107. await _sftpClient.CreateDirectoryAsync(testDirectory).ConfigureAwait(false);
  108. Assert.IsTrue(await _sftpClient.ExistsAsync(testDirectory).ConfigureAwait(false));
  109. // Upload file and check if it exists
  110. using var fileStream = new MemoryStream(Encoding.UTF8.GetBytes(testContent));
  111. await _sftpClient.UploadFileAsync(fileStream, testFilePath).ConfigureAwait(false);
  112. Assert.IsTrue(await _sftpClient.ExistsAsync(testFilePath).ConfigureAwait(false));
  113. await _sftpClient.DeleteFileAsync(testFilePath, CancellationToken.None).ConfigureAwait(false);
  114. Assert.IsFalse(await _sftpClient.ExistsAsync(testFilePath).ConfigureAwait(false));
  115. Assert.IsTrue(await _sftpClient.ExistsAsync(testDirectory).ConfigureAwait(false));
  116. await _sftpClient.DeleteDirectoryAsync(testDirectory, CancellationToken.None).ConfigureAwait(false);
  117. Assert.IsFalse(await _sftpClient.ExistsAsync(testDirectory).ConfigureAwait(false));
  118. }
  119. [TestMethod]
  120. public async Task Create_directory_and_delete_it_using_DeleteAsync()
  121. {
  122. var testDirectory = "/home/sshnet/sshnet-test";
  123. // Create new directory and check if it exists
  124. await _sftpClient.CreateDirectoryAsync(testDirectory).ConfigureAwait(false);
  125. Assert.IsTrue(await _sftpClient.ExistsAsync(testDirectory).ConfigureAwait(false));
  126. await _sftpClient.DeleteAsync(testDirectory, CancellationToken.None).ConfigureAwait(false);
  127. Assert.IsFalse(await _sftpClient.ExistsAsync(testDirectory).ConfigureAwait(false));
  128. }
  129. [TestMethod]
  130. public async Task Create_file_and_delete_using_DeleteAsync()
  131. {
  132. var testFileName = "test-file.txt";
  133. var testContent = "file content";
  134. // Upload file and check if it exists
  135. using var fileStream = new MemoryStream(Encoding.UTF8.GetBytes(testContent));
  136. await _sftpClient.UploadFileAsync(fileStream, testFileName).ConfigureAwait(false);
  137. Assert.IsTrue(await _sftpClient.ExistsAsync(testFileName).ConfigureAwait(false));
  138. await _sftpClient.DeleteAsync(testFileName, CancellationToken.None).ConfigureAwait(false);
  139. Assert.IsFalse(await _sftpClient.ExistsAsync(testFileName).ConfigureAwait(false));
  140. }
  141. [TestMethod]
  142. public void Create_file_and_use_GetAttributes()
  143. {
  144. var testFileName = "test-file.txt";
  145. var testContent = "file content";
  146. using var fileStream = new MemoryStream(Encoding.UTF8.GetBytes(testContent));
  147. _sftpClient.UploadFile(fileStream, testFileName);
  148. var attributes = _sftpClient.GetAttributes(testFileName);
  149. Assert.IsNotNull(attributes);
  150. Assert.IsTrue(attributes.IsRegularFile);
  151. }
  152. [TestMethod]
  153. public async Task Create_file_and_use_GetAttributesAsync()
  154. {
  155. var testFileName = "test-file.txt";
  156. var testContent = "file content";
  157. using var fileStream = new MemoryStream(Encoding.UTF8.GetBytes(testContent));
  158. await _sftpClient.UploadFileAsync(fileStream, testFileName).ConfigureAwait(false);
  159. var attributes = await _sftpClient.GetAttributesAsync(testFileName, CancellationToken.None).ConfigureAwait(false);
  160. Assert.IsNotNull(attributes);
  161. Assert.IsTrue(attributes.IsRegularFile);
  162. }
  163. }
  164. }