elasticsearch-transport 0.4.8 → 0.4.9
Sign up to get free protection for your applications and to get access to all the features.
- 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
|