elasticsearch-transport 5.0.5 → 6.8.2

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 (41) hide show
  1. checksums.yaml +5 -5
  2. data/Gemfile +5 -0
  3. data/README.md +88 -34
  4. data/Rakefile +14 -17
  5. data/elasticsearch-transport.gemspec +44 -63
  6. data/lib/elasticsearch/transport/client.rb +120 -61
  7. data/lib/elasticsearch/transport/redacted.rb +79 -0
  8. data/lib/elasticsearch/transport/transport/base.rb +28 -14
  9. data/lib/elasticsearch/transport/transport/connections/collection.rb +4 -0
  10. data/lib/elasticsearch/transport/transport/connections/connection.rb +5 -1
  11. data/lib/elasticsearch/transport/transport/connections/selector.rb +4 -0
  12. data/lib/elasticsearch/transport/transport/errors.rb +4 -0
  13. data/lib/elasticsearch/transport/transport/http/curb.rb +7 -2
  14. data/lib/elasticsearch/transport/transport/http/faraday.rb +11 -8
  15. data/lib/elasticsearch/transport/transport/http/manticore.rb +6 -1
  16. data/lib/elasticsearch/transport/transport/response.rb +4 -0
  17. data/lib/elasticsearch/transport/transport/serializer/multi_json.rb +4 -0
  18. data/lib/elasticsearch/transport/transport/sniffer.rb +31 -3
  19. data/lib/elasticsearch/transport/version.rb +5 -1
  20. data/lib/elasticsearch/transport.rb +5 -0
  21. data/lib/elasticsearch-transport.rb +4 -0
  22. data/spec/elasticsearch/transport/base_spec.rb +260 -0
  23. data/spec/elasticsearch/transport/client_spec.rb +1025 -0
  24. data/spec/elasticsearch/transport/sniffer_spec.rb +269 -0
  25. data/spec/spec_helper.rb +65 -0
  26. data/test/integration/transport_test.rb +9 -5
  27. data/test/profile/client_benchmark_test.rb +23 -25
  28. data/test/test_helper.rb +10 -0
  29. data/test/unit/connection_collection_test.rb +4 -0
  30. data/test/unit/connection_selector_test.rb +4 -0
  31. data/test/unit/connection_test.rb +4 -0
  32. data/test/unit/response_test.rb +5 -1
  33. data/test/unit/serializer_test.rb +4 -0
  34. data/test/unit/transport_base_test.rb +21 -1
  35. data/test/unit/transport_curb_test.rb +12 -0
  36. data/test/unit/transport_faraday_test.rb +16 -0
  37. data/test/unit/transport_manticore_test.rb +11 -0
  38. metadata +82 -84
  39. data/test/integration/client_test.rb +0 -237
  40. data/test/unit/client_test.rb +0 -366
  41. data/test/unit/sniffer_test.rb +0 -179
@@ -1,3 +1,7 @@
1
+ # Licensed to Elasticsearch B.V under one or more agreements.
2
+ # Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
3
+ # See the LICENSE file in the project root for more information
4
+
1
5
  require 'test_helper'
2
6
 
3
7
  unless JRUBY
@@ -55,6 +59,13 @@ else
55
59
  @transport.perform_request 'POST', '/', {}, {'foo' => 'bar'}
56
60
  end
57
61
 
62
+ should "set custom headers for PUT request" do
63
+ @transport.connections.first.connection.expects(:put).
64
+ with('http://127.0.0.1:8080//', {:body => '{"foo":"bar"}', :headers => {"Content-Type" => "application/x-ndjson"}})
65
+ .returns(stub_everything)
66
+ @transport.perform_request 'PUT', '/', {}, '{"foo":"bar"}', {"Content-Type" => "application/x-ndjson"}
67
+ end
68
+
58
69
  should "not serialize a String request body" do
59
70
  @transport.connections.first.connection.expects(:post).
60
71
  with('http://127.0.0.1:8080//', {:body => '{"foo":"bar"}'}).returns(stub_everything)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elasticsearch-transport
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.5
4
+ version: 6.8.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Karel Minarik
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-25 00:00:00.000000000 Z
11
+ date: 2020-04-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: multi_json
@@ -28,46 +28,32 @@ dependencies:
28
28
  name: faraday
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: bundler
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">"
31
+ - - "~>"
46
32
  - !ruby/object:Gem::Version
