elasticsearch-transport 5.0.5 → 6.8.3

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 (42) 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 +45 -63
  6. data/lib/elasticsearch/transport/client.rb +207 -67
  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 +1063 -0
  24. data/spec/elasticsearch/transport/meta_header_spec.rb +214 -0
  25. data/spec/elasticsearch/transport/sniffer_spec.rb +269 -0
  26. data/spec/spec_helper.rb +72 -0
  27. data/test/integration/transport_test.rb +9 -5
  28. data/test/profile/client_benchmark_test.rb +23 -25
  29. data/test/test_helper.rb +10 -0
  30. data/test/unit/connection_collection_test.rb +4 -0
  31. data/test/unit/connection_selector_test.rb +4 -0
  32. data/test/unit/connection_test.rb +4 -0
  33. data/test/unit/response_test.rb +5 -1
  34. data/test/unit/serializer_test.rb +4 -0
  35. data/test/unit/transport_base_test.rb +21 -1
  36. data/test/unit/transport_curb_test.rb +12 -0
  37. data/test/unit/transport_faraday_test.rb +16 -0
  38. data/test/unit/transport_manticore_test.rb +11 -0
  39. metadata +90 -76
  40. data/test/integration/client_test.rb +0 -237
  41. data/test/unit/client_test.rb +0 -366
  42. data/test/unit/sniffer_test.rb +0 -179
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.3
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: 2021-02-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: multi_json
@@ -28,44 +28,44 @@ dependencies:
28
28
  name: faraday
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: '1'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: '1'
41
41
  - !ruby/object:Gem::Dependency
42
- name: bundler
42
+ name: ansi
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '1'
47
+ version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '1'
54
+ version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: rake
56
+ name: bundler
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: '11.1'
61
+ version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: '11.1'
68
+ version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: elasticsearch-extensions
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -81,7 +81,7 @@ dependencies:
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: ansi
84
+ name: mocha
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ">="
@@ -95,7 +95,7 @@ dependencies:
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
- name: shoulda-context
98
+ name: pry
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - ">="
@@ -109,21 +109,21 @@ dependencies:
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
- name: mocha
112
+ name: rake
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - ">="
115
+ - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: '0'
117
+ version: '13'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - ">="
122
+ - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: '0'
124
+ version: '13'
125
125
  - !ruby/object:Gem::Dependency
126
- name: turn
126
+ name: shoulda-context
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - ">="
@@ -137,7 +137,7 @@ dependencies:
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
139
  - !ruby/object:Gem::Dependency
140
- name: yard
140
+ name: turn
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
143
  - - ">="
@@ -151,7 +151,7 @@ dependencies:
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
153
  - !ruby/object:Gem::Dependency
154
- name: pry
154
+ name: yard
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
157
  - - ">="
@@ -165,21 +165,21 @@ dependencies:
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0'
167
167
  - !ruby/object:Gem::Dependency
168
- name: ci_reporter
168
+ name: cane
169
169
  requirement: !ruby/object:Gem::Requirement
170
170
  requirements:
171
- - - "~>"
171
+ - - ">="
172
172
  - !ruby/object:Gem::Version
173
- version: '1.9'
173
+ version: '0'
174
174
  type: :development
175
175
  prerelease: false
176
176
  version_requirements: !ruby/object:Gem::Requirement
177
177
  requirements:
178
- - - "~>"
178
+ - - ">="
179
179
  - !ruby/object:Gem::Version
180
- version: '1.9'
180
+ version: '0'
181
181
  - !ruby/object:Gem::Dependency
182
- name: curb
182
+ name: hashie
183
183
  requirement: !ruby/object:Gem::Requirement
184
184
  requirements:
185
185
  - - ">="
@@ -193,7 +193,7 @@ dependencies:
193
193
  - !ruby/object:Gem::Version
194
194
  version: '0'
195
195
  - !ruby/object:Gem::Dependency
196
- name: patron
196
+ name: httpclient
197
197
  requirement: !ruby/object:Gem::Requirement
198
198
  requirements:
199
199
  - - ">="
@@ -207,19 +207,19 @@ dependencies:
207
207
  - !ruby/object:Gem::Version
208
208
  version: '0'
209
209
  - !ruby/object:Gem::Dependency
210
- name: typhoeus
210
+ name: minitest
211
211
  requirement: !ruby/object:Gem::Requirement
212
212
  requirements:
213
213
  - - "~>"
214
214
  - !ruby/object:Gem::Version
215
- version: '0.6'
215
+ version: '4.0'
216
216
  type: :development
