net-ssh 1.1.4 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (297) hide show
  1. data/CHANGELOG.rdoc +37 -0
  2. data/Manifest +101 -0
  3. data/README.rdoc +110 -0
  4. data/Rakefile +26 -0
  5. data/{THANKS → THANKS.rdoc} +2 -5
  6. data/lib/net/ssh.rb +189 -57
  7. data/lib/net/ssh/authentication/agent.rb +175 -0
  8. data/lib/net/ssh/authentication/constants.rb +18 -0
  9. data/lib/net/ssh/authentication/key_manager.rb +166 -0
  10. data/lib/net/ssh/authentication/methods/abstract.rb +60 -0
  11. data/lib/net/ssh/authentication/methods/hostbased.rb +71 -0
  12. data/lib/net/ssh/authentication/methods/keyboard_interactive.rb +66 -0
  13. data/lib/net/ssh/authentication/methods/password.rb +39 -0
  14. data/lib/net/ssh/authentication/methods/publickey.rb +92 -0
  15. data/lib/net/ssh/authentication/pageant.rb +176 -0
  16. data/lib/net/ssh/authentication/session.rb +116 -0
  17. data/lib/net/ssh/buffer.rb +339 -0
  18. data/lib/net/ssh/buffered_io.rb +149 -0
  19. data/lib/net/ssh/config.rb +173 -0
  20. data/lib/net/ssh/connection/channel.rb +575 -454
  21. data/lib/net/ssh/connection/constants.rb +31 -45
  22. data/lib/net/ssh/connection/session.rb +569 -0
  23. data/lib/net/ssh/connection/term.rb +176 -88
  24. data/lib/net/ssh/errors.rb +83 -61
  25. data/lib/net/ssh/key_factory.rb +85 -0
  26. data/lib/net/ssh/known_hosts.rb +129 -0
  27. data/lib/net/ssh/loggable.rb +61 -0
  28. data/lib/net/ssh/packet.rb +102 -0
  29. data/lib/net/ssh/prompt.rb +93 -0
  30. data/lib/net/ssh/proxy/errors.rb +8 -28
  31. data/lib/net/ssh/proxy/http.rb +75 -107
  32. data/lib/net/ssh/proxy/socks4.rb +35 -48
  33. data/lib/net/ssh/proxy/socks5.rb +76 -108
  34. data/lib/net/ssh/service/forward.rb +267 -0
  35. data/lib/net/ssh/test.rb +89 -0
  36. data/lib/net/ssh/test/channel.rb +129 -0
  37. data/lib/net/ssh/test/extensions.rb +152 -0
  38. data/lib/net/ssh/test/kex.rb +44 -0
  39. data/lib/net/ssh/test/local_packet.rb +51 -0
  40. data/lib/net/ssh/test/packet.rb +81 -0
  41. data/lib/net/ssh/test/remote_packet.rb +38 -0
  42. data/lib/net/ssh/test/script.rb +157 -0
  43. data/lib/net/ssh/test/socket.rb +59 -0
  44. data/lib/net/ssh/transport/algorithms.rb +384 -0
  45. data/lib/net/ssh/transport/cipher_factory.rb +72 -0
  46. data/lib/net/ssh/transport/constants.rb +22 -58
  47. data/lib/net/ssh/transport/hmac.rb +31 -0
  48. data/lib/net/ssh/transport/hmac/abstract.rb +48 -0
  49. data/lib/net/ssh/transport/hmac/md5.rb +12 -0
  50. data/lib/net/ssh/transport/hmac/md5_96.rb +11 -0
  51. data/lib/net/ssh/transport/hmac/none.rb +15 -0
  52. data/lib/net/ssh/transport/hmac/sha1.rb +13 -0
  53. data/lib/net/ssh/transport/hmac/sha1_96.rb +11 -0
  54. data/lib/net/ssh/transport/identity_cipher.rb +40 -0
  55. data/lib/net/ssh/transport/kex.rb +13 -0
  56. data/lib/net/ssh/transport/kex/diffie_hellman_group1_sha1.rb +208 -0
  57. data/lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha1.rb +77 -0
  58. data/lib/net/ssh/{util → transport}/openssl.rb +22 -40
  59. data/lib/net/ssh/transport/packet_stream.rb +230 -0
  60. data/lib/net/ssh/transport/server_version.rb +61 -0
  61. data/lib/net/ssh/transport/session.rb +225 -303
  62. data/lib/net/ssh/transport/state.rb +170 -0
  63. data/lib/net/ssh/verifiers/lenient.rb +30 -0
  64. data/lib/net/ssh/verifiers/null.rb +12 -0
  65. data/lib/net/ssh/verifiers/strict.rb +53 -0
  66. data/lib/net/ssh/version.rb +57 -26
  67. data/net-ssh.gemspec +54 -0
  68. data/setup.rb +1585 -0
  69. data/test/authentication/methods/common.rb +28 -0
  70. data/test/authentication/methods/test_abstract.rb +51 -0
  71. data/test/authentication/methods/test_hostbased.rb +108 -0
  72. data/test/authentication/methods/test_keyboard_interactive.rb +98 -0
  73. data/test/authentication/methods/test_password.rb +50 -0
  74. data/test/authentication/methods/test_publickey.rb +123 -0
  75. data/test/authentication/test_agent.rb +205 -0
  76. data/test/authentication/test_key_manager.rb +100 -0
  77. data/test/authentication/test_session.rb +93 -0
  78. data/test/common.rb +106 -0
  79. data/test/configs/exact_match +8 -0
  80. data/test/configs/wild_cards +14 -0
  81. data/test/connection/test_channel.rb +452 -0
  82. data/test/connection/test_session.rb +483 -0
  83. data/test/test_all.rb +6 -0
  84. data/test/test_buffer.rb +336 -0
  85. data/test/test_buffered_io.rb +63 -0
  86. data/test/test_config.rb +78 -0
  87. data/test/test_key_factory.rb +67 -0
  88. data/test/transport/hmac/test_md5.rb +34 -0
  89. data/test/transport/hmac/test_md5_96.rb +25 -0
  90. data/test/transport/hmac/test_none.rb +34 -0
  91. data/test/transport/hmac/test_sha1.rb +34 -0
  92. data/test/transport/hmac/test_sha1_96.rb +25 -0
  93. data/test/transport/kex/test_diffie_hellman_group1_sha1.rb +146 -0
  94. data/test/transport/kex/test_diffie_hellman_group_exchange_sha1.rb +92 -0
  95. data/test/transport/test_algorithms.rb +302 -0
  96. data/test/transport/test_cipher_factory.rb +163 -0
  97. data/test/transport/test_hmac.rb +34 -0
  98. data/test/transport/test_identity_cipher.rb +40 -0
  99. data/test/transport/test_packet_stream.rb +433 -0
  100. data/test/transport/test_server_version.rb +55 -0
  101. data/test/transport/test_session.rb +312 -0
  102. data/test/transport/test_state.rb +173 -0
  103. metadata +102 -253
  104. data/ChangeLog +0 -560
  105. data/LICENSE +0 -7
  106. data/NEWS +0 -152
  107. data/README +0 -14
  108. data/bin/rb-keygen +0 -210
  109. data/doc/LICENSE-BSD +0 -27
  110. data/doc/LICENSE-GPL +0 -280
  111. data/doc/LICENSE-RUBY +0 -56
  112. data/doc/manual-html/chapter-1.html +0 -388
  113. data/doc/manual-html/chapter-2.html +0 -552
  114. data/doc/manual-html/chapter-3.html +0 -470
  115. data/doc/manual-html/chapter-4.html +0 -413
  116. data/doc/manual-html/chapter-5.html +0 -525
  117. data/doc/manual-html/chapter-6.html +0 -456
  118. data/doc/manual-html/chapter-7.html +0 -343
  119. data/doc/manual-html/index.html +0 -235
  120. data/doc/manual-html/stylesheets/manual.css +0 -270
  121. data/doc/manual-html/stylesheets/ruby.css +0 -17
  122. data/doc/manual/chapter.erb +0 -38
  123. data/doc/manual/example.erb +0 -18
  124. data/doc/manual/index.erb +0 -29
  125. data/doc/manual/manual.rb +0 -311
  126. data/doc/manual/manual.yml +0 -73
  127. data/doc/manual/page.erb +0 -87
  128. data/doc/manual/parts/0000.txt +0 -5
  129. data/doc/manual/parts/0001.txt +0 -3
  130. data/doc/manual/parts/0002.txt +0 -40
  131. data/doc/manual/parts/0003.txt +0 -6
  132. data/doc/manual/parts/0004.txt +0 -7
  133. data/doc/manual/parts/0005.txt +0 -1
  134. data/doc/manual/parts/0006.txt +0 -49
  135. data/doc/manual/parts/0007.txt +0 -67
  136. data/doc/manual/parts/0008.txt +0 -43
  137. data/doc/manual/parts/0009.txt +0 -14
  138. data/doc/manual/parts/0010.txt +0 -7
  139. data/doc/manual/parts/0011.txt +0 -14
  140. data/doc/manual/parts/0012.txt +0 -3
  141. data/doc/manual/parts/0013.txt +0 -20
  142. data/doc/manual/parts/0014.txt +0 -32
  143. data/doc/manual/parts/0015.txt +0 -14
  144. data/doc/manual/parts/0016.txt +0 -28
  145. data/doc/manual/parts/0017.txt +0 -50
  146. data/doc/manual/parts/0018.txt +0 -35
  147. data/doc/manual/parts/0019.txt +0 -7
  148. data/doc/manual/parts/0020.txt +0 -72
  149. data/doc/manual/parts/0021.txt +0 -50
  150. data/doc/manual/parts/0022.txt +0 -42
  151. data/doc/manual/parts/0023.txt +0 -51
  152. data/doc/manual/parts/0024.txt +0 -18
  153. data/doc/manual/parts/0025.txt +0 -18
  154. data/doc/manual/parts/0026.txt +0 -15
  155. data/doc/manual/parts/0027.txt +0 -37
  156. data/doc/manual/parts/0028.txt +0 -16
  157. data/doc/manual/parts/0029.txt +0 -1
  158. data/doc/manual/parts/0030.txt +0 -52
  159. data/doc/manual/parts/0031.txt +0 -25
  160. data/doc/manual/stylesheets/manual.css +0 -270
  161. data/doc/manual/stylesheets/ruby.css +0 -17
  162. data/doc/manual/tutorial.erb +0 -30
  163. data/examples/auth-forward.rb +0 -41
  164. data/examples/channel-demo.rb +0 -81
  165. data/examples/port-forward.rb +0 -51
  166. data/examples/process-demo.rb +0 -91
  167. data/examples/remote-net-port-forward.rb +0 -45
  168. data/examples/remote-port-forward.rb +0 -80
  169. data/examples/shell-demo.rb +0 -46
  170. data/examples/ssh-client.rb +0 -67
  171. data/examples/sync-shell-demo.rb +0 -69
  172. data/examples/tail-demo.rb +0 -49
  173. data/lib/net/ssh/connection/driver.rb +0 -446
  174. data/lib/net/ssh/connection/services.rb +0 -72
  175. data/lib/net/ssh/host-key-verifier.rb +0 -52
  176. data/lib/net/ssh/known-hosts.rb +0 -96
  177. data/lib/net/ssh/lenient-host-key-verifier.rb +0 -25
  178. data/lib/net/ssh/null-host-key-verifier.rb +0 -14
  179. data/lib/net/ssh/service/agentforward/driver.rb +0 -78
  180. data/lib/net/ssh/service/agentforward/services.rb +0 -41
  181. data/lib/net/ssh/service/forward/driver.rb +0 -319
  182. data/lib/net/ssh/service/forward/local-network-handler.rb +0 -71
  183. data/lib/net/ssh/service/forward/remote-network-handler.rb +0 -83
  184. data/lib/net/ssh/service/forward/services.rb +0 -76
  185. data/lib/net/ssh/service/process/driver.rb +0 -153
  186. data/lib/net/ssh/service/process/open.rb +0 -193
  187. data/lib/net/ssh/service/process/popen3.rb +0 -178
  188. data/lib/net/ssh/service/process/services.rb +0 -66
  189. data/lib/net/ssh/service/services.rb +0 -60
  190. data/lib/net/ssh/service/shell/driver.rb +0 -86
  191. data/lib/net/ssh/service/shell/services.rb +0 -54
  192. data/lib/net/ssh/service/shell/shell.rb +0 -222
  193. data/lib/net/ssh/service/shell/sync.rb +0 -114
  194. data/lib/net/ssh/session.rb +0 -305
  195. data/lib/net/ssh/transport/algorithm-negotiator.rb +0 -275
  196. data/lib/net/ssh/transport/compress/compressor.rb +0 -53
  197. data/lib/net/ssh/transport/compress/decompressor.rb +0 -53
  198. data/lib/net/ssh/transport/compress/none-compressor.rb +0 -39
  199. data/lib/net/ssh/transport/compress/none-decompressor.rb +0 -39
  200. data/lib/net/ssh/transport/compress/services.rb +0 -68
  201. data/lib/net/ssh/transport/compress/zlib-compressor.rb +0 -60
  202. data/lib/net/ssh/transport/compress/zlib-decompressor.rb +0 -52
  203. data/lib/net/ssh/transport/errors.rb +0 -47
  204. data/lib/net/ssh/transport/identity-cipher.rb +0 -61
  205. data/lib/net/ssh/transport/kex/dh-gex.rb +0 -106
  206. data/lib/net/ssh/transport/kex/dh.rb +0 -249
  207. data/lib/net/ssh/transport/kex/services.rb +0 -62
  208. data/lib/net/ssh/transport/ossl/buffer-factory.rb +0 -52
  209. data/lib/net/ssh/transport/ossl/buffer.rb +0 -87
  210. data/lib/net/ssh/transport/ossl/cipher-factory.rb +0 -98
  211. data/lib/net/ssh/transport/ossl/digest-factory.rb +0 -51
  212. data/lib/net/ssh/transport/ossl/hmac-factory.rb +0 -71
  213. data/lib/net/ssh/transport/ossl/hmac/hmac.rb +0 -62
  214. data/lib/net/ssh/transport/ossl/hmac/md5-96.rb +0 -44
  215. data/lib/net/ssh/transport/ossl/hmac/md5.rb +0 -46
  216. data/lib/net/ssh/transport/ossl/hmac/none.rb +0 -46
  217. data/lib/net/ssh/transport/ossl/hmac/services.rb +0 -68
  218. data/lib/net/ssh/transport/ossl/hmac/sha1-96.rb +0 -44
  219. data/lib/net/ssh/transport/ossl/hmac/sha1.rb +0 -45
  220. data/lib/net/ssh/transport/ossl/key-factory.rb +0 -116
  221. data/lib/net/ssh/transport/ossl/services.rb +0 -149
  222. data/lib/net/ssh/transport/packet-stream.rb +0 -236
  223. data/lib/net/ssh/transport/services.rb +0 -146
  224. data/lib/net/ssh/transport/version-negotiator.rb +0 -73
  225. data/lib/net/ssh/userauth/agent.rb +0 -222
  226. data/lib/net/ssh/userauth/constants.rb +0 -35
  227. data/lib/net/ssh/userauth/driver.rb +0 -183
  228. data/lib/net/ssh/userauth/methods/hostbased.rb +0 -119
  229. data/lib/net/ssh/userauth/methods/keyboard-interactive.rb +0 -104
  230. data/lib/net/ssh/userauth/methods/password.rb +0 -70
  231. data/lib/net/ssh/userauth/methods/publickey.rb +0 -137
  232. data/lib/net/ssh/userauth/methods/services.rb +0 -90
  233. data/lib/net/ssh/userauth/pageant.rb +0 -197
  234. data/lib/net/ssh/userauth/services.rb +0 -141
  235. data/lib/net/ssh/userauth/userkeys.rb +0 -258
  236. data/lib/net/ssh/util/buffer.rb +0 -274
  237. data/lib/net/ssh/util/prompter.rb +0 -73
  238. data/test/ALL-TESTS.rb +0 -18
  239. data/test/connection/tc_channel.rb +0 -136
  240. data/test/connection/tc_driver.rb +0 -287
  241. data/test/connection/tc_integration.rb +0 -87
  242. data/test/proxy/tc_http.rb +0 -209
  243. data/test/proxy/tc_socks4.rb +0 -148
  244. data/test/proxy/tc_socks5.rb +0 -214
  245. data/test/service/agentforward/tc_driver.rb +0 -138
  246. data/test/service/forward/tc_driver.rb +0 -289
  247. data/test/service/forward/tc_local_network_handler.rb +0 -123
  248. data/test/service/forward/tc_remote_network_handler.rb +0 -111
  249. data/test/service/process/tc_driver.rb +0 -79
  250. data/test/service/process/tc_integration.rb +0 -119
  251. data/test/service/process/tc_open.rb +0 -179
  252. data/test/service/process/tc_popen3.rb +0 -164
  253. data/test/tc_integration.rb +0 -80
  254. data/test/transport/compress/tc_none_compress.rb +0 -41
  255. data/test/transport/compress/tc_none_decompress.rb +0 -45
  256. data/test/transport/compress/tc_zlib_compress.rb +0 -61
  257. data/test/transport/compress/tc_zlib_decompress.rb +0 -48
  258. data/test/transport/kex/tc_dh.rb +0 -312
  259. data/test/transport/kex/tc_dh_gex.rb +0 -71
  260. data/test/transport/ossl/fixtures/dsa-encrypted +0 -15
  261. data/test/transport/ossl/fixtures/dsa-encrypted-bad +0 -15
  262. data/test/transport/ossl/fixtures/dsa-unencrypted +0 -12
  263. data/test/transport/ossl/fixtures/dsa-unencrypted-bad +0 -12
  264. data/test/transport/ossl/fixtures/dsa-unencrypted.pub +0 -1
  265. data/test/transport/ossl/fixtures/not-a-private-key +0 -4
  266. data/test/transport/ossl/fixtures/not-supported +0 -2
  267. data/test/transport/ossl/fixtures/rsa-encrypted +0 -18
  268. data/test/transport/ossl/fixtures/rsa-encrypted-bad +0 -18
  269. data/test/transport/ossl/fixtures/rsa-unencrypted +0 -15
  270. data/test/transport/ossl/fixtures/rsa-unencrypted-bad +0 -15
  271. data/test/transport/ossl/fixtures/rsa-unencrypted.pub +0 -1
  272. data/test/transport/ossl/hmac/tc_hmac.rb +0 -58
  273. data/test/transport/ossl/hmac/tc_md5.rb +0 -50
  274. data/test/transport/ossl/hmac/tc_md5_96.rb +0 -50
  275. data/test/transport/ossl/hmac/tc_none.rb +0 -50
  276. data/test/transport/ossl/hmac/tc_sha1.rb +0 -50
  277. data/test/transport/ossl/hmac/tc_sha1_96.rb +0 -50
  278. data/test/transport/ossl/tc_buffer.rb +0 -97
  279. data/test/transport/ossl/tc_buffer_factory.rb +0 -67
  280. data/test/transport/ossl/tc_cipher_factory.rb +0 -84
  281. data/test/transport/ossl/tc_digest_factory.rb +0 -39
  282. data/test/transport/ossl/tc_hmac_factory.rb +0 -72
  283. data/test/transport/ossl/tc_key_factory.rb +0 -199
  284. data/test/transport/tc_algorithm_negotiator.rb +0 -170
  285. data/test/transport/tc_identity_cipher.rb +0 -52
  286. data/test/transport/tc_integration.rb +0 -115
  287. data/test/transport/tc_packet_stream.rb +0 -184
  288. data/test/transport/tc_session.rb +0 -296
  289. data/test/transport/tc_version_negotiator.rb +0 -86
  290. data/test/userauth/methods/tc_hostbased.rb +0 -136
  291. data/test/userauth/methods/tc_password.rb +0 -89
  292. data/test/userauth/methods/tc_publickey.rb +0 -167
  293. data/test/userauth/tc_agent.rb +0 -223
  294. data/test/userauth/tc_driver.rb +0 -190
  295. data/test/userauth/tc_integration.rb +0 -97
  296. data/test/userauth/tc_userkeys.rb +0 -265
  297. data/test/util/tc_buffer.rb +0 -217
