mirror of
https://github.com/elastic/logstash.git
synced 2025-04-24 22:57:16 -04:00
Refactor: move PipelineConfig from Ruby to Java Reimplement the Ruby class PipelinceConfig in Java trying to keep the method signatures to limit the changes in client code, this is a step of other that intend to move all the configuration code in Java language. Having all that code in Java unlock some reasoning about how to better implement it and probably an improvement in performance during process startup. Moved also the spec into a JUnit and fixed here and there the failing tests Closes: #11824
126 lines
5.1 KiB
Ruby
126 lines
5.1 KiB
Ruby
# Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
|
# or more contributor license agreements. Licensed under the Elastic License;
|
|
# you may not use this file except in compliance with the Elastic License.
|
|
|
|
require "logstash-core"
|
|
require "logstash/agent"
|
|
require "logstash/runner"
|
|
require "monitoring/inputs/metrics"
|
|
require "logstash/config/source/local"
|
|
require 'license_checker/x_pack_info'
|
|
require "rspec/wait"
|
|
require 'spec_helper'
|
|
require "json"
|
|
require "json-schema"
|
|
require 'license_checker/x_pack_info'
|
|
require 'monitoring/monitoring'
|
|
|
|
|
|
describe LogStash::Monitoring::InternalPipelineSource do
|
|
context 'license testing' do
|
|
let(:xpack_monitoring_interval) { 1 }
|
|
let(:options) { { "collection_interval" => xpack_monitoring_interval,
|
|
"collection_timeout_interval" => 600 } }
|
|
|
|
subject { described_class.new(pipeline_config, mock_agent, system_settings) }
|
|
let(:mock_agent) { double("agent")}
|
|
let(:mock_license_client) { double("es_client")}
|
|
let(:license_reader) { LogStash::LicenseChecker::LicenseReader.new(system_settings, 'monitoring', es_options)}
|
|
let(:extension) { LogStash::MonitoringExtension.new }
|
|
let(:system_settings) do
|
|
LogStash::Runner::SYSTEM_SETTINGS.clone.tap do |system_settings|
|
|
extension.additionals_settings(system_settings) # register defaults from extension
|
|
apply_settings(settings, system_settings) # apply `settings`
|
|
end
|
|
end
|
|
let(:license_status) { 'active'}
|
|
let(:license_type) { 'trial' }
|
|
let(:license_expiry_date) { Time.now + (60 * 60 * 24)}
|
|
let(:source) { LogStash::Config::Source::Local }
|
|
let(:pipeline_id) { :main }
|
|
let(:ordered_config_parts) do
|
|
[
|
|
org.logstash.common.SourceWithMetadata.new("file", "/tmp/1", 0, 0, "input { generator1 }"),
|
|
org.logstash.common.SourceWithMetadata.new("file", "/tmp/2", 0, 0, "input { generator2 }"),
|
|
org.logstash.common.SourceWithMetadata.new("file", "/tmp/3", 0, 0, "input { generator3 }"),
|
|
org.logstash.common.SourceWithMetadata.new("file", "/tmp/4", 0, 0, "input { generator4 }"),
|
|
org.logstash.common.SourceWithMetadata.new("file", "/tmp/5", 0, 0, "input { generator5 }"),
|
|
org.logstash.common.SourceWithMetadata.new("file", "/tmp/6", 0, 0, "input { generator6 }"),
|
|
org.logstash.common.SourceWithMetadata.new("string", "config_string", 0, 0, "input { generator1 }"),
|
|
]
|
|
end
|
|
|
|
let(:unordered_config_parts) { ordered_config_parts.shuffle }
|
|
|
|
let(:pipeline_config) { Java::OrgLogstashConfigIr::PipelineConfig.new(source, pipeline_id, unordered_config_parts, system_settings) }
|
|
|
|
let(:es_options) do
|
|
{
|
|
'hosts' => elasticsearch_url,
|
|
'user' => elasticsearch_username,
|
|
'password' => elasticsearch_password
|
|
}
|
|
end
|
|
let(:elasticsearch_url) { ["https://localhost:9898"] }
|
|
let(:elasticsearch_username) { "elastictest" }
|
|
let(:elasticsearch_password) { "testchangeme" }
|
|
|
|
let(:settings) do
|
|
{
|
|
"xpack.monitoring.enabled" => true,
|
|
"xpack.monitoring.elasticsearch.hosts" => elasticsearch_url,
|
|
"xpack.monitoring.elasticsearch.username" => elasticsearch_username,
|
|
"xpack.monitoring.elasticsearch.password" => elasticsearch_password,
|
|
}
|
|
end
|
|
|
|
before :each do
|
|
allow(subject).to receive(:license_reader).and_return(license_reader)
|
|
allow(license_reader).to receive(:build_client).and_return(mock_license_client)
|
|
end
|
|
|
|
describe 'with licensing' do
|
|
context 'when xpack has not been installed on es 6' do
|
|
let(:xpack_info) { LogStash::LicenseChecker::XPackInfo.xpack_not_installed }
|
|
it "does not start the pipeline" do
|
|
expect(subject).to_not receive(:enable_monitoring)
|
|
subject.update_license_state(xpack_info)
|
|
end
|
|
end
|
|
context 'when the license has expired' do
|
|
let(:license) do
|
|
{ "status" => "inactive", "type" => license_type }
|
|
end
|
|
let(:xpack_info) { LogStash::LicenseChecker::XPackInfo.new(license, nil) }
|
|
it "still starts the pipeline" do
|
|
expect(subject).to receive(:enable_monitoring)
|
|
subject.update_license_state(xpack_info)
|
|
end
|
|
end
|
|
context 'when the license server is not available' do
|
|
let(:xpack_info) { LogStash::LicenseChecker::XPackInfo.new(nil, nil, nil, true) }
|
|
it "does not start the pipeline" do
|
|
expect(subject).to_not receive(:enable_monitoring)
|
|
subject.update_license_state(xpack_info)
|
|
end
|
|
end
|
|
|
|
LogStash::LicenseChecker::LICENSE_TYPES.each do |license_type|
|
|
context "With a valid #{license_type} license" do
|
|
let(:license_type) { license_type }
|
|
let(:license) do
|
|
{ "status" => "active", "type" => license_type }
|
|
end
|
|
let(:features) do
|
|
{ "monitoring" => { "enabled" => true } }
|
|
end
|
|
let(:xpack_info) { LogStash::LicenseChecker::XPackInfo.new(license, features) }
|
|
it "starts the pipeline" do
|
|
expect(subject).to receive(:enable_monitoring)
|
|
subject.update_license_state(xpack_info)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|