elasticsearch-transport 7.5.0 → 7.17.10

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 (47) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +30 -13
  3. data/Gemfile-faraday1.gemfile +47 -0
  4. data/README.md +159 -64
  5. data/Rakefile +63 -13
  6. data/elasticsearch-transport.gemspec +55 -63
  7. data/lib/elasticsearch/transport/client.rb +183 -58
  8. data/lib/elasticsearch/transport/meta_header.rb +135 -0
  9. data/lib/elasticsearch/transport/redacted.rb +16 -3
  10. data/lib/elasticsearch/transport/transport/base.rb +69 -30
  11. data/lib/elasticsearch/transport/transport/connections/collection.rb +18 -8
  12. data/lib/elasticsearch/transport/transport/connections/connection.rb +25 -9
  13. data/lib/elasticsearch/transport/transport/connections/selector.rb +16 -3
  14. data/lib/elasticsearch/transport/transport/errors.rb +17 -3
  15. data/lib/elasticsearch/transport/transport/http/curb.rb +60 -35
  16. data/lib/elasticsearch/transport/transport/http/faraday.rb +32 -9
  17. data/lib/elasticsearch/transport/transport/http/manticore.rb +57 -32
  18. data/lib/elasticsearch/transport/transport/loggable.rb +16 -3
  19. data/lib/elasticsearch/transport/transport/response.rb +17 -5
  20. data/lib/elasticsearch/transport/transport/serializer/multi_json.rb +16 -3
  21. data/lib/elasticsearch/transport/transport/sniffer.rb +35 -15
  22. data/lib/elasticsearch/transport/version.rb +17 -4
  23. data/lib/elasticsearch/transport.rb +35 -33
  24. data/lib/elasticsearch-transport.rb +16 -3
  25. data/spec/elasticsearch/connections/collection_spec.rb +28 -3
  26. data/spec/elasticsearch/connections/selector_spec.rb +16 -3
  27. data/spec/elasticsearch/transport/base_spec.rb +106 -43
  28. data/spec/elasticsearch/transport/client_spec.rb +734 -164
  29. data/spec/elasticsearch/transport/http/curb_spec.rb +126 -0
  30. data/spec/elasticsearch/transport/http/faraday_spec.rb +141 -0
  31. data/spec/elasticsearch/transport/http/manticore_spec.rb +161 -0
  32. data/spec/elasticsearch/transport/meta_header_spec.rb +301 -0
  33. data/spec/elasticsearch/transport/sniffer_spec.rb +16 -16
  34. data/spec/spec_helper.rb +32 -6
  35. data/test/integration/jruby_test.rb +43 -0
  36. data/test/integration/transport_test.rb +109 -46
  37. data/test/profile/client_benchmark_test.rb +16 -3
  38. data/test/test_helper.rb +26 -25
  39. data/test/unit/adapters_test.rb +88 -0
  40. data/test/unit/connection_test.rb +23 -5
  41. data/test/unit/response_test.rb +18 -5
  42. data/test/unit/serializer_test.rb +16 -3
  43. data/test/unit/transport_base_test.rb +33 -11
  44. data/test/unit/transport_curb_test.rb +16 -4
  45. data/test/unit/transport_faraday_test.rb +18 -5
  46. data/test/unit/transport_manticore_test.rb +258 -158
  47. metadata +65 -89
@@ -1,10 +1,23 @@
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
1
+ # Licensed to Elasticsearch B.V. under one or more contributor
2
+ # license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright
4
+ # ownership. Elasticsearch B.V. licenses this file to you under
5
+ # the Apache License, Version 2.0 (the "License"); you may
6
+ # not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing,
12
+ # software distributed under the License is distributed on an
13
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ # KIND, either express or implied. See the License for the
15
+ # specific language governing permissions and limitations
16
+ # under the License.
4
17
 
5
18
  require 'test_helper'
6
19
 
7
- class Elasticsearch::Transport::ClientIntegrationTest < Elasticsearch::Test::IntegrationTestCase
20
+ class Elasticsearch::Transport::Transport::ClientIntegrationTest < Elasticsearch::Test::IntegrationTestCase
8
21
  startup do
