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.
- data/CHANGELOG.rdoc +37 -0
- data/Manifest +101 -0
- data/README.rdoc +110 -0
- data/Rakefile +26 -0
- data/{THANKS → THANKS.rdoc} +2 -5
- data/lib/net/ssh.rb +189 -57
- data/lib/net/ssh/authentication/agent.rb +175 -0
- data/lib/net/ssh/authentication/constants.rb +18 -0
- data/lib/net/ssh/authentication/key_manager.rb +166 -0
- data/lib/net/ssh/authentication/methods/abstract.rb +60 -0
- data/lib/net/ssh/authentication/methods/hostbased.rb +71 -0
- data/lib/net/ssh/authentication/methods/keyboard_interactive.rb +66 -0
- data/lib/net/ssh/authentication/methods/password.rb +39 -0
- data/lib/net/ssh/authentication/methods/publickey.rb +92 -0
- data/lib/net/ssh/authentication/pageant.rb +176 -0
- data/lib/net/ssh/authentication/session.rb +116 -0
- data/lib/net/ssh/buffer.rb +339 -0
- data/lib/net/ssh/buffered_io.rb +149 -0
- data/lib/net/ssh/config.rb +173 -0
- data/lib/net/ssh/connection/channel.rb +575 -454
- data/lib/net/ssh/connection/constants.rb +31 -45
- data/lib/net/ssh/connection/session.rb +569 -0
- data/lib/net/ssh/connection/term.rb +176 -88
- data/lib/net/ssh/errors.rb +83 -61
- data/lib/net/ssh/key_factory.rb +85 -0
- data/lib/net/ssh/known_hosts.rb +129 -0
- data/lib/net/ssh/loggable.rb +61 -0
- data/lib/net/ssh/packet.rb +102 -0
- data/lib/net/ssh/prompt.rb +93 -0
- data/lib/net/ssh/proxy/errors.rb +8 -28
- data/lib/net/ssh/proxy/http.rb +75 -107
- data/lib/net/ssh/proxy/socks4.rb +35 -48
- data/lib/net/ssh/proxy/socks5.rb +76 -108
- data/lib/net/ssh/service/forward.rb +267 -0
- data/lib/net/ssh/test.rb +89 -0
- data/lib/net/ssh/test/channel.rb +129 -0
- data/lib/net/ssh/test/extensions.rb +152 -0
- data/lib/net/ssh/test/kex.rb +44 -0
- data/lib/net/ssh/test/local_packet.rb +51 -0
- data/lib/net/ssh/test/packet.rb +81 -0
- data/lib/net/ssh/test/remote_packet.rb +38 -0
- data/lib/net/ssh/test/script.rb +157 -0
- data/lib/net/ssh/test/socket.rb +59 -0
- data/lib/net/ssh/transport/algorithms.rb +384 -0
- data/lib/net/ssh/transport/cipher_factory.rb +72 -0
- data/lib/net/ssh/transport/constants.rb +22 -58
- data/lib/net/ssh/transport/hmac.rb +31 -0
- data/lib/net/ssh/transport/hmac/abstract.rb +48 -0
- data/lib/net/ssh/transport/hmac/md5.rb +12 -0
- data/lib/net/ssh/transport/hmac/md5_96.rb +11 -0
- data/lib/net/ssh/transport/hmac/none.rb +15 -0
- data/lib/net/ssh/transport/hmac/sha1.rb +13 -0
- data/lib/net/ssh/transport/hmac/sha1_96.rb +11 -0
- data/lib/net/ssh/transport/identity_cipher.rb +40 -0
- data/lib/net/ssh/transport/kex.rb +13 -0
- data/lib/net/ssh/transport/kex/diffie_hellman_group1_sha1.rb +208 -0
- data/lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha1.rb +77 -0
- data/lib/net/ssh/{util → transport}/openssl.rb +22 -40
- data/lib/net/ssh/transport/packet_stream.rb +230 -0
- data/lib/net/ssh/transport/server_version.rb +61 -0
- data/lib/net/ssh/transport/session.rb +225 -303
- data/lib/net/ssh/transport/state.rb +170 -0
- data/lib/net/ssh/verifiers/lenient.rb +30 -0
- data/lib/net/ssh/verifiers/null.rb +12 -0
- data/lib/net/ssh/verifiers/strict.rb +53 -0
- data/lib/net/ssh/version.rb +57 -26
- data/net-ssh.gemspec +54 -0
- data/setup.rb +1585 -0
- data/test/authentication/methods/common.rb +28 -0
- data/test/authentication/methods/test_abstract.rb +51 -0
- data/test/authentication/methods/test_hostbased.rb +108 -0
- data/test/authentication/methods/test_keyboard_interactive.rb +98 -0
- data/test/authentication/methods/test_password.rb +50 -0
- data/test/authentication/methods/test_publickey.rb +123 -0
- data/test/authentication/test_agent.rb +205 -0
- data/test/authentication/test_key_manager.rb +100 -0
- data/test/authentication/test_session.rb +93 -0
- data/test/common.rb +106 -0
- data/test/configs/exact_match +8 -0
- data/test/configs/wild_cards +14 -0
- data/test/connection/test_channel.rb +452 -0
- data/test/connection/test_session.rb +483 -0
- data/test/test_all.rb +6 -0
- data/test/test_buffer.rb +336 -0
- data/test/test_buffered_io.rb +63 -0
- data/test/test_config.rb +78 -0
- data/test/test_key_factory.rb +67 -0
- data/test/transport/hmac/test_md5.rb +34 -0
- data/test/transport/hmac/test_md5_96.rb +25 -0
- data/test/transport/hmac/test_none.rb +34 -0
- data/test/transport/hmac/test_sha1.rb +34 -0
- data/test/transport/hmac/test_sha1_96.rb +25 -0
- data/test/transport/kex/test_diffie_hellman_group1_sha1.rb +146 -0
- data/test/transport/kex/test_diffie_hellman_group_exchange_sha1.rb +92 -0
- data/test/transport/test_algorithms.rb +302 -0
- data/test/transport/test_cipher_factory.rb +163 -0
- data/test/transport/test_hmac.rb +34 -0
- data/test/transport/test_identity_cipher.rb +40 -0
- data/test/transport/test_packet_stream.rb +433 -0
- data/test/transport/test_server_version.rb +55 -0
- data/test/transport/test_session.rb +312 -0
- data/test/transport/test_state.rb +173 -0
- metadata +102 -253
- data/ChangeLog +0 -560
- data/LICENSE +0 -7
- data/NEWS +0 -152
- data/README +0 -14
- data/bin/rb-keygen +0 -210
- data/doc/LICENSE-BSD +0 -27
- data/doc/LICENSE-GPL +0 -280
- data/doc/LICENSE-RUBY +0 -56
- data/doc/manual-html/chapter-1.html +0 -388
- data/doc/manual-html/chapter-2.html +0 -552
- data/doc/manual-html/chapter-3.html +0 -470
- data/doc/manual-html/chapter-4.html +0 -413
- data/doc/manual-html/chapter-5.html +0 -525
- data/doc/manual-html/chapter-6.html +0 -456
- data/doc/manual-html/chapter-7.html +0 -343
- data/doc/manual-html/index.html +0 -235
- data/doc/manual-html/stylesheets/manual.css +0 -270
- data/doc/manual-html/stylesheets/ruby.css +0 -17
- data/doc/manual/chapter.erb +0 -38
- data/doc/manual/example.erb +0 -18
- data/doc/manual/index.erb +0 -29
- data/doc/manual/manual.rb +0 -311
- data/doc/manual/manual.yml +0 -73
- data/doc/manual/page.erb +0 -87
- data/doc/manual/parts/0000.txt +0 -5
- data/doc/manual/parts/0001.txt +0 -3
- data/doc/manual/parts/0002.txt +0 -40
- data/doc/manual/parts/0003.txt +0 -6
- data/doc/manual/parts/0004.txt +0 -7
- data/doc/manual/parts/0005.txt +0 -1
- data/doc/manual/parts/0006.txt +0 -49
- data/doc/manual/parts/0007.txt +0 -67
- data/doc/manual/parts/0008.txt +0 -43
- data/doc/manual/parts/0009.txt +0 -14
- data/doc/manual/parts/0010.txt +0 -7
- data/doc/manual/parts/0011.txt +0 -14
- data/doc/manual/parts/0012.txt +0 -3
- data/doc/manual/parts/0013.txt +0 -20
- data/doc/manual/parts/0014.txt +0 -32
- data/doc/manual/parts/0015.txt +0 -14
- data/doc/manual/parts/0016.txt +0 -28
- data/doc/manual/parts/0017.txt +0 -50
- data/doc/manual/parts/0018.txt +0 -35
- data/doc/manual/parts/0019.txt +0 -7
- data/doc/manual/parts/0020.txt +0 -72
- data/doc/manual/parts/0021.txt +0 -50
- data/doc/manual/parts/0022.txt +0 -42
- data/doc/manual/parts/0023.txt +0 -51
- data/doc/manual/parts/0024.txt +0 -18
- data/doc/manual/parts/0025.txt +0 -18
- data/doc/manual/parts/0026.txt +0 -15
- data/doc/manual/parts/0027.txt +0 -37
- data/doc/manual/parts/0028.txt +0 -16
- data/doc/manual/parts/0029.txt +0 -1
- data/doc/manual/parts/0030.txt +0 -52
- data/doc/manual/parts/0031.txt +0 -25
- data/doc/manual/stylesheets/manual.css +0 -270
- data/doc/manual/stylesheets/ruby.css +0 -17
- data/doc/manual/tutorial.erb +0 -30
- data/examples/auth-forward.rb +0 -41
- data/examples/channel-demo.rb +0 -81
- data/examples/port-forward.rb +0 -51
- data/examples/process-demo.rb +0 -91
- data/examples/remote-net-port-forward.rb +0 -45
- data/examples/remote-port-forward.rb +0 -80
- data/examples/shell-demo.rb +0 -46
- data/examples/ssh-client.rb +0 -67
- data/examples/sync-shell-demo.rb +0 -69
- data/examples/tail-demo.rb +0 -49
- data/lib/net/ssh/connection/driver.rb +0 -446
- data/lib/net/ssh/connection/services.rb +0 -72
- data/lib/net/ssh/host-key-verifier.rb +0 -52
- data/lib/net/ssh/known-hosts.rb +0 -96
- data/lib/net/ssh/lenient-host-key-verifier.rb +0 -25
- data/lib/net/ssh/null-host-key-verifier.rb +0 -14
- data/lib/net/ssh/service/agentforward/driver.rb +0 -78
- data/lib/net/ssh/service/agentforward/services.rb +0 -41
- data/lib/net/ssh/service/forward/driver.rb +0 -319
- data/lib/net/ssh/service/forward/local-network-handler.rb +0 -71
- data/lib/net/ssh/service/forward/remote-network-handler.rb +0 -83
- data/lib/net/ssh/service/forward/services.rb +0 -76
- data/lib/net/ssh/service/process/driver.rb +0 -153
- data/lib/net/ssh/service/process/open.rb +0 -193
- data/lib/net/ssh/service/process/popen3.rb +0 -178
- data/lib/net/ssh/service/process/services.rb +0 -66
- data/lib/net/ssh/service/services.rb +0 -60
- data/lib/net/ssh/service/shell/driver.rb +0 -86
- data/lib/net/ssh/service/shell/services.rb +0 -54
- data/lib/net/ssh/service/shell/shell.rb +0 -222
- data/lib/net/ssh/service/shell/sync.rb +0 -114
- data/lib/net/ssh/session.rb +0 -305
- data/lib/net/ssh/transport/algorithm-negotiator.rb +0 -275
- data/lib/net/ssh/transport/compress/compressor.rb +0 -53
- data/lib/net/ssh/transport/compress/decompressor.rb +0 -53
- data/lib/net/ssh/transport/compress/none-compressor.rb +0 -39
- data/lib/net/ssh/transport/compress/none-decompressor.rb +0 -39
- data/lib/net/ssh/transport/compress/services.rb +0 -68
- data/lib/net/ssh/transport/compress/zlib-compressor.rb +0 -60
- data/lib/net/ssh/transport/compress/zlib-decompressor.rb +0 -52
- data/lib/net/ssh/transport/errors.rb +0 -47
- data/lib/net/ssh/transport/identity-cipher.rb +0 -61
- data/lib/net/ssh/transport/kex/dh-gex.rb +0 -106
- data/lib/net/ssh/transport/kex/dh.rb +0 -249
- data/lib/net/ssh/transport/kex/services.rb +0 -62
- data/lib/net/ssh/transport/ossl/buffer-factory.rb +0 -52
- data/lib/net/ssh/transport/ossl/buffer.rb +0 -87
- data/lib/net/ssh/transport/ossl/cipher-factory.rb +0 -98
- data/lib/net/ssh/transport/ossl/digest-factory.rb +0 -51
- data/lib/net/ssh/transport/ossl/hmac-factory.rb +0 -71
- data/lib/net/ssh/transport/ossl/hmac/hmac.rb +0 -62
- data/lib/net/ssh/transport/ossl/hmac/md5-96.rb +0 -44
- data/lib/net/ssh/transport/ossl/hmac/md5.rb +0 -46
- data/lib/net/ssh/transport/ossl/hmac/none.rb +0 -46
- data/lib/net/ssh/transport/ossl/hmac/services.rb +0 -68
- data/lib/net/ssh/transport/ossl/hmac/sha1-96.rb +0 -44
- data/lib/net/ssh/transport/ossl/hmac/sha1.rb +0 -45
- data/lib/net/ssh/transport/ossl/key-factory.rb +0 -116
- data/lib/net/ssh/transport/ossl/services.rb +0 -149
- data/lib/net/ssh/transport/packet-stream.rb +0 -236
- data/lib/net/ssh/transport/services.rb +0 -146
- data/lib/net/ssh/transport/version-negotiator.rb +0 -73
- data/lib/net/ssh/userauth/agent.rb +0 -222
- data/lib/net/ssh/userauth/constants.rb +0 -35
- data/lib/net/ssh/userauth/driver.rb +0 -183
- data/lib/net/ssh/userauth/methods/hostbased.rb +0 -119
- data/lib/net/ssh/userauth/methods/keyboard-interactive.rb +0 -104
- data/lib/net/ssh/userauth/methods/password.rb +0 -70
- data/lib/net/ssh/userauth/methods/publickey.rb +0 -137
- data/lib/net/ssh/userauth/methods/services.rb +0 -90
- data/lib/net/ssh/userauth/pageant.rb +0 -197
- data/lib/net/ssh/userauth/services.rb +0 -141
- data/lib/net/ssh/userauth/userkeys.rb +0 -258
- data/lib/net/ssh/util/buffer.rb +0 -274
- data/lib/net/ssh/util/prompter.rb +0 -73
- data/test/ALL-TESTS.rb +0 -18
- data/test/connection/tc_channel.rb +0 -136
- data/test/connection/tc_driver.rb +0 -287
- data/test/connection/tc_integration.rb +0 -87
- data/test/proxy/tc_http.rb +0 -209
- data/test/proxy/tc_socks4.rb +0 -148
- data/test/proxy/tc_socks5.rb +0 -214
- data/test/service/agentforward/tc_driver.rb +0 -138
- data/test/service/forward/tc_driver.rb +0 -289
- data/test/service/forward/tc_local_network_handler.rb +0 -123
- data/test/service/forward/tc_remote_network_handler.rb +0 -111
- data/test/service/process/tc_driver.rb +0 -79
- data/test/service/process/tc_integration.rb +0 -119
- data/test/service/process/tc_open.rb +0 -179
- data/test/service/process/tc_popen3.rb +0 -164
- data/test/tc_integration.rb +0 -80
- data/test/transport/compress/tc_none_compress.rb +0 -41
- data/test/transport/compress/tc_none_decompress.rb +0 -45
- data/test/transport/compress/tc_zlib_compress.rb +0 -61
- data/test/transport/compress/tc_zlib_decompress.rb +0 -48
- data/test/transport/kex/tc_dh.rb +0 -312
- data/test/transport/kex/tc_dh_gex.rb +0 -71
- data/test/transport/ossl/fixtures/dsa-encrypted +0 -15
- data/test/transport/ossl/fixtures/dsa-encrypted-bad +0 -15
- data/test/transport/ossl/fixtures/dsa-unencrypted +0 -12
- data/test/transport/ossl/fixtures/dsa-unencrypted-bad +0 -12
- data/test/transport/ossl/fixtures/dsa-unencrypted.pub +0 -1
- data/test/transport/ossl/fixtures/not-a-private-key +0 -4
- data/test/transport/ossl/fixtures/not-supported +0 -2
- data/test/transport/ossl/fixtures/rsa-encrypted +0 -18
- data/test/transport/ossl/fixtures/rsa-encrypted-bad +0 -18
- data/test/transport/ossl/fixtures/rsa-unencrypted +0 -15
- data/test/transport/ossl/fixtures/rsa-unencrypted-bad +0 -15
- data/test/transport/ossl/fixtures/rsa-unencrypted.pub +0 -1
- data/test/transport/ossl/hmac/tc_hmac.rb +0 -58
- data/test/transport/ossl/hmac/tc_md5.rb +0 -50
- data/test/transport/ossl/hmac/tc_md5_96.rb +0 -50
- data/test/transport/ossl/hmac/tc_none.rb +0 -50
- data/test/transport/ossl/hmac/tc_sha1.rb +0 -50
- data/test/transport/ossl/hmac/tc_sha1_96.rb +0 -50
- data/test/transport/ossl/tc_buffer.rb +0 -97
- data/test/transport/ossl/tc_buffer_factory.rb +0 -67
- data/test/transport/ossl/tc_cipher_factory.rb +0 -84
- data/test/transport/ossl/tc_digest_factory.rb +0 -39
- data/test/transport/ossl/tc_hmac_factory.rb +0 -72
- data/test/transport/ossl/tc_key_factory.rb +0 -199
- data/test/transport/tc_algorithm_negotiator.rb +0 -170
- data/test/transport/tc_identity_cipher.rb +0 -52
- data/test/transport/tc_integration.rb +0 -115
- data/test/transport/tc_packet_stream.rb +0 -184
- data/test/transport/tc_session.rb +0 -296
- data/test/transport/tc_version_negotiator.rb +0 -86
- data/test/userauth/methods/tc_hostbased.rb +0 -136
- data/test/userauth/methods/tc_password.rb +0 -89
- data/test/userauth/methods/tc_publickey.rb +0 -167
- data/test/userauth/tc_agent.rb +0 -223
- data/test/userauth/tc_driver.rb +0 -190
- data/test/userauth/tc_integration.rb +0 -97
- data/test/userauth/tc_userkeys.rb +0 -265
- 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
|