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+ 
9+ namespace  Renci . SshNet . Tests . Classes 
10+ { 
11+     /// <summary> 
12+     /// Implementation of the SSH File Transfer Protocol (SFTP) over SSH. 
13+     /// </summary> 
14+     public  partial  class  SftpClientTest  :  TestBase 
15+     { 
16+         [ TestMethod ] 
17+         [ TestCategory ( "Sftp" ) ] 
18+         [ ExpectedException ( typeof ( SshConnectionException ) ) ] 
19+         public  void  Test_Sftp_EnumerateDirectory_Without_Connecting ( ) 
20+         { 
21+             using  ( var  sftp  =  new  SftpClient ( Resources . HOST ,  Resources . USERNAME ,  Resources . PASSWORD ) ) 
22+             { 
23+                 var  files  =  sftp . EnumerateDirectory ( "." ) ; 
24+                 foreach  ( var  file  in  files ) 
25+                 { 
26+                     Debug . WriteLine ( file . FullName ) ; 
27+                 } 
28+             } 
29+         } 
30+ 
31+         [ TestMethod ] 
32+         [ TestCategory ( "Sftp" ) ] 
33+         [ TestCategory ( "integration" ) ] 
34+         [ ExpectedException ( typeof ( SftpPermissionDeniedException ) ) ] 
35+         public  void  Test_Sftp_EnumerateDirectory_Permission_Denied ( ) 
36+         { 
37+             using  ( var  sftp  =  new  SftpClient ( Resources . HOST ,  Resources . USERNAME ,  Resources . PASSWORD ) ) 
38+             { 
39+                 sftp . Connect ( ) ; 
40+ 
41+                 var  files  =  sftp . EnumerateDirectory ( "/root" ) ; 
42+                 foreach  ( var  file  in  files ) 
43+                 { 
44+                     Debug . WriteLine ( file . FullName ) ; 
45+                 } 
46+ 
47+                 sftp . Disconnect ( ) ; 
48+             } 
49+         } 
50+ 
51+         [ TestMethod ] 
52+         [ TestCategory ( "Sftp" ) ] 
53+         [ TestCategory ( "integration" ) ] 
54+         [ ExpectedException ( typeof ( SftpPathNotFoundException ) ) ] 
55+         public  void  Test_Sftp_EnumerateDirectory_Not_Exists ( ) 
56+         { 
57+             using  ( var  sftp  =  new  SftpClient ( Resources . HOST ,  Resources . USERNAME ,  Resources . PASSWORD ) ) 
58+             { 
59+                 sftp . Connect ( ) ; 
60+ 
61+                 var  files  =  sftp . EnumerateDirectory ( "/asdfgh" ) ; 
62+                 foreach  ( var  file  in  files ) 
63+                 { 
64+                     Debug . WriteLine ( file . FullName ) ; 
65+                 } 
66+ 
67+                 sftp . Disconnect ( ) ; 
68+             } 
69+         } 
70+ 
71+         [ TestMethod ] 
72+         [ TestCategory ( "Sftp" ) ] 
73+         [ TestCategory ( "integration" ) ] 
74+         public  void  Test_Sftp_EnumerateDirectory_Current ( ) 
75+         { 
76+             using  ( var  sftp  =  new  SftpClient ( Resources . HOST ,  Resources . USERNAME ,  Resources . PASSWORD ) ) 
77+             { 
78+                 sftp . Connect ( ) ; 
79+ 
80+                 var  files  =  sftp . EnumerateDirectory ( "." ) ; 
81+ 
82+                 Assert . IsTrue ( files . Count ( )  >  0 ) ; 
83+ 
84+                 foreach  ( var  file  in  files ) 
85+                 { 
86+                     Debug . WriteLine ( file . FullName ) ; 
87+                 } 
88+ 
89+                 sftp . Disconnect ( ) ; 
90+             } 
91+         } 
92+ 
93+         [ TestMethod ] 
94+         [ TestCategory ( "Sftp" ) ] 
95+         [ TestCategory ( "integration" ) ] 
96+         public  void  Test_Sftp_EnumerateDirectory_Empty ( ) 
97+         { 
98+             using  ( var  sftp  =  new  SftpClient ( Resources . HOST ,  Resources . USERNAME ,  Resources . PASSWORD ) ) 
99+             { 
100+                 sftp . Connect ( ) ; 
101+ 
102+                 var  files  =  sftp . EnumerateDirectory ( string . Empty ) ; 
103+ 
104+                 Assert . IsTrue ( files . Count ( )  >  0 ) ; 
105+ 
106+                 foreach  ( var  file  in  files ) 
107+                 { 
108+                     Debug . WriteLine ( file . FullName ) ; 
109+                 } 
110+ 
111+                 sftp . Disconnect ( ) ; 
112+             } 
113+         } 
114+ 
115+         [ TestMethod ] 
116+         [ TestCategory ( "Sftp" ) ] 
117+         [ TestCategory ( "integration" ) ] 
118+         [ Description ( "Test passing null to EnumerateDirectory." ) ] 
119+         [ ExpectedException ( typeof ( ArgumentNullException ) ) ] 
120+         public  void  Test_Sftp_EnumerateDirectory_Null ( ) 
121+         { 
122+             using  ( var  sftp  =  new  SftpClient ( Resources . HOST ,  Resources . USERNAME ,  Resources . PASSWORD ) ) 
123+             { 
124+                 sftp . Connect ( ) ; 
125+ 
126+                 var  files  =  sftp . EnumerateDirectory ( null ) ; 
127+ 
128+                 Assert . IsTrue ( files . Count ( )  >  0 ) ; 
129+ 
130+                 foreach  ( var  file  in  files ) 
131+                 { 
132+                     Debug . WriteLine ( file . FullName ) ; 
133+                 } 
134+ 
135+                 sftp . Disconnect ( ) ; 
136+             } 
137+         } 
138+ 
139+         [ TestMethod ] 
140+         [ TestCategory ( "Sftp" ) ] 
141+         [ TestCategory ( "integration" ) ] 
142+         public  void  Test_Sftp_EnumerateDirectory_HugeDirectory ( ) 
143+         { 
144+             var  stopwatch  =  Stopwatch . StartNew ( ) ; 
145+             try 
146+             { 
147+                 using  ( var  sftp  =  new  SftpClient ( Resources . HOST ,  Resources . USERNAME ,  Resources . PASSWORD ) ) 
148+                 { 
149+                     sftp . Connect ( ) ; 
150+                     sftp . ChangeDirectory ( "/home/"  +  Resources . USERNAME ) ; 
151+ 
152+                     var  count  =  10000 ; 
153+                     //  Create 10000 directory items 
154+                     for  ( int  i  =  0 ;  i  <  count ;  i ++ ) 
155+                     { 
156+                         sftp . CreateDirectory ( string . Format ( "test_{0}" ,  i ) ) ; 
157+                     } 
158+                     Debug . WriteLine ( "Created {0} directories within {1} seconds" ,  count ,  stopwatch . Elapsed . TotalSeconds ) ; 
159+ 
160+                     stopwatch . Restart ( ) ; 
161+                     var  files  =  sftp . EnumerateDirectory ( "." ) ; 
162+                     Debug . WriteLine ( "Listed {0} directories within {1} seconds" ,  count ,  stopwatch . Elapsed . TotalSeconds ) ; 
163+ 
164+                     //  Ensure that directory has at least 10000 items 
165+                     stopwatch . Restart ( ) ; 
166+                     var  actualCount  =  files . Count ( ) ; 
167+                     Assert . IsTrue ( actualCount  >=  10000 ) ; 
168+                     Debug . WriteLine ( "Used {0} items within {1} seconds" ,  actualCount ,  stopwatch . Elapsed . TotalSeconds ) ; 
169+ 
170+                     sftp . Disconnect ( ) ; 
171+                 } 
172+             } 
173+             finally 
174+             { 
175+                 stopwatch . Restart ( ) ; 
176+                 RemoveAllFiles ( ) ; 
177+                 stopwatch . Stop ( ) ; 
178+                 Debug . WriteLine ( "Removed all files within {0} seconds" ,  stopwatch . Elapsed . TotalSeconds ) ; 
179+             } 
180+         } 
181+ 
182+         [ TestMethod ] 
183+         [ TestCategory ( "Sftp" ) ] 
184+         [ TestCategory ( "integration" ) ] 
185+         [ ExpectedException ( typeof ( SshConnectionException ) ) ] 
186+         public  void  Test_Sftp_EnumerateDirectory_After_Disconnected ( ) 
187+         { 
188+             try  { 
189+                 using  ( var  sftp  =  new  SftpClient ( Resources . HOST ,  Resources . USERNAME ,  Resources . PASSWORD ) ) 
190+                 { 
191+                     sftp . Connect ( ) ; 
192+ 
193+                     sftp . CreateDirectory ( "test_at_dsiposed" ) ; 
194+ 
195+                     var  files  =  sftp . EnumerateDirectory ( "." ) . Take ( 1 ) ; 
196+ 
197+                     sftp . Disconnect ( ) ; 
198+ 
199+                     // Must fail on disconnected session. 
200+                     var  count  =  files . Count ( ) ; 
201+                 } 
202+             } 
203+             finally 
204+             { 
205+                 RemoveAllFiles ( ) ; 
206+             } 
207+         } 
208+     } 
209+ } 
0 commit comments