logstash-core 6.0.0.alpha2-java → 6.0.0.beta1-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.
Files changed (110) hide show
  1. checksums.yaml +5 -5
  2. data/gemspec_jars.rb +6 -4
  3. data/lib/logstash-core/logstash-core.jar +0 -0
  4. data/lib/logstash-core/logstash-core.rb +2 -2
  5. data/lib/logstash-core/version.rb +1 -1
  6. data/lib/logstash-core_jars.rb +14 -10
  7. data/lib/logstash/agent.rb +4 -2
  8. data/lib/logstash/api/commands/default_metadata.rb +1 -1
  9. data/lib/logstash/api/commands/hot_threads_reporter.rb +8 -2
  10. data/lib/logstash/api/commands/node.rb +2 -2
  11. data/lib/logstash/api/commands/stats.rb +2 -2
  12. data/lib/logstash/bootstrap_check/bad_ruby.rb +2 -2
  13. data/lib/logstash/bootstrap_check/default_config.rb +2 -3
  14. data/lib/logstash/compiler.rb +12 -12
  15. data/lib/logstash/compiler/lscl.rb +17 -7
  16. data/lib/logstash/compiler/treetop_monkeypatches.rb +1 -0
  17. data/lib/logstash/config/config_ast.rb +11 -1
  18. data/lib/logstash/config/mixin.rb +5 -0
  19. data/lib/logstash/config/modules_common.rb +101 -0
  20. data/lib/logstash/config/source/base.rb +75 -0
  21. data/lib/logstash/config/source/local.rb +52 -50
  22. data/lib/logstash/config/source/modules.rb +55 -0
  23. data/lib/logstash/config/source/multi_local.rb +54 -10
  24. data/lib/logstash/config/source_loader.rb +1 -0
  25. data/lib/logstash/config/string_escape.rb +27 -0
  26. data/lib/logstash/elasticsearch_client.rb +142 -0
  27. data/lib/logstash/environment.rb +5 -1
  28. data/lib/logstash/event.rb +0 -1
  29. data/lib/logstash/instrument/global_metrics.rb +13 -0
  30. data/lib/logstash/instrument/metric_store.rb +16 -13
  31. data/lib/logstash/instrument/metric_type/counter.rb +6 -18
  32. data/lib/logstash/instrument/metric_type/gauge.rb +6 -12
  33. data/lib/logstash/instrument/periodic_poller/dlq.rb +19 -0
  34. data/lib/logstash/instrument/periodic_pollers.rb +3 -1
  35. data/lib/logstash/logging/logger.rb +43 -14
  36. data/lib/logstash/modules/cli_parser.rb +74 -0
  37. data/lib/logstash/modules/elasticsearch_config.rb +22 -0
  38. data/lib/logstash/modules/elasticsearch_importer.rb +37 -0
  39. data/lib/logstash/modules/elasticsearch_resource.rb +10 -0
  40. data/lib/logstash/modules/file_reader.rb +36 -0
  41. data/lib/logstash/modules/kibana_base.rb +24 -0
  42. data/lib/logstash/modules/kibana_client.rb +122 -0
  43. data/lib/logstash/modules/kibana_config.rb +125 -0
  44. data/lib/logstash/modules/kibana_dashboards.rb +36 -0
  45. data/lib/logstash/modules/kibana_importer.rb +17 -0
  46. data/lib/logstash/modules/kibana_resource.rb +10 -0
  47. data/lib/logstash/modules/kibana_settings.rb +40 -0
  48. data/lib/logstash/modules/logstash_config.rb +120 -0
  49. data/lib/logstash/modules/resource_base.rb +38 -0
  50. data/lib/logstash/modules/scaffold.rb +50 -0
  51. data/lib/logstash/modules/settings_merger.rb +23 -0
  52. data/lib/logstash/modules/util.rb +17 -0
  53. data/lib/logstash/namespace.rb +1 -0
  54. data/lib/logstash/pipeline.rb +66 -27
  55. data/lib/logstash/pipeline_settings.rb +1 -0
  56. data/lib/logstash/plugins/registry.rb +1 -0
  57. data/lib/logstash/runner.rb +47 -3
  58. data/lib/logstash/settings.rb +20 -1
  59. data/lib/logstash/util/dead_letter_queue_manager.rb +1 -1
  60. data/lib/logstash/util/safe_uri.rb +146 -11
  61. data/lib/logstash/util/thread_dump.rb +4 -3
  62. data/lib/logstash/util/wrapped_acked_queue.rb +28 -24
  63. data/lib/logstash/util/wrapped_synchronous_queue.rb +19 -20
  64. data/lib/logstash/version.rb +1 -1
  65. data/locales/en.yml +56 -1
  66. data/logstash-core.gemspec +6 -4
  67. data/spec/logstash/agent/converge_spec.rb +2 -2
  68. data/spec/logstash/agent_spec.rb +11 -3
  69. data/spec/logstash/api/modules/logging_spec.rb +13 -7
  70. data/spec/logstash/api/modules/node_plugins_spec.rb +23 -5
  71. data/spec/logstash/api/modules/node_spec.rb +17 -15
  72. data/spec/logstash/api/modules/node_stats_spec.rb +0 -1
  73. data/spec/logstash/api/modules/plugins_spec.rb +40 -9
  74. data/spec/logstash/api/modules/root_spec.rb +0 -1
  75. data/spec/logstash/api/rack_app_spec.rb +2 -1
  76. data/spec/logstash/compiler/compiler_spec.rb +54 -7
  77. data/spec/logstash/config/config_ast_spec.rb +47 -8
  78. data/spec/logstash/config/mixin_spec.rb +14 -2
  79. data/spec/logstash/config/pipeline_config_spec.rb +7 -7
  80. data/spec/logstash/config/source/local_spec.rb +5 -2
  81. data/spec/logstash/config/source/multi_local_spec.rb +56 -10
  82. data/spec/logstash/config/source_loader_spec.rb +1 -1
  83. data/spec/logstash/config/string_escape_spec.rb +24 -0
  84. data/spec/logstash/event_spec.rb +9 -0
  85. data/spec/logstash/filters/base_spec.rb +1 -1
  86. data/spec/logstash/instrument/metric_store_spec.rb +2 -3
  87. data/spec/logstash/instrument/metric_type/counter_spec.rb +0 -12
  88. data/spec/logstash/instrument/metric_type/gauge_spec.rb +1 -8
  89. data/spec/logstash/instrument/periodic_poller/dlq_spec.rb +17 -0
  90. data/spec/logstash/instrument/periodic_poller/jvm_spec.rb +1 -1
  91. data/spec/logstash/legacy_ruby_event_spec.rb +0 -9
  92. data/spec/logstash/legacy_ruby_timestamp_spec.rb +19 -14
  93. data/spec/logstash/modules/cli_parser_spec.rb +129 -0
  94. data/spec/logstash/modules/logstash_config_spec.rb +56 -0
  95. data/spec/logstash/modules/scaffold_spec.rb +239 -0
  96. data/spec/logstash/pipeline_dlq_commit_spec.rb +1 -1
  97. data/spec/logstash/pipeline_spec.rb +87 -20
  98. data/spec/logstash/runner_spec.rb +122 -5
  99. data/spec/logstash/setting_spec.rb +2 -2
  100. data/spec/logstash/settings/splittable_string_array_spec.rb +51 -0
  101. data/spec/logstash/timestamp_spec.rb +8 -2
  102. data/spec/logstash/util/safe_uri_spec.rb +16 -0
  103. data/spec/logstash/util/wrapped_acked_queue_spec.rb +63 -0
  104. data/spec/logstash/util/wrapped_synchronous_queue_spec.rb +0 -22
  105. data/spec/support/helpers.rb +1 -1
  106. data/spec/support/matchers.rb +21 -4
  107. metadata +102 -19
  108. data/lib/logstash/instrument/metric_type/base.rb +0 -31
  109. data/lib/logstash/program.rb +0 -14
  110. data/lib/logstash/string_interpolation.rb +0 -18