47
33
  version: '1'
48
- type: :development
34
+ type: :runtime
49
35
  prerelease: false
50
36
  version_requirements: !ruby/object:Gem::Requirement
51
37
  requirements:
52
- - - ">"
38
+ - - "~>"
53
39
  - !ruby/object:Gem::Version
54
40
  version: '1'
55
41
  - !ruby/object:Gem::Dependency
56
- name: rake
42
+ name: ansi
57
43
  requirement: !ruby/object:Gem::Requirement
58
44
  requirements:
59
- - - "~>"
45
+ - - ">="
60
46
  - !ruby/object:Gem::Version
61
- version: '11.1'
47
+ version: '0'
62
48
  type: :development
63
49
  prerelease: false
64
50
  version_requirements: !ruby/object:Gem::Requirement
65
51
  requirements:
66
- - - "~>"
52
+ - - ">="
67
53
  - !ruby/object:Gem::Version
68
- version: '11.1'
54
+ version: '0'
69
55
  - !ruby/object:Gem::Dependency
70
- name: elasticsearch-extensions
56
+ name: bundler
71
57
  requirement: !ruby/object:Gem::Requirement
72
58
  requirements:
73
59
  - - ">="
@@ -81,7 +67,7 @@ dependencies:
81
67
  - !ruby/object:Gem::Version
82
68
  version: '0'
83
69
  - !ruby/object:Gem::Dependency
84
- name: ansi
70
+ name: elasticsearch-extensions
85
71
  requirement: !ruby/object:Gem::Requirement
86
72
  requirements:
87
73
  - - ">="
@@ -95,7 +81,7 @@ dependencies:
95
81
  - !ruby/object:Gem::Version
96
82
  version: '0'
97
83
  - !ruby/object:Gem::Dependency
98
- name: shoulda-context
84
+ name: mocha
99
85
  requirement: !ruby/object:Gem::Requirement
100
86
  requirements:
101
87
  - - ">="
@@ -109,7 +95,7 @@ dependencies:
109
95
  - !ruby/object:Gem::Version
110
96
  version: '0'
111
97
  - !ruby/object:Gem::Dependency
112
- name: mocha
98
+ name: pry
113
99
  requirement: !ruby/object:Gem::Requirement
114
100
  requirements:
115
101
  - - ">="
@@ -123,21 +109,21 @@ dependencies:
123
109
  - !ruby/object:Gem::Version
124
110
  version: '0'
125
111
  - !ruby/object:Gem::Dependency
126
- name: turn
112
+ name: rake
127
113
  requirement: !ruby/object:Gem::Requirement
128
114
  requirements:
129
- - - ">="
115
+ - - "~>"
130
116
  - !ruby/object:Gem::Version
131
- version: '0'
117
+ version: '13'
132
118
  type: :development
133
119
  prerelease: false
134
120
  version_requirements: !ruby/object:Gem::Requirement
135
121
  requirements:
136
- - - ">="
122
+ - - "~>"
137
123
  - !ruby/object:Gem::Version
138
- version: '0'
124
+ version: '13'
139
125
  - !ruby/object:Gem::Dependency
140
- name: yard
126
+ name: shoulda-context
141
127
  requirement: !ruby/object:Gem::Requirement
142
128
  requirements:
143
129
  - - ">="
@@ -151,7 +137,7 @@ dependencies:
151
137
  - !ruby/object:Gem::Version
152
138
  version: '0'
153
139
  - !ruby/object:Gem::Dependency
154
- name: pry
140
+ name: turn
155
141
  requirement: !ruby/object:Gem::Requirement
156
142
  requirements:
157
143
  - - ">="
@@ -165,21 +151,21 @@ dependencies:
165
151
  - !ruby/object:Gem::Version
166
152
  version: '0'
167
153
  - !ruby/object:Gem::Dependency
168
- name: ci_reporter
154
+ name: yard
169
155
  requirement: !ruby/object:Gem::Requirement
170
156
  requirements:
171
- - - "~>"
157
+ - - ">="
172
158
  - !ruby/object:Gem::Version
