poolparty 1.3.4 → 1.3.6

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 (174) hide show
  1. data/Rakefile +2 -2
  2. data/VERSION.yml +1 -1
  3. data/bin/cloud-bootstrap +1 -0
  4. data/bin/cloud-configure +1 -0
  5. data/bin/cloud-contract +1 -0
  6. data/bin/cloud-misc +34 -0
  7. data/bin/cloud-setup +36 -0
  8. data/bin/cloud-ssh +4 -1
  9. data/config/jeweler.rb +4 -3
  10. data/examples/monitored_cloud.rb +1 -1
  11. data/examples/thrift/thrift_example.rb +5 -3
  12. data/examples/vmware.rb +28 -0
  13. data/lib/cloud_providers/cloud_provider_instance.rb +14 -5
  14. data/lib/cloud_providers/connections.rb +1 -1
  15. data/lib/core/file.rb +12 -0
  16. data/lib/core/object.rb +2 -2
  17. data/lib/dependency_resolvers/base.rb +1 -1
  18. data/lib/dependency_resolvers/chef.rb +9 -7
  19. data/lib/dependency_resolvers/proxy_object.rb +11 -3
  20. data/lib/mixins/askable.rb +16 -7
  21. data/lib/poolparty/base.rb +8 -7
  22. data/lib/poolparty/cloud.rb +77 -7
  23. data/lib/poolparty/default.rb +1 -0
  24. data/lib/poolparty/installer.rb +8 -4
  25. data/lib/poolparty/installers/ec2.rb +75 -5
  26. data/lib/poolparty/installers/vmware.rb +17 -5
  27. data/lib/poolparty/plugin.rb +1 -5
  28. data/lib/poolparty/plugins/apache.rb +10 -7
  29. data/lib/poolparty/plugins/apache2/base.conf.erb +2 -2
  30. data/lib/poolparty/plugins/apache2/browser_fixes.conf.erb +1 -1
  31. data/lib/poolparty/plugins/apache2/passenger_site.rb +2 -2
  32. data/lib/poolparty/plugins/collectd/templates/collectd.conf.erb +369 -0
  33. data/lib/poolparty/plugins/collectd.rb +24 -0
  34. data/lib/poolparty/plugins/hermes.rb +89 -0
  35. data/lib/poolparty/pool.rb +33 -3
  36. data/lib/poolparty/resource.rb +32 -18
  37. data/lib/poolparty/resources/directory.rb +5 -1
  38. data/lib/poolparty/resources/exec.rb +2 -2
  39. data/lib/poolparty/resources/file.rb +8 -2
  40. data/lib/poolparty/resources/gem_package.rb +2 -2
  41. data/lib/poolparty/resources/line.rb +23 -6
  42. data/lib/poolparty/resources/mount.rb +2 -2
  43. data/lib/poolparty/resources/package.rb +2 -2
  44. data/lib/poolparty/resources/service.rb +2 -2
  45. data/lib/poolparty/resources/user.rb +2 -2
  46. data/lib/poolparty/resources/variable.rb +4 -3
  47. data/lib/poolparty.rb +5 -3
  48. data/lib/proto/command_interface_handler.rb +17 -1
  49. data/lib/proto/gen-py/cloudthrift/CommandInterface.pyc +0 -0
  50. data/lib/proto/gen-py/cloudthrift/__init__.pyc +0 -0
  51. data/lib/proto/gen-py/cloudthrift/constants.pyc +0 -0
  52. data/lib/proto/gen-py/cloudthrift/ttypes.pyc +0 -0
  53. data/lib/proto/gen-py/thrift/Thrift.pyc +0 -0
  54. data/lib/proto/gen-py/thrift/__init__.pyc +0 -0
  55. data/lib/proto/gen-py/thrift/protocol/TBinaryProtocol.pyc +0 -0
  56. data/lib/proto/gen-py/thrift/protocol/TProtocol.pyc +0 -0
  57. data/lib/proto/gen-py/thrift/protocol/__init__.pyc +0 -0
  58. data/lib/proto/gen-py/thrift/transport/TSocket.pyc +0 -0
  59. data/lib/proto/gen-py/thrift/transport/TTransport.pyc +0 -0
  60. data/lib/proto/gen-py/thrift/transport/__init__.pyc +0 -0
  61. data/test/lib/dependency_resolvers/chef_test.rb +92 -100
  62. data/test/lib/poolparty/base_test.rb +13 -0
  63. data/test/lib/poolparty/cloud_test.rb +50 -2
  64. data/test/lib/poolparty/monitor_test.rb +2 -2
  65. data/test/lib/poolparty/resource_test.rb +5 -0
  66. data/test/lib/poolparty/resources/line_test.rb +3 -3
  67. data/test/lib/poolparty/resources/service_test.rb +1 -1
  68. data/test/lib/poolparty/resources/variable_test.rb +33 -10
  69. data/vendor/gems/net-ssh/CHANGELOG.rdoc +127 -0
  70. data/vendor/gems/net-ssh/Manifest +104 -0
  71. data/vendor/gems/net-ssh/README.rdoc +110 -0
  72. data/vendor/gems/net-ssh/Rakefile +26 -0
  73. data/vendor/gems/net-ssh/THANKS.rdoc +16 -0
  74. data/vendor/gems/net-ssh/lib/net/ssh/authentication/agent.rb +176 -0
  75. data/vendor/gems/net-ssh/lib/net/ssh/authentication/constants.rb +18 -0
  76. data/vendor/gems/net-ssh/lib/net/ssh/authentication/key_manager.rb +193 -0
  77. data/vendor/gems/net-ssh/lib/net/ssh/authentication/methods/abstract.rb +60 -0
  78. data/vendor/gems/net-ssh/lib/net/ssh/authentication/methods/hostbased.rb +71 -0
  79. data/vendor/gems/net-ssh/lib/net/ssh/authentication/methods/keyboard_interactive.rb +66 -0
  80. data/vendor/gems/net-ssh/lib/net/ssh/authentication/methods/password.rb +39 -0
  81. data/vendor/gems/net-ssh/lib/net/ssh/authentication/methods/publickey.rb +92 -0
  82. data/vendor/gems/net-ssh/lib/net/ssh/authentication/pageant.rb +183 -0
  83. data/vendor/gems/net-ssh/lib/net/ssh/authentication/session.rb +134 -0
  84. data/vendor/gems/net-ssh/lib/net/ssh/buffer.rb +340 -0
  85. data/vendor/gems/net-ssh/lib/net/ssh/buffered_io.rb +149 -0
  86. data/vendor/gems/net-ssh/lib/net/ssh/config.rb +181 -0
  87. data/vendor/gems/net-ssh/lib/net/ssh/connection/channel.rb +625 -0
  88. data/vendor/gems/net-ssh/lib/net/ssh/connection/constants.rb +33 -0
  89. data/vendor/gems/net-ssh/lib/net/ssh/connection/session.rb +596 -0
  90. data/vendor/gems/net-ssh/lib/net/ssh/connection/term.rb +178 -0
  91. data/vendor/gems/net-ssh/lib/net/ssh/errors.rb +85 -0
  92. data/vendor/gems/net-ssh/lib/net/ssh/key_factory.rb +102 -0
  93. data/vendor/gems/net-ssh/lib/net/ssh/known_hosts.rb +129 -0
  94. data/vendor/gems/net-ssh/lib/net/ssh/loggable.rb +61 -0
  95. data/vendor/gems/net-ssh/lib/net/ssh/packet.rb +102 -0
  96. data/vendor/gems/net-ssh/lib/net/ssh/prompt.rb +93 -0
  97. data/vendor/gems/net-ssh/lib/net/ssh/proxy/errors.rb +14 -0
  98. data/vendor/gems/net-ssh/lib/net/ssh/proxy/http.rb +94 -0
  99. data/vendor/gems/net-ssh/lib/net/ssh/proxy/socks4.rb +70 -0
  100. data/vendor/gems/net-ssh/lib/net/ssh/proxy/socks5.rb +129 -0
  101. data/vendor/gems/net-ssh/lib/net/ssh/ruby_compat.rb +7 -0
  102. data/vendor/gems/net-ssh/lib/net/ssh/service/forward.rb +267 -0
  103. data/vendor/gems/net-ssh/lib/net/ssh/test/channel.rb +129 -0
  104. data/vendor/gems/net-ssh/lib/net/ssh/test/extensions.rb +152 -0
  105. data/vendor/gems/net-ssh/lib/net/ssh/test/kex.rb +44 -0
  106. data/vendor/gems/net-ssh/lib/net/ssh/test/local_packet.rb +51 -0
  107. data/vendor/gems/net-ssh/lib/net/ssh/test/packet.rb +81 -0
  108. data/vendor/gems/net-ssh/lib/net/ssh/test/remote_packet.rb +38 -0
  109. data/vendor/gems/net-ssh/lib/net/ssh/test/script.rb +157 -0
  110. data/vendor/gems/net-ssh/lib/net/ssh/test/socket.rb +59 -0
  111. data/vendor/gems/net-ssh/lib/net/ssh/test.rb +89 -0
  112. data/vendor/gems/net-ssh/lib/net/ssh/transport/algorithms.rb +384 -0
  113. data/vendor/gems/net-ssh/lib/net/ssh/transport/cipher_factory.rb +80 -0
  114. data/vendor/gems/net-ssh/lib/net/ssh/transport/constants.rb +30 -0
  115. data/vendor/gems/net-ssh/lib/net/ssh/transport/hmac/abstract.rb +78 -0
  116. data/vendor/gems/net-ssh/lib/net/ssh/transport/hmac/md5.rb +12 -0
  117. data/vendor/gems/net-ssh/lib/net/ssh/transport/hmac/md5_96.rb +11 -0
  118. data/vendor/gems/net-ssh/lib/net/ssh/transport/hmac/none.rb +15 -0
  119. data/vendor/gems/net-ssh/lib/net/ssh/transport/hmac/sha1.rb +13 -0
  120. data/vendor/gems/net-ssh/lib/net/ssh/transport/hmac/sha1_96.rb +11 -0
  121. data/vendor/gems/net-ssh/lib/net/ssh/transport/hmac.rb +31 -0
  122. data/vendor/gems/net-ssh/lib/net/ssh/transport/identity_cipher.rb +55 -0
  123. data/vendor/gems/net-ssh/lib/net/ssh/transport/kex/diffie_hellman_group1_sha1.rb +208 -0
  124. data/vendor/gems/net-ssh/lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha1.rb +77 -0
  125. data/vendor/gems/net-ssh/lib/net/ssh/transport/kex.rb +13 -0
  126. data/vendor/gems/net-ssh/lib/net/ssh/transport/openssl.rb +128 -0
  127. data/vendor/gems/net-ssh/lib/net/ssh/transport/packet_stream.rb +230 -0
  128. data/vendor/gems/net-ssh/lib/net/ssh/transport/server_version.rb +60 -0
  129. data/vendor/gems/net-ssh/lib/net/ssh/transport/session.rb +276 -0
  130. data/vendor/gems/net-ssh/lib/net/ssh/transport/state.rb +201 -0
  131. data/vendor/gems/net-ssh/lib/net/ssh/verifiers/lenient.rb +30 -0
  132. data/vendor/gems/net-ssh/lib/net/ssh/verifiers/null.rb +12 -0
  133. data/vendor/gems/net-ssh/lib/net/ssh/verifiers/strict.rb +53 -0
  134. data/vendor/gems/net-ssh/lib/net/ssh/version.rb +62 -0
  135. data/vendor/gems/net-ssh/lib/net/ssh.rb +215 -0
  136. data/vendor/gems/net-ssh/net-ssh.gemspec +33 -0
  137. data/vendor/gems/net-ssh/setup.rb +1585 -0
  138. data/vendor/gems/net-ssh/test/authentication/methods/common.rb +28 -0
  139. data/vendor/gems/net-ssh/test/authentication/methods/test_abstract.rb +51 -0
  140. data/vendor/gems/net-ssh/test/authentication/methods/test_hostbased.rb +114 -0
  141. data/vendor/gems/net-ssh/test/authentication/methods/test_keyboard_interactive.rb +98 -0
  142. data/vendor/gems/net-ssh/test/authentication/methods/test_password.rb +50 -0
  143. data/vendor/gems/net-ssh/test/authentication/methods/test_publickey.rb +127 -0
  144. data/vendor/gems/net-ssh/test/authentication/test_agent.rb +205 -0
  145. data/vendor/gems/net-ssh/test/authentication/test_key_manager.rb +105 -0
  146. data/vendor/gems/net-ssh/test/authentication/test_session.rb +93 -0
  147. data/vendor/gems/net-ssh/test/common.rb +106 -0
  148. data/vendor/gems/net-ssh/test/configs/eqsign +3 -0
  149. data/vendor/gems/net-ssh/test/configs/exact_match +8 -0
  150. data/vendor/gems/net-ssh/test/configs/wild_cards +14 -0
  151. data/vendor/gems/net-ssh/test/connection/test_channel.rb +452 -0
  152. data/vendor/gems/net-ssh/test/connection/test_session.rb +488 -0
  153. data/vendor/gems/net-ssh/test/test_all.rb +6 -0
  154. data/vendor/gems/net-ssh/test/test_buffer.rb +336 -0
  155. data/vendor/gems/net-ssh/test/test_buffered_io.rb +63 -0
  156. data/vendor/gems/net-ssh/test/test_config.rb +84 -0
  157. data/vendor/gems/net-ssh/test/test_key_factory.rb +67 -0
  158. data/vendor/gems/net-ssh/test/transport/hmac/test_md5.rb +39 -0
  159. data/vendor/gems/net-ssh/test/transport/hmac/test_md5_96.rb +25 -0
  160. data/vendor/gems/net-ssh/test/transport/hmac/test_none.rb +34 -0
  161. data/vendor/gems/net-ssh/test/transport/hmac/test_sha1.rb +34 -0
  162. data/vendor/gems/net-ssh/test/transport/hmac/test_sha1_96.rb +25 -0
  163. data/vendor/gems/net-ssh/test/transport/kex/test_diffie_hellman_group1_sha1.rb +146 -0
  164. data/vendor/gems/net-ssh/test/transport/kex/test_diffie_hellman_group_exchange_sha1.rb +92 -0
  165. data/vendor/gems/net-ssh/test/transport/test_algorithms.rb +302 -0
  166. data/vendor/gems/net-ssh/test/transport/test_cipher_factory.rb +171 -0
  167. data/vendor/gems/net-ssh/test/transport/test_hmac.rb +34 -0
  168. data/vendor/gems/net-ssh/test/transport/test_identity_cipher.rb +40 -0
  169. data/vendor/gems/net-ssh/test/transport/test_packet_stream.rb +435 -0
  170. data/vendor/gems/net-ssh/test/transport/test_server_version.rb +57 -0
  171. data/vendor/gems/net-ssh/test/transport/test_session.rb +315 -0
  172. data/vendor/gems/net-ssh/test/transport/test_state.rb +173 -0
  173. metadata +116 -4
  174. data/bin/install-poolparty +0 -20
