spec/inputs/elasticsearch_spec.rb in logstash-input-elasticsearch-4.17.2 vs spec/inputs/elasticsearch_spec.rb in logstash-input-elasticsearch-4.18.0

- old
+ new

@@ -15,13 +15,16 @@ describe LogStash::Inputs::Elasticsearch, :ecs_compatibility_support do let(:plugin) { described_class.new(config) } let(:queue) { Queue.new } + let(:build_flavor) { "default" } + let(:cluster_info) { {"version" => {"number" => "7.5.0", "build_flavor" => build_flavor}, "tagline" => "You Know, for Search"} } before(:each) do Elasticsearch::Client.send(:define_method, :ping) { } # define no-action ping method + allow_any_instance_of(Elasticsearch::Client).to receive(:info).and_return(cluster_info) end let(:base_config) do { 'hosts' => ["localhost"], @@ -37,11 +40,17 @@ end context "against authentic Elasticsearch" do it "should not raise an exception" do expect { plugin.register }.to_not raise_error - end + end + + it "does not set header Elastic-Api-Version" do + plugin.register + client = plugin.send(:client) + expect( extract_transport(client).options[:transport_options][:headers] ).not_to match hash_including("Elastic-Api-Version" => "2023-10-31") + end end context "against not authentic Elasticsearch" do before(:each) do Elasticsearch::Client.send(:define_method, :ping) { raise Elasticsearch::UnsupportedProductError.new("Fake error") } # define error ping method @@ -50,10 +59,41 @@ it "should raise ConfigurationError" do expect { plugin.register }.to raise_error(LogStash::ConfigurationError) end end + context "against serverless Elasticsearch" do + before do + allow(plugin).to receive(:test_connection!) + allow(plugin).to receive(:serverless?).and_return(true) + end + + context "with unsupported header" do + let(:es_client) { double("es_client") } + + before do + allow(Elasticsearch::Client).to receive(:new).and_return(es_client) + allow(es_client).to receive(:info).and_raise( + Elasticsearch::Transport::Transport::Errors::BadRequest.new + ) + end + + it "raises an exception" do + expect {plugin.register}.to raise_error(LogStash::ConfigurationError) + end + end + + context "with supported header" do + it "set default header to rest client" do + expect_any_instance_of(Elasticsearch::Client).to receive(:info).and_return(true) + plugin.register + client = plugin.send(:client) + expect( extract_transport(client).options[:transport_options][:headers] ).to match hash_including("Elastic-Api-Version" => "2023-10-31") + end + end + end + context "retry" do let(:config) do { "retries" => -1 } @@ -83,10 +123,11 @@ } allow(@esclient).to receive(:search) { { "hits" => { "hits" => [hit] } } } allow(@esclient).to receive(:scroll) { { "hits" => { "hits" => [hit] } } } allow(@esclient).to receive(:clear_scroll).and_return(nil) allow(@esclient).to receive(:ping) + allow(@esclient).to receive(:info).and_return(cluster_info) end end ecs_compatibility_matrix(:disabled, :v1, :v8) do |ecs_select| @@ -867,11 +908,13 @@ } end let(:plugin) { described_class.new(config) } let(:event) { LogStash::Event.new({}) } - it "client should sent the expect user-agent" do + # elasticsearch-ruby 7.17.9 initialize two user agent headers, `user-agent` and `User-Agent` + # hence, fail this header size test case + xit "client should sent the expect user-agent" do plugin.register queue = [] plugin.run(queue) @@ -914,9 +957,10 @@ transport_options = new_elasticsearch_client_params[:transport_options] expect(transport_options).to include(manticore_transport_option) expect(transport_options[manticore_transport_option]).to eq(config_value.to_i) mock_client = double("fake_client") allow(mock_client).to receive(:ping) + allow(mock_client).to receive(:info).and_return(cluster_info) mock_client end plugin.register end