217
217
  prerelease: false
218
218
  version_requirements: !ruby/object:Gem::Requirement
219
219
  requirements:
220
220
  - - "~>"
221
221
  - !ruby/object:Gem::Version
222
- version: '0.6'
222
+ version: '4.0'
223
223
  - !ruby/object:Gem::Dependency
224
224
  name: net-http-persistent
225
225
  requirement: !ruby/object:Gem::Requirement
@@ -235,7 +235,27 @@ dependencies:
235
235
  - !ruby/object:Gem::Version
236
236
  version: '0'
237
237
  - !ruby/object:Gem::Dependency
238
- name: hashie
238
+ name: simplecov
239
+ requirement: !ruby/object:Gem::Requirement
240
+ requirements:
241
+ - - "~>"
242
+ - !ruby/object:Gem::Version
243
+ version: '0.17'
244
+ - - "<"
245
+ - !ruby/object:Gem::Version
246
+ version: '0.18'
247
+ type: :development
248
+ prerelease: false
249
+ version_requirements: !ruby/object:Gem::Requirement
250
+ requirements:
251
+ - - "~>"
252
+ - !ruby/object:Gem::Version
253
+ version: '0.17'
254
+ - - "<"
255
+ - !ruby/object:Gem::Version
256
+ version: '0.18'
257
+ - !ruby/object:Gem::Dependency
258
+ name: simplecov-rcov
239
259
  requirement: !ruby/object:Gem::Requirement
240
260
  requirements:
241
261
  - - ">="
@@ -249,35 +269,35 @@ dependencies:
249
269
  - !ruby/object:Gem::Version
250
270
  version: '0'
251
271
  - !ruby/object:Gem::Dependency
252
- name: minitest
272
+ name: test-unit
253
273
  requirement: !ruby/object:Gem::Requirement
254
274
  requirements:
255
275
  - - "~>"
256
276
  - !ruby/object:Gem::Version
257
- version: '4.0'
277
+ version: '2'
258
278
  type: :development
259
279
  prerelease: false
260
280
  version_requirements: !ruby/object:Gem::Requirement
261
281
  requirements:
262
282
  - - "~>"
263
283
  - !ruby/object:Gem::Version
264
- version: '4.0'
284
+ version: '2'
265
285
  - !ruby/object:Gem::Dependency
266
- name: ruby-prof
286
+ name: typhoeus
267
287
  requirement: !ruby/object:Gem::Requirement
268
288
  requirements:
269
- - - ">="
289
+ - - "~>"
270
290
  - !ruby/object:Gem::Version
271
- version: '0'
291
+ version: '1.4'
272
292
  type: :development
273
293
  prerelease: false
274
294
  version_requirements: !ruby/object:Gem::Requirement
275
295
  requirements:
276
- - - ">="
296
+ - - "~>"
277
297
  - !ruby/object:Gem::Version
278
- version: '0'
298
+ version: '1.4'
279
299
  - !ruby/object:Gem::Dependency
280
- name: require-prof
300
+ name: curb
281
301
  requirement: !ruby/object:Gem::Requirement
282
302
  requirements:
283
303
  - - ">="
@@ -291,7 +311,7 @@ dependencies:
291
311
  - !ruby/object:Gem::Version
292
312
  version: '0'
293
313
  - !ruby/object:Gem::Dependency
294
- name: simplecov
314
+ name: patron
295
315
  requirement: !ruby/object:Gem::Requirement
296
316
  requirements:
297
317
  - - ">="
@@ -305,7 +325,7 @@ dependencies:
305
325
  - !ruby/object:Gem::Version
306
326
  version: '0'
307
327
  - !ruby/object:Gem::Dependency
308
- name: simplecov-rcov
328
+ name: require-prof
309
329
  requirement: !ruby/object:Gem::Requirement
310
330
  requirements:
311
331
  - - ">="
@@ -319,7 +339,7 @@ dependencies:
319
339
  - !ruby/object:Gem::Version
320
340
  version: '0'
321
341
  - !ruby/object:Gem::Dependency
322
- name: cane
342
+ name: ruby-prof
323
343
  requirement: !ruby/object:Gem::Requirement
324
344
  requirements:
325
345
  - - ">="
@@ -332,24 +352,10 @@ dependencies:
332
352
  - - ">="
333
353
  - !ruby/object:Gem::Version
334
354
  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
355
  description: 'Ruby client for Elasticsearch. See the `elasticsearch` gem for full
350
356
  integration.
351
357
 
352
- '
358
+ '
353
359
  email:
354
360
  - karel.minarik@elasticsearch.org
