elasticsearch-transport 7.4.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.
- checksums.yaml +4 -4
- data/Gemfile +30 -13
- data/Gemfile-faraday1.gemfile +47 -0
- data/README.md +159 -64
- data/Rakefile +63 -13
- data/elasticsearch-transport.gemspec +55 -63
- data/lib/elasticsearch/transport/client.rb +184 -59
- data/lib/elasticsearch/transport/meta_header.rb +135 -0
- data/lib/elasticsearch/transport/redacted.rb +16 -3
- data/lib/elasticsearch/transport/transport/base.rb +69 -30
- data/lib/elasticsearch/transport/transport/connections/collection.rb +18 -8
- data/lib/elasticsearch/transport/transport/connections/connection.rb +25 -9
- data/lib/elasticsearch/transport/transport/connections/selector.rb +16 -3
- data/lib/elasticsearch/transport/transport/errors.rb +17 -3
- data/lib/elasticsearch/transport/transport/http/curb.rb +60 -35
- data/lib/elasticsearch/transport/transport/http/faraday.rb +32 -9
- data/lib/elasticsearch/transport/transport/http/manticore.rb +57 -32
- data/lib/elasticsearch/transport/transport/loggable.rb +16 -3
- data/lib/elasticsearch/transport/transport/response.rb +17 -5
- data/lib/elasticsearch/transport/transport/serializer/multi_json.rb +16 -3
- data/lib/elasticsearch/transport/transport/sniffer.rb +35 -15
- data/lib/elasticsearch/transport/version.rb +17 -4
- data/lib/elasticsearch/transport.rb +35 -33
- data/lib/elasticsearch-transport.rb +16 -3
- data/spec/elasticsearch/connections/collection_spec.rb +28 -3
- data/spec/elasticsearch/connections/selector_spec.rb +16 -3
- data/spec/elasticsearch/transport/base_spec.rb +107 -49
- data/spec/elasticsearch/transport/client_spec.rb +734 -164
- data/spec/elasticsearch/transport/http/curb_spec.rb +126 -0
- data/spec/elasticsearch/transport/http/faraday_spec.rb +141 -0
- data/spec/elasticsearch/transport/http/manticore_spec.rb +161 -0
- data/spec/elasticsearch/transport/meta_header_spec.rb +301 -0
- data/spec/elasticsearch/transport/sniffer_spec.rb +16 -16
- data/spec/spec_helper.rb +32 -6
- data/test/integration/jruby_test.rb +43 -0
- data/test/integration/transport_test.rb +109 -46
- data/test/profile/client_benchmark_test.rb +16 -3
- data/test/test_helper.rb +26 -25
- data/test/unit/adapters_test.rb +88 -0
- data/test/unit/connection_test.rb +23 -5
- data/test/unit/response_test.rb +18 -5
- data/test/unit/serializer_test.rb +16 -3
- data/test/unit/transport_base_test.rb +33 -11
- data/test/unit/transport_curb_test.rb +16 -4
- data/test/unit/transport_faraday_test.rb +18 -5
- data/test/unit/transport_manticore_test.rb +258 -158
- metadata +64 -76
| @@ -1,6 +1,19 @@ | |
| 1 | 
            -
            # Licensed to Elasticsearch B.V under one or more  | 
| 2 | 
            -
            #  | 
| 3 | 
            -
            #  | 
| 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 |  | 
| @@ -136,7 +149,7 @@ class Elasticsearch::Transport::Transport::HTTP::FaradayTest < Minitest::Test | |
| 136 149 |  | 
| 137 150 | 
             
                  transport.connections.first.connection.expects(:run_request).
         | 
| 138 151 | 
             
                    with do |method, url, params, body|
         | 
| 139 | 
            -
                      assert_match | 
| 152 | 
            +
                      assert_match(/\?format=yaml/, url)
         | 
| 140 153 | 
             
                      true
         | 
| 141 154 | 
             
                    end.
         | 