9
22
  Elasticsearch::Extensions::Test::Cluster.start(number_of_nodes: 2) if ENV['SERVER'] and not Elasticsearch::Extensions::Test::Cluster.running?(number_of_nodes: 2)
10
23
  end
@@ -16,66 +29,116 @@ class Elasticsearch::Transport::ClientIntegrationTest < Elasticsearch::Test::Int
16
29
  context "Transport" do
17
30
  setup do
18
31
  @host, @port = ELASTICSEARCH_HOSTS.first.split(':')
19
- begin; Object.send(:remove_const, :Patron); rescue NameError; end
32
+ @hosts = { hosts: [ { host: @host, port: @port } ] }
20
33
  end
21
34
 
22
- should "allow to customize the Faraday adapter" do
23
- require 'typhoeus'
24
- require 'typhoeus/adapters/faraday'
25
-
26
- transport = Elasticsearch::Transport::Transport::HTTP::Faraday.new \
27
- :hosts => [ { host: @host, port: @port } ] do |f|
28
- f.response :logger
29
- f.adapter :typhoeus
30
- end
35
+ should "use the default Faraday adapter" do
36
+ transport = Elasticsearch::Transport::Transport::HTTP::Faraday.new(@hosts) do |f|
37
+ f.response :logger
38
+ end
31
39
 
32
40
  client = Elasticsearch::Transport::Client.new transport: transport
41
+ assert_equal(client.transport.connections.first.connection.adapter, Faraday::Adapter::NetHttp)
33
42
  client.perform_request 'GET', ''
34
43
  end
35
44
 
36
- should "allow to define connection parameters and pass them" do
37
- transport = Elasticsearch::Transport::Transport::HTTP::Faraday.new \
38
- :hosts => [ { host: @host, port: @port } ],
39
- :options => { :transport_options => {
40
- :params => { :format => 'yaml' }
41
- }
42
- }
45
+ unless jruby?
46
+ should "allow to customize the Faraday adapter to Typhoeus" do
47
+ if is_faraday_v2?
48
+ require 'faraday/typhoeus'
49
+ else
50
+ require 'typhoeus'
51
+ end
43
52
 
44
- client = Elasticsearch::Transport::Client.new transport: transport
45
- response = client.perform_request 'GET', ''
53
+ transport = Elasticsearch::Transport::Transport::HTTP::Faraday.new(@hosts) do |f|
54
+ f.response :logger
55
+ f.adapter :typhoeus
56
+ end
46
57
 
47
- assert response.body.start_with?("---\n"), "Response body should be YAML: #{response.body.inspect}"
48
- end
58
+ client = Elasticsearch::Transport::Client.new transport: transport
59
+ assert_equal(client.transport.connections.first.connection.adapter, Faraday::Adapter::Typhoeus)
60
+ client.perform_request 'GET', ''
61
+ end
49
62
 
50
- should "use the Curb client" do
51
- require 'curb'
52
- require 'elasticsearch/transport/transport/http/curb'
63
+ should "use the Curb client" do
64
+ require 'curb'
65
+ require 'elasticsearch/transport/transport/http/curb'
66
+ transport = Elasticsearch::Transport::Transport::HTTP::Curb.new(@hosts) do |curl|
67
+ curl.verbose = true
68
+ end
53
69
 
54
- transport = Elasticsearch::Transport::Transport::HTTP::Curb.new \
55
- :hosts => [ { host: @host, port: @port } ] do |curl|
70
+ client = Elasticsearch::Transport::Client.new transport: transport
71
+ assert_equal(client.transport.class, Elasticsearch::Transport::Transport::HTTP::Curb)
72
+ client.perform_request 'GET', ''
73
+ end
74
+
75
+ should "deserialize JSON responses in the Curb client" do
76
+ require 'curb'
77
+ require 'elasticsearch/transport/transport/http/curb'
78
+ transport = Elasticsearch::Transport::Transport::HTTP::Curb.new(@hosts) do |curl|
56
79
  curl.verbose = true
