logstash-core 6.0.0.alpha1-java → 6.0.0.alpha2-java
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/lib/logstash-core/logstash-core.jar +0 -0
- data/lib/logstash-core/version.rb +1 -1
- data/lib/logstash/agent.rb +81 -45
- data/lib/logstash/api/commands/hot_threads_reporter.rb +3 -3
- data/lib/logstash/api/commands/node.rb +13 -6
- data/lib/logstash/api/commands/stats.rb +18 -6
- data/lib/logstash/api/modules/node.rb +7 -0
- data/lib/logstash/api/modules/node_stats.rb +12 -5
- data/lib/logstash/bootstrap_check/default_config.rb +3 -7
- data/lib/logstash/compiler.rb +33 -15
- data/lib/logstash/compiler/lscl.rb +16 -8
- data/lib/logstash/config/mixin.rb +5 -42
- data/lib/logstash/config/pipeline_config.rb +1 -1
- data/lib/logstash/config/source/local.rb +28 -13
- data/lib/logstash/config/source/multi_local.rb +72 -0
- data/lib/logstash/config/source_loader.rb +1 -2
- data/lib/logstash/environment.rb +12 -3
- data/lib/logstash/execution_context.rb +7 -3
- data/lib/logstash/inputs/base.rb +2 -0
- data/lib/logstash/instrument/metric_type.rb +0 -2
- data/lib/logstash/instrument/periodic_poller/jvm.rb +5 -5
- data/lib/logstash/instrument/periodic_poller/pq.rb +1 -1
- data/lib/logstash/outputs/base.rb +2 -0
- data/lib/logstash/pipeline.rb +31 -14
- data/lib/logstash/pipeline_action/create.rb +1 -2
- data/lib/logstash/pipeline_action/reload.rb +2 -1
- data/lib/logstash/pipeline_settings.rb +50 -0
- data/lib/logstash/plugin.rb +1 -0
- data/lib/logstash/runner.rb +7 -5
- data/lib/logstash/settings.rb +11 -3
- data/lib/logstash/shutdown_watcher.rb +26 -0
- data/lib/logstash/state_resolver.rb +1 -3
- data/lib/logstash/util/dead_letter_queue_manager.rb +61 -0
- data/lib/logstash/util/environment_variables.rb +43 -0
- data/lib/logstash/util/thread_dump.rb +3 -1
- data/lib/logstash/version.rb +1 -1
- data/locales/en.yml +4 -0
- data/logstash-core.gemspec +4 -1
- data/spec/logstash/agent/converge_spec.rb +36 -35
- data/spec/logstash/agent_spec.rb +48 -177
- data/spec/{api/lib/commands/stats.rb → logstash/api/commands/stats_spec.rb} +7 -2
- data/spec/{api/lib → logstash/api}/errors_spec.rb +1 -1
- data/spec/{api/lib/api → logstash/api/modules}/logging_spec.rb +1 -10
- data/spec/{api/lib/api → logstash/api/modules}/node_plugins_spec.rb +1 -2
- data/spec/{api/lib/api → logstash/api/modules}/node_spec.rb +9 -8
- data/spec/{api/lib/api → logstash/api/modules}/node_stats_spec.rb +11 -9
- data/spec/{api/lib/api → logstash/api/modules}/plugins_spec.rb +4 -3
- data/spec/{api/lib/api → logstash/api/modules}/root_spec.rb +2 -2
- data/spec/{api/lib → logstash/api}/rack_app_spec.rb +0 -0
- data/spec/logstash/compiler/compiler_spec.rb +72 -9
- data/spec/logstash/config/source/local_spec.rb +20 -4
- data/spec/logstash/config/source/multi_local_spec.rb +113 -0
- data/spec/logstash/execution_context_spec.rb +14 -4
- data/spec/logstash/inputs/base_spec.rb +1 -1
- data/spec/logstash/instrument/wrapped_write_client_spec.rb +34 -19
- data/spec/logstash/output_delegator_spec.rb +1 -1
- data/spec/logstash/outputs/base_spec.rb +1 -1
- data/spec/logstash/pipeline_action/reload_spec.rb +1 -1
- data/spec/logstash/pipeline_action/stop_spec.rb +1 -1
- data/spec/logstash/pipeline_dlq_commit_spec.rb +107 -0
- data/spec/logstash/pipeline_pq_file_spec.rb +3 -1
- data/spec/logstash/pipeline_reporter_spec.rb +2 -1
- data/spec/logstash/pipeline_spec.rb +54 -43
- data/spec/logstash/runner_spec.rb +27 -36
- data/spec/logstash/settings/array_coercible_spec.rb +65 -0
- data/spec/logstash/settings_spec.rb +91 -0
- data/spec/logstash/shutdown_watcher_spec.rb +10 -16
- data/spec/logstash/state_resolver_spec.rb +6 -4
- data/spec/support/helpers.rb +16 -3
- data/spec/support/shared_contexts.rb +26 -2
- metadata +42 -39
- data/lib/logstash/instrument/metric_type/mean.rb +0 -33
- data/spec/api/lib/api/support/resource_dsl_methods.rb +0 -87
- data/spec/api/spec_helper.rb +0 -106
@@ -43,10 +43,6 @@ describe LogStash::Runner do
|
|
43
43
|
allow(agent).to receive(:shutdown)
|
44
44
|
end
|
45
45
|
|
46
|
-
after :each do
|
47
|
-
LogStash::SETTINGS.reset
|
48
|
-
end
|
49
|
-
|
50
46
|
describe "argument precedence" do
|
51
47
|
let(:config) { "input {} output {}" }
|
52
48
|
let(:cli_args) { ["-e", config, "-w", "20"] }
|
@@ -56,10 +52,6 @@ describe LogStash::Runner do
|
|
56
52
|
allow(LogStash::SETTINGS).to receive(:read_yaml).and_return(settings_yml_hash)
|
57
53
|
end
|
58
54
|
|
59
|
-
after :each do
|
60
|
-
LogStash::SETTINGS.reset
|
61
|
-
end
|
62
|
-
|
63
55
|
it "favors the last occurence of an option" do
|
64
56
|
expect(LogStash::Agent).to receive(:new) do |settings|
|
65
57
|
expect(settings.get("config.string")).to eq(config)
|
@@ -87,21 +79,6 @@ describe LogStash::Runner do
|
|
87
79
|
subject.run(args)
|
88
80
|
end
|
89
81
|
end
|
90
|
-
|
91
|
-
context "with no arguments" do
|
92
|
-
let(:args) { [] }
|
93
|
-
|
94
|
-
before(:each) do
|
95
|
-
allow(LogStash::Util::JavaVersion).to receive(:warn_on_bad_java_version)
|
96
|
-
end
|
97
|
-
|
98
|
-
it "should show help" do
|
99
|
-
expect($stderr).to receive(:puts).once
|
100
|
-
expect(subject).to receive(:signal_usage_error).once.and_call_original
|
101
|
-
expect(subject).to receive(:show_short_help).once
|
102
|
-
subject.run(args)
|
103
|
-
end
|
104
|
-
end
|
105
82
|
end
|
106
83
|
|
107
84
|
context "--pluginpath" do
|
@@ -130,7 +107,7 @@ describe LogStash::Runner do
|
|
130
107
|
|
131
108
|
context "--auto-reload" do
|
132
109
|
subject { LogStash::Runner.new("") }
|
133
|
-
context "when -
|
110
|
+
context "when -e is given" do
|
134
111
|
|
135
112
|
let(:args) { ["-r", "-e", "input {} output {}"] }
|
136
113
|
|
@@ -143,10 +120,6 @@ describe LogStash::Runner do
|
|
143
120
|
end
|
144
121
|
|
145
122
|
describe "--config.test_and_exit" do
|
146
|
-
before do
|
147
|
-
# Reset the source in a clean state before any asserts
|
148
|
-
LogStash::Config::SOURCE_LOADER.configure_sources([])
|
149
|
-
end
|
150
123
|
subject { LogStash::Runner.new("") }
|
151
124
|
let(:args) { ["-t", "-e", pipeline_string] }
|
152
125
|
|
@@ -176,38 +149,56 @@ describe LogStash::Runner do
|
|
176
149
|
allow(pipeline).to receive(:run).and_return(task)
|
177
150
|
allow(pipeline).to receive(:shutdown)
|
178
151
|
end
|
179
|
-
|
152
|
+
|
180
153
|
context "when :path.data is defined by the user" do
|
181
154
|
let(:test_data_path) { "/tmp/ls-test-data" }
|
182
155
|
let(:test_queue_path) { test_data_path + "/" + "queue" }
|
183
|
-
|
156
|
+
let(:test_dlq_path) { test_data_path + "/" + "dead_letter_queue" }
|
157
|
+
|
184
158
|
it "should set data paths" do
|
185
159
|
expect(LogStash::Agent).to receive(:new) do |settings|
|
186
160
|
expect(settings.get("path.data")).to eq(test_data_path)
|
187
161
|
expect(settings.get("path.queue")).to eq(test_queue_path)
|
162
|
+
expect(settings.get("path.dead_letter_queue")).to eq(test_dlq_path)
|
188
163
|
end
|
189
|
-
|
164
|
+
|
190
165
|
args = ["--path.data", test_data_path, "-e", pipeline_string]
|
191
166
|
subject.run("bin/logstash", args)
|
192
167
|
end
|
193
|
-
|
168
|
+
|
194
169
|
context "and path.queue is manually set" do
|
195
170
|
let(:queue_override_path) { "/tmp/queue-override_path" }
|
196
|
-
|
171
|
+
|
197
172
|
it "should set data paths" do
|
198
173
|
expect(LogStash::Agent).to receive(:new) do |settings|
|
199
174
|
expect(settings.get("path.data")).to eq(test_data_path)
|
200
175
|
expect(settings.get("path.queue")).to eq(queue_override_path)
|
201
176
|
end
|
202
|
-
|
177
|
+
|
203
178
|
LogStash::SETTINGS.set("path.queue", queue_override_path)
|
204
|
-
|
179
|
+
|
180
|
+
args = ["--path.data", test_data_path, "-e", pipeline_string]
|
181
|
+
subject.run("bin/logstash", args)
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
context "and path.dead_letter_queue is manually set" do
|
186
|
+
let(:queue_override_path) { "/tmp/queue-override_path" }
|
187
|
+
|
188
|
+
it "should set data paths" do
|
189
|
+
expect(LogStash::Agent).to receive(:new) do |settings|
|
190
|
+
expect(settings.get("path.data")).to eq(test_data_path)
|
191
|
+
expect(settings.get("path.dead_letter_queue")).to eq(queue_override_path)
|
192
|
+
end
|
193
|
+
|
194
|
+
LogStash::SETTINGS.set("path.dead_letter_queue", queue_override_path)
|
195
|
+
|
205
196
|
args = ["--path.data", test_data_path, "-e", pipeline_string]
|
206
197
|
subject.run("bin/logstash", args)
|
207
198
|
end
|
208
199
|
end
|
209
200
|
end
|
210
|
-
|
201
|
+
|
211
202
|
context "when :http.host is defined by the user" do
|
212
203
|
it "should pass the value to the webserver" do
|
213
204
|
expect(LogStash::Agent).to receive(:new) do |settings|
|
@@ -43,4 +43,69 @@ describe LogStash::Setting::ArrayCoercible do
|
|
43
43
|
end
|
44
44
|
end
|
45
45
|
end
|
46
|
+
|
47
|
+
describe "#==" do
|
48
|
+
context "when comparing two settings" do
|
49
|
+
let(:setting_1) { described_class.new("option_1", element_class_1, value_1) }
|
50
|
+
let(:element_class_1) { String }
|
51
|
+
let(:setting_2) { described_class.new("option_1", element_class_2, value_2) }
|
52
|
+
let(:element_class_2) { String }
|
53
|
+
|
54
|
+
context "where one was given a non array value" do
|
55
|
+
let(:value_1) { "a string" }
|
56
|
+
context "and the other also the same non array value" do
|
57
|
+
let(:value_2) { "a string" }
|
58
|
+
it "should be equal" do
|
59
|
+
expect(setting_1).to be == setting_2
|
60
|
+
end
|
61
|
+
end
|
62
|
+
context "and the other also the same value in an array" do
|
63
|
+
let(:value_2) { [ "a string" ] }
|
64
|
+
it "should be equal" do
|
65
|
+
expect(setting_1).to be == setting_2
|
66
|
+
end
|
67
|
+
end
|
68
|
+
context "and the other a different non array value" do
|
69
|
+
let(:value_2) { "a different string" }
|
70
|
+
it "should be equal" do
|
71
|
+
expect(setting_1).to_not be == setting_2
|
72
|
+
end
|
73
|
+
end
|
74
|
+
context "and the other a different value in an array" do
|
75
|
+
let(:value_2) { [ "a different string" ] }
|
76
|
+
it "should be equal" do
|
77
|
+
expect(setting_1).to_not be == setting_2
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
context "where one was given a value in an array" do
|
83
|
+
let(:value_1) { [ "a string"] }
|
84
|
+
context "and the other the same value in an array" do
|
85
|
+
let(:value_2) { [ "a string" ] }
|
86
|
+
it "should be equal" do
|
87
|
+
expect(setting_1).to be == setting_2
|
88
|
+
end
|
89
|
+
end
|
90
|
+
context "and the other the same value not in an array" do
|
91
|
+
let(:value_2) { "a string" }
|
92
|
+
it "should be equal" do
|
93
|
+
expect(setting_1).to be == setting_2
|
94
|
+
end
|
95
|
+
end
|
96
|
+
context "and the other a different value in an array" do
|
97
|
+
let(:value_2) { [ "a different string" ] }
|
98
|
+
it "should be equal" do
|
99
|
+
expect(setting_1).to_not be == setting_2
|
100
|
+
end
|
101
|
+
end
|
102
|
+
context "and the other a different value in an array" do
|
103
|
+
let(:value_2) { "a different string" }
|
104
|
+
it "should be equal" do
|
105
|
+
expect(setting_1).to_not be == setting_2
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
46
111
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require "spec_helper"
|
3
|
+
require "logstash/util/environment_variables"
|
3
4
|
require "logstash/settings"
|
4
5
|
require "fileutils"
|
5
6
|
|
@@ -146,4 +147,94 @@ describe LogStash::Settings do
|
|
146
147
|
end
|
147
148
|
end
|
148
149
|
end
|
150
|
+
|
151
|
+
describe "#from_yaml" do
|
152
|
+
|
153
|
+
context "env placeholders in flat logstash.yml" do
|
154
|
+
|
155
|
+
after do
|
156
|
+
ENV.delete('SOME_LOGSTASH_SPEC_ENV_VAR')
|
157
|
+
ENV.delete('some.logstash.spec.env.var')
|
158
|
+
end
|
159
|
+
|
160
|
+
subject do
|
161
|
+
settings = described_class.new
|
162
|
+
settings.register(LogStash::Setting::String.new("interpolated", "missing"))
|
163
|
+
settings.register(LogStash::Setting::String.new("with_dot", "missing"))
|
164
|
+
settings
|
165
|
+
end
|
166
|
+
|
167
|
+
let(:values) {{
|
168
|
+
"interpolated" => "${SOME_LOGSTASH_SPEC_ENV_VAR}",
|
169
|
+
"with_dot" => "${some.logstash.spec.env.var}"
|
170
|
+
}}
|
171
|
+
let(:yaml_path) do
|
172
|
+
p = Stud::Temporary.pathname
|
173
|
+
FileUtils.mkdir_p(p)
|
174
|
+
|
175
|
+
::File.open(::File.join(p, "logstash.yml"), "w+") do |f|
|
176
|
+
f.write(YAML.dump(values))
|
177
|
+
end
|
178
|
+
p
|
179
|
+
end
|
180
|
+
|
181
|
+
it "can interpolate environment into settings" do
|
182
|
+
expect(subject.get('interpolated')).to eq("missing")
|
183
|
+
expect(subject.get('with_dot')).to eq("missing")
|
184
|
+
ENV['SOME_LOGSTASH_SPEC_ENV_VAR'] = "correct_setting"
|
185
|
+
ENV['some.logstash.spec.env.var'] = "correct_setting_for_dotted"
|
186
|
+
subject.from_yaml(yaml_path)
|
187
|
+
expect(subject.get('interpolated')).to eq("correct_setting")
|
188
|
+
expect(subject.get('with_dot')).to eq("correct_setting_for_dotted")
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
context "env placeholders in nested logstash.yml" do
|
194
|
+
|
195
|
+
before do
|
196
|
+
ENV['lsspecdomain'] = "domain1"
|
197
|
+
ENV['lsspecdomain2'] = "domain2"
|
198
|
+
end
|
199
|
+
|
200
|
+
after do
|
201
|
+
ENV.delete('lsspecdomain')
|
202
|
+
ENV.delete('lsspecdomain2')
|
203
|
+
end
|
204
|
+
|
205
|
+
subject do
|
206
|
+
settings = described_class.new
|
207
|
+
settings.register(LogStash::Setting::ArrayCoercible.new("host", String, []))
|
208
|
+
settings.register(LogStash::Setting::ArrayCoercible.new("modules", Hash, []))
|
209
|
+
settings
|
210
|
+
end
|
211
|
+
|
212
|
+
let(:values) {{
|
213
|
+
"host" => ["dev1.${lsspecdomain}", "dev2.${lsspecdomain}"],
|
214
|
+
"modules" => [
|
215
|
+
{"name" => "${lsspecdomain}", "testing" => "${lsspecdomain}"},
|
216
|
+
{"name" => "${lsspecdomain2}", "testing" => "${lsspecdomain2}"}
|
217
|
+
]
|
218
|
+
}}
|
219
|
+
let(:yaml_path) do
|
220
|
+
p = Stud::Temporary.pathname
|
221
|
+
FileUtils.mkdir_p(p)
|
222
|
+
|
223
|
+
::File.open(::File.join(p, "logstash.yml"), "w+") do |f|
|
224
|
+
f.write(YAML.dump(values))
|
225
|
+
end
|
226
|
+
p
|
227
|
+
end
|
228
|
+
|
229
|
+
it "can interpolate environment into settings" do
|
230
|
+
expect(subject.get('host')).to match_array([])
|
231
|
+
expect(subject.get('modules')).to match_array([])
|
232
|
+
subject.from_yaml(yaml_path)
|
233
|
+
expect(subject.get('host')).to match_array(["dev1.domain1", "dev2.domain1"])
|
234
|
+
expect(subject.get('modules')).to match_array([
|
235
|
+
{"name" => "domain1", "testing" => "domain1"},
|
236
|
+
{"name" => "domain2", "testing" => "domain2"}
|
237
|
+
])
|
238
|
+
end
|
239
|
+
end
|
149
240
|
end
|
@@ -9,22 +9,12 @@ describe LogStash::ShutdownWatcher do
|
|
9
9
|
let(:pipeline) { double("pipeline") }
|
10
10
|
let(:reporter) { double("reporter") }
|
11
11
|
let(:reporter_snapshot) { double("reporter snapshot") }
|
12
|
-
report_count = 0
|
13
12
|
|
14
13
|
before :each do
|
15
14
|
allow(pipeline).to receive(:reporter).and_return(reporter)
|
16
15
|
allow(pipeline).to receive(:thread).and_return(Thread.current)
|
17
16
|
allow(reporter).to receive(:snapshot).and_return(reporter_snapshot)
|
18
17
|
allow(reporter_snapshot).to receive(:o_simple_hash).and_return({})
|
19
|
-
|
20
|
-
allow(subject).to receive(:pipeline_report_snapshot).and_wrap_original do |m, *args|
|
21
|
-
report_count += 1
|
22
|
-
m.call(*args)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
after :each do
|
27
|
-
report_count = 0
|
28
18
|
end
|
29
19
|
|
30
20
|
context "when pipeline is stalled" do
|
@@ -69,8 +59,9 @@ describe LogStash::ShutdownWatcher do
|
|
69
59
|
it "shouldn't force the shutdown" do
|
70
60
|
expect(subject).to_not receive(:force_exit)
|
71
61
|
thread = Thread.new(subject) {|subject| subject.start }
|
72
|
-
sleep 0.1 until
|
73
|
-
|
62
|
+
sleep 0.1 until subject.attempts_count > check_threshold
|
63
|
+
subject.stop!
|
64
|
+
expect(thread.join(60)).to_not be_nil
|
74
65
|
end
|
75
66
|
end
|
76
67
|
end
|
@@ -91,8 +82,9 @@ describe LogStash::ShutdownWatcher do
|
|
91
82
|
it "should force the shutdown" do
|
92
83
|
expect(subject).to_not receive(:force_exit)
|
93
84
|
thread = Thread.new(subject) {|subject| subject.start }
|
94
|
-
sleep 0.1 until
|
95
|
-
|
85
|
+
sleep 0.1 until subject.attempts_count > check_threshold
|
86
|
+
subject.stop!
|
87
|
+
expect(thread.join(60)).to_not be_nil
|
96
88
|
end
|
97
89
|
end
|
98
90
|
|
@@ -105,8 +97,10 @@ describe LogStash::ShutdownWatcher do
|
|
105
97
|
it "shouldn't force the shutdown" do
|
106
98
|
expect(subject).to_not receive(:force_exit)
|
107
99
|
thread = Thread.new(subject) {|subject| subject.start }
|
108
|
-
sleep 0.1 until
|
109
|
-
|
100
|
+
sleep 0.1 until subject.attempts_count > check_threshold
|
101
|
+
subject.stop!
|
102
|
+
thread.join
|
103
|
+
expect(thread.join(60)).to_not be_nil
|
110
104
|
end
|
111
105
|
end
|
112
106
|
end
|
@@ -46,10 +46,12 @@ describe LogStash::StateResolver do
|
|
46
46
|
|
47
47
|
context "when some pipeline are running" do
|
48
48
|
context "when a pipeline is running" do
|
49
|
-
let(:
|
49
|
+
let(:main_pipeline) { mock_pipeline(:main) }
|
50
|
+
let(:main_pipeline_config) { main_pipeline.pipeline_config }
|
51
|
+
let(:running_pipelines) { { :main => main_pipeline } }
|
50
52
|
|
51
53
|
context "when the pipeline config contains a new one and the existing" do
|
52
|
-
let(:pipeline_configs) { [mock_pipeline_config(:hello_world),
|
54
|
+
let(:pipeline_configs) { [mock_pipeline_config(:hello_world), main_pipeline_config ] }
|
53
55
|
|
54
56
|
it "creates the new one and keep the other one" do
|
55
57
|
expect(subject.resolve(running_pipelines, pipeline_configs)).to have_actions(
|
@@ -105,7 +107,7 @@ describe LogStash::StateResolver do
|
|
105
107
|
context "without system pipeline" do
|
106
108
|
let(:pipeline_configs) do
|
107
109
|
[
|
108
|
-
|
110
|
+
running_pipelines[:main1].pipeline_config,
|
109
111
|
mock_pipeline_config(:main9),
|
110
112
|
mock_pipeline_config(:main5, "input { generator {}}"),
|
111
113
|
mock_pipeline_config(:main3, "input { generator {}}"),
|
@@ -129,7 +131,7 @@ describe LogStash::StateResolver do
|
|
129
131
|
context "with system pipeline" do
|
130
132
|
let(:pipeline_configs) do
|
131
133
|
[
|
132
|
-
|
134
|
+
running_pipelines[:main1].pipeline_config,
|
133
135
|
mock_pipeline_config(:main9),
|
134
136
|
mock_pipeline_config(:main5, "input { generator {}}"),
|
135
137
|
mock_pipeline_config(:main3, "input { generator {}}"),
|
data/spec/support/helpers.rb
CHANGED
@@ -22,7 +22,7 @@ def clear_data_dir
|
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
-
def mock_settings(settings_values)
|
25
|
+
def mock_settings(settings_values={})
|
26
26
|
settings = LogStash::SETTINGS.clone
|
27
27
|
|
28
28
|
settings_values.each do |key, value|
|
@@ -32,13 +32,26 @@ def mock_settings(settings_values)
|
|
32
32
|
settings
|
33
33
|
end
|
34
34
|
|
35
|
+
def make_test_agent(settings=mock_settings)
|
36
|
+
sl = LogStash::Config::SourceLoader.new
|
37
|
+
sl.add_source(LogStash::Config::Source::Local.new(settings))
|
38
|
+
sl
|
39
|
+
|
40
|
+
::LogStash::Agent.new(settings, sl)
|
41
|
+
end
|
42
|
+
|
35
43
|
def mock_pipeline(pipeline_id, reloadable = true, config_hash = nil)
|
36
44
|
config_string = "input { stdin { id => '#{pipeline_id}' }}"
|
37
45
|
settings = mock_settings("pipeline.id" => pipeline_id.to_s,
|
38
46
|
"config.string" => config_string,
|
39
47
|
"config.reload.automatic" => reloadable)
|
40
|
-
|
41
|
-
|
48
|
+
pipeline_config = mock_pipeline_config(pipeline_id, config_string, settings)
|
49
|
+
LogStash::Pipeline.new(pipeline_config)
|
50
|
+
end
|
51
|
+
|
52
|
+
def mock_pipeline_from_string(config_string, settings = LogStash::SETTINGS, metric = nil)
|
53
|
+
pipeline_config = mock_pipeline_config(settings.get("pipeline.id"), config_string, settings)
|
54
|
+
LogStash::Pipeline.new(pipeline_config, metric)
|
42
55
|
end
|
43
56
|
|
44
57
|
def mock_pipeline_config(pipeline_id, config_string = nil, settings = {})
|
@@ -2,12 +2,36 @@ shared_context "execution_context" do
|
|
2
2
|
let(:pipeline) { double("pipeline") }
|
3
3
|
let(:pipeline_id) { :main }
|
4
4
|
let(:agent) { double("agent") }
|
5
|
+
let(:plugin_id) { :plugin_id }
|
6
|
+
let(:plugin_type) { :plugin_type }
|
7
|
+
let(:dlq_writer) { double("dlq_writer") }
|
5
8
|
let(:execution_context) do
|
6
|
-
::LogStash::ExecutionContext.new(pipeline, agent)
|
9
|
+
::LogStash::ExecutionContext.new(pipeline, agent, plugin_id, plugin_type, dlq_writer)
|
7
10
|
end
|
8
|
-
|
11
|
+
|
9
12
|
before do
|
10
13
|
allow(pipeline).to receive(:pipeline_id).and_return(pipeline_id)
|
11
14
|
allow(pipeline).to receive(:agent).and_return(agent)
|
12
15
|
end
|
13
16
|
end
|
17
|
+
|
18
|
+
shared_context "api setup" do
|
19
|
+
before :all do
|
20
|
+
clear_data_dir
|
21
|
+
settings = mock_settings
|
22
|
+
config_string = "input { generator {id => 'api-generator-pipeline' count => 100 } } output { dummyoutput {} }"
|
23
|
+
settings.set("config.string", config_string)
|
24
|
+
@agent = make_test_agent(settings)
|
25
|
+
@agent.execute
|
26
|
+
end
|
27
|
+
|
28
|
+
after :all do
|
29
|
+
@agent.shutdown
|
30
|
+
end
|
31
|
+
|
32
|
+
include Rack::Test::Methods
|
33
|
+
|
34
|
+
def app()
|
35
|
+
described_class.new(nil, @agent)
|
36
|
+
end
|
37
|
+
end
|