| 142 155 | 
             
                    returns(stub_everything)
         | 
| @@ -154,7 +167,7 @@ class Elasticsearch::Transport::Transport::HTTP::FaradayTest < Minitest::Test | |
| 154 167 |  | 
| 155 168 | 
             
                  transport.connections.first.connection.expects(:run_request).
         | 
| 156 169 | 
             
                    with do |method, url, params, body|
         | 
| 157 | 
            -
                      assert_match | 
| 170 | 
            +
                      assert_match(/\?format=json/, url)
         | 
| 158 171 | 
             
                      true
         | 
| 159 172 | 
             
                    end.
         | 
| 160 173 | 
             
                    returns(stub_everything)
         | 
| @@ -1,169 +1,269 @@ | |
| 1 | 
            -
            # Licensed to Elasticsearch B.V under one or more  | 
| 2 | 
            -
            #  | 
| 3 | 
            -
            #  | 
| 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 | 
            -
             | 
| 8 | 
            -
              version = ( defined?(RUBY_ENGINE) ? RUBY_ENGINE : 'Ruby' ) + ' ' + RUBY_VERSION
         | 
| 9 | 
            -
              puts "SKIP: '#{File.basename(__FILE__)}' only supported on JRuby (you're running #{version})"
         | 
| 10 | 
            -
            else
         | 
| 20 | 
            +
            if JRUBY
         | 
| 11 21 | 
             
              require 'elasticsearch/transport/transport/http/manticore'
         | 
| 12 22 | 
             
              require 'manticore'
         | 
| 13 23 |  | 
| 14 | 
            -
               | 
| 15 | 
            -
                 | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 38 | 
            -
             | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 41 | 
            -
             | 
| 42 | 
            -
             | 
| 43 | 
            -
             | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 46 | 
            -
             | 
| 47 | 
            -
             | 
| 48 | 
            -
             | 
| 49 | 
            -
             | 
| 50 | 
            -
             | 
| 51 | 
            -
             | 
| 52 | 
            -
             | 
| 53 | 
            -
             | 
| 54 | 
            -
             | 
| 55 | 
            -
             | 
| 56 | 
            -
             | 
| 57 | 
            -
             | 
| 58 | 
            -
             | 
| 59 | 
            -
             | 
| 60 | 
            -
             | 
| 61 | 
            -
             | 
| 62 | 
            -
             | 
| 63 | 
            -
             | 
| 64 | 
            -
             | 
| 65 | 
            -
             | 
| 66 | 
            -
             | 
| 67 | 
            -
             | 
| 68 | 
            -
             | 
| 69 | 
            -
             | 
| 70 | 
            -
             | 
| 71 | 
            -
             | 
| 72 | 
            -
             | 
| 73 | 
            -
             | 
| 74 | 
            -
             | 
| 75 | 
            -
             | 
| 76 | 
            -
             | 
| 77 | 
            -
             | 
| 78 | 
            -
             | 
| 79 | 
            -
             | 
| 80 | 
            -
             | 
| 81 | 
            -
             | 
| 82 | 
            -
             | 
| 83 | 
            -
             | 
| 84 | 
            -
             | 
| 85 | 
            -
             | 
| 86 | 
            -
             | 
| 87 | 
            -
             | 
| 88 | 
            -
             | 
| 89 | 
            -
             | 
| 90 | 
            -
             | 
| 91 | 
            -
             | 
| 92 | 
            -
             | 
| 93 | 
            -
             | 
| 94 | 
            -
             | 
| 95 | 
            -
             | 
| 96 | 
            -
             | 
| 97 | 
            -
             | 
| 98 | 
            -
             | 
| 99 | 
            -
             | 
| 100 | 
            -
             | 
| 101 | 
            -
             | 
| 102 | 
            -
             | 
| 103 | 
            -
             | 
| 104 | 
            -
             | 
| 105 | 
            -
             | 
| 106 | 
            -
             | 
| 107 | 
            -
             | 