@@ -1,73 +0,0 @@
1
- #--
2
- # =============================================================================
3
- # Copyright (c) 2004,2005 Jamis Buck (jamis@37signals.com)
4
- # All rights reserved.
5
- #
6
- # This source file is distributed as part of the Net::SSH Secure Shell Client
7
- # library for Ruby. This file (and the library as a whole) may be used only as
8
- # allowed by either the BSD license, or the Ruby license (or, by association
9
- # with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SSH
10
- # distribution for the texts of these licenses.
11
- # -----------------------------------------------------------------------------
12
- # net-ssh website : http://net-ssh.rubyforge.org
13
- # project website: http://rubyforge.org/projects/net-ssh
14
- # =============================================================================
15
- #++
16
-
17
- unless defined?( HAS_TERMIOS )
18
- begin
19
- require 'termios'
20
- HAS_TERMIOS = true
21
- rescue LoadError
22
- HAS_TERMIOS = false
23
- end
24
- end
25
-
26
- module Net
27
- module SSH
28
- module Util
29
-
30
- # A simple class for prompting a user for input.
31
- class Prompter
32
-
33
- # Displays the prompt and then waits for the user to enter a response.
34
- # If the 'termios' library is available, the user's input will not be
35
- # echoed to the terminal. The user's response will be returned, with
36
- # any trailing newline chomped.
37
- def password( prompt=nil )
38
- if $stdin.tty?
39
- echo false
40
- print prompt if prompt
41
- end
42
-
43
- $stdin.gets.chomp
44
- ensure
45
- if $stdin.tty?
46
- echo true
47
- puts
48
- end
49
- end
50
-
51
- if HAS_TERMIOS
52
- def echo( enable )
53
- term = Termios::getattr( $stdin )
54
-
55
- if enable
56
- term.c_lflag |= ( Termios::ECHO | Termios::ICANON )
57
- else
58
- term.c_lflag &= ~Termios::ECHO
59
- end
60
-
61
- Termios::setattr( $stdin, Termios::TCSANOW, term )
62
- end
63
- else
64
- def echo( enable )
65
- end
66
- end
67
- private :echo
68
-
69
- end
70
-
71
- end
72
- end
73
- end
@@ -1,18 +0,0 @@
1
- #--
2
- # =============================================================================
3
- # Copyright (c) 2004,2005 Jamis Buck (jamis@37signals.com)
4
- # All rights reserved.
5
- #
6
- # This source file is distributed as part of the Net::SSH Secure Shell Client
7
- # library for Ruby. This file (and the library as a whole) may be used only as
8
- # allowed by either the BSD license, or the Ruby license (or, by association
9
- # with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SSH
10
- # distribution for the texts of these licenses.
11
- # -----------------------------------------------------------------------------
12
- # net-ssh website : http://net-ssh.rubyforge.org
13
- # project website: http://rubyforge.org/projects/net-ssh
14
- # =============================================================================
15
- #++
16
-
17
- $run_integration_tests = ARGV.include?( "-i" )
18
- Dir["#{File.dirname(__FILE__)}/**/tc_*.rb"].each { |f| load f }
@@ -1,136 +0,0 @@
1
- #--
2
- # =============================================================================
3
- # Copyright (c) 2004,2005 Jamis Buck (jamis@37signals.com)
4
- # All rights reserved.
5
- #
6
- # This source file is distributed as part of the Net::SSH Secure Shell Client
7
- # library for Ruby. This file (and the library as a whole) may be used only as
8
- # allowed by either the BSD license, or the Ruby license (or, by association
9
- # with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SSH
10
- # distribution for the texts of these licenses.
11
- # -----------------------------------------------------------------------------
12
- # net-ssh website : http://net-ssh.rubyforge.org
13
- # project website: http://rubyforge.org/projects/net-ssh
14
- # =============================================================================
15
- #++
16
-
17
- $:.unshift "#{File.dirname(__FILE__)}/../../lib"
18
-
19
- require 'test/unit'
20
- require 'net/ssh/connection/channel'
21
- require 'net/ssh/util/buffer'
22
-
23
- class TC_Channel < Test::Unit::TestCase
24
-
25
- class Buffers
26
- def writer
27
- Net::SSH::Util::WriterBuffer.new
28
- end
29
- end
30
-
31
- class Log
32
- def debug?
33
- false
34
- end
35
- end
36
-
37
- class Connection
38
- attr_reader :buffers
39
- attr_reader :events
40
-
41
- def initialize( buffers )
42
- @events = []
43
- @buffers = buffers
44
- end
45
-
46
- def send_message( msg )
47
- @events << msg.to_s
48
- end
49
-
50
- def allocate_channel_id
51
- events << :allocate_channel_id
52
- 1234
53
- end
54
-
55
- def remove_channel( channel )
56
- events << :remove_channel
57
- end
58
- end
59
-
60
- def setup
61
- @connection = Connection.new( Buffers.new )
62
- end
63
-
64
- def test_open_no_data
65
- channel = Net::SSH::Connection::Channel.open( @connection, Log.new,
66
- Buffers.new, "test" )
67
- assert_equal [ :allocate_channel_id,
68
- "\132\0\0\0\4test\0\0\4\xd2\x00\x02\x00\x00\x00\x01\x00\x00" ],
69
- @connection.events
70
- assert_equal "test", channel.type
71
- end
72
-
73
- def test_open_with_data
74
- channel = Net::SSH::Connection::Channel.open( @connection, Log.new,
75
- Buffers.new, "test", "some data" )
76
- assert_equal [ :allocate_channel_id,
77
- "\132\0\0\0\4test\0\0\4\xd2\x00\x02\x00\x00\x00\x01\x00\x00some data" ],
78
- @connection.events
79
- assert_equal "test", channel.type
80
- end
81
-
82
- def test_do_confirm_open
83
- confirmed = nil
84
- channel = Net::SSH::Connection::Channel.open( @connection, Log.new,
85
- Buffers.new, "test" )
86
- channel.on_confirm_open { |a| confirmed = a }
87
- channel.do_confirm_open 1, 2, 3
88
- assert_same channel, confirmed
89
- assert_equal 1, channel.remote_id
90
- assert_equal 2, channel.window_size
91
- assert_equal 3, channel.maximum_packet_size
92
- end
93
-
94
- def create_channel
95
- Net::SSH::Connection::Channel.create( @connection, Log.new, Buffers.new,
96
- "test", 1, 2, 3 )
97
- end
98
-
99
- def test_create
100
- channel = create_channel
101
- assert_equal "test", channel.type
102
- assert_equal [ :allocate_channel_id ], @connection.events
103
- assert_equal 1234, channel.local_id
104
- assert_equal 1, channel.remote_id
105
- assert_equal 2, channel.window_size
106
- assert_equal 3, channel.maximum_packet_size
107
- end
108
-
109
- def test_new
110
- assert_raise( NoMethodError ) do
111
- Net::SSH::Connection::Channel.new( @connection, "test" )
112
- end
113
- end
114
-
115
- def self.test_callback( name, do_args=[], expect=do_args )
116
- define_method( "test_#{name}".to_sym ) do
117
- channel = create_channel
118
-
119
- result = nil
120
- channel.send( "on_#{name}".to_sym ) { |*a| result = a }
121
- channel.send( "do_#{name}".to_sym, *do_args )
122
-
123
- assert_equal [ channel, *expect ], result
124
- end
125
- end
126
-
127
- test_callback :confirm_open, [ 1, 2, 3 ], []
128
- test_callback :confirm_failed, [ 100, "b", "c" ]
129
- test_callback :window_adjust, [ 14 ]
130
- test_callback :data, [ "blah" ]
131
- test_callback :extended_data, [ 1, "blah" ]
132
- test_callback :eof
133
- test_callback :request, [ true, "blah" ]
134
- test_callback :success
135
- test_callback :failure
136
- end
@@ -1,287 +0,0 @@
1
- #--
2
- # =============================================================================
3
- # Copyright (c) 2004,2005 Jamis Buck (jamis@37signals.com)
4
- # All rights reserved.
5
- #
6
- # This source file is distributed as part of the Net::SSH Secure Shell Client
7
- # library for Ruby. This file (and the library as a whole) may be used only as
8
- # allowed by either the BSD license, or the Ruby license (or, by association
9
- # with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SSH
10
- # distribution for the texts of these licenses.
11
- # -----------------------------------------------------------------------------
12
- # net-ssh website : http://net-ssh.rubyforge.org
13
- # project website: http://rubyforge.org/projects/net-ssh
14
- # =============================================================================
15
- #++
16
-
17
- $:.unshift "#{File.dirname(__FILE__)}/../../lib"
18
-
19
- require 'test/unit'
20
- require 'net/ssh/connection/driver'
21
- require 'net/ssh/errors'
22
- require 'net/ssh/util/buffer'
23
-
24
- class TC_Driver < Test::Unit::TestCase
25
-
26
- class Buffers
27
- def writer
28
- Net::SSH::Util::WriterBuffer.new
29
- end
30
- end
31
-
32
- class Log
33
- attr_reader :messages
34
-
35
- def initialize
36
- @messages = []
37
- end
38
-
39
- def debug?
40
- true
41
- end
42
-
43
- def debug( msg )
44
- @messages << msg
45
- end
46
- end
47
-
48
- class Session
49
- attr_reader :events
50
- attr_reader :script
51
-
52
- def initialize
53
- @events = []
54
- @script = []
55
- end
56
-
57
- def send_message( msg )
58
- @events << msg.to_s
59
- end
60
-
61
- def wait_for_message
62
- @script.shift
63
- end
64
- end
65
-
66
- class Channel
67
- attr_reader :local_id
68
- attr_reader :remote_id
69
- attr_reader :data
70
- attr_reader :window_size
71
- attr_reader :packet_size
72
- attr_reader :type
73
- attr_reader :block
74
- attr_reader :events
75
-
76
- def self.open( type, data )
77
- new( type, data, nil, nil, nil )
78
- end
79
-
80
- def self.create( type, remote_id, window_size, packet_size )
81
- new( type, nil, remote_id, window_size, packet_size )
82
- end
83
-
84
- def initialize( type, data, remote_id, winsize, packsize )
85
- @type = type
86
- @data = data
87
- @remote_id = remote_id
88
- @window_size = winsize
89
- @packet_size = packsize
90
- @local_id = 1
91
- @events = []
92
- end
93
-
94
- def close( value )
95
- @events << [ :close, value ]
96
- end
97
-
98
- def on_confirm_open( &block )
99
- @block = block
100
- end
101
-
102
- def self.event( name )
103
- define_method( "do_#{name}".to_sym ) do |*args|
104
- @events << [ name, *args ]
105
- end
106
- end
107
-
108
- event :confirm_failed
109
- event :confirm_open
110
- event :window_adjust
111
- event :data
112
- event :extended_data
113
- event :eof
114
- event :request
115
- event :success
116
- event :failure
117
- end
118
-
119
- def reader( text )
120
- Net::SSH::Util::ReaderBuffer.new( text )
121
- end
122
-
123
- def setup
124
- @session = Session.new
125
- @log = Log.new
126
- @driver = Net::SSH::Connection::Driver.new( @session, @log,
127
- Buffers.new,
128
- :open => proc { |t,d| Channel.open(t,d) },
129
- :create => proc { |t,r,w,p| Channel.create(t,r,w,p) } )
130
- end
131
-
132
- def test_open_channel
133
- channel = @driver.open_channel( "test", "data" ) { |a| a }
134
- assert_equal "hello", channel.block.call( "hello" )
135
- assert_equal "test", channel.type
136
- assert_equal "data", channel.data
137
- assert_equal [ channel ], @driver.channels
138
- end
139
-
140
- def test_remove_channel
141
- channel = @driver.open_channel( "test", "data" ) { |a| a }
142
- assert_equal [channel], @driver.channels
143
- @driver.remove_channel( channel )
144
- assert_equal [], @driver.channels
145
- end
146
-
147
- def test_allocate_channel_id
148
- assert_equal 1, @driver.allocate_channel_id
149
- 10.times { @driver.allocate_channel_id }
150
- assert_equal 12, @driver.allocate_channel_id
151
- end
152
-
153
- def test_global_request
154
- @driver.global_request "test", "foobar"
155
- assert_equal [ "\120\0\0\0\4test\1foobar" ], @session.events
156
- end
157
-
158
- def test_request_success
159
- @driver.global_request( "test", "foobar" ) do |a,b|
160
- assert a
161
- assert_equal "response", b
162
- end
163
-
164
- @driver.do_request_success "response"
165
- end
166
-
167
- def test_request_failure
168
- @driver.global_request( "test", "foobar" ) do |a,b|
169
- assert !a
170
- assert_equal "response", b
171
- end
172
-
173
- @driver.do_request_failure "response"
174
- end
175
-
176
- def test_channel_open_no_handler
177
- assert_raise( Net::SSH::Exception ) do
178
- @driver.do_channel_open(
179
- reader( "\0\0\0\4test\0\0\0\4\0\0\0\0\0\0\0\1" ) )
180
- end
181
- end
182
-
183
- def test_channel_open_with_handler
184
- @driver.add_channel_open_handler( "test" ) do |conn,chan,resp|
185
- assert_equal @driver, conn
186
- assert_equal "test", chan.type
187
- assert_equal 4, chan.remote_id
188
- assert_equal 0, chan.window_size
189
- assert_equal 1, chan.packet_size
190
- assert_equal "hello world", resp.read
191
- end
192
-
193
- @driver.do_channel_open(
194
- reader( "\0\0\0\4test\0\0\0\4\0\0\0\0\0\0\0\1hello world" ) )
195
-
196
- assert_equal 1, @driver.channels.length
197
- assert_equal [ "\133\0\0\0\4\0\0\0\1\x7f\xff\xff\xff\x7f\xff\xff\xff" ],
198
- @session.events
199
- end
200
-
201
- def test_channel_open_failure
202
- channel = @driver.open_channel( "test", "data" )
203
- assert_equal 1, @driver.channels.length
204
- @driver.do_channel_open_failure(
205
- reader( "\0\0\0\1\0\0\0\2\0\0\0\4test\0\0\0\2en" ) )
206
- assert_equal 0, @driver.channels.length
207
- assert_equal [ [ :confirm_failed, 2, "test", "en" ] ], channel.events
208
- end
209
-
210
- def test_channel_open_confirmation
211
- channel = @driver.open_channel( "test", "data" )
212
- @driver.do_channel_open_confirmation(
213
- reader( "\0\0\0\1\0\0\0\2\0\0\0\3\0\0\0\4" ) )
214
- assert_equal 1, @driver.channels.length
215
- assert_equal [ [ :confirm_open, 2, 3, 4 ] ], channel.events
216
- end
217
-
218
- def test_channel_window_adjust
219
- channel = @driver.open_channel( "test", "data" )
220
- @driver.do_channel_window_adjust( reader( "\0\0\0\1\0\0\0\12" ) )
221
- assert_equal 1, @driver.channels.length
222
- assert_equal [ [ :window_adjust, 10 ] ], channel.events
223
- end
224
-
225
- def test_channel_data
226
- channel = @driver.open_channel( "test", "data" )
227
- @driver.do_channel_data( reader( "\0\0\0\1\0\0\0\4test" ) )
228
- assert_equal 1, @driver.channels.length
229
- assert_equal [ [ :data, "test" ] ], channel.events
230
- end
231
-
232
- def test_channel_extended_data
233
- channel = @driver.open_channel( "test", "data" )
234
- @driver.do_channel_extended_data( reader( "\0\0\0\1\0\0\0\2\0\0\0\4test" ) )
235
- assert_equal 1, @driver.channels.length
236
- assert_equal [ [ :extended_data, 2, "test" ] ], channel.events
237
- end
238
-
239
- def test_channel_eof
240
- channel = @driver.open_channel( "test", "data" )
241
- @driver.do_channel_eof( reader( "\0\0\0\1" ) )
242
- assert_equal 1, @driver.channels.length
243
- assert_equal [ [ :eof ] ], channel.events
244
- end
245
-
246
- def test_channel_close
247
- channel = @driver.open_channel( "test", "data" )
248
- @driver.do_channel_close( reader( "\0\0\0\1" ) )
249
- assert_equal 1, @driver.channels.length
250
- assert_equal [ [ :close, false ] ], channel.events
251
- end
252
-
253
- def test_channel_request
254
- channel = @driver.open_channel( "test", "data" )
255
- @driver.do_channel_request( reader( "\0\0\0\1\0\0\0\4test\1foobarbaz" ) )
256
- assert_equal 1, @driver.channels.length
257
- assert_equal [ [ :request, "test", true, reader("foobarbaz") ] ],
258
- channel.events
259
- end
260
-
261
- def test_channel_success
262
- channel = @driver.open_channel( "test", "data" )
263
- @driver.do_channel_success( reader( "\0\0\0\1" ) )
264
- assert_equal 1, @driver.channels.length
265
- assert_equal [ [ :success ] ], channel.events
266
- end
267
-
268
- def test_channel_failure
269
- channel = @driver.open_channel( "test", "data" )
270
- @driver.do_channel_failure( reader( "\0\0\0\1" ) )
271
- assert_equal 1, @driver.channels.length
272
- assert_equal [ [ :failure ] ], channel.events
273
- end
274
-
275
- ProcessItem = Struct.new( :name, :script, :events )
276
- def self.i( name, script, events )
277
- ProcessItem.new( name, script, events )
278
- end
279
-
280
- def test_process_bad
281
- @session.script << [ 0, reader("") ]
282
- assert_raise( Net::SSH::Exception ) do
283
- @driver.process
284
- end
285
- end
286
-
287
- end