@@ -24,14 +24,14 @@ Gem::Specification.new do |gem|
24
24
  gem.add_runtime_dependency "clamp", "~> 0.6.5" #(MIT license) for command line args/flags
25
25
  gem.add_runtime_dependency "filesize", "0.0.4" #(MIT license) for :bytes config validator
26
26
  gem.add_runtime_dependency "gems", "~> 0.8.3" #(MIT license)
27
- gem.add_runtime_dependency "concurrent-ruby", "1.0.0"
27
+ gem.add_runtime_dependency "concurrent-ruby", "~> 1.0", ">= 1.0.5"
28
28
 
29
29
  # Later versions are ruby 2.0 only. We should remove the rack dep once we support 9k
30
30
  gem.add_runtime_dependency "rack", '1.6.6'
31
-
31
+
32
32
  gem.add_runtime_dependency "sinatra", '~> 1.4', '>= 1.4.6'
33
33
  gem.add_runtime_dependency 'puma', '~> 2.16'
34
- gem.add_runtime_dependency "jruby-openssl", "0.9.16" # >= 0.9.13 Required to support TLSv1.2
34
+ gem.add_runtime_dependency "jruby-openssl", "0.9.20" # >= 0.9.13 Required to support TLSv1.2
35
35
  gem.add_runtime_dependency "chronic_duration", "0.10.6"