| 108 | 
            -
             | 
| 109 | 
            -
             | 
| 110 | 
            -
             | 
| 111 | 
            -
             | 
| 112 | 
            -
             | 
| 113 | 
            -
             | 
| 114 | 
            -
             | 
| 115 | 
            -
             | 
| 116 | 
            -
             | 
| 117 | 
            -
             | 
| 118 | 
            -
             | 
| 119 | 
            -
             | 
| 120 | 
            -
             | 
| 121 | 
            -
             | 
| 122 | 
            -
             | 
| 123 | 
            -
             | 
| 124 | 
            -
             | 
| 125 | 
            -
             | 
| 126 | 
            -
             | 
| 127 | 
            -
             | 
| 128 | 
            -
             | 
| 129 | 
            -
             | 
| 130 | 
            -
             | 
| 131 | 
            -
             | 
| 132 | 
            -
             | 
| 133 | 
            -
             | 
| 134 | 
            -
             | 
| 135 | 
            -
             | 
| 136 | 
            -
             | 
| 137 | 
            -
             | 
| 24 | 
            +
              module Elasticsearch
         | 
| 25 | 
            +
                module Transport
         | 
| 26 | 
            +
                  module Transport
         | 
| 27 | 
            +
                    module HTTP
         | 
| 28 | 
            +
                      class ManticoreTest < Minitest::Test
         | 
| 29 | 
            +
                        include Elasticsearch::Transport::Transport::HTTP
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                        def common_headers
         | 
| 32 | 
            +
                          {
         | 
| 33 | 
            +
                            'Content-Type' => 'application/json',
         | 
| 34 | 
            +
                            'User-Agent' => @transport.send(:user_agent_header)
         | 
| 35 | 
            +
                          }
         | 
| 36 | 
            +
                        end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                        context 'Manticore transport' do
         | 
| 39 | 
            +
                          setup do
         | 
| 40 | 
            +
                            @transport = Manticore.new(hosts: [{ host: '127.0.0.1', port: 8080 }])
         | 
| 41 | 
            +
                          end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                          should 'implement host_unreachable_exceptions' do
         | 
| 44 | 
            +
                            assert_instance_of Array, @transport.host_unreachable_exceptions
         | 
| 45 | 
            +
                          end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                          should 'implement __build_connections' do
         | 
| 48 | 
            +
                            assert_equal 1, @transport.hosts.size
         | 
| 49 | 
            +
                            assert_equal 1, @transport.connections.size
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                            assert_instance_of(::Manticore::Client, @transport.connections.first.connection)
         | 
| 52 | 
            +
                          end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                          should 'not close connections in __close_connections' do
         | 
| 55 | 
            +
                            assert_equal 1, @transport.connections.size
         | 
| 56 | 
            +
                            @transport.__close_connections
         | 
| 57 | 
            +
                            assert_equal 1, @transport.connections.size
         | 
| 58 | 
            +
                          end
         | 
| 59 | 
            +
             | 
| 60 | 
            +
                          should 'perform the request' do
         | 
| 61 | 
            +
                            @transport.connections.first.connection.expects(:get).returns(stub_everything)
         | 
| 62 | 
            +
                            response = @transport.perform_request('GET', '/')
         | 
| 63 | 
            +
                          end
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                          should 'set body for GET request' do
         | 
| 66 | 
            +
                            @transport.connections.first.connection.expects(:get)
         | 
| 67 | 
            +
                              .with(
         | 
| 68 | 
            +
                                'http://127.0.0.1:8080/',
         | 
| 69 | 
            +
                                {
         | 
| 70 | 
            +
                                  body: '{"foo":"bar"}',
         | 
| 71 | 
            +
                                  headers: common_headers
         | 
| 72 | 
            +
                                }
         | 
| 73 | 
            +
                              ).returns(stub_everything)
         | 
| 74 | 
            +
                            @transport.perform_request 'GET', '/', {}, '{"foo":"bar"}'
         | 
