opensearch-transport 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +3 -0
  3. data/.gitignore +17 -0
  4. data/Gemfile +47 -0
  5. data/LICENSE +202 -0
  6. data/README.md +551 -0
  7. data/Rakefile +89 -0
  8. data/lib/opensearch/transport/client.rb +354 -0
  9. data/lib/opensearch/transport/redacted.rb +84 -0
  10. data/lib/opensearch/transport/transport/base.rb +450 -0
  11. data/lib/opensearch/transport/transport/connections/collection.rb +136 -0
  12. data/lib/opensearch/transport/transport/connections/connection.rb +169 -0
  13. data/lib/opensearch/transport/transport/connections/selector.rb +101 -0
  14. data/lib/opensearch/transport/transport/errors.rb +100 -0
  15. data/lib/opensearch/transport/transport/http/curb.rb +140 -0
  16. data/lib/opensearch/transport/transport/http/faraday.rb +101 -0
  17. data/lib/opensearch/transport/transport/http/manticore.rb +188 -0
  18. data/lib/opensearch/transport/transport/loggable.rb +94 -0
  19. data/lib/opensearch/transport/transport/response.rb +46 -0
  20. data/lib/opensearch/transport/transport/serializer/multi_json.rb +62 -0
  21. data/lib/opensearch/transport/transport/sniffer.rb +111 -0
  22. data/lib/opensearch/transport/version.rb +31 -0
  23. data/lib/opensearch/transport.rb +46 -0
  24. data/lib/opensearch-transport.rb +27 -0
  25. data/opensearch-transport.gemspec +92 -0
  26. data/spec/opensearch/connections/collection_spec.rb +275 -0
  27. data/spec/opensearch/connections/selector_spec.rb +183 -0
  28. data/spec/opensearch/transport/base_spec.rb +313 -0
  29. data/spec/opensearch/transport/client_spec.rb +1818 -0
  30. data/spec/opensearch/transport/sniffer_spec.rb +284 -0
  31. data/spec/spec_helper.rb +99 -0
  32. data/test/integration/transport_test.rb +108 -0
  33. data/test/profile/client_benchmark_test.rb +141 -0
  34. data/test/test_helper.rb +97 -0
  35. data/test/unit/connection_test.rb +145 -0
  36. data/test/unit/response_test.rb +41 -0
  37. data/test/unit/serializer_test.rb +42 -0
  38. data/test/unit/transport_base_test.rb +673 -0
  39. data/test/unit/transport_curb_test.rb +143 -0
  40. data/test/unit/transport_faraday_test.rb +237 -0
  41. data/test/unit/transport_manticore_test.rb +191 -0
  42. data.tar.gz.sig +1 -0
  43. metadata +456 -0
  44. metadata.gz.sig +1 -0