173
- version: '1.9'
159
+ version: '0'
174
160
  type: :development
175
161
  prerelease: false
176
162
  version_requirements: !ruby/object:Gem::Requirement
177
163
  requirements:
178
- - - "~>"
164
+ - - ">="
179
165
  - !ruby/object:Gem::Version
180
- version: '1.9'
166
+ version: '0'
181
167
  - !ruby/object:Gem::Dependency
182
- name: curb
168
+ name: cane
183
169
  requirement: !ruby/object:Gem::Requirement
184
170
  requirements:
185
171
  - - ">="
@@ -193,7 +179,7 @@ dependencies:
193
179
  - !ruby/object:Gem::Version
194
180
  version: '0'
195
181
  - !ruby/object:Gem::Dependency
196
- name: patron
182
+ name: hashie
197
183
  requirement: !ruby/object:Gem::Requirement
198
184
  requirements:
199
185
  - - ">="
@@ -207,19 +193,19 @@ dependencies:
207
193
  - !ruby/object:Gem::Version
208
194
  version: '0'
209
195
  - !ruby/object:Gem::Dependency
210
- name: typhoeus
196
+ name: minitest
211
197
  requirement: !ruby/object:Gem::Requirement
212
198
  requirements:
213
199
  - - "~>"
214
200
  - !ruby/object:Gem::Version
215
- version: '0.6'
201
+ version: '4.0'
216
202
  type: :development
217
203
  prerelease: false
218
204
  version_requirements: !ruby/object:Gem::Requirement
219
205
  requirements:
220
206
  - - "~>"
221
207
  - !ruby/object:Gem::Version
222
- version: '0.6'
208
+ version: '4.0'
223
209
  - !ruby/object:Gem::Dependency
224
210
  name: net-http-persistent
225
211
  requirement: !ruby/object:Gem::Requirement
@@ -235,7 +221,27 @@ dependencies:
235
221
  - !ruby/object:Gem::Version
236
222
  version: '0'
237
223
  - !ruby/object:Gem::Dependency
238
- name: hashie
224
+ name: simplecov
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - "~>"
228
+ - !ruby/object:Gem::Version
229
+ version: '0.17'
230
+ - - "<"
231
+ - !ruby/object:Gem::Version
232
+ version: '0.18'
233
+ type: :development
234
+ prerelease: false
235
+ version_requirements: !ruby/object:Gem::Requirement
236
+ requirements:
237
+ - - "~>"
238
+ - !ruby/object:Gem::Version
239
+ version: '0.17'
240
+ - - "<"
241
+ - !ruby/object:Gem::Version
242
+ version: '0.18'
243
+ - !ruby/object:Gem::Dependency
244
+ name: simplecov-rcov
239
245
  requirement: !ruby/object:Gem::Requirement
240
246
  requirements:
241
247
  - - ">="
@@ -249,35 +255,35 @@ dependencies:
249
255
  - !ruby/object:Gem::Version
250
256
  version: '0'
251
257
  - !ruby/object:Gem::Dependency
252
- name: minitest
258
+ name: test-unit
253
259
  requirement: !ruby/object:Gem::Requirement
254
260
  requirements:
255
261
  - - "~>"
256
262
  - !ruby/object:Gem::Version
257
- version: '4.0'
263
+ version: '2'
258
264
  type: :development
259
265
  prerelease: false
260
266
  version_requirements: !ruby/object:Gem::Requirement
261
267
  requirements:
262
268
  - - "~>"
263
269
  - !ruby/object:Gem::Version
264
- version: '4.0'
270
+ version: '2'
265
271
  - !ruby/object:Gem::Dependency
266
- name: ruby-prof
272
+ name: typhoeus
267
273
  requirement: !ruby/object:Gem::Requirement
268
274
  requirements:
269
- - - ">="
275
+ - - "~>"
270
276
  - !ruby/object:Gem::Version
271
- version: '0'
277
+ version: '0.6'
272
278
  type: :development
273
279
  prerelease: false
274
280
  version_requirements: !ruby/object:Gem::Requirement
275
281
  requirements:
276
- - - ">="
282
+ - - "~>"
277
283
  - !ruby/object:Gem::Version