@@ -0,0 +1,105 @@
1
+ require 'common'
2
+ require 'net/ssh/authentication/key_manager'
3
+
4
+ module Authentication
5
+
6
+ class TestKeyManager < Test::Unit::TestCase
7
+ def test_key_files_and_known_identities_are_empty_by_default
8
+ assert manager.key_files.empty?
9
+ assert manager.known_identities.empty?
10
+ end
11
+
12
+ def test_assume_agent_is_available_by_default
13
+ assert manager.use_agent?
14
+ end
15
+
16
+ def test_add_ensures_list_is_unique
17
+ manager.add "/first"
18
+ manager.add "/second"
19
+ manager.add "/third"
20
+ manager.add "/second"
21
+ assert_equal %w(/first /second /third), manager.key_files
22
+ end
23
+
24
+ def test_use_agent_should_be_set_to_false_if_agent_could_not_be_found
25
+ Net::SSH::Authentication::Agent.expects(:connect).raises(Net::SSH::Authentication::AgentNotAvailable)
26
+ assert manager.use_agent?
27
+ assert_nil manager.agent
28
+ assert !manager.use_agent?
29
+ end
30
+
31
+ def test_each_identity_should_load_from_key_files
32
+ manager.stubs(:agent).returns(nil)
33
+
34
+ stub_file_key "/first", rsa
35
+ stub_file_key "/second", dsa
36
+
37
+ identities = []
38
+ manager.each_identity { |identity| identities << identity }
39
+
40
+ assert_equal 2, identities.length
41
+ assert_equal rsa.to_blob, identities.first.to_blob
42
+ assert_equal dsa.to_blob, identities.last.to_blob
43
+
44
+ assert_equal({:from => :file, :file => "/first", :key => rsa}, manager.known_identities[rsa])
45
+ assert_equal({:from => :file, :file => "/second", :key => dsa}, manager.known_identities[dsa])
46
+ end
47
+
48
+ def test_identities_should_load_from_agent
49
+ manager.stubs(:agent).returns(agent)
50
+
51
+ identities = []
52
+ manager.each_identity { |identity| identities << identity }
53
+
54
+ assert_equal 2, identities.length
55
+ assert_equal rsa.to_blob, identities.first.to_blob
56
+ assert_equal dsa.to_blob, identities.last.to_blob
57
+
58
+ assert_equal({:from => :agent}, manager.known_identities[rsa])
59
+ assert_equal({:from => :agent}, manager.known_identities[dsa])
60
+ end
61
+
62
+ def test_sign_with_agent_originated_key_should_request_signature_from_agent
63
+ manager.stubs(:agent).returns(agent)
64
+ manager.each_identity { |identity| } # preload the known_identities
65
+ agent.expects(:sign).with(rsa, "hello, world").returns("abcxyz123")
66
+ assert_equal "abcxyz123", manager.sign(rsa, "hello, world")
67
+ end
68
+
69
+ def test_sign_with_file_originated_key_should_load_private_key_and_sign_with_it
70
+ manager.stubs(:agent).returns(nil)
71
+ stub_file_key "/first", rsa(512), true
72
+ rsa.expects(:ssh_do_sign).with("hello, world").returns("abcxyz123")
73
+ manager.each_identity { |identity| } # preload the known_identities
74
+ assert_equal "\0\0\0\assh-rsa\0\0\0\011abcxyz123", manager.sign(rsa, "hello, world")
75
+ end
76
+
77
+ private
78
+
79
+ def stub_file_key(name, key, also_private=false)
80
+ manager.add(name)
81
+ File.expects(:readable?).with(name).returns(true)
82
+ File.expects(:readable?).with(name + ".pub").returns(false)
83
+ Net::SSH::KeyFactory.expects(:load_private_key).with(name, nil).returns(key).at_least_once
84
+ key.expects(:public_key).returns(key)
85
+ end
86
+
87
+ def rsa(size=32)
88
+ @rsa ||= OpenSSL::PKey::RSA.new(size)
89
+ end
90
+
91
+ def dsa
92
+ @dsa ||= OpenSSL::PKey::DSA.new(32)
93
+ end
94
+
95
+ def agent
96
+ @agent ||= stub("agent", :identities => [rsa, dsa])
97
+ end
98
+
99
+ def manager
100
+ @manager ||= Net::SSH::Authentication::KeyManager.new(nil)
101
+ end
102
+
103
+ end
104
+
105
+ end
@@ -0,0 +1,93 @@
1
+ require 'common'
2
+ require 'net/ssh/authentication/session'
3
+
4
+ module Authentication
5
+
6
+ class TestSession < Test::Unit::TestCase
7
+ include Net::SSH::Transport::Constants
8
+ include Net::SSH::Authentication::Constants
9
+
10
+ def test_constructor_should_set_defaults
11
+ assert_equal %w(publickey hostbased password keyboard-interactive), session.auth_methods
12
+ assert_equal session.auth_methods, session.allowed_auth_methods
13
+ end
14
+
15
+ def test_authenticate_should_raise_error_if_service_request_fails
16
+ transport.expect do |t, packet|
17
+ assert_equal SERVICE_REQUEST, packet.type
18
+ assert_equal "ssh-userauth", packet.read_string
19
+ t.return(255)
20
+ end
21
+
22
+ assert_raises(Net::SSH::Exception) { session.authenticate("next service", "username", "password") }
23
+ end
24
+
25
+ def test_authenticate_should_return_false_if_all_auth_methods_fail
26
+ transport.expect do |t, packet|
27
+ assert_equal SERVICE_REQUEST, packet.type
28
+ assert_equal "ssh-userauth", packet.read_string
29
+ t.return(SERVICE_ACCEPT)
30
+ end
31
+
32
+ Net::SSH::Authentication::Methods::Publickey.any_instance.expects(:authenticate).with("next service", "username", "password").returns(false)
33
+ Net::SSH::Authentication::Methods::Hostbased.any_instance.expects(:authenticate).with("next service", "username", "password").returns(false)
34
+ Net::SSH::Authentication::Methods::Password.any_instance.expects(:authenticate).with("next service", "username", "password").returns(false)
35
+ Net::SSH::Authentication::Methods::KeyboardInteractive.any_instance.expects(:authenticate).with("next service", "username", "password").returns(false)
36
+
37
+ assert_equal false, session.authenticate("next service", "username", "password")
38
+ end
39
+
40
+ def test_next_message_should_silently_handle_USERAUTH_BANNER_packets
41
+ transport.return(USERAUTH_BANNER, :string, "Howdy, folks!")
42
+ transport.return(SERVICE_ACCEPT)
43
+ assert_equal SERVICE_ACCEPT, session.next_message.type
44
+ end
45
+
46
+ def test_next_message_should_understand_USERAUTH_FAILURE
47
+ transport.return(USERAUTH_FAILURE, :string, "a,b,c", :bool, false)
48
+ packet = session.next_message
49
+ assert_equal USERAUTH_FAILURE, packet.type
50
+ assert_equal %w(a b c), session.allowed_auth_methods
51
+ end
52
+
53
+ (60..79).each do |type|
54
+ define_method("test_next_message_should_return_packets_of_type_#{type}") do
55
+ transport.return(type)
56
+ assert_equal type, session.next_message.type
57
+ end
58
+ end
59
+
60
+ def test_next_message_should_understand_USERAUTH_SUCCESS
61
+ transport.return(USERAUTH_SUCCESS)
62
+ assert !transport.hints[:authenticated]
63
+ assert_equal USERAUTH_SUCCESS, session.next_message.type
64
+ assert transport.hints[:authenticated]
65
+ end
66
+
67
+ def test_next_message_should_raise_error_on_unrecognized_packet_types
68
+ transport.return(1)
69
+ assert_raises(Net::SSH::Exception) { session.next_message }
70
+ end
71
+
72
+ def test_expect_message_should_raise_exception_if_next_packet_is_not_expected_type
73
+ transport.return(SERVICE_ACCEPT)
74
+ assert_raises(Net::SSH::Exception) { session.expect_message(USERAUTH_BANNER) }
75
+ end
76
+
77
+ def test_expect_message_should_return_packet_if_next_packet_is_expected_type
78
+ transport.return(SERVICE_ACCEPT)
79
+ assert_equal SERVICE_ACCEPT, session.expect_message(SERVICE_ACCEPT).type
80
+ end
81
+
82
+ private
83
+
84
+ def session(options={})
85
+ @session ||= Net::SSH::Authentication::Session.new(transport(options), options)
86
+ end
87
+
88
+ def transport(options={})
89
+ @transport ||= MockTransport.new(options)
90
+ end
91
+ end
92
+
93
+ end
@@ -0,0 +1,106 @@
1
+ $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
2
+ require 'test/unit'
3
+ require 'mocha'
4
+ require 'net/ssh/buffer'
5
+ require 'net/ssh/config'
6
+ require 'net/ssh/loggable'
7
+ require 'net/ssh/packet'
8
+ require 'net/ssh/transport/session'
9
+ require 'ostruct'
10
+
11
+ # clear the default files out so that tests don't get confused by existing
12
+ # SSH config files.
13
+ $original_config_default_files = Net::SSH::Config.default_files.dup
14
+ Net::SSH::Config.default_files.clear
15
+
16
+ def P(*args)
17
+ Net::SSH::Packet.new(Net::SSH::Buffer.from(*args))
18
+ end
19
+
20
+ class MockTransport < Net::SSH::Transport::Session
21
+ class BlockVerifier
22
+ def initialize(block)
23
+ @block = block
24
+ end
25
+
26
+ def verify(data)
27
+ @block.call(data)
28
+ end
29
+ end
30
+
31
+ attr_reader :host_key_verifier
32
+ attr_accessor :host_as_string
33
+ attr_accessor :server_version
34
+
35
+ attr_reader :client_options
36
+ attr_reader :server_options
37
+ attr_reader :hints, :queue
38
+
39
+ attr_accessor :mock_enqueue
40
+
41
+ def initialize(options={})
42
+ self.logger = options[:logger]
43
+ self.host_as_string = "net.ssh.test,127.0.0.1"
44
+ self.server_version = OpenStruct.new(:version => "SSH-2.0-Ruby/Net::SSH::Test")
45
+ @expectation = nil
46
+ @queue = []
47
+ @hints = {}
48
+ @socket = options[:socket]
49
+ @algorithms = OpenStruct.new(:session_id => "abcxyz123")
50
+ verifier { |data| true }
51
+ end
52
+
53
+ def send_message(message)
54
+ buffer = Net::SSH::Buffer.new(message.to_s)
55
+ if @expectation.nil?
56
+ raise "got #{message.to_s.inspect} but was not expecting anything"
57
+ else
58
+ block, @expectation = @expectation, nil
59
+ block.call(self, Net::SSH::Packet.new(buffer))
60
+ end
61
+ end
62
+
63
+ def enqueue_message(message)
64
+ if mock_enqueue
65
+ send_message(message)
66
+ else
67
+ super
68
+ end
69
+ end
70
+
71
+ def poll_message
72
+ @queue.shift
73
+ end
74
+
75
+ def next_message
76
+ @queue.shift or raise "expected a message from the server but nothing was ready to send"
77
+ end
78
+
79
+ def return(type, *args)
80
+ @queue << P(:byte, type, *args)
81
+ end
82
+
83
+ def expect(&block)
84
+ @expectation = block
85
+ end
86
+
87
+ def expect!
88
+ expect {}
89
+ end
90
+
91
+ def verifier(&block)
92
+ @host_key_verifier = BlockVerifier.new(block)
93
+ end
94
+
95
+ def configure_client(options)
96
+ @client_options = options
97
+ end
98
+
99
+ def configure_server(options)
100
+ @server_options = options
101
+ end
102
+
103
+ def hint(name, value=true)
104
+ @hints[name] = value
105
+ end
106
+ end
@@ -0,0 +1,3 @@
1
+ Host=test.test
2
+ Port =1234
3
+ Compression yes
@@ -0,0 +1,8 @@
1
+ Host other.host
2
+ Compression no
3
+ Port 1231
4
+
5
+ Host test.host
6
+ Compression yes
7
+ ForwardAgent yes
8
+ Port 1234
@@ -0,0 +1,14 @@
1
+ Host test.*
2
+ Port 1234
3
+ Compression no
4
+
5
+ Host tes?.host
6
+ Port 4321
7
+ ForwardAgent yes
8
+
9
+ Host *.hos?
10
+ IdentityFile ~/.ssh/id_dsa
11
+ Compression yes
12
+
13
+ Host k*.host
14
+ RekeyLimit 1G