SftpClientTest.ListDirectory.cs 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. using Microsoft.VisualStudio.TestTools.UnitTesting;
  2. using Renci.SshNet.Common;
  3. using Renci.SshNet.Tests.Common;
  4. using Renci.SshNet.Tests.Properties;
  5. using System;
  6. using System.Diagnostics;
  7. using System.Linq;
  8. namespace Renci.SshNet.Tests.Classes
  9. {
  10. /// <summary>
  11. /// Implementation of the SSH File Transfer Protocol (SFTP) over SSH.
  12. /// </summary>
  13. public partial class SftpClientTest : TestBase
  14. {
  15. [TestMethod]
  16. [TestCategory("Sftp")]
  17. [ExpectedException(typeof(SshConnectionException))]
  18. public void Test_Sftp_ListDirectory_Without_Connecting()
  19. {
  20. using (var sftp = new SftpClient(Resources.HOST, Resources.USERNAME, Resources.PASSWORD))
  21. {
  22. var files = sftp.ListDirectory(".");
  23. foreach (var file in files)
  24. {
  25. Debug.WriteLine(file.FullName);
  26. }
  27. }
  28. }
  29. [TestMethod]
  30. [TestCategory("Sftp")]
  31. [ExpectedException(typeof(SftpPermissionDeniedException))]
  32. public void Test_Sftp_ListDirectory_Permission_Denied()
  33. {
  34. using (var sftp = new SftpClient(Resources.HOST, Resources.USERNAME, Resources.PASSWORD))
  35. {
  36. sftp.Connect();
  37. var files = sftp.ListDirectory("/root");
  38. foreach (var file in files)
  39. {
  40. Debug.WriteLine(file.FullName);
  41. }
  42. sftp.Disconnect();
  43. }
  44. }
  45. [TestMethod]
  46. [TestCategory("Sftp")]
  47. [ExpectedException(typeof(SftpPathNotFoundException))]
  48. public void Test_Sftp_ListDirectory_Not_Exists()
  49. {
  50. using (var sftp = new SftpClient(Resources.HOST, Resources.USERNAME, Resources.PASSWORD))
  51. {
  52. sftp.Connect();
  53. var files = sftp.ListDirectory("/asdfgh");
  54. foreach (var file in files)
  55. {
  56. Debug.WriteLine(file.FullName);
  57. }
  58. sftp.Disconnect();
  59. }
  60. }
  61. [TestMethod]
  62. [TestCategory("Sftp")]
  63. public void Test_Sftp_ListDirectory_Current()
  64. {
  65. using (var sftp = new SftpClient(Resources.HOST, Resources.USERNAME, Resources.PASSWORD))
  66. {
  67. sftp.Connect();
  68. var files = sftp.ListDirectory(".");
  69. Assert.IsTrue(files.Count() > 0);
  70. foreach (var file in files)
  71. {
  72. Debug.WriteLine(file.FullName);
  73. }
  74. sftp.Disconnect();
  75. }
  76. }
  77. [TestMethod]
  78. [TestCategory("Sftp")]
  79. public void Test_Sftp_ListDirectory_Empty()
  80. {
  81. using (var sftp = new SftpClient(Resources.HOST, Resources.USERNAME, Resources.PASSWORD))
  82. {
  83. sftp.Connect();
  84. var files = sftp.ListDirectory(string.Empty);
  85. Assert.IsTrue(files.Count() > 0);
  86. foreach (var file in files)
  87. {
  88. Debug.WriteLine(file.FullName);
  89. }
  90. sftp.Disconnect();
  91. }
  92. }
  93. [TestMethod]
  94. [TestCategory("Sftp")]
  95. [Description("Test passing null to ListDirectory.")]
  96. [ExpectedException(typeof(ArgumentNullException))]
  97. public void Test_Sftp_ListDirectory_Null()
  98. {
  99. using (var sftp = new SftpClient(Resources.HOST, Resources.USERNAME, Resources.PASSWORD))
  100. {
  101. sftp.Connect();
  102. var files = sftp.ListDirectory(null);
  103. Assert.IsTrue(files.Count() > 0);
  104. foreach (var file in files)
  105. {
  106. Debug.WriteLine(file.FullName);
  107. }
  108. sftp.Disconnect();
  109. }
  110. }
  111. [TestMethod]
  112. [TestCategory("Sftp")]
  113. public void Test_Sftp_ListDirectory_HugeDirectory()
  114. {
  115. using (var sftp = new SftpClient(Resources.HOST, Resources.USERNAME, Resources.PASSWORD))
  116. {
  117. sftp.Connect();
  118. // Create 10000 directory items
  119. for (int i = 0; i < 10000; i++)
  120. {
  121. sftp.CreateDirectory(string.Format("test_{0}", i));
  122. Debug.WriteLine("Created " + i);
  123. }
  124. var files = sftp.ListDirectory(".");
  125. // Ensure that directory has at least 10000 items
  126. Assert.IsTrue(files.Count() > 10000);
  127. sftp.Disconnect();
  128. }
  129. }
  130. [TestMethod]
  131. [TestCategory("Sftp")]
  132. public void Test_Sftp_Change_Directory()
  133. {
  134. using (var sftp = new SftpClient(Resources.HOST, Resources.USERNAME, Resources.PASSWORD))
  135. {
  136. sftp.Connect();
  137. Assert.AreEqual(sftp.WorkingDirectory, "/home/tester");
  138. sftp.CreateDirectory("test1");
  139. sftp.ChangeDirectory("test1");
  140. Assert.AreEqual(sftp.WorkingDirectory, "/home/tester/test1");
  141. sftp.CreateDirectory("test1_1");
  142. sftp.CreateDirectory("test1_2");
  143. sftp.CreateDirectory("test1_3");
  144. var files = sftp.ListDirectory(".");
  145. Assert.IsTrue(files.First().FullName.StartsWith(string.Format("{0}", sftp.WorkingDirectory)));
  146. sftp.ChangeDirectory("test1_1");
  147. Assert.AreEqual(sftp.WorkingDirectory, "/home/tester/test1/test1_1");
  148. sftp.ChangeDirectory("../test1_2");
  149. Assert.AreEqual(sftp.WorkingDirectory, "/home/tester/test1/test1_2");
  150. sftp.ChangeDirectory("..");
  151. Assert.AreEqual(sftp.WorkingDirectory, "/home/tester/test1");
  152. sftp.ChangeDirectory("..");
  153. Assert.AreEqual(sftp.WorkingDirectory, "/home/tester");
  154. files = sftp.ListDirectory("test1/test1_1");
  155. Assert.IsTrue(files.First().FullName.StartsWith(string.Format("{0}/test1/test1_1", sftp.WorkingDirectory)));
  156. sftp.ChangeDirectory("test1/test1_1");
  157. Assert.AreEqual(sftp.WorkingDirectory, "/home/tester/test1/test1_1");
  158. sftp.ChangeDirectory("/home/tester/test1/test1_1");
  159. Assert.AreEqual(sftp.WorkingDirectory, "/home/tester/test1/test1_1");
  160. sftp.ChangeDirectory("/home/tester/test1/test1_1/../test1_2");
  161. Assert.AreEqual(sftp.WorkingDirectory, "/home/tester/test1/test1_2");
  162. sftp.ChangeDirectory("../../");
  163. sftp.DeleteDirectory("test1/test1_1");
  164. sftp.DeleteDirectory("test1/test1_2");
  165. sftp.DeleteDirectory("test1/test1_3");
  166. sftp.DeleteDirectory("test1");
  167. sftp.Disconnect();
  168. }
  169. }
  170. [TestMethod]
  171. [TestCategory("Sftp")]
  172. [Description("Test passing null to ChangeDirectory.")]
  173. [ExpectedException(typeof(ArgumentNullException))]
  174. public void Test_Sftp_ChangeDirectory_Null()
  175. {
  176. using (var sftp = new SftpClient(Resources.HOST, Resources.USERNAME, Resources.PASSWORD))
  177. {
  178. sftp.Connect();
  179. sftp.ChangeDirectory(null);
  180. sftp.Disconnect();
  181. }
  182. }
  183. [TestMethod]
  184. [TestCategory("Sftp")]
  185. [Description("Test calling EndListDirectory method more then once.")]
  186. [ExpectedException(typeof(ArgumentException))]
  187. public void Test_Sftp_Call_EndListDirectory_Twice()
  188. {
  189. using (var sftp = new SftpClient(Resources.HOST, Resources.USERNAME, Resources.PASSWORD))
  190. {
  191. sftp.Connect();
  192. var ar = sftp.BeginListDirectory("/", null, null);
  193. var result = sftp.EndListDirectory(ar);
  194. var result1 = sftp.EndListDirectory(ar);
  195. }
  196. }
  197. }
  198. }