36
36
 
37
37
  # TODO(sissel): Treetop 1.5.x doesn't seem to work well, but I haven't
@@ -43,7 +43,7 @@ Gem::Specification.new do |gem|
43
43
 
44
44
  # filetools and rakelib
45
45
  gem.add_runtime_dependency "minitar", "~> 0.5.4"
46
- gem.add_runtime_dependency "rubyzip", "~> 1.1.7"
46
+ gem.add_runtime_dependency "rubyzip", "~> 1.2.1"
47
47
  gem.add_runtime_dependency "thread_safe", "~> 0.3.5" #(Apache 2.0 license)
48
48
 
49
49
  gem.add_runtime_dependency "jrjackson", "~> 0.4.2" #(Apache 2.0 license)
@@ -53,6 +53,8 @@ Gem::Specification.new do |gem|
53
53
  # has an rdoc problem that causes a bundler exception. 3.3.9 is the current latest version
54
54
  # which does not have this problem.
55
55
  gem.add_runtime_dependency "ruby-maven", "~> 3.3.9"
56
+ gem.add_runtime_dependency "elasticsearch", "~> 5.0", ">= 5.0.4" # Ruby client for ES (Apache 2.0 license)
57
+ gem.add_runtime_dependency "manticore", '>= 0.5.4', '< 1.0.0'
56
58
 
57
59
  eval(File.read(File.expand_path("../gemspec_jars.rb", __FILE__)))
58
60
  end
@@ -131,7 +131,7 @@ describe LogStash::Agent do
131
131
  end
132
132
 
133
133
  context "is set to `TRUE`" do
134
- let(:interval) { 0.01 }
134
+ let(:interval) { "10ms" }
135
135
  let(:agent_settings) do
