net-ssh 3.2.0 → 7.2.0.rc1

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 (210) hide show
  1. checksums.yaml +5 -5
  2. checksums.yaml.gz.sig +0 -0
  3. data/.dockerignore +6 -0
  4. data/.github/FUNDING.yml +1 -0
  5. data/.github/config/rubocop_linter_action.yml +4 -0
  6. data/.github/workflows/ci-with-docker.yml +44 -0
  7. data/.github/workflows/ci.yml +93 -0
  8. data/.github/workflows/rubocop.yml +16 -0
  9. data/.gitignore +13 -0
  10. data/.rubocop.yml +22 -0
  11. data/.rubocop_todo.yml +1081 -0
  12. data/CHANGES.txt +237 -7
  13. data/DEVELOPMENT.md +23 -0
  14. data/Dockerfile +27 -0
  15. data/Dockerfile.openssl3 +17 -0
  16. data/Gemfile +13 -0
  17. data/Gemfile.noed25519 +12 -0
  18. data/Gemfile.norbnacl +12 -0
  19. data/ISSUE_TEMPLATE.md +30 -0
  20. data/Manifest +4 -5
  21. data/README.md +298 -0
  22. data/Rakefile +125 -74
  23. data/SECURITY.md +4 -0
  24. data/appveyor.yml +58 -0
  25. data/docker-compose.yml +23 -0
  26. data/lib/net/ssh/authentication/agent.rb +279 -18
  27. data/lib/net/ssh/authentication/certificate.rb +183 -0
  28. data/lib/net/ssh/authentication/constants.rb +17 -15
  29. data/lib/net/ssh/authentication/ed25519.rb +186 -0
  30. data/lib/net/ssh/authentication/ed25519_loader.rb +31 -0
  31. data/lib/net/ssh/authentication/key_manager.rb +86 -39
  32. data/lib/net/ssh/authentication/methods/abstract.rb +67 -48
  33. data/lib/net/ssh/authentication/methods/hostbased.rb +34 -37
  34. data/lib/net/ssh/authentication/methods/keyboard_interactive.rb +13 -13
  35. data/lib/net/ssh/authentication/methods/none.rb +16 -19
  36. data/lib/net/ssh/authentication/methods/password.rb +27 -17
  37. data/lib/net/ssh/authentication/methods/publickey.rb +96 -55
  38. data/lib/net/ssh/authentication/pageant.rb +471 -367
  39. data/lib/net/ssh/authentication/pub_key_fingerprint.rb +43 -0
  40. data/lib/net/ssh/authentication/session.rb +131 -121
  41. data/lib/net/ssh/buffer.rb +399 -300
  42. data/lib/net/ssh/buffered_io.rb +154 -150
  43. data/lib/net/ssh/config.rb +308 -185
  44. data/lib/net/ssh/connection/channel.rb +635 -613
  45. data/lib/net/ssh/connection/constants.rb +29 -29
  46. data/lib/net/ssh/connection/event_loop.rb +123 -0
  47. data/lib/net/ssh/connection/keepalive.rb +55 -51
  48. data/lib/net/ssh/connection/session.rb +620 -551
  49. data/lib/net/ssh/connection/term.rb +125 -123
  50. data/lib/net/ssh/errors.rb +101 -99
  51. data/lib/net/ssh/key_factory.rb +197 -105
  52. data/lib/net/ssh/known_hosts.rb +214 -127
  53. data/lib/net/ssh/loggable.rb +50 -49
  54. data/lib/net/ssh/packet.rb +83 -79
  55. data/lib/net/ssh/prompt.rb +50 -81
  56. data/lib/net/ssh/proxy/command.rb +105 -90
  57. data/lib/net/ssh/proxy/errors.rb +12 -10
  58. data/lib/net/ssh/proxy/http.rb +82 -79
  59. data/lib/net/ssh/proxy/https.rb +50 -0
  60. data/lib/net/ssh/proxy/jump.rb +54 -0
  61. data/lib/net/ssh/proxy/socks4.rb +2 -6
  62. data/lib/net/ssh/proxy/socks5.rb +14 -17
  63. data/lib/net/ssh/service/forward.rb +370 -317
  64. data/lib/net/ssh/test/channel.rb +145 -136
  65. data/lib/net/ssh/test/extensions.rb +131 -110
  66. data/lib/net/ssh/test/kex.rb +34 -32
  67. data/lib/net/ssh/test/local_packet.rb +46 -44
  68. data/lib/net/ssh/test/packet.rb +89 -70
  69. data/lib/net/ssh/test/remote_packet.rb +32 -30
  70. data/lib/net/ssh/test/script.rb +156 -142
  71. data/lib/net/ssh/test/socket.rb +49 -48
  72. data/lib/net/ssh/test.rb +82 -77
  73. data/lib/net/ssh/transport/algorithms.rb +462 -359
  74. data/lib/net/ssh/transport/chacha20_poly1305_cipher.rb +117 -0
  75. data/lib/net/ssh/transport/chacha20_poly1305_cipher_loader.rb +17 -0
  76. data/lib/net/ssh/transport/cipher_factory.rb +122 -99
  77. data/lib/net/ssh/transport/constants.rb +32 -24
  78. data/lib/net/ssh/transport/ctr.rb +42 -22
  79. data/lib/net/ssh/transport/hmac/abstract.rb +81 -63
  80. data/lib/net/ssh/transport/hmac/md5.rb +0 -2
  81. data/lib/net/ssh/transport/hmac/md5_96.rb +0 -2
  82. data/lib/net/ssh/transport/hmac/none.rb +0 -2
  83. data/lib/net/ssh/transport/hmac/ripemd160.rb +0 -2
  84. data/lib/net/ssh/transport/hmac/sha1.rb +0 -2
  85. data/lib/net/ssh/transport/hmac/sha1_96.rb +0 -2
  86. data/lib/net/ssh/transport/hmac/sha2_256.rb +7 -11
  87. data/lib/net/ssh/transport/hmac/sha2_256_96.rb +4 -8
  88. data/lib/net/ssh/transport/hmac/sha2_256_etm.rb +12 -0
  89. data/lib/net/ssh/transport/hmac/sha2_512.rb +6 -9
  90. data/lib/net/ssh/transport/hmac/sha2_512_96.rb +4 -8
  91. data/lib/net/ssh/transport/hmac/sha2_512_etm.rb +12 -0
  92. data/lib/net/ssh/transport/hmac.rb +14 -12
  93. data/lib/net/ssh/transport/identity_cipher.rb +54 -44
  94. data/lib/net/ssh/transport/kex/abstract.rb +130 -0
  95. data/lib/net/ssh/transport/kex/abstract5656.rb +72 -0
  96. data/lib/net/ssh/transport/kex/curve25519_sha256.rb +39 -0
  97. data/lib/net/ssh/transport/kex/curve25519_sha256_loader.rb +30 -0
  98. data/lib/net/ssh/transport/kex/diffie_hellman_group14_sha1.rb +33 -40
  99. data/lib/net/ssh/transport/kex/diffie_hellman_group14_sha256.rb +11 -0
  100. data/lib/net/ssh/transport/kex/diffie_hellman_group1_sha1.rb +119 -213
  101. data/lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha1.rb +53 -61
  102. data/lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha256.rb +5 -9
  103. data/lib/net/ssh/transport/kex/ecdh_sha2_nistp256.rb +36 -90
  104. data/lib/net/ssh/transport/kex/ecdh_sha2_nistp384.rb +18 -10
  105. data/lib/net/ssh/transport/kex/ecdh_sha2_nistp521.rb +18 -10
  106. data/lib/net/ssh/transport/kex.rb +15 -12
  107. data/lib/net/ssh/transport/key_expander.rb +24 -20
  108. data/lib/net/ssh/transport/openssl.rb +161 -124
  109. data/lib/net/ssh/transport/openssl_cipher_extensions.rb +8 -0
  110. data/lib/net/ssh/transport/packet_stream.rb +246 -185
  111. data/lib/net/ssh/transport/server_version.rb +55 -56
  112. data/lib/net/ssh/transport/session.rb +306 -255
  113. data/lib/net/ssh/transport/state.rb +178 -176
  114. data/lib/net/ssh/verifiers/accept_new.rb +33 -0
  115. data/lib/net/ssh/verifiers/accept_new_or_local_tunnel.rb +33 -0
  116. data/lib/net/ssh/verifiers/always.rb +58 -0
  117. data/lib/net/ssh/verifiers/never.rb +19 -0
  118. data/lib/net/ssh/version.rb +55 -53
  119. data/lib/net/ssh.rb +111 -47
  120. data/net-ssh-public_cert.pem +18 -18
  121. data/net-ssh.gemspec +38 -205
  122. data/support/ssh_tunnel_bug.rb +5 -5
  123. data.tar.gz.sig +0 -0
  124. metadata +173 -118
  125. metadata.gz.sig +0 -0
  126. data/.travis.yml +0 -18
  127. data/README.rdoc +0 -182
  128. data/lib/net/ssh/authentication/agent/java_pageant.rb +0 -85
  129. data/lib/net/ssh/authentication/agent/socket.rb +0 -178
  130. data/lib/net/ssh/ruby_compat.rb +0 -46
  131. data/lib/net/ssh/verifiers/lenient.rb +0 -30
  132. data/lib/net/ssh/verifiers/null.rb +0 -12
  133. data/lib/net/ssh/verifiers/secure.rb +0 -52
  134. data/lib/net/ssh/verifiers/strict.rb +0 -24
  135. data/setup.rb +0 -1585
  136. data/support/arcfour_check.rb +0 -20
  137. data/test/README.txt +0 -18
  138. data/test/authentication/methods/common.rb +0 -28
  139. data/test/authentication/methods/test_abstract.rb +0 -51
  140. data/test/authentication/methods/test_hostbased.rb +0 -114
  141. data/test/authentication/methods/test_keyboard_interactive.rb +0 -121
  142. data/test/authentication/methods/test_none.rb +0 -41
  143. data/test/authentication/methods/test_password.rb +0 -95
  144. data/test/authentication/methods/test_publickey.rb +0 -148
  145. data/test/authentication/test_agent.rb +0 -232
  146. data/test/authentication/test_key_manager.rb +0 -240
  147. data/test/authentication/test_session.rb +0 -107
  148. data/test/common.rb +0 -125
  149. data/test/configs/auth_off +0 -5
  150. data/test/configs/auth_on +0 -4
  151. data/test/configs/empty +0 -0
  152. data/test/configs/eqsign +0 -3
  153. data/test/configs/exact_match +0 -8
  154. data/test/configs/host_plus +0 -10
  155. data/test/configs/multihost +0 -4
  156. data/test/configs/negative_match +0 -6
  157. data/test/configs/nohost +0 -19
  158. data/test/configs/numeric_host +0 -4
  159. data/test/configs/proxy_remote_user +0 -2
  160. data/test/configs/send_env +0 -2
  161. data/test/configs/substitutes +0 -8
  162. data/test/configs/wild_cards +0 -14
  163. data/test/connection/test_channel.rb +0 -487
  164. data/test/connection/test_session.rb +0 -564
  165. data/test/integration/README.txt +0 -17
  166. data/test/integration/Vagrantfile +0 -12
  167. data/test/integration/common.rb +0 -63
  168. data/test/integration/playbook.yml +0 -56
  169. data/test/integration/test_forward.rb +0 -637
  170. data/test/integration/test_id_rsa_keys.rb +0 -96
  171. data/test/integration/test_proxy.rb +0 -93
  172. data/test/known_hosts/github +0 -1
  173. data/test/known_hosts/github_hash +0 -1
  174. data/test/manual/test_pageant.rb +0 -37
  175. data/test/start/test_connection.rb +0 -53
  176. data/test/start/test_options.rb +0 -57
  177. data/test/start/test_transport.rb +0 -28
  178. data/test/start/test_user_nil.rb +0 -27
  179. data/test/test_all.rb +0 -12
  180. data/test/test_buffer.rb +0 -433
  181. data/test/test_buffered_io.rb +0 -63
  182. data/test/test_config.rb +0 -268
  183. data/test/test_key_factory.rb +0 -191
  184. data/test/test_known_hosts.rb +0 -66
  185. data/test/transport/hmac/test_md5.rb +0 -41
  186. data/test/transport/hmac/test_md5_96.rb +0 -27
  187. data/test/transport/hmac/test_none.rb +0 -34
  188. data/test/transport/hmac/test_ripemd160.rb +0 -36
  189. data/test/transport/hmac/test_sha1.rb +0 -36
  190. data/test/transport/hmac/test_sha1_96.rb +0 -27
  191. data/test/transport/hmac/test_sha2_256.rb +0 -37
  192. data/test/transport/hmac/test_sha2_256_96.rb +0 -27
  193. data/test/transport/hmac/test_sha2_512.rb +0 -37
  194. data/test/transport/hmac/test_sha2_512_96.rb +0 -27
  195. data/test/transport/kex/test_diffie_hellman_group14_sha1.rb +0 -13
  196. data/test/transport/kex/test_diffie_hellman_group1_sha1.rb +0 -150
  197. data/test/transport/kex/test_diffie_hellman_group_exchange_sha1.rb +0 -96
  198. data/test/transport/kex/test_diffie_hellman_group_exchange_sha256.rb +0 -19
  199. data/test/transport/kex/test_ecdh_sha2_nistp256.rb +0 -161
  200. data/test/transport/kex/test_ecdh_sha2_nistp384.rb +0 -38
  201. data/test/transport/kex/test_ecdh_sha2_nistp521.rb +0 -38
  202. data/test/transport/test_algorithms.rb +0 -328
  203. data/test/transport/test_cipher_factory.rb +0 -443
  204. data/test/transport/test_hmac.rb +0 -34
  205. data/test/transport/test_identity_cipher.rb +0 -40
  206. data/test/transport/test_packet_stream.rb +0 -1762
  207. data/test/transport/test_server_version.rb +0 -74
  208. data/test/transport/test_session.rb +0 -331
  209. data/test/transport/test_state.rb +0 -181
  210. data/test/verifiers/test_secure.rb +0 -40