@@ -0,0 +1,143 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ #
3
+ # The OpenSearch Contributors require contributions made to
4
+ # this file be licensed under the Apache-2.0 license or a
5
+ # compatible open source license.
6
+ #
7
+ # Modifications Copyright OpenSearch Contributors. See
8
+ # GitHub history for details.
9
+ #
10
+ # Licensed to Elasticsearch B.V. under one or more contributor
11
+ # license agreements. See the NOTICE file distributed with
12
+ # this work for additional information regarding copyright
13
+ # ownership. Elasticsearch B.V. licenses this file to you under
14
+ # the Apache License, Version 2.0 (the "License"); you may
15
+ # not use this file except in compliance with the License.
16
+ # You may obtain a copy of the License at
17
+ #
18
+ # http://www.apache.org/licenses/LICENSE-2.0
19
+ #
20
+ # Unless required by applicable law or agreed to in writing,
21
+ # software distributed under the License is distributed on an
22
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
23
+ # KIND, either express or implied. See the License for the
24
+ # specific language governing permissions and limitations
25
+ # under the License.
26
+
27
+ require 'test_helper'
28
+
29
+ if JRUBY
30
+ puts "'#{File.basename(__FILE__)}' not supported on JRuby #{RUBY_VERSION}"
31
+ else
32
+ require 'opensearch/transport/transport/http/curb'
33
+ require 'curb'
34
+
35
+ class OpenSearch::Transport::Transport::HTTP::FaradayTest < Minitest::Test
36
+ include OpenSearch::Transport::Transport::HTTP
37
+
38
+ context "Curb transport" do
39
+ setup do
40
+ @transport = Curb.new :hosts => [ { :host => 'foobar', :port => 1234 } ]
41
+ end
42
+
43
+ should "implement host_unreachable_exceptions" do
44
+ assert_instance_of Array, @transport.host_unreachable_exceptions
45
+ end
46
+
47
+ should "implement __build_connections" do
48
+ assert_equal 1, @transport.hosts.size
49
+ assert_equal 1, @transport.connections.size
50
+
51
+ assert_instance_of ::Curl::Easy, @transport.connections.first.connection
52
+ assert_equal 'http://foobar:1234', @transport.connections.first.connection.url
53
+ end
54
+
55
+ should "perform the request" do
56
+ @transport.connections.first.connection.expects(:http).returns(stub_everything)
57
+ @transport.perform_request 'GET', '/'
58
+ end
59
+
60
+ should "set body for GET request" do
61
+ @transport.connections.first.connection.expects(:put_data=).with('{"foo":"bar"}')
62
+ @transport.connections.first.connection.expects(:http).with(:GET).returns(stub_everything)
63
+ @transport.perform_request 'GET', '/', {}, '{"foo":"bar"}'
64
+ end
65
+
66
+ should "perform request with headers" do
67
+ @transport.connections.first.connection.expects(:put_data=).with('{"foo":"bar"}')
68
+ @transport.connections.first.connection.expects(:http).with(:POST).returns(stub_everything)
69
+ @transport.connections.first.connection.headers.expects(:merge!).with("Content-Type" => "application/x-ndjson")
70
+
71
+ @transport.perform_request 'POST', '/', {}, {:foo => 'bar'}, {"Content-Type" => "application/x-ndjson"}
72
+ end
73
+
74
+ should "set body for PUT request" do
75
+ @transport.connections.first.connection.expects(:put_data=)
76
+ @transport.connections.first.connection.expects(:http).with(:PUT).returns(stub_everything)
77
+ @transport.perform_request 'PUT', '/', {}, {:foo => 'bar'}
78
+ end
79
+
80
+ should "serialize the request body" do
81
+ @transport.connections.first.connection.expects(:http).with(:POST).returns(stub_everything)
82
+ @transport.serializer.expects(:dump)
83
+ @transport.perform_request 'POST', '/', {}, {:foo => 'bar'}
84
+ end
85
+
86
+ should "not serialize a String request body" do
87
+ @transport.connections.first.connection.expects(:http).with(:POST).returns(stub_everything)
88
+ @transport.serializer.expects(:dump).never
89
+ @transport.perform_request 'POST', '/', {}, '{"foo":"bar"}'
90
+ end
91
+
92
+ should "set application/json response header" do
93
+ @transport.connections.first.connection.expects(:http).with(:GET).returns(stub_everything)
94
+ @transport.connections.first.connection.expects(:body_str).returns('{"foo":"bar"}')
95
+ @transport.connections.first.connection.expects(:header_str).returns('HTTP/1.1 200 OK\r\nContent-Type: application/json; charset=UTF-8\r\nContent-Length: 311\r\n\r\n')
96
+ response = @transport.perform_request 'GET', '/'
97
+
98
+ assert_equal 'application/json', response.headers['content-type']
99
+ end
100
+
101
+ should "handle HTTP methods" do
102
+ @transport.connections.first.connection.expects(:http).with(:HEAD).returns(stub_everything)
103
+ @transport.connections.first.connection.expects(:http).with(:GET).returns(stub_everything)
104
+ @transport.connections.first.connection.expects(:http).with(:PUT).returns(stub_everything)
105
+ @transport.connections.first.connection.expects(:http).with(:POST).returns(stub_everything)
106
+ @transport.connections.first.connection.expects(:http).with(:DELETE).returns(stub_everything)
107
+
108
+ %w| HEAD GET PUT POST DELETE |.each { |method| @transport.perform_request method, '/' }
109
+
110
+ assert_raise(ArgumentError) { @transport.perform_request 'FOOBAR', '/' }
111
+ end
112
+
113
+ should "properly pass the Content-Type header option" do
114
+ transport = Curb.new :hosts => [ { :host => 'foobar', :port => 1234 } ], :options => { :transport_options => { :headers => { 'Content-Type' => 'foo/bar' } } }
115
+
116
+ assert_equal "foo/bar", transport.connections.first.connection.headers["Content-Type"]
117
+ end
118
+
119
+ should "allow to set options for Curb" do
120
+ transport = Curb.new :hosts => [ { :host => 'foobar', :port => 1234 } ] do |curl|
121
+ curl.headers["User-Agent"] = "myapp-0.0"
122
+ end
123
+
124
+ assert_equal "myapp-0.0", transport.connections.first.connection.headers["User-Agent"]
125
+ end
126
+
127
+ should "set the credentials if passed" do
128
+ transport = Curb.new :hosts => [ { :host => 'foobar', :port => 1234, :user => 'foo', :password => 'bar' } ]
129
+ assert_equal 'foo', transport.connections.first.connection.username
130
+ assert_equal 'bar', transport.connections.first.connection.password
131
+ end
132
+
133
+ should "use global http configuration" do
134
+ transport = Faraday.new :hosts => [ { :host => 'foobar', :port => 1234 } ],
135
+ :options => { :http => { :scheme => 'https', :user => 'U', :password => 'P' } }
136
+
137
+ assert_equal 'https://U:P@foobar:1234/', transport.connections.first.full_url('')
138
+ end
139
+ end
140
+
141
+ end
142
+
143
+ end
@@ -0,0 +1,237 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ #
3
+ # The OpenSearch Contributors require contributions made to
4
+ # this file be licensed under the Apache-2.0 license or a
5
+ # compatible open source license.
6
+ #
7
+ # Modifications Copyright OpenSearch Contributors. See
8
+ # GitHub history for details.
9
+ #
10
+ # Licensed to Elasticsearch B.V. under one or more contributor
11
+ # license agreements. See the NOTICE file distributed with
12
+ # this work for additional information regarding copyright
13
+ # ownership. Elasticsearch B.V. licenses this file to you under
14
+ # the Apache License, Version 2.0 (the "License"); you may
15
+ # not use this file except in compliance with the License.
16
+ # You may obtain a copy of the License at
17
+ #
18
+ # http://www.apache.org/licenses/LICENSE-2.0
19
+ #
20
+ # Unless required by applicable law or agreed to in writing,
21
+ # software distributed under the License is distributed on an
22
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
23
+ # KIND, either express or implied. See the License for the
24
+ # specific language governing permissions and limitations
25
+ # under the License.
26
+
27
+ require 'test_helper'
28
+
29
+ class OpenSearch::Transport::Transport::HTTP::FaradayTest < Minitest::Test
30
+ include OpenSearch::Transport::Transport::HTTP
31
+
32
+ context "Faraday transport" do
33
+ setup do
34
+ @transport = Faraday.new :hosts => [ { :host => 'foobar', :port => 1234 } ]
35
+ end
36
+
37
+ should "implement host_unreachable_exceptions" do
38
+ assert_instance_of Array, @transport.host_unreachable_exceptions
39
+ end
40
+
41
+ should "implement __build_connections" do
42
+ assert_equal 1, @transport.hosts.size
43
+ assert_equal 1, @transport.connections.size
44
+
45
+ assert_instance_of ::Faraday::Connection, @transport.connections.first.connection
46
+ assert_equal 'http://foobar:1234/', @transport.connections.first.connection.url_prefix.to_s
47
+ end
48
+
49
+ should "perform the request" do
50
+ @transport.connections.first.connection.expects(:run_request).returns(stub_everything)
51
+ @transport.perform_request 'GET', '/'
52
+ end
53
+
54
+ should "return a Response" do
55
+ @transport.connections.first.connection.expects(:run_request).returns(stub_everything)
56
+ response = @transport.perform_request 'GET', '/'
57
+ assert_instance_of OpenSearch::Transport::Transport::Response, response
58
+ end
59
+
60
+ should "properly prepare the request" do
61
+ @transport.connections.first.connection.expects(:run_request).with do |method, url, body, headers|
62
+ assert_equal :post, method
63
+ assert_equal '{"foo":"bar"}', body
64
+ assert_nil headers['Accept']
65
+ true
66
+ end.returns(stub_everything)
67
+
68
+ @transport.perform_request 'POST', '/', {}, {:foo => 'bar'}
69
+ end
70
+
71
+ should "properly prepare the request with custom headers" do
72
+ @transport.connections.first.connection.expects(:run_request).with do |method, url, body, headers|
73
+ assert_equal :post, method
74
+ assert_equal '{"foo":"bar"}', body
75
+ assert_nil headers['Accept']
76
+ assert_equal "application/x-ndjson", headers['Content-Type']
77
+ true
78
+ end.returns(stub_everything)
79
+
80
+ @transport.perform_request 'POST', '/', {}, {:foo => 'bar'}, {"Content-Type" => "application/x-ndjson"}
81
+ end
82
+
83
+ should "properly pass the Content-Type header option" do
84
+ transport = Faraday.new :hosts => [ { :host => 'foobar', :port => 1234 } ], :options => { :transport_options => { :headers => { 'Content-Type' => 'foo/bar' } } }
85
+
86
+ transport.connections.first.connection.expects(:run_request).with do |method, url, body, headers|
87
+ assert_equal 'foo/bar', headers['Content-Type']
88
+ true
89
+ end.returns(stub_everything)
90
+
91
+ transport.perform_request 'GET', '/'
92
+ end
93
+
94
+ should "serialize the request body" do
95
+ @transport.connections.first.connection.expects(:run_request).returns(stub_everything)
96
+ @transport.serializer.expects(:dump)
97
+ @transport.perform_request 'POST', '/', {}, {:foo => 'bar'}
98
+ end
99
+
100
+ should "not serialize a String request body" do
101
+ @transport.connections.first.connection.expects(:run_request).returns(stub_everything)
102
+ @transport.serializer.expects(:dump).never
103
+ @transport.perform_request 'POST', '/', {}, '{"foo":"bar"}'
104
+ end
105
+
106
+ should "pass the selector_class options to collection" do
107
+ @transport = Faraday.new :hosts => [ { :host => 'foobar', :port => 1234 } ],
108
+ :options => { :selector_class => OpenSearch::Transport::Transport::Connections::Selector::Random }
109
+ assert_instance_of OpenSearch::Transport::Transport::Connections::Selector::Random,
110
+ @transport.connections.selector
111
+ end
112
+
113
+ should "pass the selector option to collection" do
114
+ @transport = Faraday.new :hosts => [ { :host => 'foobar', :port => 1234 } ],
115
+ :options => { :selector => OpenSearch::Transport::Transport::Connections::Selector::Random.new }
116
+ assert_instance_of OpenSearch::Transport::Transport::Connections::Selector::Random,
117
+ @transport.connections.selector
118
+ end
119
+
120
+ should "pass a configuration block to the Faraday constructor" do
121
+ config_block = lambda do |f|
122
+ f.response :logger
123
+ f.path_prefix = '/moo'
124
+ end
125
+
126
+ transport = Faraday.new :hosts => [ { :host => 'foobar', :port => 1234 } ], &config_block
127
+
128
+ handlers = transport.connections.first.connection.builder.handlers
129
+
130
+ assert_equal 1, handlers.size
131
+ assert handlers.include?(::Faraday::Response::Logger), "#{handlers.inspect} does not include <::Faraday::Adapter::Logger>"
132
+
133
+ assert_equal '/moo', transport.connections.first.connection.path_prefix
134
+ assert_equal 'http://foobar:1234/moo', transport.connections.first.connection.url_prefix.to_s
135
+ end
136
+
137
+ should "pass transport_options to the Faraday constructor" do
138
+ transport = Faraday.new :hosts => [ { :host => 'foobar', :port => 1234 } ],
139
+ :options => { :transport_options => {
140
+ :request => { :open_timeout => 1 },
141
+ :headers => { :foo_bar => 'bar' },
142
+ :ssl => { :verify => false }
143
+ }
144
+ }
145
+
146
+ assert_equal 1, transport.connections.first.connection.options.open_timeout
147
+ assert_equal 'bar', transport.connections.first.connection.headers['Foo-Bar']
148
+ assert_equal false, transport.connections.first.connection.ssl.verify?
149
+ end
150
+
151
+ should "merge in parameters defined in the Faraday connection parameters" do
152
+ transport = Faraday.new :hosts => [ { :host => 'foobar', :port => 1234 } ],
153
+ :options => { :transport_options => {
154
+ :params => { :format => 'yaml' }
155
+ }
156
+ }
157
+ # transport.logger = Logger.new(STDERR)
158
+
159
+ transport.connections.first.connection.expects(:run_request).
160
+ with do |method, url, params, body|
161
+ assert_match(/\?format=yaml/, url)
162
+ true
163
+ end.
164
+ returns(stub_everything)
165
+
166
+ transport.perform_request 'GET', ''
167
+ end
168
+
169
+ should "not overwrite request parameters with the Faraday connection parameters" do
170
+ transport = Faraday.new :hosts => [ { :host => 'foobar', :port => 1234 } ],
171
+ :options => { :transport_options => {
172
+ :params => { :format => 'yaml' }
173
+ }
174
+ }
175
+ # transport.logger = Logger.new(STDERR)
176
+
177
+ transport.connections.first.connection.expects(:run_request).
178
+ with do |method, url, params, body|
179
+ assert_match(/\?format=json/, url)
180
+ true
181
+ end.
182
+ returns(stub_everything)
183
+
184
+ transport.perform_request 'GET', '', { :format => 'json' }
185
+ end
186
+
187
+ should "set the credentials if passed" do
188
+ transport = Faraday.new :hosts => [ { :host => 'foobar', :port => 1234, :user => 'foo', :password => 'bar' } ]
189
+ assert_equal 'Basic Zm9vOmJhcg==', transport.connections.first.connection.headers['Authorization']
190
+ end
191
+
192
+ should "set the credentials if they exist in options" do
193
+ transport = Faraday.new :hosts => [ { :host => 'foobar', :port => 1234 } ],
194
+ :options => { :user => 'foo', :password => 'bar' }
195
+ assert_equal 'Basic Zm9vOmJhcg==', transport.connections.first.connection.headers['Authorization']
196
+ end
197
+
198
+ should "override options credentials if passed explicitly" do
199
+ transport = Faraday.new :hosts => [ { :host => 'foobar', :port => 1234, :user => 'foo', :password => 'bar' },
200
+ { :host => 'foobar2', :port => 1234 } ],
201
+ :options => { :user => 'foo2', :password => 'bar2' }
202
+ assert_equal 'Basic Zm9vOmJhcg==', transport.connections.first.connection.headers['Authorization']
203
+ assert_equal 'Basic Zm9vMjpiYXIy', transport.connections[1].connection.headers['Authorization']
204
+ end
205
+
206
+ should "set connection scheme to https if passed" do
207
+ transport = Faraday.new :hosts => [ { :host => 'foobar', :port => 1234, :scheme => 'https' } ]
208
+
209
+ assert_instance_of ::Faraday::Connection, transport.connections.first.connection
210
+ assert_equal 'https://foobar:1234/', transport.connections.first.connection.url_prefix.to_s
211
+ end
212
+
213
+ should "set connection scheme to https if it exist in options" do
214
+ transport = Faraday.new :hosts => [ { :host => 'foobar', :port => 1234} ],
215
+ :options => { :scheme => 'https' }
216
+
217
+ assert_instance_of ::Faraday::Connection, transport.connections.first.connection
218
+ assert_equal 'https://foobar:1234/', transport.connections.first.connection.url_prefix.to_s
219
+ end
220
+
221
+ should "override options scheme if passed explicitly" do
222
+ transport = Faraday.new :hosts => [ { :host => 'foobar', :port => 1234, :scheme => 'http'} ],
223
+ :options => { :scheme => 'https' }
224
+
225
+ assert_instance_of ::Faraday::Connection, transport.connections.first.connection
226
+ assert_equal 'http://foobar:1234/', transport.connections.first.connection.url_prefix.to_s
227
+ end
228
+
229
+ should "use global http configuration" do
230
+ transport = Faraday.new :hosts => [ { :host => 'foobar', :port => 1234 } ],
231
+ :options => { :http => { :scheme => 'https', :user => 'U', :password => 'P' } }
232
+
233
+ assert_equal 'https://U:P@foobar:1234/', transport.connections.first.full_url('')
234
+ end
235
+ end
236
+
237
+ end
@@ -0,0 +1,191 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ #
3
+ # The OpenSearch Contributors require contributions made to
4
+ # this file be licensed under the Apache-2.0 license or a
5
+ # compatible open source license.
6
+ #
7
+ # Modifications Copyright OpenSearch Contributors. See
8
+ # GitHub history for details.
9
+ #
10
+ # Licensed to Elasticsearch B.V. under one or more contributor
11
+ # license agreements. See the NOTICE file distributed with
12
+ # this work for additional information regarding copyright
13
+ # ownership. Elasticsearch B.V. licenses this file to you under
14
+ # the Apache License, Version 2.0 (the "License"); you may
15
+ # not use this file except in compliance with the License.
16
+ # You may obtain a copy of the License at
17
+ #
18
+ # http://www.apache.org/licenses/LICENSE-2.0
19
+ #
20
+ # Unless required by applicable law or agreed to in writing,
21
+ # software distributed under the License is distributed on an
22
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
23
+ # KIND, either express or implied. See the License for the
24
+ # specific language governing permissions and limitations
25
+ # under the License.
26
+
27
+ require 'test_helper'
28
+
29
+ unless JRUBY
30
+ version = ( defined?(RUBY_ENGINE) ? RUBY_ENGINE : 'Ruby' ) + ' ' + RUBY_VERSION
31
+ puts "SKIP: '#{File.basename(__FILE__)}' only supported on JRuby (you're running #{version})"
32
+ else
33
+ require 'opensearch/transport/transport/http/manticore'
34
+ require 'manticore'
35
+
36
+ class OpenSearch::Transport::Transport::HTTP::ManticoreTest < Minitest::Test
37
+ include OpenSearch::Transport::Transport::HTTP
38
+
39
+ context "Manticore transport" do
40
+ setup do
41
+ @transport = Manticore.new :hosts => [ { :host => '127.0.0.1', :port => 8080 } ]
42
+ end
43
+
44
+ should "implement host_unreachable_exceptions" do
45
+ assert_instance_of Array, @transport.host_unreachable_exceptions
46
+ end
47
+
48
+ should "implement __build_connections" do
49
+ assert_equal 1, @transport.hosts.size
50
+ assert_equal 1, @transport.connections.size
51
+
52
+ assert_instance_of ::Manticore::Client, @transport.connections.first.connection
53
+ end
54
+
55
+ should "not close connections in __close_connections" do
56
+ assert_equal 1, @transport.connections.size
57
+ @transport.__close_connections
58
+ assert_equal 1, @transport.connections.size
59
+ end
60
+
61
+ should "perform the request" do
62
+ @transport.connections.first.connection.expects(:get).returns(stub_everything)
63
+ @transport.perform_request 'GET', '/'
64
+ end
65
+
66
+ should "set body for GET request" do
67
+ @transport.connections.first.connection.expects(:get).
68
+ with('http://127.0.0.1:8080/', {:body => '{"foo":"bar"}',
69
+ :headers => {"Content-Type" => "application/json",
70
+ "User-Agent" => @transport.send(:user_agent_header)}}).returns(stub_everything)
71
+ @transport.perform_request 'GET', '/', {}, '{"foo":"bar"}'
72
+ end
73
+
74
+ should "set body for PUT request" do
75
+ @transport.connections.first.connection.expects(:put).
76
+ with('http://127.0.0.1:8080/', {:body => '{"foo":"bar"}',
77
+ :headers => {"Content-Type" => "application/json",
78
+ "User-Agent" => @transport.send(:user_agent_header)}}).returns(stub_everything)
79
+ @transport.perform_request 'PUT', '/', {}, {:foo => 'bar'}
80
+ end
81
+
82
+ should "serialize the request body" do
83
+ @transport.connections.first.connection.expects(:post).
84
+ with('http://127.0.0.1:8080/', {:body => '{"foo":"bar"}',
85
+ :headers => {"Content-Type" => "application/json",
86
+ "User-Agent" => @transport.send(:user_agent_header)}}).returns(stub_everything)
87
+ @transport.perform_request 'POST', '/', {}, {'foo' => 'bar'}
88
+ end
89
+
90
+ should "set custom headers for PUT request" do
91
+ @transport.connections.first.connection.expects(:put).
92
+ with('http://127.0.0.1:8080/', {:body => '{"foo":"bar"}',
93
+ :headers => {"Content-Type" => "application/json",
94
+ "User-Agent" => @transport.send(:user_agent_header)}})
95
+ .returns(stub_everything)
96
+ @transport.perform_request 'PUT', '/', {}, '{"foo":"bar"}', {"Content-Type" => "application/x-ndjson"}
97
+ end
98
+
99
+ should "not serialize a String request body" do
100
+ @transport.connections.first.connection.expects(:post).
101
+ with('http://127.0.0.1:8080/', {:body => '{"foo":"bar"}',
102
+ :headers => {"Content-Type" => "application/json",
103
+ "User-Agent" => @transport.send(:user_agent_header)}}).returns(stub_everything)
104
+ @transport.serializer.expects(:dump).never
105
+ @transport.perform_request 'POST', '/', {}, '{"foo":"bar"}'
106
+ end
107
+
108
+ should "set application/json header" do
109
+ options = {
110
+ :headers => { "content-type" => "application/json"}
111
+ }
112
+
113
+ transport = Manticore.new :hosts => [ { :host => 'localhost', :port => 8080 } ], :options => options
114
+
115
+ transport.connections.first.connection.stub("http://localhost:8080/", :body => "\"\"", :headers => {"Content-Type" => "application/x-ndjson",
116
+ "User-Agent" => @transport.send(:user_agent_header)}, :code => 200 )
117
+
118
+ response = transport.perform_request 'GET', '/', {}
119
+ assert_equal response.status, 200
120
+ end
121
+
122
+ should "set headers from 'transport_options'" do
123
+ options = {
124
+ :transport_options => {
125
+ :headers => { "Content-Type" => "foo/bar"}
126
+ }
127
+ }
128
+
129
+ transport = Manticore.new :hosts => [ { :host => 'localhost', :port => 8080 } ], :options => options
130
+
131
+ assert_equal('foo/bar', transport.connections.first.connection.instance_variable_get(:@options)[:headers]['Content-Type'])
132
+ # TODO: Needs to check @request_options
133
+ end
134
+
135
+ should "handle HTTP methods" do
136
+ @transport.connections.first.connection.expects(:delete).with('http://127.0.0.1:8080/', { headers: {"Content-Type" => "application/json",
137
+ "User-Agent" => @transport.send(:user_agent_header)}}).returns(stub_everything)
138
+ @transport.connections.first.connection.expects(:head).with('http://127.0.0.1:8080/', { headers: {"Content-Type" => "application/json",
139
+ "User-Agent" => @transport.send(:user_agent_header)}}).returns(stub_everything)
140
+ @transport.connections.first.connection.expects(:get).with('http://127.0.0.1:8080/', { headers: {"Content-Type" => "application/json",
141
+ "User-Agent" => @transport.send(:user_agent_header)}}).returns(stub_everything)
142
+ @transport.connections.first.connection.expects(:put).with('http://127.0.0.1:8080/', { headers: {"Content-Type" => "application/json",
143
+ "User-Agent" => @transport.send(:user_agent_header)}}).returns(stub_everything)
144
+ @transport.connections.first.connection.expects(:post).with('http://127.0.0.1:8080/', { headers: {"Content-Type" => "application/json",
145
+ "User-Agent" => @transport.send(:user_agent_header)}}).returns(stub_everything)
146
+
147
+ %w| HEAD GET PUT POST DELETE |.each { |method| @transport.perform_request method, '/' }
148
+
149
+ assert_raise(ArgumentError) { @transport.perform_request 'FOOBAR', '/' }
150
+ end
151
+
152
+ should "allow to set options for Manticore" do
153
+ options = { :headers => {"User-Agent" => "myapp-0.0" }}
154
+ transport = Manticore.new :hosts => [ { :host => 'foobar', :port => 1234 } ], :options => options
155
+ transport.connections.first.connection
156
+ .expects(:get)
157
+ .with do |host, _options|
158
+ assert_equal 'myapp-0.0', _options[:headers]['User-Agent']
159
+ true
160
+ end
161
+ .returns(stub_everything)
162
+
163
+ transport.perform_request 'GET', '/', {}
164
+ end
165
+
166
+ should "allow to set ssl options for Manticore" do
167
+ options = {
168
+ :ssl => {
169
+ :truststore => "test.jks",
170
+ :truststore_password => "test",
171
+ :verify => false
172
+ }
173
+ }
174
+
175
+ ::Manticore::Client.expects(:new).with(options)
176
+ transport = Manticore.new :hosts => [ { :host => 'foobar', :port => 1234 } ], :options => options
177
+ end
178
+
179
+ should "pass :transport_options to Manticore::Client" do
180
+ options = {
181
+ :transport_options => { :potatoes => 1 }
182
+ }
183
+
184
+ ::Manticore::Client.expects(:new).with(:potatoes => 1, :ssl => {})
185
+ transport = Manticore.new :hosts => [ { :host => 'foobar', :port => 1234 } ], :options => options
186
+ end
187
+ end
188
+
189
+ end
190
+
191
+ end
data.tar.gz.sig ADDED
@@ -0,0 +1 @@
1
+ B��G��-`��Ƚ^����@����Ԩ�UR�ЀE�~�k��)�.�գ��٣K�(��V/����P Ա��\RvI