136
136
  mock_settings(
137
137
  "config.reload.automatic" => true,
@@ -165,7 +165,7 @@ describe LogStash::Agent do
165
165
  it "it will keep trying to converge" do
166
166
  agent_task = start_agent(subject)
167
167
 
168
- sleep(interval * 20) # let the interval reload a few times
168
+ sleep(agent_settings.get("config.reload.interval") / 1_000_000_000.0 * 20) # let the interval reload a few times
169
169
  expect(subject.pipelines_count).to eq(0)
170
170
  expect(source_loader.fetch_count).to be > 1
171
171
 
@@ -9,6 +9,8 @@ require "fileutils"
9
9
  require_relative "../support/helpers"
10
10
  require_relative "../support/matchers"
11
11
 
12
+ java_import org.logstash.Timestamp
13
+
12
14
  describe LogStash::Agent do
13
15
  let(:agent_settings) { mock_settings({}) }
14
16
  let(:agent_args) { {} }
@@ -81,6 +83,12 @@ describe LogStash::Agent do
81
83
  end
82
84
  end
83
85
 
86
+ describe "ephemeral_id" do
87
+ it "create a ephemeral id at creation time" do
88
+ expect(subject.ephemeral_id).to_not be_nil
89
+ end
90
+ end
91
+
84
92
  describe "#execute" do
85
93
  let(:config_string) { "input { generator { id => 'old'} } output { }" }
86
94
  let(:mock_config_pipeline) { mock_pipeline_config(:main, config_string, pipeline_settings) }
@@ -202,7 +210,7 @@ describe LogStash::Agent do
202
210
  let(:pipeline_config) { "input { generator { message => '${FOO}-bar' count => 1 } } filter { } output { file { path => '#{temporary_file}' } }" }
203
211
  let(:agent_args) { {
204
212
  "config.reload.automatic" => false,
205
- "config.reload.interval" => 0.01,
213
+ "config.reload.interval" => "10ms",
206
214
  "config.string" => pipeline_config
207
215
  } }
208
216
 
@@ -386,7 +394,7 @@ describe LogStash::Agent do
386
394
  it "sets the success reload timestamp" do
387
395
  snapshot = subject.metric.collector.snapshot_metric
388
396
  value = snapshot.metric_store.get_with_path("/stats/pipelines")[:stats][:pipelines][:main][:reloads][:last_success_timestamp].value
389
- expect(value).to be_a(LogStash::Timestamp)
397
+ expect(value).to be_a(Timestamp)
390
398
  end
391
399
 
392
400
  it "does not set the last reload error" do
@@ -415,7 +423,7 @@ describe LogStash::Agent do
415
423
  it "sets the failure reload timestamp" do
416
424
  snapshot = subject.metric.collector.snapshot_metric
417
425
  value = snapshot.metric_store.get_with_path("/stats/pipelines")[:stats][:pipelines][:main][:reloads][:last_failure_timestamp].value
418
- expect(value).to be_a(LogStash::Timestamp)
426
+ expect(value).to be_a(Timestamp)
419
427
  end
420
428
 
421
429
  it "sets the last reload error" do
@@ -1,8 +1,8 @@
1
1
  # encoding: utf-8
2
2
  require "spec_helper"
3
+ require "json-schema"
3
4
  require "sinatra"
4
5
  require "logstash/api/modules/logging"
5
- require "logstash/json"
6
6
 
7
7
  describe LogStash::Api::Modules::Logging do
8
8
  include_context "api setup"
@@ -12,20 +12,26 @@ describe LogStash::Api::Modules::Logging do
12
12
  context "when setting a logger's log level" do
13
13
  it "should return a positive acknowledgement on success" do
14
14
  put '/', '{"logger.logstash": "ERROR"}'
15
- payload = LogStash::Json.load(last_response.body)
16
- expect(payload['acknowledged']).to eq(true)
15
+ expect(JSON::Validator.fully_validate(
16
+ { "properties" => { "acknowledged" => { "enum" => [true] } } },
17
+ last_response.body)
18
+ ).to be_empty
17
19
  end
18
20
 
19
21
  it "should throw error when level is invalid" do
20
22
  put '/', '{"logger.logstash": "invalid"}'
21
- payload = LogStash::Json.load(last_response.body)
22
- expect(payload['error']).to eq("invalid level[invalid] for logger[logstash]")
23
+ expect(JSON::Validator.fully_validate(
24
+ { "properties" => { "error" => { "enum" => ["invalid level[invalid] for logger[logstash]"] } } },
25
+ last_response.body)
26
+ ).to be_empty
23
27
  end
24
28
 
25
29
  it "should throw error when key logger is invalid" do
26
30
  put '/', '{"invalid" : "ERROR"}'
27
- payload = LogStash::Json.load(last_response.body)
28
- expect(payload['error']).to eq("unrecognized option [invalid]")
31
+ expect(JSON::Validator.fully_validate(
32
+ { "properties" => { "error" => { "enum" => ["unrecognized option [invalid]"] } } },
33
+ last_response.body)
34
+ ).to be_empty
29
35
  end
30
36
  end
31
37
  end
@@ -1,8 +1,8 @@
1
1
  # encoding: utf-8
2
2
  require "spec_helper"
3
+ require "json-schema"
3
4
  require "sinatra"
4
5
  require "logstash/api/modules/plugins"
5
- require "logstash/json"
6
6
 
7
7
  describe LogStash::Api::Modules::Plugins do
8
8
  include_context "api setup"
@@ -14,19 +14,37 @@ describe LogStash::Api::Modules::Plugins do
14
14
  get "/"
15
15
  end
16
16
 
17
- let(:payload) { LogStash::Json.load(last_response.body) }
18
-
19
17
  describe "retrieving plugins" do
20
18
  it "should return OK" do
21
19
  expect(last_response).to be_ok
22
20
  end
23
21
 
24
22
  it "should return a list of plugins" do
25
- expect(payload["plugins"]).to be_a(Array)
23
+ expect(JSON::Validator.fully_validate(
24
+ {
25
+ "properties" => {
26
+ "plugins" => {
27
+ "type" => "array"
28
+ },
29
+ "required" => ["plugins"]
30
+ }
31
+ },
32
+ last_response.body)
33
+ ).to be_empty
26
34
  end
27
35
 
28
36
  it "should return the total number of plugins" do
29
- expect(payload["total"]).to be_a(Numeric)
37
+ expect(JSON::Validator.fully_validate(
38
+ {
39
+ "properties" => {
40
+ "total" => {
41
+ "type" => "number"
42
+ },
43
+ "required" => ["total"]
44
+ }
45
+ },
46
+ last_response.body)
47
+ ).to be_empty
30
48
  end
31
49
  end
32
50
  end
@@ -1,8 +1,8 @@
1
1
  # encoding: utf-8
2
2
  require "spec_helper"
3
+ require "json-schema"
3
4
  require "sinatra"
4
5
  require "logstash/api/modules/node"
5
- require "logstash/json"
6
6
 
7
7
  describe LogStash::Api::Modules::Node do
8
8
  include_context "api setup"
@@ -19,7 +19,7 @@ describe LogStash::Api::Modules::Node do
19
19
  end
20
20
 
21
21
  it "should return a JSON object" do
22
- expect{ LogStash::Json.load(last_response.body) }.not_to raise_error
22
+ expect(JSON::Validator.validate({}, last_response.body)).to eq(true)
23
23
  end
24
24
 
25
25
  context "#threads count" do
@@ -28,14 +28,21 @@ describe LogStash::Api::Modules::Node do
28
28
  get "/hot_threads?threads=5"
29
29
  end
30
30
 
31
- let(:payload) { LogStash::Json.load(last_response.body) }
32
-
33
31
  it "should return a json payload content type" do
34
32
  expect(last_response.content_type).to eq("application/json")
35
33
  end
36
34
 
37
35
  it "should return information for <= # requested threads" do
38
- expect(payload["hot_threads"]["threads"].count).to be <= 5
36
+ expect(JSON::Validator.fully_validate(
37
+ {
38
+ "properties" => {
39
+ "hot_threads" => {
40
+ "properties" => { "threads" => { "type" => "array", "maxItems" => 5 } }
41
+ }
42
+ }
43
+ },
44
+ last_response.body
45
+ )).to be_empty
39
46
  end
40
47
  end
41
48
 
@@ -51,14 +58,12 @@ describe LogStash::Api::Modules::Node do
51
58
  get path
52
59
  end
53
60
 
54
- let(:payload) { last_response.body }
55
-
56
61
  it "should return a text/plain content type" do
57
62
  expect(last_response.content_type).to eq("text/plain;charset=utf-8")
58
63
  end
59
64
 
60
65
  it "should return a plain text payload" do
61
- expect{ JSON.parse(payload) }.to raise_error
66
+ expect {JSON::Validator.fully_validate({}, payload)}.to raise_error
62
67
  end
63
68
  end
64
69
  end
@@ -76,10 +81,8 @@ describe LogStash::Api::Modules::Node do
76
81
  @threads.each { |t| t.kill } rescue nil
77
82
  end
78
83
 
79
- let(:payload) { last_response.body }
80
-
81
84
  it "should return information for <= # requested threads" do
82
- expect(payload.scan(/thread name/).size).to eq(2)
85
+ expect(last_response.body.scan(/thread name/).size).to eq(2)
83
86
  end
84
87
  end
85
88
 
@@ -97,10 +100,8 @@ describe LogStash::Api::Modules::Node do
97
100
  expect(last_response.content_type).to eq("application/json")
98
101
  end
99
102
 
100
- let(:payload) { last_response.body }
101
-
102
103
  it "should return a json payload" do
103
- expect{ JSON.parse(payload) }.not_to raise_error
104
+ expect(JSON::Validator.validate({}, last_response.body)).to eq(true)
104
105
  end
105
106
  end
106
107
  end
@@ -115,7 +116,8 @@ describe LogStash::Api::Modules::Node do
115
116
  "batch_size" => Numeric,
116
117
  "batch_delay" => Numeric,
117
118
  "config_reload_automatic" => Boolean,
118
- "config_reload_interval" => Numeric
119
+ "config_reload_interval" => Numeric,
120
+ "dead_letter_queue_enabled" => Boolean
119
121
  }
