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,111 +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 'net/ssh/service/forward/remote-network-handler'
20
- require 'test/unit'
21
- require 'socket'
22
-
23
- class TC_RemoteNetworkHandler < Test::Unit::TestCase
24
-
25
- class Log
26
- def debug?
27
- true
28
- end
29
-
30
- def debug( msg )
31
- end
32
-
33
- def error( msg )
34
- end
35
- end
36
-
37
- class Channel
38
- attr_reader :events
39
-
40
- def initialize
41
- @values = Hash.new
42
- @events = []
43
- end
44
-
45
- def []( name )
46
- @values[name]
47
- end
48
-
49
- def []=( name, value )
50
- @values[name] = value
51
- end
52
-
53
- def close
54
- @events << :close
55
- end
56
-
57
- def send_data( data )
58
- @events << data
59
- end
60
- end
61
-
62
- HOST = "127.0.0.1"
63
- PORT = 12248
64
-
65
- class ScriptedServer
66
- attr_reader :script
67
-
68
- def initialize
69
- @script = []
70
- @thread = Thread.new {
71
- server = TCPServer.new( HOST, PORT )
72
- client = server.accept
73
- until @script.empty?
74
- client.send @script.shift, 0
75
- sleep 0.1
76
- end
77
- server.shutdown rescue nil
78
- }
79
- end
80
-
81
- def join
82
- @thread.join
83
- end
84
- end
85
-
86
- def setup
87
- @channel = Channel.new
88
- @handler = Net::SSH::Service::Forward::RemoteNetworkHandler.new(
89
- Log.new, 16, PORT, HOST )
90
- end
91
-
92
- def test_on_eof
93
- assert !@channel[:eof]
94
- @handler.on_eof( @channel )
95
- assert @channel[:eof]
96
- end
97
-
98
- def test_on_open
99
- server = ScriptedServer.new
100
- server.script << "1234567890123456"
101
- server.script << "abcdefghijklmnop"
102
- sleep 0.1
103
- @handler.on_open( @channel, nil, nil, nil, nil )
104
- server.join
105
- @handler.on_eof( @channel )
106
- sleep 0.1
107
- assert_equal [ "1234567890123456", "abcdefghijklmnop", :close ],
108
- @channel.events
109
- end
110
-
111
- end
@@ -1,79 +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/service/process/driver'
21
-
22
- class TC_Process_Driver < Test::Unit::TestCase
23
-
24
- class MockObject
25
- attr_reader :events
26
-
27
- def initialize
28
- @events = []
29
- end
30
-
31
- def method_missing( sym, *args, &block )
32
- token = [ sym, *args ]
33
- token << :with_block if block
34
- @events << token
35
- :return_value
36
- end
37
-
38
- undef_method :loop
39
- end
40
-
41
- def setup
42
- @connection = MockObject.new
43
- @log = MockObject.new
44
- @handlers = { :open => MockObject.new, :popen3 => MockObject.new }
45
- @driver = Net::SSH::Service::Process::Driver.new(
46
- @connection, @log, @handlers )
47
- end
48
-
49
- def test_open_no_block
50
- result = @driver.open( "foo" )
51
- assert_equal :return_value, result
52
- assert_equal [ [ :call, "foo" ] ], @handlers[:open].events
53
- assert_equal [], @connection.events
54
- end
55
-
56
- def test_open_block
57
- result = @driver.open( "foo" ) do |r|
58
- assert_equal :return_value, r
59
- end
60
- assert_nil result
61
- assert_equal [ [ :call, "foo" ] ], @handlers[:open].events
62
- assert_equal [ [ :loop ] ], @connection.events
63
- end
64
-
65
- def test_popen3_no_block
66
- result = @driver.popen3( "foo" )
67
- assert_equal :return_value, result
68
- assert_equal [ [ :popen3, "foo" ] ], @handlers[:popen3].events
69
- assert_equal [], @connection.events
70
- end
71
-
72
- def test_popen3_no_block
73
- result = @driver.popen3( "foo" ) { |f| }
74
- assert_equal :return_value, result
75
- assert_equal [ [ :popen3, "foo", :with_block ] ], @handlers[:popen3].events
76
- assert_equal [], @connection.events
77
- end
78
-
79
- end
@@ -1,119 +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
- if $run_integration_tests || __FILE__ == $0
20
-
21
- require 'needle'
22
- require 'test/unit'
23
- require 'net/ssh/null-host-key-verifier'
24
-
25
- class TC_Process_Integration < Test::Unit::TestCase
26
-
27
- HOST = "test.host"
28
- USER = "test"
29
- PASSWORD = "test/unit"
30
-
31
- def setup
32
- @registry = Needle::Registry.define(
33
- :logs => { :device => STDOUT, :default_level => :warn }
34
- ) do |b|
35
- b.require 'net/ssh/transport/services', "Net::SSH::Transport"
36
- b.require 'net/ssh/userauth/services', "Net::SSH::UserAuth"
37
- b.require 'net/ssh/connection/services', "Net::SSH::Connection"
38
- b.require 'net/ssh/service/process/services',
39
- "Net::SSH::Service::Process"
40
-
41
- b.crypto_backend { :ossl }
42
- b.transport_host { HOST }
43
- b.host_key_verifier { Net::SSH::NullHostKeyVerifier.new }
44
- end
45
-
46
- @registry.userauth.driver.authenticate( "ssh-connection", USER, PASSWORD )
47
-
48
- @driver = @registry.process.driver
49
- end
50
-
51
- def teardown
52
- @registry.transport.session.close
53
- end
54
-
55
- def test_open_no_block
56
- script = [ "2+2", "3+2*5", "quit" ]
57
- expect = [ "4\n", "13\n", :exit ]
58
- results = []
59
-
60
- process = @driver.open( "bc" )
61
- process.on_success { |p| p.puts script.shift }
62
- process.on_stdout do |p,d|
63
- results << d
64
- if script.empty?
65
- p.close_input
66
- else
67
- p.puts script.shift
68
- end
69
- end
70
- process.on_exit { results << :exit }
71
-
72
- @registry.connection.driver.loop
73
-
74
- assert_equal expect, results
75
- end
76
-
77
- def test_open_block
78
- script = [ "2+2", "3+2*5", "quit" ]
79
- expect = [ "4\n", "13\n", :exit ]
80
- results = []
81
-
82
- @driver.open( "bc" ) do |process|
83
- process.on_success { |p| p.puts script.shift }
84
- process.on_stdout do |p,d|
85
- results << d
86
- if script.empty?
87
- p.close_input
88
- else
89
- p.puts script.shift
90
- end
91
- end
92
- process.on_exit { results << :exit }
93
- end
94
-
95
- assert_equal expect, results
96
- end
97
-
98
- def test_popen3_no_block
99
- stdin, stdout, stderr = @driver.popen3( "bc" )
100
- stdin.puts "2+2"
101
- assert_equal "4\n", stdout.read
102
- stdin.puts "3+2*5"
103
- assert_equal "13\n", stdout.read
104
- stdin.puts "quit"
105
- end
106
-
107
- def test_popen3_block
108
- @driver.popen3( "bc" ) do |stdin,stdout,stderr|
109
- stdin.puts "2+2"
110
- assert_equal "4\n", stdout.read
111
- stdin.puts "3+2*5"
112
- assert_equal "13\n", stdout.read
113
- stdin.puts "quit"
114
- end
115
- end
116
-
117
- end
118
-
119
- end
@@ -1,179 +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/service/process/open'
21
-
22
- class TC_Process_Open < Test::Unit::TestCase
23
-
24
- class Log
25
- def debug?
26
- true
27
- end
28
-
29
- def debug(msg)
30
- end
31
- end
32
-
33
- class MockObject
34
- attr_reader :events
35
-
36
- def initialize
37
- @events = []
38
- end
39
-
40
- def method_missing( sym, *args, &block )
41
- token = [ sym, *args ]
42
- token << true if block
43
- @events << token
44
- end
45
- end
46
-
47
- class Connection < MockObject
48
- attr_reader :channel
49
-
50
- def open_channel( *args, &block )
51
- @events << [ :open_channel, *args ] + [ block ? true : false ]
52
- @channel = MockObject.new
53
- end
54
- end
55
-
56
- def create_manager( &block )
57
- connection = Connection.new
58
- mgr = Net::SSH::Service::Process::OpenManager.new( connection,
59
- Log.new, "test", &block )
60
- [ mgr, connection ]
61
- end
62
-
63
- def test_no_block
64
- mgr, conn = create_manager
65
- assert_equal [ [ :open_channel, "session", true ] ], conn.events
66
- end
67
-
68
- def test_with_block
69
- yielded = false
70
- mgr, conn = create_manager { |mgr| yielded = true }
71
- assert_equal [ [ :open_channel, "session", true ],
72
- [ :loop ] ], conn.events
73
- assert yielded
74
- end
75
-
76
- def test_write
77
- mgr, conn = create_manager
78
- mgr.write "foo"
79
- assert_equal [ [ :send_data, "foo" ] ], conn.channel.events
80
- end
81
-
82
- def test_puts_nonl
83
- mgr, conn = create_manager
84
- mgr.puts "foo"
85
- assert_equal [ [ :send_data, "foo\n" ] ], conn.channel.events
86
- end
87
-
88
- def test_puts_nl
89
- mgr, conn = create_manager
90
- mgr.puts "foo\n"
91
- assert_equal [ [ :send_data, "foo\n" ] ], conn.channel.events
92
- end
93
-
94
- def test_close_input
95
- mgr, conn = create_manager
96
- mgr.close_input
97
- assert_equal [ [ :send_eof ] ], conn.channel.events
98
- end
99
-
100
- def test_close
101
- mgr, conn = create_manager
102
- mgr.close
103
- assert_equal [ [ :close ] ], conn.channel.events
104
- end
105
-
106
- def test_confirm
107
- mgr, conn = create_manager
108
- chan = MockObject.new
109
- mgr.do_confirm chan
110
- assert_equal [ [ :on_success, true ], [ :on_failure, true ],
111
- [ :exec, "test", true ] ], chan.events
112
- end
113
-
114
- def test_exec_success
115
- mgr, conn = create_manager
116
- chan = MockObject.new
117
- called = false
118
- mgr.on_success { |ch| called = true }
119
- mgr.do_exec_success chan
120
- assert_equal [ [ :on_data, true ], [ :on_extended_data, true ],
121
- [ :on_close, true ], [ :on_request, true ] ], chan.events
122
- assert called
123
- end
124
-
125
- def test_exec_failure_no_callback
126
- mgr, conn = create_manager
127
- chan = MockObject.new
128
- assert_raise( Net::SSH::Exception ) do
129
- mgr.do_exec_failure chan
130
- end
131
- end
132
-
133
- def test_exec_failure_callback
134
- mgr, conn = create_manager
135
- chan = MockObject.new
136
- called = false
137
- mgr.on_failure { |ch,msg| called = true }
138
- mgr.do_exec_failure chan
139
- assert called
140
- end
141
-
142
- def test_stdout
143
- mgr, conn = create_manager
144
- chan = MockObject.new
145
- data = ""
146
- mgr.on_stdout { |ch,d| data = d }
147
- mgr.do_data chan, "foo"
148
- assert_equal "foo", data
149
- end
150
-
151
- def test_extended_data_not_stderr
152
- mgr, conn = create_manager
153
- chan = MockObject.new
154
- data = ""
155
- mgr.on_stderr { |ch,d| data = d }
156
- mgr.do_extended_data chan, 0, "foo"
157
- assert_equal "", data
158
- end
159
-
160
- def test_extended_data_stderr
161
- mgr, conn = create_manager
162
- chan = MockObject.new
163
- data = ""
164
- mgr.on_stderr { |ch,d| data = d }
165
- mgr.do_extended_data chan, 1, "foo"
166
- assert_equal "foo", data
167
- end
168
-
169
- def test_close
170
- mgr, conn = create_manager
171
- chan = MockObject.new
172
- called = false
173
- mgr.on_exit { |ch,status| called = true }
174
- mgr.do_close chan
175
- assert called
176
- assert_equal [], chan.events
177
- end
178
-
179
- end