278
- version: '0'
284
+ version: '0.6'
279
285
  - !ruby/object:Gem::Dependency
280
- name: require-prof
286
+ name: curb
281
287
  requirement: !ruby/object:Gem::Requirement
282
288
  requirements:
283
289
  - - ">="
@@ -291,7 +297,7 @@ dependencies:
291
297
  - !ruby/object:Gem::Version
292
298
  version: '0'
293
299
  - !ruby/object:Gem::Dependency
294
- name: simplecov
300
+ name: patron
295
301
  requirement: !ruby/object:Gem::Requirement
296
302
  requirements:
297
303
  - - ">="
@@ -305,7 +311,7 @@ dependencies:
305
311
  - !ruby/object:Gem::Version
306
312
  version: '0'
307
313
  - !ruby/object:Gem::Dependency
308
- name: simplecov-rcov
314
+ name: require-prof
309
315
  requirement: !ruby/object:Gem::Requirement
310
316
  requirements:
311
317
  - - ">="
@@ -319,7 +325,7 @@ dependencies:
319
325
  - !ruby/object:Gem::Version
320
326
  version: '0'
321
327
  - !ruby/object:Gem::Dependency
322
- name: cane
328
+ name: ruby-prof
323
329
  requirement: !ruby/object:Gem::Requirement
324
330
  requirements:
325
331
  - - ">="
@@ -332,20 +338,6 @@ dependencies:
332
338
  - - ">="
333
339
  - !ruby/object:Gem::Version
334
340
  version: '0'
335
- - !ruby/object:Gem::Dependency
336
- name: test-unit
337
- requirement: !ruby/object:Gem::Requirement
338
- requirements:
339
- - - "~>"
340
- - !ruby/object:Gem::Version
341
- version: '2'
342
- type: :development
343
- prerelease: false
344
- version_requirements: !ruby/object:Gem::Requirement
345
- requirements:
346
- - - "~>"
347
- - !ruby/object:Gem::Version
348
- version: '2'
349
341
  description: 'Ruby client for Elasticsearch. See the `elasticsearch` gem for full
350
342
  integration.
351
343
 
@@ -367,6 +359,7 @@ files:
367
359
  - lib/elasticsearch-transport.rb
368
360
  - lib/elasticsearch/transport.rb
369
361
  - lib/elasticsearch/transport/client.rb
362
+ - lib/elasticsearch/transport/redacted.rb
370
363
  - lib/elasticsearch/transport/transport/base.rb
371
364
  - lib/elasticsearch/transport/transport/connections/collection.rb
372
365
  - lib/elasticsearch/transport/transport/connections/connection.rb
@@ -379,25 +372,30 @@ files:
379
372
  - lib/elasticsearch/transport/transport/serializer/multi_json.rb
380
373
  - lib/elasticsearch/transport/transport/sniffer.rb
381
374
  - lib/elasticsearch/transport/version.rb
382
- - test/integration/client_test.rb
375
+ - spec/elasticsearch/transport/base_spec.rb
376
+ - spec/elasticsearch/transport/client_spec.rb
377
+ - spec/elasticsearch/transport/sniffer_spec.rb
378
+ - spec/spec_helper.rb
383
379
  - test/integration/transport_test.rb
384
380
  - test/profile/client_benchmark_test.rb
385
381
  - test/test_helper.rb
386
- - test/unit/client_test.rb
387
382
  - test/unit/connection_collection_test.rb
388
383
  - test/unit/connection_selector_test.rb
389
384
  - test/unit/connection_test.rb
390
385
  - test/unit/response_test.rb
391
386
  - test/unit/serializer_test.rb
392
- - test/unit/sniffer_test.rb
393
387
  - test/unit/transport_base_test.rb
394
388
  - test/unit/transport_curb_test.rb
395
389
  - test/unit/transport_faraday_test.rb
396
390
  - test/unit/transport_manticore_test.rb
397
- homepage: https://github.com/elasticsearch/elasticsearch-ruby/tree/master/elasticsearch-transport
391
+ homepage: https://www.elastic.co/guide/en/elasticsearch/client/ruby-api/current/index.html
398
392
  licenses:
399
- - Apache 2
400
- metadata: {}
393
+ - Apache-2.0
394
+ metadata:
395
+ homepage_uri: https://www.elastic.co/guide/en/elasticsearch/client/ruby-api/current/index.html
396
+ changelog_uri: https://github.com/elastic/elasticsearch-ruby/blob/6.x/CHANGELOG.md
397
+ source_code_uri: https://github.com/elastic/elasticsearch-ruby/tree/6.x/elasticsearch-transport
398
+ bug_tracker_uri: https://github.com/elastic/elasticsearch-ruby/issues
401
399
  post_install_message:
402
400
  rdoc_options:
403
401
  - "--charset=UTF-8"
@@ -407,30 +405,30 @@ required_ruby_version: !ruby/object:Gem::Requirement
407
405
  requirements:
408
406
  - - ">="
409
407
  - !ruby/object:Gem::Version
410
- version: '0'
408
+ version: '2.4'
411
409
  required_rubygems_version: !ruby/object:Gem::Requirement
412
410
  requirements:
413
411
  - - ">="
414
412
  - !ruby/object:Gem::Version
415
413
  version: '0'
416
414
  requirements: []
417
- rubyforge_project:
418
- rubygems_version: 2.6.11
415
+ rubygems_version: 3.1.2
419
416
  signing_key:
420
417
  specification_version: 4
421
418
  summary: Ruby client for Elasticsearch.
422
419
  test_files:
423
- - test/integration/client_test.rb
420
+ - spec/elasticsearch/transport/base_spec.rb
421
+ - spec/elasticsearch/transport/client_spec.rb
422
+ - spec/elasticsearch/transport/sniffer_spec.rb
423
+ - spec/spec_helper.rb
424
424
  - test/integration/transport_test.rb
425
425
  - test/profile/client_benchmark_test.rb
426
426
  - test/test_helper.rb
427
- - test/unit/client_test.rb
428
427
  - test/unit/connection_collection_test.rb
429
428
  - test/unit/connection_selector_test.rb
430
429
  - test/unit/connection_test.rb
431
430
  - test/unit/response_test.rb
432
431
  - test/unit/serializer_test.rb
433
- - test/unit/sniffer_test.rb
434
432
  - test/unit/transport_base_test.rb
435
433
  - test/unit/transport_curb_test.rb
436
434
  - test/unit/transport_faraday_test.rb