120
122
  },
121
123
  "os" => {
@@ -3,7 +3,6 @@ require "spec_helper"
3
3
 
4
4
  require "sinatra"
5
5
  require "logstash/api/modules/node_stats"
6
- require "logstash/json"
7
6
 
8
7
  describe LogStash::Api::Modules::NodeStats do
9
8
  include_context "api setup"
@@ -1,5 +1,6 @@
1
1
  # encoding: utf-8
2
2
  require "spec_helper"
3
+ require "json-schema"
3
4
  require "sinatra"
4
5
  require "logstash/api/modules/plugins"
5
6
  require "logstash/json"
@@ -12,8 +13,6 @@ describe LogStash::Api::Modules::Plugins do
12
13
  get "/"
13
14
  end
14
15
 
15
- let(:payload) { LogStash::Json.load(last_response.body) }
16
-
17
16
  it "respond to plugins resource" do
18
17
  expect(last_response).to be_ok
19
18
  end
@@ -24,15 +23,31 @@ describe LogStash::Api::Modules::Plugins do
24
23
 
25
24
  context "#schema" do
26
25
  it "return the expected schema" do
27
- expect(payload.keys).to include("plugins", "total")
28
- payload["plugins"].each do |plugin|
29
- expect(plugin.keys).to include("name", "version")
30
- end
26
+ expect(JSON::Validator.fully_validate(
27
+ {
28
+ "properties" => {
29
+ "plugins" => {
30
+ "type" => "array",
31
+ "items" => [
32
+ {
33
+ "type" => "object",
34
+ "required" => ["version", "name"]
35
+ }
36
+ ]
37
+ },
38
+ "total" => { "type" => "number" }
39
+ },
40
+ "required" => ["plugins", "total"]
41
+ },
42
+ last_response.body)
43
+ ).to be_empty
31
44
  end
32
45
  end
33
46
 
34
47
  context "#values" do
35
48
 
49
+ let(:payload) { LogStash::Json.load(last_response.body) }
50
+
36
51
  it "return totals of plugins" do
37
52
  expect(payload["total"]).to eq(payload["plugins"].count)
38
53
  end
@@ -46,9 +61,25 @@ describe LogStash::Api::Modules::Plugins do
46
61
  end
47
62
 
48
63
  it "return non empty version values" do
49
- payload["plugins"].each do |plugin|
50
- expect(plugin["version"]).not_to be_empty
51
- end
64
+ expect(JSON::Validator.fully_validate(
65
+ { "properties" => { "plugins" => {
66
+ "type" => "array",
67
+ "items" => [
68
+ {
69
+ "type" => "object",
70
+ "properties" => {
71
+ "version" => {
72
+ "type" => "string",
73
+ "minLength" => 1
74
+ }
75
+ },
76
+ "required" => ["version"]
77
+ }
78
+ ],
79
+ "minItems" => 1
80
+ } } },
81
+ last_response.body)
82
+ ).to be_empty
52
83
  end
53
84
  end
54
85
  end
@@ -3,7 +3,6 @@ require "spec_helper"
3
3
 
4
4
  require "sinatra"
5
5
  require "logstash/api/modules/root"
6
- require "logstash/json"
7
6
 
8
7
  describe LogStash::Api::Modules::Root do
9
8
  include_context "api setup"
@@ -1,4 +1,5 @@
1
1
  require "logstash/api/rack_app"
2
+ require "json-schema"
2
3
  require "rack/test"
3
4
 
4
5
  describe LogStash::Api::RackApp do
@@ -55,7 +56,7 @@ describe LogStash::Api::RackApp do
55
56
  end
56
57
 
57
58
  it "should return valid JSON" do
58
- expect { LogStash::Json.load(last_response.body) }.not_to raise_error
59
+ expect(JSON::Validator.validate({}, last_response.body)).to eq(true)
59
60
  end
60
61
 
61
62
  it "should log the error" do
@@ -10,6 +10,8 @@ describe LogStash::Compiler do
10
10
 
11
11
  let(:source_protocol) { "test_proto" }
12
12
 
13
+ let(:settings) { mock_settings({}) }
14
+
13
15
  # Static import of these useful enums
14
16
  INPUT = Java::OrgLogstashConfigIr::PluginDefinition::Type::INPUT
15
17
  FILTER = Java::OrgLogstashConfigIr::PluginDefinition::Type::FILTER
@@ -28,8 +30,8 @@ describe LogStash::Compiler do
28
30
 
29
31
  describe "compiling to Pipeline" do
30
32
  subject(:source_id) { "fake_sourcefile" }
31
- let(:source_with_metadata) { org.logstash.common.SourceWithMetadata.new(source_protocol, source_id, source) }
32
- subject(:compiled) { described_class.compile_pipeline(source_with_metadata) }
33
+ let(:source_with_metadata) { org.logstash.common.SourceWithMetadata.new(source_protocol, source_id, 0, 0, source) }
34
+ subject(:compiled) { puts "PCOMP"; described_class.compile_pipeline(source_with_metadata, settings) }
33
35
 
34
36
  describe "compiling multiple sources" do
35
37
  let(:sources) do
@@ -38,13 +40,18 @@ describe LogStash::Compiler do
38
40
  "input { input_1 {} } filter { filter_1 {} } output { output_1 {} }"
39
41
  ]