| 75 | 
            +
                          end
         | 
| 76 | 
            +
             | 
| 77 | 
            +
                          should 'set body for PUT request' do
         | 
| 78 | 
            +
                            @transport.connections.first.connection.expects(:put)
         | 
| 79 | 
            +
                              .with(
         | 
| 80 | 
            +
                                'http://127.0.0.1:8080/',
         | 
| 81 | 
            +
                                {
         | 
| 82 | 
            +
                                  body: '{"foo":"bar"}',
         | 
| 83 | 
            +
                                  headers: {
         | 
| 84 | 
            +
                                    'Content-Type' => 'application/json',
         | 
| 85 | 
            +
                                    'User-Agent' => @transport.send(:user_agent_header)
         | 
| 86 | 
            +
                                  }
         | 
| 87 | 
            +
                                }
         | 
| 88 | 
            +
                              ).returns(stub_everything)
         | 
| 89 | 
            +
                            @transport.perform_request 'PUT', '/', {}, { foo: 'bar' }
         | 
| 90 | 
            +
                          end
         | 
| 91 | 
            +
             | 
| 92 | 
            +
                          should 'serialize the request body' do
         | 
| 93 | 
            +
                            @transport.connections.first.connection.expects(:post)
         | 
| 94 | 
            +
                              .with(
         | 
| 95 | 
            +
                                'http://127.0.0.1:8080/',
         | 
| 96 | 
            +
                                {
         | 
| 97 | 
            +
                                  body: '{"foo":"bar"}',
         | 
| 98 | 
            +
                                  headers: {
         | 
| 99 | 
            +
                                    'Content-Type' => 'application/json',
         | 
| 100 | 
            +
                                    'User-Agent' => @transport.send(:user_agent_header)
         | 
| 101 | 
            +
                                  }
         | 
| 102 | 
            +
                                }
         | 
| 103 | 
            +
                              ).returns(stub_everything)
         | 
| 104 | 
            +
                            @transport.perform_request 'POST', '/', {}, { 'foo' => 'bar' }
         | 
| 105 | 
            +
                          end
         | 
| 106 | 
            +
             | 
| 107 | 
            +
                          should 'set custom headers for PUT request' do
         | 
| 108 | 
            +
                            @transport.connections.first.connection.expects(:put)
         | 
| 109 | 
            +
                              .with(
         | 
| 110 | 
            +
                                'http://127.0.0.1:8080/',
         | 
| 111 | 
            +
                                {
         | 
| 112 | 
            +
                                  body: '{"foo":"bar"}',
         | 
| 113 | 
            +
                                  headers: {
         | 
| 114 | 
            +
                                    'Content-Type' => 'application/x-ndjson',
         | 
| 115 | 
            +
                                    'User-Agent' => @transport.send(:user_agent_header)
         | 
| 116 | 
            +
                                  }
         | 
| 117 | 
            +
                                }
         | 
| 118 | 
            +
                              ).returns(stub_everything)
         | 
| 119 | 
            +
                            @transport.perform_request 'PUT', '/', {}, '{"foo":"bar"}', { 'Content-Type' => 'application/x-ndjson' }
         | 
| 120 | 
            +
                          end
         | 
| 121 | 
            +
             | 
| 122 | 
            +
                          should 'not serialize a String request body' do
         | 
| 123 | 
            +
                            @transport.connections.first.connection.expects(:post)
         | 
| 124 | 
            +
                              .with(
         | 
| 125 | 
            +
                                'http://127.0.0.1:8080/',
         | 
| 126 | 
            +
                                {
         | 
| 127 | 
            +
                                  body: '{"foo":"bar"}',
         | 
| 128 | 
            +
                                  headers: {
         | 
| 129 | 
            +
                                    'Content-Type' => 'application/json',
         | 
| 130 | 
            +
                                    'User-Agent' => @transport.send(:user_agent_header)
         | 
| 131 | 
            +
                                  }
         | 
| 132 | 
            +
                                }
         | 
| 133 | 
            +
                              ).returns(stub_everything)
         | 