57
80
  end
58
81
 
59
- client = Elasticsearch::Transport::Client.new transport: transport
60
- client.perform_request 'GET', ''
61
- end unless JRUBY
82
+ client = Elasticsearch::Transport::Client.new transport: transport
83
+ response = client.perform_request 'GET', ''
62
84
 
63
- should "deserialize JSON responses in the Curb client" do
64
- require 'curb'
65
- require 'elasticsearch/transport/transport/http/curb'
85
+ assert_respond_to(response.body, :to_hash)
86
+ assert_not_nil response.body['name']
87
+ assert_equal 'application/json', response.headers['content-type']
88
+ end
66
89
 
67
- transport = Elasticsearch::Transport::Transport::HTTP::Curb.new \
68
- :hosts => [ { host: @host, port: @port } ] do |curl|
69
- curl.verbose = true
90
+ should 'allow to customize the Faraday adapter to Patron' do
91
+ if is_faraday_v2?
92
+ require 'faraday/patron'
93
+ else
94
+ require 'patron'
95
+ end
96
+ transport = Elasticsearch::Transport::Transport::HTTP::Faraday.new(@hosts) do |f|
97
+ f.response :logger
98
+ f.adapter :patron
70
99
  end
71
100
 
72
- client = Elasticsearch::Transport::Client.new transport: transport
73
- response = client.perform_request 'GET', ''
101
+ client = Elasticsearch::Transport::Client.new(transport: transport)
102
+ assert_equal(client.transport.connections.first.connection.adapter, Faraday::Adapter::Patron)
103
+ client.perform_request 'GET', ''
104
+ end
74
105
 
75
- assert_respond_to(response.body, :to_hash)
76
- assert_not_nil response.body['name']
77
- assert_equal 'application/json', response.headers['content-type']
78
- end unless JRUBY
79
- end
106
+ should "allow to customize the Faraday adapter to NetHttpPersistent" do
107
+ require 'faraday/net_http_persistent'
108
+
109
+ transport = Elasticsearch::Transport::Transport::HTTP::Faraday.new(@hosts) do |f|
110
+ f.response :logger
111
+ f.adapter :net_http_persistent
112
+ end
80
113
 
114
+ client = Elasticsearch::Transport::Client.new transport: transport
115
+ assert_equal(client.transport.connections.first.connection.adapter, Faraday::Adapter::NetHttpPersistent)
116
+ client.perform_request 'GET', ''
117
+ end
118
+
119
+ should 'allow to customize the Faraday adapter to HTTPClient' do
120
+ require 'faraday/httpclient'
121
+
122
+ transport = Elasticsearch::Transport::Transport::HTTP::Faraday.new(@hosts) do |f|
123
+ f.response :logger
124
+ f.adapter :httpclient
125
+ end
126
+
127
+ client = Elasticsearch::Transport::Client.new(transport: transport)
128
+ assert_equal(client.transport.connections.first.connection.adapter, Faraday::Adapter::HTTPClient)
129
+ client.perform_request 'GET', ''
130
+ end
131
+
132
+ should "allow to define connection parameters and pass them" do
133
+ transport = Elasticsearch::Transport::Transport::HTTP::Faraday.new(
134
+ hosts: [ { host: @host, port: @port } ],
135
+ options: { transport_options: { params: { :format => 'yaml' } } }
136
+ )
137
+ client = Elasticsearch::Transport::Client.new transport: transport
138
+ response = client.perform_request 'GET', ''
139
+
140
+ assert response.body.start_with?("---\n"), "Response body should be YAML: #{response.body.inspect}"
141
+ end
142
+ end
143
+ end
81
144
  end
@@ -1,6 +1,19 @@
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
1
+ # Licensed to Elasticsearch B.V. under one or more contributor
2
+ # license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright
4
+ # ownership. Elasticsearch B.V. licenses this file to you under
5
+ # the Apache License, Version 2.0 (the "License"); you may
6
+ # not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing,
12
+ # software distributed under the License is distributed on an
13
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ # KIND, either express or implied. See the License for the
15
+ # specific language governing permissions and limitations
16
+ # under the License.
4
17
 