40
42
  end
43
+
41
44
  let(:sources_with_metadata) do
42
45
  sources.map.with_index do |source, idx|
43
- org.logstash.common.SourceWithMetadata.new("#{source_protocol}_#{idx}", "#{source_id}_#{idx}", source)
46
+ org.logstash.common.SourceWithMetadata.new("#{source_protocol}_#{idx}", "#{source_id}_#{idx}", 0, 0, source)
44
47
  end
45
48
  end
46
49
 
47
- subject(:pipeline) { described_class.compile_sources(*sources_with_metadata) }
50
+ subject(:pipeline) { described_class.compile_sources(sources_with_metadata, settings) }
51
+
52
+ it "should generate a hash" do
53
+ expect(pipeline.unique_hash).to be_a(String)
54
+ end
48
55
 
49
56
  it "should compile cleanly" do
50
57
  expect(pipeline).to be_a(org.logstash.config.ir.PipelineIR)
@@ -56,7 +63,8 @@ describe LogStash::Compiler do
56
63
 
57
64
  describe "applying protocol and id metadata" do
58
65
  it "should apply the correct source metadata to all components" do
59
- pipeline.plugin_vertices.each do |pv|
66
+ # TODO: seems to be a jruby regression we cannot currently call each on a stream
67
+ pipeline.get_plugin_vertices.each do |pv|
60
68
  name_idx = pv.plugin_definition.name.split("_").last