| 134 | 
            +
                            @transport.serializer.expects(:dump).never
         | 
| 135 | 
            +
                            @transport.perform_request 'POST', '/', {}, '{"foo":"bar"}'
         | 
| 136 | 
            +
                          end
         | 
| 137 | 
            +
             | 
| 138 | 
            +
                          should 'set application/json header' do
         | 
| 139 | 
            +
                            options = {
         | 
| 140 | 
            +
                              headers: { 'content-type' => 'application/json' }
         | 
| 141 | 
            +
                            }
         | 
| 142 | 
            +
             | 
| 143 | 
            +
                            transport = Manticore.new(hosts: [{ host: 'localhost', port: 8080 }], options: options)
         | 
| 144 | 
            +
                            transport.connections.first.connection.stub(
         | 
| 145 | 
            +
                              'http://localhost:8080/',
         | 
| 146 | 
            +
                              body: '""',
         | 
| 147 | 
            +
                              headers: {
         | 
| 148 | 
            +
                                'Content-Type' => 'application/x-ndjson',
         | 
| 149 | 
            +
                                'User-Agent' => @transport.send(:user_agent_header)
         | 
| 150 | 
            +
                              },
         | 
| 151 | 
            +
                              code: 200
         | 
| 152 | 
            +
                            )
         | 
| 153 | 
            +
                            response = transport.perform_request('GET', '/', {})
         | 
| 154 | 
            +
                            assert_equal response.status, 200
         | 
| 155 | 
            +
                          end
         | 
| 156 | 
            +
             | 
| 157 | 
            +
                          should "set headers from 'transport_options'" do
         | 
| 158 | 
            +
                            options = {
         | 
| 159 | 
            +
                              transport_options: {
         | 
| 160 | 
            +
                                headers: { 'Content-Type' => 'foo/bar' }
         | 
| 161 | 
            +
                              }
         | 
| 162 | 
            +
                            }
         | 
| 163 | 
            +
             | 
| 164 | 
            +
                            transport = Manticore.new(hosts: [{ host: 'localhost', port: 8080 }], options: options)
         | 
| 165 | 
            +
             | 
| 166 | 
            +
                            assert_equal(
         | 
| 167 | 
            +
                              'foo/bar',
         | 
| 168 | 
            +
                              transport.connections.first.connection.instance_variable_get(:@options)[:headers]['Content-Type']
         | 
| 169 | 
            +
                            )
         | 
| 170 | 
            +
                            # TODO: Needs to check @request_options
         | 
| 171 | 
            +
                          end
         | 
| 172 | 
            +
             | 
| 173 | 
            +
                          should 'handle HTTP methods' do
         | 
| 174 | 
            +
                            @transport.connections.first.connection.expects(:delete).with('http://127.0.0.1:8080/', { headers: common_headers }).returns(stub_everything)
         | 
| 175 | 
            +
                            @transport.connections.first.connection.expects(:head).with('http://127.0.0.1:8080/', { headers: common_headers }).returns(stub_everything)
         | 
| 176 | 
            +
                            @transport.connections.first.connection.expects(:get).with('http://127.0.0.1:8080/', { headers: common_headers }).returns(stub_everything)
         | 
| 177 | 
            +
                            @transport.connections.first.connection.expects(:put).with('http://127.0.0.1:8080/', { headers: common_headers }).returns(stub_everything)
         | 
| 178 | 
            +
                            @transport.connections.first.connection.expects(:post).with('http://127.0.0.1:8080/', { headers: common_headers }).returns(stub_everything)
         | 
| 179 | 
            +
             | 
| 180 | 
            +
                            %w[HEAD GET PUT POST DELETE].each { |method| @transport.perform_request method, '/' }
         | 
| 181 | 
            +
             | 