@@ -1,237 +0,0 @@
1
- require 'test_helper'
2
-
3
- class Elasticsearch::Transport::ClientIntegrationTest < Elasticsearch::Test::IntegrationTestCase
4
- startup do
5
- Elasticsearch::Extensions::Test::Cluster.start(number_of_nodes: 2) if ENV['SERVER'] and not Elasticsearch::Extensions::Test::Cluster.running?(number_of_nodes: 2)
6
- end
7
-
8
- shutdown do
9
- Elasticsearch::Extensions::Test::Cluster.stop(number_of_nodes: 2) if ENV['SERVER'] and Elasticsearch::Extensions::Test::Cluster.running?(number_of_nodes: 2)
10
- end
11
-
12
- context "Elasticsearch client" do
13
- teardown do
14
- begin; Object.send(:remove_const, :Typhoeus); rescue NameError; end
15
- begin; Net::HTTP.send(:remove_const, :Persistent); rescue NameError; end
16
- end
17
-
18
- setup do
19
- @port = (ENV['TEST_CLUSTER_PORT'] || 9250).to_i
20
- system "curl -X DELETE http://127.0.0.1:#{@port}/_all > /dev/null 2>&1"
21
-
22
- @logger = Logger.new(STDERR)
23
- @logger.formatter = proc do |severity, datetime, progname, msg|
24
- color = case severity
25
- when /INFO/ then :green
26
- when /ERROR|WARN|FATAL/ then :red
27
- when /DEBUG/ then :cyan
28
- else :white
29
- end
30
- ANSI.ansi(severity[0] + ' ', color, :faint) + ANSI.ansi(msg, :white, :faint) + "\n"
31
- end
32
-
33
- @client = Elasticsearch::Client.new host: "127.0.0.1:#{@port}"
34
- end
35
-
36
- should "connect to the cluster" do
37
- assert_nothing_raised do
38
- response = @client.perform_request 'GET', '_cluster/health'
39
- assert_equal 2, response.body['number_of_nodes']
40
- end
41
- end
42
-
43
- should "handle paths and URL parameters" do
44
- @client.perform_request 'PUT', 'myindex/mydoc/1', {routing: 'XYZ'}, {foo: 'bar'}
45
- @client.perform_request 'GET', '_cluster/health?wait_for_status=green', {}
46
-
47
- response = @client.perform_request 'GET', 'myindex/mydoc/1?routing=XYZ'
48
- assert_equal 200, response.status
49
- assert_equal 'bar', response.body['_source']['foo']
50
-
51
- assert_raise Elasticsearch::Transport::Transport::Errors::NotFound do
52
- @client.perform_request 'GET', 'myindex/mydoc/1?routing=ABC'
53
- end
54
- end
55
-
56
- should "ignore specified response codes" do
57
- response = @client.perform_request 'GET', '/_foobar', ignore: 400
58
- assert_equal 400, response.status
59
-
60
- assert_instance_of Hash, response.body
61
- assert_match /illegal_argument_exception/, response.body.inspect
62
- end
63
-
64
- should "pass options to the transport" do
65
- @client = Elasticsearch::Client.new \
66
- host: "127.0.0.1:#{@port}",
67
- logger: (ENV['QUIET'] ? nil : @logger),
68
- transport_options: { headers: { accept: 'application/yaml', content_type: 'application/yaml' } }
69
-
70
- response = @client.perform_request 'GET', '_cluster/health'
71
-
72
- assert response.body.to_s.start_with?("---\n"), "Response body should be YAML: #{response.body.inspect}"
73
- assert_equal 'application/yaml', response.headers['content-type']
74
- end
75
-
76
- should "pass options to the Faraday::Connection with a block" do
77
- @client = Elasticsearch::Client.new(
78
- host: "127.0.0.1:#{@port}",
79
- logger: (ENV['QUIET'] ? nil : @logger)
80
- ) do |client|
81
- client.headers['Content-Type'] = 'application/yaml' # For ES 2.x
82
- client.headers['Accept'] = 'application/yaml' # For ES 5.x
83
- end
84
-
85
- response = @client.perform_request 'GET', '_cluster/health'
86
-
87
- assert response.body.to_s.start_with?("---\n"), "Response body should be YAML: #{response.body.inspect}"
88
- assert_equal 'application/yaml', response.headers['content-type']
89
- end
90
-
91
- context "with round robin selector" do
92
- setup do
93
- @client = Elasticsearch::Client.new \
94
- hosts: ["127.0.0.1:#{@port}", "127.0.0.1:#{@port+1}" ],
95
- logger: (ENV['QUIET'] ? nil : @logger)
96
- end
97
-
98
- should "rotate nodes" do
99
- # Hit node 1
100
- response = @client.perform_request 'GET', '_nodes/_local'
101
- assert_equal 'node-1', response.body['nodes'].to_a[0][1]['name']
102
-
103
- # Hit node 2
104
- response = @client.perform_request 'GET', '_nodes/_local'
105
- assert_equal 'node-2', response.body['nodes'].to_a[0][1]['name']
106
-
107
- # Hit node 1
108
- response = @client.perform_request 'GET', '_nodes/_local'
109
- assert_equal 'node-1', response.body['nodes'].to_a[0][1]['name']
110
- end
111
- end
112
-
113
- context "with a sick node and retry on failure" do
114
- setup do
115
- @port = (ENV['TEST_CLUSTER_PORT'] || 9250).to_i
116
- @client = Elasticsearch::Client.new \
117
- hosts: ["127.0.0.1:#{@port}", "foobar1"],
118
- logger: (ENV['QUIET'] ? nil : @logger),
119
- retry_on_failure: true
120
- end
121
-
122
- should "retry the request with next server" do
123
- assert_nothing_raised do
124
- 5.times { @client.perform_request 'GET', '_nodes/_local' }
125
- end
126
- end
127
-
128
- should "raise exception when it cannot get any healthy server" do
129
- @client = Elasticsearch::Client.new \
130
- hosts: ["127.0.0.1:#{@port}", "foobar1", "foobar2", "foobar3"],
131
- logger: (ENV['QUIET'] ? nil : @logger),
132
- retry_on_failure: 1
133
-
134
- assert_nothing_raised do
135
- # First hit is OK
136
- @client.perform_request 'GET', '_nodes/_local'
137
- end
138
-
139
- assert_raise Faraday::Error::ConnectionFailed do
140
- # Second hit fails
141
- @client.perform_request 'GET', '_nodes/_local'
142
- end
143
- end
144
- end
145
-
146
- context "with a sick node and reloading on failure" do
147
- setup do
148
- @client = Elasticsearch::Client.new \
149
- hosts: ["127.0.0.1:#{@port}", "foobar1", "foobar2"],
150
- logger: (ENV['QUIET'] ? nil : @logger),
151
- reload_on_failure: true
152
- end
153
-
154
- should "reload the connections" do
155
- assert_equal 3, @client.transport.connections.size
156
- assert_nothing_raised do
157
- 5.times { @client.perform_request 'GET', '_nodes/_local' }
158
- end
159
- assert_equal 2, @client.transport.connections.size
160
- end
161
- end
162
-
163
- context "with retrying on status" do
164
- should "retry when the status does match" do
165
- @client = Elasticsearch::Client.new \
166
- hosts: ["127.0.0.1:#{@port}"],
167
- logger: (ENV['QUIET'] ? nil : @logger),
168
- retry_on_status: 400
169
-
170
- # Set the logger when the `QUIET` option is set
171
- @client.transport.logger ||= Logger.new(STDERR)
172
-
173
- @client.transport.logger.stubs(:fatal)
174
- @client.transport.logger
175
- .expects(:warn)
176
- .with( regexp_matches(/Attempt \d to get response/) )
177
- .times(4)
178
-
179
- assert_raise Elasticsearch::Transport::Transport::Errors::BadRequest do
180
- @client.perform_request 'GET', '_foobar'
181
- end
182
- end
183
- end
184
-
185
- context "when reloading connections" do
186
- should "keep existing connections" do
187
- require 'patron' # We need a client with keep-alive
188
- client = Elasticsearch::Transport::Client.new host: "127.0.0.1:#{@port}",
189
- adapter: :patron,
190
- logger: (ENV['QUIET'] ? nil : @logger)
191
-
192
- assert_equal 'Faraday::Adapter::Patron',
193
- client.transport.connections.first.connection.builder.handlers.first.name
194
-
195
- response = client.perform_request 'GET', '_nodes/stats/http'
196
-
197
- a = response.body['nodes'].values.select { |n| n['name'] == 'node-1' }.first['http']['total_opened']
198
-
199
- client.transport.reload_connections!
200
-
201
- response = client.perform_request 'GET', '_nodes/stats/http'
202
- b = response.body['nodes'].values.select { |n| n['name'] == 'node-1' }.first['http']['total_opened']
203
-
204
- assert_equal a, b
205
- end unless JRUBY
206
- end
207
-
208
- context "with Faraday adapters" do
209
- should "set the adapter with a block" do
210
- require 'net/http/persistent'
211
-
212
- client = Elasticsearch::Transport::Client.new url: "127.0.0.1:#{@port}" do |f|
213
- f.adapter :net_http_persistent
214
- end
215
-
216
- assert_equal 'Faraday::Adapter::NetHttpPersistent',
217
- client.transport.connections.first.connection.builder.handlers.first.name
218
-
219
- response = @client.perform_request 'GET', '_cluster/health'
220
- assert_equal 200, response.status
221
- end
222
-
223
- should "automatically use the Patron client when loaded" do
224
- teardown { begin; Object.send(:remove_const, :Patron); rescue NameError; end }
225
-
226
- require 'patron'
227
- client = Elasticsearch::Transport::Client.new host: "127.0.0.1:#{@port}"
228
-
229
- assert_equal 'Faraday::Adapter::Patron',
230
- client.transport.connections.first.connection.builder.handlers.first.name
231
-
232
- response = @client.perform_request 'GET', '_cluster/health'
233
- assert_equal 200, response.status
234
- end unless JRUBY
235
- end
236
- end
237
- end