elasticsearch-transport-pixlee 1.0.13
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.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/Gemfile +16 -0
- data/LICENSE.txt +13 -0
- data/README.md +441 -0
- data/Rakefile +80 -0
- data/elasticsearch-transport.gemspec +74 -0
- data/lib/elasticsearch-transport.rb +1 -0
- data/lib/elasticsearch/transport.rb +30 -0
- data/lib/elasticsearch/transport/client.rb +195 -0
- data/lib/elasticsearch/transport/transport/base.rb +261 -0
- data/lib/elasticsearch/transport/transport/connections/collection.rb +93 -0
- data/lib/elasticsearch/transport/transport/connections/connection.rb +121 -0
- data/lib/elasticsearch/transport/transport/connections/selector.rb +63 -0
- data/lib/elasticsearch/transport/transport/errors.rb +73 -0
- data/lib/elasticsearch/transport/transport/http/curb.rb +87 -0
- data/lib/elasticsearch/transport/transport/http/faraday.rb +60 -0
- data/lib/elasticsearch/transport/transport/http/manticore.rb +124 -0
- data/lib/elasticsearch/transport/transport/response.rb +21 -0
- data/lib/elasticsearch/transport/transport/serializer/multi_json.rb +36 -0
- data/lib/elasticsearch/transport/transport/sniffer.rb +46 -0
- data/lib/elasticsearch/transport/version.rb +5 -0
- data/test/integration/client_test.rb +144 -0
- data/test/integration/transport_test.rb +73 -0
- data/test/profile/client_benchmark_test.rb +125 -0
- data/test/test_helper.rb +76 -0
- data/test/unit/client_test.rb +274 -0
- data/test/unit/connection_collection_test.rb +88 -0
- data/test/unit/connection_selector_test.rb +64 -0
- data/test/unit/connection_test.rb +100 -0
- data/test/unit/response_test.rb +15 -0
- data/test/unit/serializer_test.rb +16 -0
- data/test/unit/sniffer_test.rb +145 -0
- data/test/unit/transport_base_test.rb +478 -0
- data/test/unit/transport_curb_test.rb +97 -0
- data/test/unit/transport_faraday_test.rb +140 -0
- data/test/unit/transport_manticore_test.rb +118 -0
- metadata +408 -0
@@ -0,0 +1,125 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class Elasticsearch::Transport::ClientProfilingTest < Elasticsearch::Test::ProfilingTest
|
4
|
+
startup do
|
5
|
+
Elasticsearch::Extensions::Test::Cluster.start if ENV['SERVER'] and not Elasticsearch::Extensions::Test::Cluster.running?
|
6
|
+
end
|
7
|
+
|
8
|
+
context "Elasticsearch client benchmark" do
|
9
|
+
setup do
|
10
|
+
@port = (ENV['TEST_CLUSTER_PORT'] || 9250).to_i
|
11
|
+
client = Elasticsearch::Client.new host: "localhost:#{@port}", adapter: ::Faraday.default_adapter
|
12
|
+
client.perform_request 'DELETE', '/ruby_test_benchmark/' rescue nil
|
13
|
+
client.perform_request 'POST', '/ruby_test_benchmark/', {index: {number_of_shards: 1, number_of_replicas: 0}}
|
14
|
+
100.times do client.perform_request 'POST', '/ruby_test_benchmark_search/test/', {}, {foo: 'bar'}; end
|
15
|
+
client.perform_request 'POST', '/ruby_test_benchmark_search/_refresh'
|
16
|
+
end
|
17
|
+
teardown do
|
18
|
+
client = Elasticsearch::Client.new host: "localhost:#{@port}"
|
19
|
+
client.perform_request 'DELETE', '/ruby_test_benchmark/'
|
20
|
+
client.perform_request 'DELETE', '/ruby_test_benchmark_search/'
|
21
|
+
end
|
22
|
+
|
23
|
+
context "with a single-node cluster and the default adapter" do
|
24
|
+
setup do
|
25
|
+
@client = Elasticsearch::Client.new hosts: "localhost:#{@port}", adapter: ::Faraday.default_adapter
|
26
|
+
end
|
27
|
+
|
28
|
+
measure "get the cluster info", count: 1_000 do
|
29
|
+
@client.perform_request 'GET', ''
|
30
|
+
end
|
31
|
+
|
32
|
+
measure "index a document" do
|
33
|
+
@client.perform_request 'POST', '/ruby_test_benchmark/test/', {}, {foo: 'bar'}
|
34
|
+
end
|
35
|
+
|
36
|
+
measure "search" do
|
37
|
+
@client.perform_request 'POST', '/ruby_test_benchmark_search/test/_search', {}, {query: {match: {foo: 'bar'}}}
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
context "with a two-node cluster and the default adapter" do
|
42
|
+
setup do
|
43
|
+
@client = Elasticsearch::Client.new hosts: ["localhost:#{@port}", "localhost:#{@port+1}"], adapter: ::Faraday.default_adapter
|
44
|
+
end
|
45
|
+
|
46
|
+
measure "get the cluster info", count: 1_000 do
|
47
|
+
@client.perform_request 'GET', ''
|
48
|
+
end
|
49
|
+
|
50
|
+
measure "index a document"do
|
51
|
+
@client.perform_request 'POST', '/ruby_test_benchmark/test/', {}, {foo: 'bar'}
|
52
|
+
end
|
53
|
+
|
54
|
+
measure "search" do
|
55
|
+
@client.perform_request 'POST', '/ruby_test_benchmark_search/test/_search', {}, {query: {match: {foo: 'bar'}}}
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
context "with a single-node cluster and the Curb client" do
|
60
|
+
setup do
|
61
|
+
require 'curb'
|
62
|
+
require 'elasticsearch/transport/transport/http/curb'
|
63
|
+
@client = Elasticsearch::Client.new host: "localhost:#{@port}",
|
64
|
+
transport_class: Elasticsearch::Transport::Transport::HTTP::Curb
|
65
|
+
end
|
66
|
+
|
67
|
+
measure "get the cluster info", count: 1_000 do
|
68
|
+
@client.perform_request 'GET', ''
|
69
|
+
end
|
70
|
+
|
71
|
+
measure "index a document" do
|
72
|
+
@client.perform_request 'POST', '/ruby_test_benchmark/test/', {}, {foo: 'bar'}
|
73
|
+
end
|
74
|
+
|
75
|
+
measure "search" do
|
76
|
+
@client.perform_request 'POST', '/ruby_test_benchmark_search/test/_search', {}, {query: {match: {foo: 'bar'}}}
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
context "with a single-node cluster and the Typhoeus client" do
|
81
|
+
require 'typhoeus'
|
82
|
+
require 'typhoeus/adapters/faraday'
|
83
|
+
|
84
|
+
setup do
|
85
|
+
transport = Elasticsearch::Transport::Transport::HTTP::Faraday.new \
|
86
|
+
:hosts => [ { :host => 'localhost', :port => @port } ] do |f|
|
87
|
+
f.adapter :typhoeus
|
88
|
+
end
|
89
|
+
|
90
|
+
@client = Elasticsearch::Client.new transport: transport
|
91
|
+
end
|
92
|
+
|
93
|
+
measure "get the cluster info", count: 1_000 do
|
94
|
+
@client.perform_request 'GET', ''
|
95
|
+
end
|
96
|
+
|
97
|
+
measure "index a document" do
|
98
|
+
@client.perform_request 'POST', '/ruby_test_benchmark/test/', {}, {foo: 'bar'}
|
99
|
+
end
|
100
|
+
|
101
|
+
measure "search" do
|
102
|
+
@client.perform_request 'POST', '/ruby_test_benchmark_search/test/_search', {}, {query: {match: {foo: 'bar'}}}
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
context "with a single-node cluster and the Patron adapter" do
|
107
|
+
setup do
|
108
|
+
require 'patron'
|
109
|
+
@client = Elasticsearch::Client.new host: "localhost:#{@port}", adapter: :patron
|
110
|
+
end
|
111
|
+
|
112
|
+
measure "get the cluster info", count: 1_000 do
|
113
|
+
@client.perform_request 'GET', ''
|
114
|
+
end
|
115
|
+
|
116
|
+
measure "index a document" do
|
117
|
+
@client.perform_request 'POST', '/ruby_test_benchmark/test/', {}, {foo: 'bar'}
|
118
|
+
end
|
119
|
+
|
120
|
+
measure "search" do
|
121
|
+
@client.perform_request 'POST', '/ruby_test_benchmark_search/test/_search', {}, {query: {match: {foo: 'bar'}}}
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
RUBY_1_8 = defined?(RUBY_VERSION) && RUBY_VERSION < '1.9'
|
2
|
+
JRUBY = defined?(JRUBY_VERSION)
|
3
|
+
|
4
|
+
if RUBY_1_8 and not ENV['BUNDLE_GEMFILE']
|
5
|
+
require 'rubygems'
|
6
|
+
gem 'test-unit'
|
7
|
+
end
|
8
|
+
|
9
|
+
require 'rubygems' if RUBY_1_8
|
10
|
+
|
11
|
+
if ENV['COVERAGE'] && ENV['CI'].nil? && !RUBY_1_8
|
12
|
+
require 'simplecov'
|
13
|
+
SimpleCov.start { add_filter "/test|test_/" }
|
14
|
+
end
|
15
|
+
|
16
|
+
if ENV['CI'] && !RUBY_1_8
|
17
|
+
require 'simplecov'
|
18
|
+
require 'simplecov-rcov'
|
19
|
+
SimpleCov.formatter = SimpleCov::Formatter::RcovFormatter
|
20
|
+
SimpleCov.start { add_filter "/test|test_" }
|
21
|
+
end
|
22
|
+
|
23
|
+
# Register `at_exit` handler for integration tests shutdown.
|
24
|
+
# MUST be called before requiring `test/unit`.
|
25
|
+
if defined?(RUBY_VERSION) && RUBY_VERSION > '1.9'
|
26
|
+
at_exit { Elasticsearch::Test::IntegrationTestCase.__run_at_exit_hooks }
|
27
|
+
end
|
28
|
+
|
29
|
+
require 'test/unit'
|
30
|
+
require 'shoulda-context'
|
31
|
+
require 'mocha/setup'
|
32
|
+
require 'ansi/code'
|
33
|
+
require 'turn' unless ENV["TM_FILEPATH"] || ENV["NOTURN"] || RUBY_1_8
|
34
|
+
|
35
|
+
require 'require-prof' if ENV["REQUIRE_PROF"]
|
36
|
+
require 'elasticsearch-transport'
|
37
|
+
require 'logger'
|
38
|
+
|
39
|
+
require 'hashie'
|
40
|
+
|
41
|
+
RequireProf.print_timing_infos if ENV["REQUIRE_PROF"]
|
42
|
+
|
43
|
+
if defined?(RUBY_VERSION) && RUBY_VERSION > '1.9'
|
44
|
+
require 'elasticsearch/extensions/test/cluster'
|
45
|
+
require 'elasticsearch/extensions/test/startup_shutdown'
|
46
|
+
require 'elasticsearch/extensions/test/profiling' unless JRUBY
|
47
|
+
end
|
48
|
+
|
49
|
+
class Test::Unit::TestCase
|
50
|
+
def setup
|
51
|
+
end
|
52
|
+
|
53
|
+
def teardown
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
module Elasticsearch
|
58
|
+
module Test
|
59
|
+
class IntegrationTestCase < ::Test::Unit::TestCase
|
60
|
+
extend Elasticsearch::Extensions::Test::StartupShutdown
|
61
|
+
|
62
|
+
shutdown { Elasticsearch::Extensions::Test::Cluster.stop if ENV['SERVER'] && started? && Elasticsearch::Extensions::Test::Cluster.running? }
|
63
|
+
context "IntegrationTest" do; should "noop on Ruby 1.8" do; end; end if RUBY_1_8
|
64
|
+
end if defined?(RUBY_VERSION) && RUBY_VERSION > '1.9'
|
65
|
+
end
|
66
|
+
|
67
|
+
module Test
|
68
|
+
class ProfilingTest < ::Test::Unit::TestCase
|
69
|
+
extend Elasticsearch::Extensions::Test::StartupShutdown
|
70
|
+
extend Elasticsearch::Extensions::Test::Profiling
|
71
|
+
|
72
|
+
shutdown { Elasticsearch::Extensions::Test::Cluster.stop if ENV['SERVER'] && started? && Elasticsearch::Extensions::Test::Cluster.running? }
|
73
|
+
context "IntegrationTest" do; should "noop on Ruby 1.8" do; end; end if RUBY_1_8
|
74
|
+
end unless RUBY_1_8 || JRUBY
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,274 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class Elasticsearch::Transport::ClientTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
class DummyTransport
|
6
|
+
def initialize(*); end
|
7
|
+
end
|
8
|
+
|
9
|
+
context "Client" do
|
10
|
+
setup do
|
11
|
+
Elasticsearch::Transport::Client::DEFAULT_TRANSPORT_CLASS.any_instance.stubs(:__build_connections)
|
12
|
+
@client = Elasticsearch::Transport::Client.new
|
13
|
+
end
|
14
|
+
|
15
|
+
should "be aliased as Elasticsearch::Client" do
|
16
|
+
assert_nothing_raised do
|
17
|
+
assert_instance_of(Elasticsearch::Transport::Client, Elasticsearch::Client.new)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
should "have default transport" do
|
22
|
+
assert_instance_of Elasticsearch::Transport::Client::DEFAULT_TRANSPORT_CLASS, @client.transport
|
23
|
+
end
|
24
|
+
|
25
|
+
should "instantiate custom transport class" do
|
26
|
+
client = Elasticsearch::Transport::Client.new :transport_class => DummyTransport
|
27
|
+
assert_instance_of DummyTransport, client.transport
|
28
|
+
end
|
29
|
+
|
30
|
+
should "take custom transport instance" do
|
31
|
+
client = Elasticsearch::Transport::Client.new :transport => DummyTransport.new
|
32
|
+
assert_instance_of DummyTransport, client.transport
|
33
|
+
end
|
34
|
+
|
35
|
+
should "delegate performing requests to transport" do
|
36
|
+
assert_respond_to @client, :perform_request
|
37
|
+
@client.transport.expects(:perform_request)
|
38
|
+
@client.perform_request 'GET', '/'
|
39
|
+
end
|
40
|
+
|
41
|
+
should "send GET request as POST with the send_get_body_as option" do
|
42
|
+
transport = DummyTransport.new
|
43
|
+
client = Elasticsearch::Transport::Client.new :transport => transport, :send_get_body_as => 'POST'
|
44
|
+
transport.expects(:perform_request).with 'POST', '/', {}, '{"foo":"bar"}'
|
45
|
+
client.perform_request 'GET', '/', {}, '{"foo":"bar"}'
|
46
|
+
end
|
47
|
+
|
48
|
+
should "have default logger for transport" do
|
49
|
+
client = Elasticsearch::Transport::Client.new :log => true
|
50
|
+
assert_respond_to client.transport.logger, :info
|
51
|
+
end
|
52
|
+
|
53
|
+
should "have default tracer for transport" do
|
54
|
+
client = Elasticsearch::Transport::Client.new :trace => true
|
55
|
+
assert_respond_to client.transport.tracer, :info
|
56
|
+
end
|
57
|
+
|
58
|
+
should "initialize the default transport class" do
|
59
|
+
Elasticsearch::Transport::Client::DEFAULT_TRANSPORT_CLASS.any_instance.
|
60
|
+
unstub(:__build_connections)
|
61
|
+
|
62
|
+
client = Elasticsearch::Client.new
|
63
|
+
assert_match /Faraday/, client.transport.connections.first.connection.headers['User-Agent']
|
64
|
+
end
|
65
|
+
|
66
|
+
should "pass options to the transport" do
|
67
|
+
client = Elasticsearch::Transport::Client.new :transport_options => { :foo => 'bar' }
|
68
|
+
assert_equal 'bar', client.transport.options[:transport_options][:foo]
|
69
|
+
end
|
70
|
+
|
71
|
+
should "merge request_timeout to the transport options" do
|
72
|
+
client = Elasticsearch::Transport::Client.new :request_timeout => 120
|
73
|
+
assert_equal 120, client.transport.options[:transport_options][:request][:timeout]
|
74
|
+
end
|
75
|
+
|
76
|
+
context "when passed hosts" do
|
77
|
+
should "have localhost by default" do
|
78
|
+
c = Elasticsearch::Transport::Client.new
|
79
|
+
assert_equal 'localhost', c.transport.hosts.first[:host]
|
80
|
+
end
|
81
|
+
|
82
|
+
should "take :hosts, :host, :url or :urls" do
|
83
|
+
c1 = Elasticsearch::Transport::Client.new :hosts => ['foobar']
|
84
|
+
c2 = Elasticsearch::Transport::Client.new :host => 'foobar'
|
85
|
+
c3 = Elasticsearch::Transport::Client.new :url => 'foobar'
|
86
|
+
c4 = Elasticsearch::Transport::Client.new :urls => 'foo,bar'
|
87
|
+
|
88
|
+
assert_equal 'foobar', c1.transport.hosts[0][:host]
|
89
|
+
assert_equal 'foobar', c2.transport.hosts[0][:host]
|
90
|
+
assert_equal 'foobar', c3.transport.hosts[0][:host]
|
91
|
+
assert_equal 'foo', c4.transport.hosts[0][:host]
|
92
|
+
assert_equal 'bar', c4.transport.hosts[1][:host]
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
96
|
+
|
97
|
+
context "when the URL is set in the environment variable" do
|
98
|
+
setup { ENV['ELASTICSEARCH_URL'] = 'foobar' }
|
99
|
+
teardown { ENV.delete('ELASTICSEARCH_URL') }
|
100
|
+
|
101
|
+
should "use a single host" do
|
102
|
+
c = Elasticsearch::Transport::Client.new
|
103
|
+
|
104
|
+
assert_equal 1, c.transport.hosts.size
|
105
|
+
assert_equal 'foobar', c.transport.hosts.first[:host]
|
106
|
+
end
|
107
|
+
|
108
|
+
should "use multiple hosts" do
|
109
|
+
ENV['ELASTICSEARCH_URL'] = 'foo, bar'
|
110
|
+
c = Elasticsearch::Transport::Client.new
|
111
|
+
|
112
|
+
assert_equal 2, c.transport.hosts.size
|
113
|
+
assert_equal 'foo', c.transport.hosts[0][:host]
|
114
|
+
assert_equal 'bar', c.transport.hosts[1][:host]
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
context "extracting hosts" do
|
119
|
+
should "extract from string" do
|
120
|
+
hosts = @client.__extract_hosts 'myhost'
|
121
|
+
|
122
|
+
assert_equal 'myhost', hosts[0][:host]
|
123
|
+
assert_nil hosts[0][:port]
|
124
|
+
end
|
125
|
+
|
126
|
+
should "extract from hash" do
|
127
|
+
hosts = @client.__extract_hosts( { :host => 'myhost', :scheme => 'https' } )
|
128
|
+
assert_equal 'myhost', hosts[0][:host]
|
129
|
+
assert_equal 'https', hosts[0][:scheme]
|
130
|
+
assert_nil hosts[0][:port]
|
131
|
+
end
|
132
|
+
|
133
|
+
should "extract from hash with a port passed as a string" do
|
134
|
+
hosts = @client.__extract_hosts( { :host => 'myhost', :scheme => 'https', :port => '443' } )
|
135
|
+
assert_equal 443, hosts[0][:port]
|
136
|
+
end
|
137
|
+
|
138
|
+
should "extract from hash with a port passed as an integer" do
|
139
|
+
hosts = @client.__extract_hosts( { :host => 'myhost', :scheme => 'https', :port => 443 } )
|
140
|
+
assert_equal 443, hosts[0][:port]
|
141
|
+
end
|
142
|
+
|
143
|
+
should "extract from Hashie::Mash" do
|
144
|
+
hosts = @client.__extract_hosts( Hashie::Mash.new(:host => 'myhost', :scheme => 'https') )
|
145
|
+
assert_equal 'myhost', hosts[0][:host]
|
146
|
+
assert_equal 'https', hosts[0][:scheme]
|
147
|
+
end
|
148
|
+
|
149
|
+
should "extract from array" do
|
150
|
+
hosts = @client.__extract_hosts ['myhost']
|
151
|
+
|
152
|
+
assert_equal 'myhost', hosts[0][:host]
|
153
|
+
end
|
154
|
+
|
155
|
+
should "extract from array with multiple hosts" do
|
156
|
+
hosts = @client.__extract_hosts ['host1', 'host2']
|
157
|
+
|
158
|
+
assert_equal 'host1', hosts[0][:host]
|
159
|
+
assert_equal 'host2', hosts[1][:host]
|
160
|
+
end
|
161
|
+
|
162
|
+
should "extract from array with ports" do
|
163
|
+
hosts = @client.__extract_hosts ['host1:1000', 'host2:2000']
|
164
|
+
|
165
|
+
assert_equal 2, hosts.size
|
166
|
+
|
167
|
+
assert_equal 'host1', hosts[0][:host]
|
168
|
+
assert_equal 1000, hosts[0][:port]
|
169
|
+
|
170
|
+
assert_equal 'host2', hosts[1][:host]
|
171
|
+
assert_equal 2000, hosts[1][:port]
|
172
|
+
end
|
173
|
+
|
174
|
+
should "extract path" do
|
175
|
+
hosts = @client.__extract_hosts 'https://myhost:8080/api'
|
176
|
+
|
177
|
+
assert_equal '/api', hosts[0][:path]
|
178
|
+
end
|
179
|
+
|
180
|
+
should "extract scheme (protocol)" do
|
181
|
+
hosts = @client.__extract_hosts 'https://myhost:8080'
|
182
|
+
|
183
|
+
assert_equal 'https', hosts[0][:scheme]
|
184
|
+
assert_equal 'myhost', hosts[0][:host]
|
185
|
+
assert_equal 8080, hosts[0][:port]
|
186
|
+
end
|
187
|
+
|
188
|
+
should "extract credentials" do
|
189
|
+
hosts = @client.__extract_hosts 'http://USERNAME:PASSWORD@myhost:8080'
|
190
|
+
|
191
|
+
assert_equal 'http', hosts[0][:scheme]
|
192
|
+
assert_equal 'USERNAME', hosts[0][:user]
|
193
|
+
assert_equal 'PASSWORD', hosts[0][:password]
|
194
|
+
assert_equal 'myhost', hosts[0][:host]
|
195
|
+
assert_equal 8080, hosts[0][:port]
|
196
|
+
end
|
197
|
+
|
198
|
+
should "pass hashes over" do
|
199
|
+
hosts = @client.__extract_hosts [{:host => 'myhost', :port => '1000', :foo => 'bar'}]
|
200
|
+
|
201
|
+
assert_equal 'myhost', hosts[0][:host]
|
202
|
+
assert_equal 1000, hosts[0][:port]
|
203
|
+
assert_equal 'bar', hosts[0][:foo]
|
204
|
+
end
|
205
|
+
|
206
|
+
should "use URL instance" do
|
207
|
+
require 'uri'
|
208
|
+
hosts = @client.__extract_hosts URI.parse('https://USERNAME:PASSWORD@myhost:4430')
|
209
|
+
|
210
|
+
assert_equal 'https', hosts[0][:scheme]
|
211
|
+
assert_equal 'USERNAME', hosts[0][:user]
|
212
|
+
assert_equal 'PASSWORD', hosts[0][:password]
|
213
|
+
assert_equal 'myhost', hosts[0][:host]
|
214
|
+
assert_equal 4430, hosts[0][:port]
|
215
|
+
end
|
216
|
+
|
217
|
+
should "split comma-separated URLs" do
|
218
|
+
hosts = @client.__extract_hosts 'foo, bar'
|
219
|
+
|
220
|
+
assert_equal 2, hosts.size
|
221
|
+
|
222
|
+
assert_equal 'foo', hosts[0][:host]
|
223
|
+
assert_equal 'bar', hosts[1][:host]
|
224
|
+
end
|
225
|
+
|
226
|
+
should "raise error for incompatible argument" do
|
227
|
+
assert_raise ArgumentError do
|
228
|
+
@client.__extract_hosts 123
|
229
|
+
end
|
230
|
+
end
|
231
|
+
|
232
|
+
should "randomize hosts" do
|
233
|
+
hosts = [ {:host => 'host1'}, {:host => 'host2'}, {:host => 'host3'}, {:host => 'host4'}, {:host => 'host5'}]
|
234
|
+
|
235
|
+
Array.any_instance.expects(:shuffle!).twice
|
236
|
+
|
237
|
+
@client.__extract_hosts(hosts, :randomize_hosts => true)
|
238
|
+
assert_same_elements hosts, @client.__extract_hosts(hosts, :randomize_hosts => true)
|
239
|
+
end
|
240
|
+
end
|
241
|
+
|
242
|
+
context "detecting adapter for Faraday" do
|
243
|
+
setup do
|
244
|
+
Elasticsearch::Transport::Client::DEFAULT_TRANSPORT_CLASS.any_instance.unstub(:__build_connections)
|
245
|
+
begin; Object.send(:remove_const, :Typhoeus); rescue NameError; end
|
246
|
+
begin; Object.send(:remove_const, :Patron); rescue NameError; end
|
247
|
+
end
|
248
|
+
|
249
|
+
should "use the default adapter" do
|
250
|
+
c = Elasticsearch::Transport::Client.new
|
251
|
+
handlers = c.transport.connections.all.first.connection.builder.handlers
|
252
|
+
|
253
|
+
assert_includes handlers, Faraday::Adapter::NetHttp
|
254
|
+
end
|
255
|
+
|
256
|
+
should "use the adapter from arguments" do
|
257
|
+
c = Elasticsearch::Transport::Client.new :adapter => :typhoeus
|
258
|
+
handlers = c.transport.connections.all.first.connection.builder.handlers
|
259
|
+
|
260
|
+
assert_includes handlers, Faraday::Adapter::Typhoeus
|
261
|
+
end
|
262
|
+
|
263
|
+
should "detect the adapter" do
|
264
|
+
require 'patron'; load 'patron.rb'
|
265
|
+
|
266
|
+
c = Elasticsearch::Transport::Client.new
|
267
|
+
handlers = c.transport.connections.all.first.connection.builder.handlers
|
268
|
+
|
269
|
+
assert_includes handlers, Faraday::Adapter::Patron
|
270
|
+
end unless JRUBY
|
271
|
+
end
|
272
|
+
|
273
|
+
end
|
274
|
+
end
|