| 182 | 
            +
                            assert_raise(ArgumentError) { @transport.perform_request 'FOOBAR', '/' }
         | 
| 183 | 
            +
                          end
         | 
| 184 | 
            +
             | 
| 185 | 
            +
                          should 'allow to set options for Manticore' do
         | 
| 186 | 
            +
                            options = { headers: { 'User-Agent' => 'myapp-0.0' } }
         | 
| 187 | 
            +
                            transport = Manticore.new(hosts: [{ host: 'foobar', port: 1234 }], options: options)
         | 
| 188 | 
            +
                            transport.connections.first.connection
         | 
| 189 | 
            +
                              .expects(:get)
         | 
| 190 | 
            +
                              .with do |_host, _options|
         | 
| 191 | 
            +
                              assert_equal 'myapp-0.0', _options[:headers]['User-Agent']
         | 
| 192 | 
            +
                              true
         | 
| 193 | 
            +
                            end
         | 
| 194 | 
            +
                              .returns(stub_everything)
         | 
| 195 | 
            +
             | 
| 196 | 
            +
                            transport.perform_request 'GET', '/', {}
         | 
| 197 | 
            +
                          end
         | 
| 198 | 
            +
             | 
| 199 | 
            +
                          should 'allow to set ssl options for Manticore' do
         | 
| 200 | 
            +
                            options = {
         | 
| 201 | 
            +
                              ssl: {
         | 
| 202 | 
            +
                                truststore: 'test.jks',
         | 
| 203 | 
            +
                                truststore_password: 'test',
         | 
| 204 | 
            +
                                verify: false
         | 
| 205 | 
            +
                              }
         | 
| 206 | 
            +
                            }
         | 
| 207 | 
            +
             | 
| 208 | 
            +
                            ::Manticore::Client.expects(:new).with(options)
         | 
| 209 | 
            +
                            transport = Manticore.new(hosts: [{ host: 'foobar', port: 1234 }], options: options)
         | 
| 210 | 
            +
                            assert_equal(transport.options[:ssl][:truststore_password], 'test')
         | 
| 211 | 
            +
                          end
         | 
| 212 | 
            +
             | 
| 213 | 
            +
                          should 'pass :transport_options to Manticore::Client' do
         | 
| 214 | 
            +
                            options = {
         | 
| 215 | 
            +
                              transport_options: { potatoes: 1 }
         | 
| 216 | 
            +
                            }
         | 
| 217 | 
            +
             | 
| 218 | 
            +
                            ::Manticore::Client.expects(:new).with(potatoes: 1, ssl: {})
         | 
| 219 | 
            +
                            transport = Manticore.new(hosts: [{ host: 'foobar', port: 1234 }], options: options)
         | 
| 220 | 
            +
                            assert_equal(transport.options[:transport_options][:potatoes], 1)
         | 
| 221 | 
            +
                          end
         | 
| 222 | 
            +
             | 
| 223 | 
            +
                          context 'custom headers' do
         | 
| 224 | 
            +
                            should 'allow authorization headers' do
         | 
| 225 | 
            +
                              transport_options = { headers: { 'Authorization' => 'Basic token' } }
         | 
| 226 | 
            +
                              transport = Manticore.new(
         | 
| 227 | 
            +
                                hosts: [{ host: 'foobar', port: 1234 }],
         | 
| 228 | 
            +
                                transport_options: transport_options
         | 
| 229 | 
            +
                              )
         | 
| 230 | 
            +
             | 
| 231 | 
            +
                              assert_equal(
         | 
| 232 | 
            +
                                transport.instance_variable_get(:@request_options)[:headers]['Authorization'],
         | 
| 233 | 
            +
                                'Basic token'
         | 
| 234 | 
            +
                              )
         | 
| 235 | 
            +
                              transport.connections.first.connection.expects(:get).with do |_host, options|
         | 
| 236 | 
            +
                                assert_equal('Basic token', options[:headers]['Authorization'])
         | 