5
18
  require 'test_helper'
6
19
 
data/test/test_helper.rb CHANGED
@@ -1,36 +1,36 @@
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
1
+ # Licensed to Elasticsearch B.V. under one or more contributor
2
+ # license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright
4
+ # ownership. Elasticsearch B.V. licenses this file to you under
5
+ # the Apache License, Version 2.0 (the "License"); you may
6
+ # not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing,
12
+ # software distributed under the License is distributed on an
13
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ # KIND, either express or implied. See the License for the
15
+ # specific language governing permissions and limitations
16
+ # under the License.
4
17
 
5
18
 
6
19
  ELASTICSEARCH_HOSTS = if hosts = ENV['TEST_ES_SERVER'] || ENV['ELASTICSEARCH_HOSTS']
7
20
  hosts.split(',').map do |host|
8
21
  /(http\:\/\/)?(\S+)/.match(host)[2]
9
22
  end
23
+ else
24
+ ['localhost:9200']
10
25
  end.freeze
11
26
 
12
27
  TEST_HOST, TEST_PORT = ELASTICSEARCH_HOSTS.first.split(':') if ELASTICSEARCH_HOSTS
13
28
 
14
- RUBY_1_8 = defined?(RUBY_VERSION) && RUBY_VERSION < '1.9'
15
29
  JRUBY = defined?(JRUBY_VERSION)
16
30
 
17
- if RUBY_1_8 and not ENV['BUNDLE_GEMFILE']
18
- require 'rubygems'
19
- gem 'test-unit'
20
- end
21
-
22
- require 'rubygems' if RUBY_1_8
23
-
24
- if ENV['COVERAGE'] && ENV['CI'].nil? && !RUBY_1_8
31
+ if ENV['COVERAGE']
25
32
  require 'simplecov'
26
- SimpleCov.start { add_filter "/test|test_/" }
27
- end
28
-
29
- if ENV['CI'] && !RUBY_1_8
30
- require 'simplecov'
31
- require 'simplecov-rcov'
32
- SimpleCov.formatter = SimpleCov::Formatter::RcovFormatter
33
- SimpleCov.start { add_filter "/test|test_" }
33
+ SimpleCov.start { add_filter %r{^/test/} }
34
34
  end
35
35
 
36
36
  # Register `at_exit` handler for integration tests shutdown.
@@ -39,7 +39,6 @@ if defined?(RUBY_VERSION) && RUBY_VERSION > '1.9'
39
39
  at_exit { Elasticsearch::Test::IntegrationTestCase.__run_at_exit_hooks }
40
40
  end
41
41
 
42
- require 'test/unit' if RUBY_1_8
43
42
  require 'minitest/autorun'
44
43
  require 'minitest/reporters'
45
44
  require 'shoulda/context'
@@ -98,6 +97,10 @@ module Minitest
98
97
  end
99
98
  end
100
99
 
100
+ def is_faraday_v2?
101
+ Gem::Version.new(Faraday::VERSION) >= Gem::Version.new(2)
102
+ end
103
+
101
104
  Minitest::Reporters.use! FixedMinitestSpecReporter.new
102
105
 
103
106
  module Elasticsearch
@@ -106,8 +109,7 @@ module Elasticsearch
106
109
  extend Elasticsearch::Extensions::Test::StartupShutdown
107
110
 
108
111
  shutdown { Elasticsearch::Extensions::Test::Cluster.stop if ENV['SERVER'] && started? && Elasticsearch::Extensions::Test::Cluster.running? }
109
- context "IntegrationTest" do; should "noop on Ruby 1.8" do; end; end if RUBY_1_8
110
- end if defined?(RUBY_VERSION) && RUBY_VERSION > '1.9'
112
+ end
111
113
  end
112
114
 
113
115
  module Test
@@ -116,7 +118,6 @@ module Elasticsearch
116
118
  extend Elasticsearch::Extensions::Test::Profiling