@@ -1,96 +0,0 @@
1
- require 'common'
2
- require 'fileutils'
3
- require 'tmpdir'
4
-
5
- require 'net/ssh'
6
-
7
- # see Vagrantfile,playbook for env.
8
- # we're running as net_ssh_1 user password foo
9
- # and usually connecting to net_ssh_2 user password foo2pwd
10
- class TestIDRSAPKeys < Test::Unit::TestCase
11
- include IntegrationTestHelpers
12
-
13
- def test_in_file_no_password
14
- tmpdir do |dir|
15
- sh "rm -rf #{dir}/id_rsa #{dir}/id_rsa.pub"
16
- sh "ssh-keygen -f #{dir}/id_rsa -t rsa -N ''"
17
- set_authorized_key('net_ssh_1',"#{dir}/id_rsa.pub")
18
-
19
- sshopts = '-vvvv -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
20
- #sh "ssh -i #{dir}/id_rsa #{sshopts} net_ssh_1@localhost echo 'hello'"
21
-
22
- ret = Net::SSH.start("localhost", "net_ssh_1", {keys: "#{dir}/id_rsa"}) do |ssh|
23
- ssh.exec! 'echo "hello from:$USER"'
24
- end
25
- assert_equal "hello from:net_ssh_1\n", ret
26
- end
27
- end
28
-
29
-
30
- def test_ssh_agent
31
- tmpdir do |dir|
32
- with_agent do
33
- sh "rm -rf #{dir}/id_rsa #{dir}/id_rsa.pub"
34
- sh "ssh-keygen -f #{dir}/id_rsa -t rsa -N 'pwd123'"
35
- set_authorized_key('net_ssh_1',"#{dir}/id_rsa.pub")
36
- ssh_add("#{dir}/id_rsa","pwd123")
37
-
38
- ret = Net::SSH.start("localhost", "net_ssh_1",verbose: :debug) do |ssh|
39
- ssh.exec! 'echo "hello from:$USER"'
40
- end
41
- assert_equal "hello from:net_ssh_1\n", ret
42
- end
43
- end
44
- end
45
-
46
- def test_ssh_agent_ignores_if_already_in_agent
47
- tmpdir do |dir|
48
- with_agent do
49
- sh "rm -rf #{dir}/id_rsa #{dir}/id_rsa.pub"
50
- sh "ssh-keygen -f #{dir}/id_rsa -t rsa -N 'pwd123'"
51
- set_authorized_key('net_ssh_1',"#{dir}/id_rsa.pub")
52
- ssh_add("#{dir}/id_rsa","pwd123")
53
-
54
- ret = Net::SSH.start("localhost", "net_ssh_1",verbose: :debug, keys: ["#{dir}/id_rsa"]) do |ssh|
55
- ssh.exec! 'echo "hello from:$USER"'
56
- end
57
- assert_equal "hello from:net_ssh_1\n", ret
58
- end
59
- end
60
- end
61
-
62
- def test_in_file_with_password
63
- tmpdir do |dir|
64
- sh "rm -rf #{dir}/id_rsa #{dir}/id_rsa.pub"
65
- sh "ssh-keygen -f #{dir}/id_rsa -t rsa -N 'pwd12'"
66
- set_authorized_key('net_ssh_1',"#{dir}/id_rsa.pub")
67
-
68
- sshopts = '-vvvv -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
69
- #sh "ssh -i #{dir}/id_rsa #{sshopts} net_ssh_1@localhost echo 'hello'"
70
-
71
- ret = Net::SSH.start("localhost", "net_ssh_1", {keys: "#{dir}/id_rsa",
72
- passphrase: 'pwd12', verbose: :debug}) do |ssh|
73
- ssh.exec! 'echo "hello from:$USER"'
74
- end
75
- assert_equal "hello from:net_ssh_1\n", ret
76
- end
77
- end
78
-
79
- def test_asks_for_passwords_when_read_from_memory
80
- tmpdir do |dir|
81
- sh "rm -rf #{dir}/id_rsa #{dir}/id_rsa.pub"
82
- sh "ssh-keygen -f #{dir}/id_rsa -t rsa -N 'pwd12'"
83
- set_authorized_key('net_ssh_1',"#{dir}/id_rsa.pub")
84
- private_key = File.read("#{dir}/id_rsa")
85
-
86
- options = {keys: [], key_data: [private_key]}
87
-
88
- key_manager = Net::SSH::Authentication::KeyManager.new(nil, options)
89
-
90
- Net::SSH::KeyFactory.expects(:prompt).with('Enter passphrase for :', false).returns('pwd12')
91
- Net::SSH.start("localhost", "net_ssh_1", options) do |ssh|
92
- ssh.exec! 'whoami'
93
- end
94
- end
95
- end
96
- end
@@ -1,93 +0,0 @@
1
- require_relative './common'
2
- require 'net/ssh/buffer'
3
- require 'net/ssh'
4
- require 'timeout'
5
- require 'tempfile'
6
- require 'net/ssh/proxy/command'
7
-
8
- class TestProxy < Test::Unit::TestCase
9
- include IntegrationTestHelpers
10
-
11
- def localhost
12
- 'localhost'
13
- end
14
-
15
- def user
16
- 'net_ssh_1'
17
- end
18
-
19
- def ssh_start_params(options)
20
- [localhost ,user , {:keys => @key_id_rsa, :verbose => :debug}.merge(options)]
21
- end
22
-
23
- def setup_ssh_env(&block)
24
- tmpdir do |dir|
25
- @key_id_rsa = "#{dir}/id_rsa"
26
- sh "rm -rf #{@key_id_rsa} #{@key_id_rsa}.pub"
27
- sh "ssh-keygen -f #{@key_id_rsa} -t rsa -N ''"
28
- set_authorized_key(user,"#{@key_id_rsa}.pub")
29
- yield
30
- end
31
- end
32
-
33
- def test_smoke
34
- setup_ssh_env do
35
- proxy = Net::SSH::Proxy::Command.new("/bin/nc localhost 22")
36
- msg = 'echo123'
37
- ret = Net::SSH.start(*ssh_start_params(:proxy => proxy)) do |ssh|
38
- ssh.exec! "echo \"$USER:#{msg}\""
39
- end
40
- assert_equal "net_ssh_1:#{msg}\n", ret
41
- end
42
- end
43
-
44
- def with_spurious_write_wakeup_emulate(rate=99,&block)
45
- orig_io_select = Net::SSH::Compat.method(:io_select)
46
- count = 0
47
- Net::SSH::Compat.singleton_class.send(:define_method,:io_select) do |*params|
48
- count += 1
49
- if (count % rate != 0)
50
- if params && params[1] && !params[1].empty?
51
- return [[],params[1],[]]
52
- end
53
- #if params && params[0] && !params[0].empty?
54
- #return [params[0],[],[]]
55
- #end
56
- end
57
- IO.select(*params)
58
- end
59
- begin
60
- yield
61
- ensure
62
- Net::SSH::Compat.singleton_class.send(:define_method,:io_select,&orig_io_select)
63
- end
64
- end
65
-
66
- def test_with_rate_limit_and_spurious_wakeup
67
- system("sudo sh -c 'echo 4096 > /proc/sys/fs/pipe-max-size'")
68
- begin
69
- setup_ssh_env do
70
- proxy = Net::SSH::Proxy::Command.new("/usr/bin/pv --rate-limit 100k | /bin/nc localhost 22")
71
- #proxy = Net::SSH::Proxy::Command.new("/bin/nc localhost 22")
72
- begin
73
- large_msg = 'echo123'*30000
74
- ok = Net::SSH.start(*ssh_start_params(:proxy => proxy)) do |ssh|
75
- with_spurious_write_wakeup_emulate do
76
- ret = ssh.exec! "echo \"$USER:#{large_msg}\""
77
- #assert_equal "net_ssh_1:#{large_msg}\n", ret
78
- assert_equal "/bin/sh: Argument list too long\n", ret
79
- hello_count = 1000
80
- ret = ssh.exec! "ruby -e 'puts \"Hello\"*#{hello_count}'"
81
- assert_equal "Hello"*hello_count+"\n", ret
82
- end
83
- :ok
84
- end
85
- end
86
- assert_equal :ok, ok
87
- end
88
- ensure
89
- system("sudo sh -c 'echo 1048576 > /proc/sys/fs/pipe-max-size'")
90
- end
91
- end
92
-
93
- end
@@ -1 +0,0 @@
1
- github.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==
@@ -1 +0,0 @@
1
- |1|eKp+6E0rZ3lONgsIziurXEnaIik=|rcQB/rlJMUquUyFta64KugPjX4o= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==
@@ -1,37 +0,0 @@
1
- #
2
- # Tests for communication capability with Pageant (or KeeAgent)
3
- # process, to include the case where it is running in different UAC
4
- # context.
5
- #
6
- # To run:
7
- # - Ensure that Pageant is running (not as administrator).
8
- # - Open two command prompts, one as an administrator and one limited
9
- # (normal).
10
- # - Within each, from the root net/ssh project directory, execute:
11
- # ruby -Ilib -Itest -rrubygems test/manual/test_pageant.rb
12
- #
13
-
14
- require 'common'
15
- require 'net/ssh/authentication/agent'
16
-
17
- module Authentication
18
-
19
- class TestPageant < Test::Unit::TestCase
20
-
21
- def test_agent_should_be_able_to_negotiate
22
- assert_nothing_raised(Net::SSH::Authentication::AgentNotAvailable) { agent.negotiate! }
23
- end
24
-
25
- private
26
-
27
- def agent(auto=:connect)
28
- @agent ||= begin
29
- agent = Net::SSH::Authentication::Agent.new
30
- agent.connect! if auto == :connect
31
- agent
32
- end
33
- end
34
-
35
- end
36
-
37
- end
@@ -1,53 +0,0 @@
1
- require 'common'
2
- require 'net/ssh'
3
-
4
- module NetSSH
5
- class TestConnection < Test::Unit::TestCase
6
- attr_reader :connection_session
7
-
8
- def setup
9
- authentication_session = mock('authentication_session')
10
- authentication_session.stubs(:authenticate).returns(true)
11
- Net::SSH::Authentication::Session.stubs(:new).returns(authentication_session)
12
- Net::SSH::Transport::Session.stubs(:new).returns(mock('transport_session'))
13
- @connection_session = mock('connection_session')
14
- Net::SSH::Connection::Session.expects(:new => connection_session)
15
- end
16
-
17
- def test_close_connection_on_exception
18
- @connection_session.expects(:closed?).returns(false)
19
- @connection_session.expects(:close).once
20
-
21
- begin
22
- Net::SSH.start('localhost', 'testuser') { raise "error" }
23
- rescue RuntimeError
24
- # We aren't interested in the exception
25
- end
26
- end
27
-
28
- def test_close_connection_on_exception_only_if_still_open
29
- conn_open = states('conn').starts_as(true)
30
- @connection_session.expects(:close).then(conn_open.is(false)).once
31
- @connection_session.expects(:closed?).when(conn_open.is(false)).returns(true)
32
-
33
- begin
34
- Net::SSH.start('localhost', 'testuser') do |ssh|
35
- ssh.close
36
- raise "error"
37
- end
38
- rescue RuntimeError
39
- # We aren't interested in the exception
40
- end
41
- end
42
-
43
- def test_return_value_is_returned
44
- @connection_session.expects(:closed?).returns(false)
45
- @connection_session.expects(:close).once
46
-
47
- val = 1
48
- retval = Net::SSH.start('localhost', 'testuser') { val }
49
- assert_equal(val, retval)
50
- end
51
- end
52
- end
53
-
@@ -1,57 +0,0 @@
1
- require 'common'
2
- require 'net/ssh'
3
-
4
- module NetSSH
5
- class TestStartOptions < Test::Unit::TestCase
6
- def setup
7
- authentication_session = mock('authentication_session')
8
- authentication_session.stubs(:authenticate).returns(true)
9
- Net::SSH::Authentication::Session.stubs(:new).returns(authentication_session)
10
- Net::SSH::Transport::Session.stubs(:new).returns(mock('transport_session'))
11
- Net::SSH::Connection::Session.stubs(:new).returns(mock('connection_session'))
12
- end
13
-
14
- def test_start_should_accept_keepalive_option
15
- assert_nothing_raised do
16
- options = { :keepalive => true }
17
- Net::SSH.start('localhost', 'testuser', options)
18
- end
19
- end
20
-
21
- def test_start_should_accept_keepalive_interval_option
22
- assert_nothing_raised do
23
- options = { :keepalive_interval => 10 }
24
- Net::SSH.start('localhost', 'testuser', options)
25
- end
26
- end
27
-
28
- def test_start_should_accept_send_env_option
29
- assert_nothing_raised do
30
- options = { :send_env => [ /^LC_.*$/, "LANG" ] }
31
- Net::SSH.start('localhost', 'testuser', options)
32
- end
33
- end
34
-
35
- def test_start_should_accept_number_of_password_prompts_option
36
- assert_nothing_raised do
37
- options = { :number_of_password_prompts => 2 }
38
- Net::SSH.start('localhost', 'testuser', options)
39
- end
40
- end
41
-
42
- def test_start_should_accept_non_interactive_option
43
- assert_nothing_raised do
44
- options = { :non_interactive => true }
45
- Net::SSH.start('localhost', 'testuser', options)
46
- end
47
- end
48
-
49
- def test_start_should_accept_remote_user_option
50
- assert_nothing_raised do
51
- options = { :remote_user => 'foo' }
52
- Net::SSH.start('localhost', 'testuser', options)
53
- end
54
- end
55
- end
56
- end
57
-
@@ -1,28 +0,0 @@
1
- require 'common'
2
- require 'net/ssh'
3
-
4
- module NetSSH
5
- class TestStart < Test::Unit::TestCase
6
- attr_reader :transport_session
7
- attr_reader :authentication_session
8
-
9
- def setup
10
- @transport_session = mock('transport_session')
11
- @authentication_session = mock('authentication_session')
12
- Net::SSH::Transport::Session.expects(:new => transport_session)
13
- Net::SSH::Authentication::Session.expects(:new => authentication_session)
14
- end
15
-
16
- def test_close_transport_when_authentication_fails
17
- authentication_session.expects(:authenticate => false)
18
-
19
- transport_session.expects(:close).at_least_once
20
-
21
- begin
22
- Net::SSH.start('localhost', 'testuser') {}
23
- rescue Net::SSH::AuthenticationFailed
24
- # Authentication should fail, as it is part of the context
25
- end
26
- end
27
- end
28
- end
@@ -1,27 +0,0 @@
1
- require 'common'
2
- require 'net/ssh'
3
-
4
- module NetSSH
5
- class TestStartUserNil < Test::Unit::TestCase
6
- def setup
7
- @authentication_session = mock('authentication_session')
8
- Net::SSH::Authentication::Session.stubs(:new).returns(@authentication_session)
9
- Net::SSH::Transport::Session.stubs(:new).returns(mock('transport_session'))
10
- Net::SSH::Connection::Session.stubs(:new).returns(mock('connection_session'))
11
- end
12
-
13
- def test_start_should_accept_nil_user
14
- @authentication_session.stubs(:authenticate).returns(true)
15
- assert_nothing_raised do
16
- Net::SSH.start('localhost')
17
- end
18
- end
19
-
20
- def test_start_should_use_default_user_when_nil
21
- @authentication_session.stubs(:authenticate).with() {|_next_service, user, _password| user == Etc.getlogin }.returns(true)
22
- assert_nothing_raised do
23
- Net::SSH.start('localhost')
24
- end
25
- end
26
- end
27
- end
data/test/test_all.rb DELETED
@@ -1,12 +0,0 @@
1
- $: << '.'
2
-
3
- # $ ruby -Ilib -Itest -rrubygems test/test_all.rb
4
- # $ ruby -Ilib -Itest -rrubygems test/transport/test_server_version.rb
5
- Dir.chdir(File.dirname(__FILE__)) do
6
- test_files = Dir['**/test_*.rb']-['test_all.rb'] # prevent circular require
7
- test_files -= Dir['integration/test_*.rb'] unless ENV['NET_SSH_RUN_INTEGRATION_TESTS']
8
- test_files = test_files.reject { |f| f =~ /^manual/ }
9
- test_files = test_files.select { |f| f =~ Regexp.new(ENV['ONLY']) } if ENV['ONLY']
10
- test_files = test_files.reject { |f| f =~ Regexp.new(ENV['EXCEPT']) } if ENV['EXCEPT']
11
- test_files.each { |file| require(file) }
12
- end