| 237 | 
            +
                                true
         | 
| 238 | 
            +
                              end.returns(stub_everything)
         | 
| 239 | 
            +
                              transport.perform_request('GET', '/', {})
         | 
| 240 | 
            +
                            end
         | 
| 241 | 
            +
             | 
| 242 | 
            +
                            should 'allow user agent headers' do
         | 
| 243 | 
            +
                              transport_options = { headers: { 'User-Agent' => 'Custom UA' } }
         | 
| 244 | 
            +
                              transport = Manticore.new(
         | 
| 245 | 
            +
                                hosts: [{ host: 'localhost' }],
         | 
| 246 | 
            +
                                transport_options: transport_options
         | 
| 247 | 
            +
                              )
         | 
| 248 | 
            +
                              transport.connections.first.connection.expects(:get).with do |_host, options|
         | 
| 249 | 
            +
                                assert_equal('Custom UA', options[:headers]['User-Agent'])
         | 
| 250 | 
            +
                                true
         | 
| 251 | 
            +
                              end.returns(stub_everything)
         | 
| 252 | 
            +
                              transport.perform_request('GET', '/', {})
         | 
| 253 | 
            +
             | 
| 254 | 
            +
                              assert_equal(
         | 
| 255 | 
            +
                                transport.instance_variable_get('@request_options')[:headers]['User-Agent'],
         | 
| 256 | 
            +
                                'Custom UA'
         | 
| 257 | 
            +
                              )
         | 
| 258 | 
            +
                            end
         | 
| 259 | 
            +
                          end
         | 
| 260 | 
            +
                        end
         | 
| 138 261 | 
             
                      end
         | 
| 139 | 
            -
             | 
| 140 | 
            -
             | 
| 141 | 
            -
                    transport.perform_request 'GET', '/', {}
         | 
| 142 | 
            -
                  end
         | 
| 143 | 
            -
             | 
| 144 | 
            -
                  should "allow to set ssl options for Manticore" do
         | 
| 145 | 
            -
                    options = {
         | 
| 146 | 
            -
                      :ssl => {
         | 
| 147 | 
            -
                        :truststore => "test.jks",
         | 
| 148 | 
            -
                        :truststore_password => "test",
         | 
| 149 | 
            -
                        :verify => false
         | 
| 150 | 
            -
                      }
         | 
| 151 | 
            -
                    }
         | 
| 152 | 
            -
             | 
| 153 | 
            -
                    ::Manticore::Client.expects(:new).with(options)
         | 
| 154 | 
            -
                    transport = Manticore.new :hosts => [ { :host => 'foobar', :port => 1234 } ], :options => options
         | 
| 155 | 
            -
                  end
         | 
| 156 | 
            -
             | 
| 157 | 
            -
                  should "pass :transport_options to Manticore::Client" do
         | 
| 158 | 
            -
                    options = {
         | 
| 159 | 
            -
                      :transport_options => { :potatoes => 1 }
         | 
| 160 | 
            -
                    }
         | 
| 161 | 
            -
             | 
| 162 | 
            -
                    ::Manticore::Client.expects(:new).with(:potatoes => 1, :ssl => {})
         | 
| 163 | 
            -
                    transport = Manticore.new :hosts => [ { :host => 'foobar', :port => 1234 } ], :options => options
         | 
| 262 | 
            +
                    end
         | 
| 164 263 | 
             
                  end
         | 
| 165 264 | 
             
                end
         | 
| 166 | 
            -
             | 
| 167 265 | 
             
              end
         | 
| 168 | 
            -
             | 
| 266 | 
            +
            else
         | 
| 267 | 
            +
              version = "#{defined?(RUBY_ENGINE) ? RUBY_ENGINE : 'Ruby'} #{RUBY_VERSION}"
         | 
| 268 | 
            +
              puts "SKIP: '#{File.basename(__FILE__)}' only supported on JRuby (you're running #{version})"
         | 
| 169 269 | 
             
            end
         |