117
119
 
118
120
  shutdown { Elasticsearch::Extensions::Test::Cluster.stop if ENV['SERVER'] && started? && Elasticsearch::Extensions::Test::Cluster.running? }
119
- context "IntegrationTest" do; should "noop on Ruby 1.8" do; end; end if RUBY_1_8
120
- end unless RUBY_1_8 || JRUBY
121
+ end unless JRUBY
121
122
  end
122
123
  end
@@ -0,0 +1,88 @@
1
+ # Licensed to Elasticsearch B.V. under one or more contributor
2
+ # license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright
4
+ # ownership. Elasticsearch B.V. licenses this file to you under
5
+ # the Apache License, Version 2.0 (the "License"); you may
6
+ # not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing,
12
+ # software distributed under the License is distributed on an
13
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ # KIND, either express or implied. See the License for the
15
+ # specific language governing permissions and limitations
16
+ # under the License.
17
+
18
+ require 'test_helper'
19
+
20
+ class Elasticsearch::Transport::Transport::ClientAdaptersUnitTest < Minitest::Test
21
+ context 'Adapters' do
22
+ setup do
23
+ begin
24
+ Object.send(:remove_const, :Patron)
25
+ rescue NameError
26
+ end
27
+ end
28
+
29
+ should 'use the default Faraday adapter' do
30
+ fork do
31
+ client = Elasticsearch::Transport::Client.new
32
+ assert_equal(client.transport.connections.first.connection.adapter, Faraday::Adapter::NetHttp)
33
+ end
34
+ end
35
+
36
+ should 'use Patron Faraday adapter' do
37
+ fork do
38
+ if is_faraday_v2?
39
+ require 'faraday/patron'
40
+ else
41
+ require 'patron'
42
+ end
43
+
44
+ client = Elasticsearch::Transport::Client.new
45
+ assert_equal(client.transport.connections.first.connection.adapter, Faraday::Adapter::Patron)
46
+ end
47
+ end
48
+
49
+ should 'use Typhoeus Faraday adapter' do
50
+ fork do
51
+ if is_faraday_v2?
52
+ require 'faraday/typhoeus'
53
+ else
54
+ require 'typhoeus'
55
+ end
56
+
57
+ client = Elasticsearch::Transport::Client.new
58
+ assert_equal(client.transport.connections.first.connection.adapter, Faraday::Adapter::Typhoeus)
59
+ end
60
+ end
61
+
62
+ should 'use NetHttpPersistent Faraday adapter' do
63
+ fork do
64
+ if is_faraday_v2?
65
+ require 'faraday/net_http_persistent'
66
+ else
67
+ require 'net/http/persistent'
68
+ end
69
+
70
+ client = Elasticsearch::Transport::Client.new
71
+ assert_equal(client.transport.connections.first.connection.adapter, Faraday::Adapter::NetHttpPersistent)
72
+ end
73
+ end
74
+
75
+ should 'use HTTPClient Faraday adapter' do
76
+ fork do
77
+ if is_faraday_v2?
78
+ require 'faraday/httpclient'
79
+ else
80
+ require 'httpclient'
81
+ end
82
+
83
+ client = Elasticsearch::Transport::Client.new
84
+ assert_equal(Faraday::Adapter::HTTPClient, client.transport.connections.first.connection.adapter)
85
+ end
86
+ end
87
+ end unless jruby?
88
+ end
@@ -1,6 +1,19 @@
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
1
+ # Licensed to Elasticsearch B.V. under one or more contributor
2
+ # license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright
4
+ # ownership. Elasticsearch B.V. licenses this file to you under
5
+ # the Apache License, Version 2.0 (the "License"); you may
6
+ # not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing,
12
+ # software distributed under the License is distributed on an
13
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ # KIND, either express or implied. See the License for the
15
+ # specific language governing permissions and limitations
16
+ # under the License.
4
17
 
5
18
  require 'test_helper'
6
19
 