61
69
  source_protocol_idx = pv.source_with_metadata.protocol.split("_").last
62
70
  source_id_idx = pv.source_with_metadata.id.split("_").last
@@ -91,9 +99,48 @@ describe LogStash::Compiler do
91
99
 
92
100
  describe "compiling imperative" do
93
101
  let(:source_id) { "fake_sourcefile" }
94
- let(:source_with_metadata) { org.logstash.common.SourceWithMetadata.new(source_protocol, source_id, source) }
95
- subject(:compiled) { described_class.compile_imperative(source_with_metadata) }
102
+ let(:source_with_metadata) { org.logstash.common.SourceWithMetadata.new(source_protocol, source_id, 0, 0, source) }
103
+ subject(:compiled) { described_class.compile_imperative(source_with_metadata, settings) }
104
+
105
+ context "when config.support_escapes" do
106
+ let(:parser) { LogStashCompilerLSCLGrammarParser.new }
107
+
108
+ let(:processed_value) { 'The computer says, "No"' }
109
+
110
+ let(:source) {
111
+ %q(
112
+ input {
113
+ foo {
114
+ bar => "The computer says, \"No\""
115
+ }
116
+ }
117
+ )
118
+ }
119
+
120
+ let(:compiled_string) do
121
+ compiled[:input].toGraph.vertices.toArray.first.getPluginDefinition.arguments["bar"]
122
+ end
123
+
124
+ before do
125
+ settings.set_value("config.support_escapes", process_escape_sequences)
126
+ end
96
127
 
128
+ context "is enabled" do
129
+ let(:process_escape_sequences) { true }
130
+
131
+ it "should process escape sequences" do
132
+ expect(compiled_string).to be == processed_value
133
+ end
134
+ end
135
+
136
+ context "is false" do
137
+ let(:process_escape_sequences) { false }
138
+
139
+ it "should not process escape sequences" do
140
+ expect(compiled_string).not_to be == processed_value
141
+ end
142
+ end
143
+ end
97
144
  describe "an empty file" do
98
145
  let(:source) { "input {} output {}" }
99
146