elasticsearch-transport 0.4.8 → 0.4.9
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.
- data/Gemfile +9 -1
- data/lib/elasticsearch/transport/client.rb +2 -0
- data/lib/elasticsearch/transport/transport/base.rb +6 -0
- data/lib/elasticsearch/transport/transport/http/curb.rb +6 -1
- data/lib/elasticsearch/transport/transport/http/faraday.rb +1 -1
- data/lib/elasticsearch/transport/version.rb +1 -1
- data/test/integration/transport_test.rb +31 -0
- data/test/unit/transport_base_test.rb +16 -8
- data/test/unit/transport_curb_test.rb +12 -2
- data/test/unit/transport_faraday_test.rb +59 -3
- metadata +2 -2
data/Gemfile
CHANGED
@@ -3,6 +3,14 @@ source 'https://rubygems.org'
|
|
3
3
|
# Specify your gem's dependencies in elasticsearch-transport.gemspec
|
4
4
|
gemspec
|
5
5
|
|
6
|
-
if File.exists? File.expand_path("../../elasticsearch-
|
6
|
+
if File.exists? File.expand_path("../../elasticsearch-api/elasticsearch-api.gemspec", __FILE__)
|
7
|
+
gem 'elasticsearch-api', :path => File.expand_path("../../elasticsearch-api", __FILE__), :require => false
|
8
|
+
end
|
9
|
+
|
10
|
+
if File.exists? File.expand_path("../../elasticsearch-extensions/elasticsearch-extensions.gemspec", __FILE__)
|
7
11
|
gem 'elasticsearch-extensions', :path => File.expand_path("../../elasticsearch-extensions", __FILE__), :require => true
|
8
12
|
end
|
13
|
+
|
14
|
+
if File.exists? File.expand_path("../../elasticsearch/elasticsearch.gemspec", __FILE__)
|
15
|
+
gem 'elasticsearch', :path => File.expand_path("../../elasticsearch", __FILE__), :require => false
|
16
|
+
end
|
@@ -57,6 +57,8 @@ module Elasticsearch
|
|
57
57
|
#
|
58
58
|
# @option arguments [Boolean] :reload_on_failure Reload connections after failure (false by default)
|
59
59
|
#
|
60
|
+
# @option arguments [Hash] :transport_options Options to be passed to the `Faraday::Connection` constructor
|
61
|
+
#
|
60
62
|
# @option arguments [Constant] :transport_class A specific transport class to use, will be initialized by
|
61
63
|
# the client and passed hosts and all arguments
|
62
64
|
#
|
@@ -177,7 +177,13 @@ module Elasticsearch
|
|
177
177
|
begin
|
178
178
|
tries += 1
|
179
179
|
connection = get_connection or raise Error.new("Cannot get new connection from pool.")
|
180
|
+
|
181
|
+
if connection.connection.respond_to?(:params) && connection.connection.params.respond_to?(:to_hash)
|
182
|
+
params = connection.connection.params.merge(params.to_hash)
|
183
|
+
end
|
184
|
+
|
180
185
|
url = connection.full_url(path, params)
|
186
|
+
|
181
187
|
response = block.call(connection, url)
|
182
188
|
|
183
189
|
connection.healthy! if connection.failures > 0
|
@@ -28,7 +28,12 @@ module Elasticsearch
|
|
28
28
|
|
29
29
|
connection.connection.http(method.to_sym)
|
30
30
|
|
31
|
-
|
31
|
+
headers = {}
|
32
|
+
headers['content-type'] = 'application/json' if connection.connection.header_str =~ /\/json/
|
33
|
+
|
34
|
+
Response.new connection.connection.response_code,
|
35
|
+
connection.connection.body_str,
|
36
|
+
headers
|
32
37
|
end
|
33
38
|
end
|
34
39
|
|
@@ -39,7 +39,7 @@ module Elasticsearch
|
|
39
39
|
|
40
40
|
Connections::Connection.new \
|
41
41
|
:host => host,
|
42
|
-
:connection => ::Faraday::Connection.new( :
|
42
|
+
:connection => ::Faraday::Connection.new(url, options[:transport_options], &@block )
|
43
43
|
},
|
44
44
|
:selector_class => options[:selector_class],
|
45
45
|
:selector => options[:selector]
|
@@ -32,6 +32,20 @@ class Elasticsearch::Transport::ClientIntegrationTest < Elasticsearch::Test::Int
|
|
32
32
|
client.perform_request 'GET', ''
|
33
33
|
end
|
34
34
|
|
35
|
+
should "allow to define connection parameters and pass them" do
|
36
|
+
transport = Elasticsearch::Transport::Transport::HTTP::Faraday.new \
|
37
|
+
:hosts => [ { :host => 'localhost', :port => @port } ],
|
38
|
+
:options => { :transport_options => {
|
39
|
+
:params => { :format => 'yaml' }
|
40
|
+
}
|
41
|
+
}
|
42
|
+
|
43
|
+
client = Elasticsearch::Transport::Client.new transport: transport
|
44
|
+
response = client.perform_request 'GET', ''
|
45
|
+
|
46
|
+
assert response.body.start_with?("---\n"), "Response body should be YAML: #{response.body.inspect}"
|
47
|
+
end
|
48
|
+
|
35
49
|
should "use the Curb client" do
|
36
50
|
require 'curb'
|
37
51
|
require 'elasticsearch/transport/transport/http/curb'
|
@@ -44,6 +58,23 @@ class Elasticsearch::Transport::ClientIntegrationTest < Elasticsearch::Test::Int
|
|
44
58
|
client = Elasticsearch::Transport::Client.new transport: transport
|
45
59
|
client.perform_request 'GET', ''
|
46
60
|
end unless JRUBY
|
61
|
+
|
62
|
+
should "deserialize JSON responses in the Curb client" do
|
63
|
+
require 'curb'
|
64
|
+
require 'elasticsearch/transport/transport/http/curb'
|
65
|
+
|
66
|
+
transport = Elasticsearch::Transport::Transport::HTTP::Curb.new \
|
67
|
+
:hosts => [ { :host => 'localhost', :port => @port } ] do |curl|
|
68
|
+
curl.verbose = true
|
69
|
+
end
|
70
|
+
|
71
|
+
client = Elasticsearch::Transport::Client.new transport: transport
|
72
|
+
response = client.perform_request 'GET', ''
|
73
|
+
|
74
|
+
assert_respond_to(response.body, :to_hash)
|
75
|
+
assert_equal 200, response.body['status']
|
76
|
+
assert_equal 'application/json', response.headers['content-type']
|
77
|
+
end unless JRUBY
|
47
78
|
end
|
48
79
|
|
49
80
|
end
|
@@ -270,10 +270,14 @@ class Elasticsearch::Transport::Transport::BaseTest < Test::Unit::TestCase
|
|
270
270
|
context "logging" do
|
271
271
|
setup do
|
272
272
|
@transport = DummyTransportPerformer.new :options => { :logger => Logger.new('/dev/null') }
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
273
|
+
|
274
|
+
fake_connection = stub :full_url => 'localhost:9200/_search?size=1',
|
275
|
+
:host => 'localhost',
|
276
|
+
:connection => stub_everything,
|
277
|
+
:failures => 0,
|
278
|
+
:healthy! => true
|
279
|
+
|
280
|
+
@transport.stubs(:get_connection).returns(fake_connection)
|
277
281
|
@transport.serializer.stubs(:load).returns 'foo' => 'bar'
|
278
282
|
@transport.serializer.stubs(:dump).returns '{"foo":"bar"}'
|
279
283
|
end
|
@@ -314,10 +318,14 @@ class Elasticsearch::Transport::Transport::BaseTest < Test::Unit::TestCase
|
|
314
318
|
context "tracing" do
|
315
319
|
setup do
|
316
320
|
@transport = DummyTransportPerformer.new :options => { :tracer => Logger.new('/dev/null') }
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
+
|
322
|
+
fake_connection = stub :full_url => 'localhost:9200/_search?size=1',
|
323
|
+
:host => 'localhost',
|
324
|
+
:connection => stub_everything,
|
325
|
+
:failures => 0,
|
326
|
+
:healthy! => true
|
327
|
+
|
328
|
+
@transport.stubs(:get_connection).returns(fake_connection)
|
321
329
|
@transport.serializer.stubs(:load).returns 'foo' => 'bar'
|
322
330
|
@transport.serializer.stubs(:dump).returns <<-JSON.gsub(/^ /, '')
|
323
331
|
{
|
@@ -1,10 +1,10 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
1
3
|
if JRUBY
|
2
4
|
puts "'#{File.basename(__FILE__)}' not supported on JRuby #{RUBY_VERSION}"
|
3
5
|
exit(0)
|
4
6
|
end
|
5
7
|
|
6
|
-
|
7
|
-
require 'test_helper'
|
8
8
|
require 'elasticsearch/transport/transport/http/curb'
|
9
9
|
require 'curb'
|
10
10
|
|
@@ -53,6 +53,16 @@ class Elasticsearch::Transport::Transport::HTTP::FaradayTest < Test::Unit::TestC
|
|
53
53
|
@transport.perform_request 'POST', '/', {}, '{"foo":"bar"}'
|
54
54
|
end
|
55
55
|
|
56
|
+
should "set application/json header" do
|
57
|
+
@transport.connections.first.connection.expects(:http).with(:GET).returns(stub_everything)
|
58
|
+
@transport.connections.first.connection.expects(:body_str).returns('{"foo":"bar"}')
|
59
|
+
@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')
|
60
|
+
|
61
|
+
response = @transport.perform_request 'GET', '/'
|
62
|
+
|
63
|
+
assert_equal 'application/json', response.headers['content-type']
|
64
|
+
end
|
65
|
+
|
56
66
|
should "handle HTTP methods" do
|
57
67
|
@transport.connections.first.connection.expects(:http).with(:HEAD).returns(stub_everything)
|
58
68
|
@transport.connections.first.connection.expects(:http).with(:GET).returns(stub_everything)
|
@@ -58,15 +58,71 @@ class Elasticsearch::Transport::Transport::HTTP::FaradayTest < Test::Unit::TestC
|
|
58
58
|
@transport.connections.selector
|
59
59
|
end
|
60
60
|
|
61
|
-
should "
|
61
|
+
should "pass a configuration block to the Faraday constructor" do
|
62
62
|
config_block = lambda do |f|
|
63
63
|
f.response :logger
|
64
|
+
f.path_prefix = '/moo'
|
64
65
|
end
|
65
66
|
|
66
67
|
transport = Faraday.new :hosts => [ { :host => 'foobar', :port => 1234 } ], &config_block
|
67
68
|
|
68
|
-
handlers = transport.connections.first.connection.
|
69
|
-
|
69
|
+
handlers = transport.connections.first.connection.builder.handlers
|
70
|
+
|
71
|
+
assert_equal 1, handlers.size
|
72
|
+
assert handlers.include?(::Faraday::Response::Logger), "#{handlers.inspect} does not include <::Faraday::Adapter::Logger>"
|
73
|
+
|
74
|
+
assert_equal '/moo', transport.connections.first.connection.path_prefix
|
75
|
+
assert_equal 'http://foobar:1234/moo', transport.connections.first.connection.url_prefix.to_s
|
76
|
+
end
|
77
|
+
|
78
|
+
should "pass transport_options to the Faraday constructor" do
|
79
|
+
transport = Faraday.new :hosts => [ { :host => 'foobar', :port => 1234 } ],
|
80
|
+
:options => { :transport_options => {
|
81
|
+
:request => { :open_timeout => 1 },
|
82
|
+
:headers => { :foo_bar => 'bar' },
|
83
|
+
:ssl => { :verify => false }
|
84
|
+
}
|
85
|
+
}
|
86
|
+
|
87
|
+
assert_equal 1, transport.connections.first.connection.options.open_timeout
|
88
|
+
assert_equal 'bar', transport.connections.first.connection.headers['Foo-Bar']
|
89
|
+
assert_equal false, transport.connections.first.connection.ssl.verify?
|
90
|
+
end
|
91
|
+
|
92
|
+
should "merge in parameters defined in the Faraday connection parameters" do
|
93
|
+
transport = Faraday.new :hosts => [ { :host => 'foobar', :port => 1234 } ],
|
94
|
+
:options => { :transport_options => {
|
95
|
+
:params => { :format => 'yaml' }
|
96
|
+
}
|
97
|
+
}
|
98
|
+
# transport.logger = Logger.new(STDERR)
|
99
|
+
|
100
|
+
transport.connections.first.connection.expects(:run_request).
|
101
|
+
with do |method, url, params, body|
|
102
|
+
assert_match /\?format=yaml/, url
|
103
|
+
true
|
104
|
+
end.
|
105
|
+
returns(stub_everything)
|
106
|
+
|
107
|
+
transport.perform_request 'GET', ''
|
108
|
+
end
|
109
|
+
|
110
|
+
should "not overwrite request parameters with the Faraday connection parameters" do
|
111
|
+
transport = Faraday.new :hosts => [ { :host => 'foobar', :port => 1234 } ],
|
112
|
+
:options => { :transport_options => {
|
113
|
+
:params => { :format => 'yaml' }
|
114
|
+
}
|
115
|
+
}
|
116
|
+
# transport.logger = Logger.new(STDERR)
|
117
|
+
|
118
|
+
transport.connections.first.connection.expects(:run_request).
|
119
|
+
with do |method, url, params, body|
|
120
|
+
assert_match /\?format=json/, url
|
121
|
+
true
|
122
|
+
end.
|
123
|
+
returns(stub_everything)
|
124
|
+
|
125
|
+
transport.perform_request 'GET', '', { :format => 'json' }
|
70
126
|
end
|
71
127
|
|
72
128
|
should "set the credentials if passed" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: elasticsearch-transport
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.9
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-02-
|
12
|
+
date: 2014-02-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: multi_json
|