@@ -44,10 +57,15 @@ class Elasticsearch::Transport::Transport::Connections::ConnectionTest < Minites
44
57
  assert_equal 'http://localhost:9200/foo/_search?foo=bar', c.full_url('_search', {:foo => 'bar'})
45
58
  end
46
59
 
60
+ should "return right full url with path when path starts with /" do
61
+ c = Connection.new :host => { :protocol => 'http', :host => 'localhost', :port => '9200', :path => '/foo' }
62
+ assert_equal 'http://localhost:9200/foo/_search?foo=bar', c.full_url('/_search', {:foo => 'bar'})
63
+ end
64
+
47
65
  should "have a string representation" do
48
66
  c = Connection.new :host => 'x'
49
- assert_match /host: x/, c.to_s
50
- assert_match /alive/, c.to_s
67
+ assert_match(/host: x/, c.to_s)
68
+ assert_match(/alive/, c.to_s)
51
69
  end
52
70
 
53
71
  should "not be dead by default" do
@@ -1,6 +1,19 @@
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
1
+ # Licensed to Elasticsearch B.V. under one or more contributor
2
+ # license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright
4
+ # ownership. Elasticsearch B.V. licenses this file to you under
5
+ # the Apache License, Version 2.0 (the "License"); you may
6
+ # not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing,
12
+ # software distributed under the License is distributed on an
13
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ # KIND, either express or implied. See the License for the
15
+ # specific language governing permissions and limitations
16
+ # under the License.
4
17
 
5
18
  require 'test_helper'
6
19
 
@@ -13,7 +26,7 @@ class Elasticsearch::Transport::Transport::ResponseTest < Minitest::Test
13
26
 
14
27
  response = Elasticsearch::Transport::Transport::Response.new 200, body
15
28
  assert_equal 'UTF-8', response.body.encoding.name
16
- end unless RUBY_1_8
29
+ end
17
30
 
18
31
  end
19
- end
32
+ end
@@ -1,6 +1,19 @@
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
1
+ # Licensed to Elasticsearch B.V. under one or more contributor
2
+ # license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright
4
+ # ownership. Elasticsearch B.V. licenses this file to you under
5
+ # the Apache License, Version 2.0 (the "License"); you may
6
+ # not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing,
12
+ # software distributed under the License is distributed on an
13
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ # KIND, either express or implied. See the License for the
15
+ # specific language governing permissions and limitations
16
+ # under the License.
4
17
 
5
18
  require 'test_helper'
6
19
 
@@ -1,6 +1,19 @@
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
1
+ # Licensed to Elasticsearch B.V. under one or more contributor
2
+ # license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright
4
+ # ownership. Elasticsearch B.V. licenses this file to you under
5
+ # the Apache License, Version 2.0 (the "License"); you may
6
+ # not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing,
12
+ # software distributed under the License is distributed on an
13
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ # KIND, either express or implied. See the License for the
15
+ # specific language governing permissions and limitations
16
+ # under the License.
4
17
 
5
18
  require 'test_helper'
6
19
 
@@ -250,6 +263,15 @@ class Elasticsearch::Transport::Transport::BaseTest < Minitest::Test
250
263
  end
251
264
  end
252
265
 
266
+ should 'raise TooManyRequestsError on 429' do
267
+ @transport.expects(:get_connection).returns(stub_everything :failures => 1)
268
+ assert_raise Elasticsearch::Transport::Transport::Errors::TooManyRequests do
269
+ @transport.perform_request 'GET', '/' do
270
+ Elasticsearch::Transport::Transport::Response.new 429, 'ERROR'
271
+ end
272
+ end
273
+ end
274
+
253
275
  should "not raise an error when the :ignore argument has been passed" do
254
276
  @transport.stubs(:get_connection).returns(stub_everything :failures => 1)
255
277
 
@@ -297,7 +319,7 @@ class Elasticsearch::Transport::Transport::BaseTest < Minitest::Test
297
319
  @transport.perform_request('GET', '/', &@block)
298
320
  assert_equal 2, @transport.counter
299
321
  end
300
- end unless RUBY_1_8
322
+ end
301
323
 