355
361
  executables: []
@@ -367,6 +373,7 @@ files:
367
373
  - lib/elasticsearch-transport.rb
368
374
  - lib/elasticsearch/transport.rb
369
375
  - lib/elasticsearch/transport/client.rb
376
+ - lib/elasticsearch/transport/redacted.rb
370
377
  - lib/elasticsearch/transport/transport/base.rb
371
378
  - lib/elasticsearch/transport/transport/connections/collection.rb
372
379
  - lib/elasticsearch/transport/transport/connections/connection.rb
@@ -379,25 +386,31 @@ files:
379
386
  - lib/elasticsearch/transport/transport/serializer/multi_json.rb
380
387
  - lib/elasticsearch/transport/transport/sniffer.rb
381
388
  - lib/elasticsearch/transport/version.rb
382
- - test/integration/client_test.rb
389
+ - spec/elasticsearch/transport/base_spec.rb
390
+ - spec/elasticsearch/transport/client_spec.rb
391
+ - spec/elasticsearch/transport/meta_header_spec.rb
392
+ - spec/elasticsearch/transport/sniffer_spec.rb
393
+ - spec/spec_helper.rb
383
394
  - test/integration/transport_test.rb
384
395
  - test/profile/client_benchmark_test.rb
385
396
  - test/test_helper.rb
386
- - test/unit/client_test.rb
387
397
  - test/unit/connection_collection_test.rb
388
398
  - test/unit/connection_selector_test.rb
389
399
  - test/unit/connection_test.rb
390
400
  - test/unit/response_test.rb
391
401
  - test/unit/serializer_test.rb
392
- - test/unit/sniffer_test.rb
393
402
  - test/unit/transport_base_test.rb
394
403
  - test/unit/transport_curb_test.rb
395
404
  - test/unit/transport_faraday_test.rb
396
405
  - test/unit/transport_manticore_test.rb
397
- homepage: https://github.com/elasticsearch/elasticsearch-ruby/tree/master/elasticsearch-transport
406
+ homepage: https://www.elastic.co/guide/en/elasticsearch/client/ruby-api/current/index.html
398
407
  licenses:
399
- - Apache 2
400
- metadata: {}
408
+ - Apache-2.0
409
+ metadata:
410
+ homepage_uri: https://www.elastic.co/guide/en/elasticsearch/client/ruby-api/current/index.html
411
+ changelog_uri: https://github.com/elastic/elasticsearch-ruby/blob/6.x/CHANGELOG.md
412
+ source_code_uri: https://github.com/elastic/elasticsearch-ruby/tree/6.x/elasticsearch-transport
413
+ bug_tracker_uri: https://github.com/elastic/elasticsearch-ruby/issues
401
414
  post_install_message:
402
415
  rdoc_options:
403
416
  - "--charset=UTF-8"
@@ -407,30 +420,31 @@ required_ruby_version: !ruby/object:Gem::Requirement
407
420
  requirements:
408
421
  - - ">="
409
422
  - !ruby/object:Gem::Version
410
- version: '0'
423
+ version: '2.4'
411
424
  required_rubygems_version: !ruby/object:Gem::Requirement
412
425
  requirements:
413
426
  - - ">="
414
427
  - !ruby/object:Gem::Version
415
428
  version: '0'
416
429
  requirements: []
417
- rubyforge_project:
418
- rubygems_version: 2.6.11
430
+ rubygems_version: 3.1.4
419
431
  signing_key:
420
432
  specification_version: 4
421
433
  summary: Ruby client for Elasticsearch.
422
434
  test_files:
423
- - test/integration/client_test.rb
435
+ - spec/elasticsearch/transport/base_spec.rb
436
+ - spec/elasticsearch/transport/client_spec.rb
437
+ - spec/elasticsearch/transport/meta_header_spec.rb
438
+ - spec/elasticsearch/transport/sniffer_spec.rb
439
+ - spec/spec_helper.rb
424
440
  - test/integration/transport_test.rb
425
441
  - test/profile/client_benchmark_test.rb
426
442
  - test/test_helper.rb
427
- - test/unit/client_test.rb
428
443
  - test/unit/connection_collection_test.rb
429
444
  - test/unit/connection_selector_test.rb
430
445
  - test/unit/connection_test.rb
431
446
  - test/unit/response_test.rb
432
447
  - test/unit/serializer_test.rb
433
- - test/unit/sniffer_test.rb
434
448
  - test/unit/transport_base_test.rb
435
449
  - test/unit/transport_curb_test.rb
436
450
  - 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