302
324
  context "performing a request with retry on connection failures" do
303
325
  setup do
@@ -331,7 +353,7 @@ class Elasticsearch::Transport::Transport::BaseTest < Minitest::Test
331
353
  @transport.perform_request('GET', '/', &@block)
332
354
  end
333
355
  end
334
- end unless RUBY_1_8
356
+ end
335
357
 
336
358
  context "performing a request with retry on status" do
337
359
  setup do
@@ -378,7 +400,7 @@ class Elasticsearch::Transport::Transport::BaseTest < Minitest::Test
378
400
  @transport.perform_request('GET', '/', &@block)
379
401
  end
380
402
  end
381
- end unless RUBY_1_8
403
+ end
382
404
 
383
405
  context "logging" do
384
406
  setup do
@@ -416,7 +438,7 @@ class Elasticsearch::Transport::Transport::BaseTest < Minitest::Test
416
438
  @transport.stubs(:get_connection).returns(fake_connection)
417
439
 
418
440
  @transport.logger.expects(:info).with do |message|
419
- assert_match /http:\/\/user:\*{1,15}@localhost\:9200/, message
441
+ assert_match(/http:\/\/user:\*{1,15}@localhost\:9200/, message)
420
442
  true
421
443
  end
422
444
 
@@ -434,7 +456,7 @@ class Elasticsearch::Transport::Transport::BaseTest < Minitest::Test
434
456
  assert_raise Elasticsearch::Transport::Transport::Errors::InternalServerError do
435
457
  @transport.perform_request('POST', '_search', &@block)
436
458
  end
437
- end unless RUBY_1_8
459
+ end
438
460
 
439
461
  should "not log a failed Elasticsearch request as fatal" do
440
462
  @block = Proc.new { |c, u| puts "ERROR" }
@@ -445,7 +467,7 @@ class Elasticsearch::Transport::Transport::BaseTest < Minitest::Test
445
467
 
446
468
  # No `BadRequest` error
447
469
  @transport.perform_request('POST', '_search', :ignore => 500, &@block)
448
- end unless RUBY_1_8
470
+ end
449
471
 
450
472
  should "log and re-raise a Ruby exception" do
451
473
  @block = Proc.new { |c, u| puts "ERROR" }
@@ -455,7 +477,7 @@ class Elasticsearch::Transport::Transport::BaseTest < Minitest::Test
455
477
  @transport.logger.expects(:fatal)
456
478
 
457
479
  assert_raise(Exception) { @transport.perform_request('POST', '_search', &@block) }
458
- end unless RUBY_1_8
480
+ end
459
481
  end
460
482
 
461
483
  context "tracing" do
@@ -509,7 +531,7 @@ class Elasticsearch::Transport::Transport::BaseTest < Minitest::Test
509
531
  assert_raise Elasticsearch::Transport::Transport::Errors::InternalServerError do
510
532
  @transport.perform_request('POST', '_search', &@block)
511
533
  end
512
- end unless RUBY_1_8
534
+ end
513
535
 
514
536
  end
515
537
 
@@ -1,6 +1,19 @@
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
1
+ # Licensed to Elasticsearch B.V. under one or more contributor
2
+ # license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright
4
+ # ownership. Elasticsearch B.V. licenses this file to you under
5
+ # the Apache License, Version 2.0 (the "License"); you may
6
+ # not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing,
12
+ # software distributed under the License is distributed on an
13
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ # KIND, either express or implied. See the License for the
15
+ # specific language governing permissions and limitations
16
+ # under the License.
4
17
 
5
18
  require 'test_helper'
6
19
 
@@ -71,7 +84,6 @@ else
71
84
  @transport.connections.first.connection.expects(:http).with(:GET).returns(stub_everything)
72
85
  @transport.connections.first.connection.expects(:body_str).returns('{"foo":"bar"}')
73
86
  @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')
74
-
75
87
  response = @transport.perform_request 'GET', '/'
76
88
 
77
89
  assert_equal 'application/json', response.headers['content-type']