logstash-core 5.6.16-java → 6.0.0.alpha1-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 (156) hide show
  1. checksums.yaml +4 -4
  2. data/gemspec_jars.rb +4 -7
  3. data/lib/logstash-core/logstash-core.jar +0 -0
  4. data/lib/logstash-core/version.rb +4 -8
  5. data/lib/logstash-core_jars.rb +12 -26
  6. data/lib/logstash/agent.rb +261 -246
  7. data/lib/logstash/api/commands/default_metadata.rb +1 -1
  8. data/lib/logstash/api/commands/hot_threads_reporter.rb +5 -11
  9. data/lib/logstash/api/commands/node.rb +3 -2
  10. data/lib/logstash/api/commands/stats.rb +3 -2
  11. data/lib/logstash/bootstrap_check/bad_java.rb +16 -0
  12. data/lib/logstash/bootstrap_check/bad_ruby.rb +12 -0
  13. data/lib/logstash/bootstrap_check/default_config.rb +17 -0
  14. data/lib/logstash/compiler.rb +38 -0
  15. data/lib/logstash/compiler/lscl.rb +566 -0
  16. data/lib/logstash/compiler/lscl/lscl_grammar.rb +3503 -0
  17. data/lib/logstash/compiler/treetop_monkeypatches.rb +92 -0
  18. data/lib/logstash/config/config_ast.rb +4 -82
  19. data/lib/logstash/config/mixin.rb +73 -41
  20. data/lib/logstash/config/pipeline_config.rb +48 -0
  21. data/lib/logstash/config/source/base.rb +16 -0
  22. data/lib/logstash/config/source/local.rb +215 -0
  23. data/lib/logstash/config/source_loader.rb +125 -0
  24. data/lib/logstash/converge_result.rb +103 -0
  25. data/lib/logstash/environment.rb +6 -19
  26. data/lib/logstash/errors.rb +2 -0
  27. data/lib/logstash/execution_context.rb +4 -7
  28. data/lib/logstash/filter_delegator.rb +6 -9
  29. data/lib/logstash/inputs/base.rb +0 -2
  30. data/lib/logstash/instrument/collector.rb +5 -7
  31. data/lib/logstash/instrument/metric_store.rb +12 -12
  32. data/lib/logstash/instrument/metric_type/mean.rb +0 -5
  33. data/lib/logstash/instrument/namespaced_metric.rb +0 -4
  34. data/lib/logstash/instrument/namespaced_null_metric.rb +0 -4
  35. data/lib/logstash/instrument/null_metric.rb +0 -10
  36. data/lib/logstash/instrument/periodic_poller/cgroup.rb +85 -168
  37. data/lib/logstash/instrument/periodic_poller/jvm.rb +5 -5
  38. data/lib/logstash/instrument/periodic_poller/pq.rb +3 -7
  39. data/lib/logstash/instrument/periodic_pollers.rb +1 -3
  40. data/lib/logstash/instrument/wrapped_write_client.rb +24 -33
  41. data/lib/logstash/logging/logger.rb +15 -47
  42. data/lib/logstash/namespace.rb +0 -1
  43. data/lib/logstash/output_delegator.rb +5 -7
  44. data/lib/logstash/outputs/base.rb +0 -2
  45. data/lib/logstash/pipeline.rb +159 -87
  46. data/lib/logstash/pipeline_action.rb +13 -0
  47. data/lib/logstash/pipeline_action/base.rb +29 -0
  48. data/lib/logstash/pipeline_action/create.rb +47 -0
  49. data/lib/logstash/pipeline_action/reload.rb +48 -0
  50. data/lib/logstash/pipeline_action/stop.rb +23 -0
  51. data/lib/logstash/plugin.rb +0 -1
  52. data/lib/logstash/plugins/hooks_registry.rb +6 -0
  53. data/lib/logstash/plugins/registry.rb +0 -1
  54. data/lib/logstash/program.rb +14 -0
  55. data/lib/logstash/queue_factory.rb +5 -1
  56. data/lib/logstash/runner.rb +58 -80
  57. data/lib/logstash/settings.rb +3 -27
  58. data/lib/logstash/state_resolver.rb +41 -0
  59. data/lib/logstash/util/java_version.rb +6 -0
  60. data/lib/logstash/util/safe_uri.rb +12 -148
  61. data/lib/logstash/util/thread_dump.rb +4 -7
  62. data/lib/logstash/util/wrapped_acked_queue.rb +36 -39
  63. data/lib/logstash/util/wrapped_synchronous_queue.rb +29 -39
  64. data/lib/logstash/version.rb +10 -8
  65. data/locales/en.yml +3 -54
  66. data/logstash-core.gemspec +8 -35
  67. data/spec/{logstash/api/modules → api/lib/api}/logging_spec.rb +10 -1
  68. data/spec/{logstash/api/modules → api/lib/api}/node_plugins_spec.rb +2 -1
  69. data/spec/{logstash/api/modules → api/lib/api}/node_spec.rb +3 -3
  70. data/spec/{logstash/api/modules → api/lib/api}/node_stats_spec.rb +3 -7
  71. data/spec/{logstash/api/modules → api/lib/api}/plugins_spec.rb +3 -4
  72. data/spec/{logstash/api/modules → api/lib/api}/root_spec.rb +2 -2
  73. data/spec/api/lib/api/support/resource_dsl_methods.rb +87 -0
  74. data/spec/{logstash/api/commands/stats_spec.rb → api/lib/commands/stats.rb} +2 -7
  75. data/spec/{logstash/api → api/lib}/errors_spec.rb +1 -1
  76. data/spec/{logstash/api → api/lib}/rack_app_spec.rb +0 -0
  77. data/spec/api/spec_helper.rb +106 -0
  78. data/spec/logstash/agent/converge_spec.rb +286 -0
  79. data/spec/logstash/agent/metrics_spec.rb +244 -0
  80. data/spec/logstash/agent_spec.rb +213 -225
  81. data/spec/logstash/compiler/compiler_spec.rb +584 -0
  82. data/spec/logstash/config/config_ast_spec.rb +8 -47
  83. data/spec/logstash/config/mixin_spec.rb +2 -42
  84. data/spec/logstash/config/pipeline_config_spec.rb +75 -0
  85. data/spec/logstash/config/source/local_spec.rb +395 -0
  86. data/spec/logstash/config/source_loader_spec.rb +122 -0
  87. data/spec/logstash/converge_result_spec.rb +179 -0
  88. data/spec/logstash/event_spec.rb +0 -66
  89. data/spec/logstash/execution_context_spec.rb +8 -12
  90. data/spec/logstash/filter_delegator_spec.rb +12 -24
  91. data/spec/logstash/inputs/base_spec.rb +7 -5
  92. data/spec/logstash/instrument/periodic_poller/cgroup_spec.rb +92 -225
  93. data/spec/logstash/instrument/periodic_poller/jvm_spec.rb +1 -1
  94. data/spec/logstash/instrument/periodic_poller/os_spec.rb +32 -29
  95. data/spec/logstash/instrument/wrapped_write_client_spec.rb +33 -33
  96. data/spec/logstash/legacy_ruby_event_spec.rb +13 -4
  97. data/spec/logstash/output_delegator_spec.rb +11 -20
  98. data/spec/logstash/outputs/base_spec.rb +7 -5
  99. data/spec/logstash/pipeline_action/create_spec.rb +83 -0
  100. data/spec/logstash/pipeline_action/reload_spec.rb +83 -0
  101. data/spec/logstash/pipeline_action/stop_spec.rb +37 -0
  102. data/spec/logstash/pipeline_pq_file_spec.rb +1 -1
  103. data/spec/logstash/pipeline_spec.rb +81 -137
  104. data/spec/logstash/plugin_spec.rb +2 -1
  105. data/spec/logstash/plugins/hooks_registry_spec.rb +6 -0
  106. data/spec/logstash/queue_factory_spec.rb +13 -1
  107. data/spec/logstash/runner_spec.rb +29 -140
  108. data/spec/logstash/settings/writable_directory_spec.rb +10 -13
  109. data/spec/logstash/settings_spec.rb +0 -91
  110. data/spec/logstash/state_resolver_spec.rb +156 -0
  111. data/spec/logstash/timestamp_spec.rb +2 -6
  112. data/spec/logstash/util/java_version_spec.rb +22 -0
  113. data/spec/logstash/util/safe_uri_spec.rb +0 -56
  114. data/spec/logstash/util/wrapped_synchronous_queue_spec.rb +22 -0
  115. data/spec/support/helpers.rb +9 -11
  116. data/spec/support/matchers.rb +96 -6
  117. data/spec/support/mocks_classes.rb +80 -0
  118. data/spec/support/shared_contexts.rb +2 -27
  119. metadata +100 -149
  120. data/lib/logstash/config/loader.rb +0 -107
  121. data/lib/logstash/config/modules_common.rb +0 -103
  122. data/lib/logstash/config/source/modules.rb +0 -55
  123. data/lib/logstash/config/string_escape.rb +0 -27
  124. data/lib/logstash/dependency_report.rb +0 -131
  125. data/lib/logstash/dependency_report_runner.rb +0 -17
  126. data/lib/logstash/elasticsearch_client.rb +0 -142
  127. data/lib/logstash/instrument/global_metrics.rb +0 -13
  128. data/lib/logstash/instrument/periodic_poller/dlq.rb +0 -24
  129. data/lib/logstash/modules/cli_parser.rb +0 -74
  130. data/lib/logstash/modules/elasticsearch_config.rb +0 -22
  131. data/lib/logstash/modules/elasticsearch_importer.rb +0 -37
  132. data/lib/logstash/modules/elasticsearch_resource.rb +0 -10
  133. data/lib/logstash/modules/file_reader.rb +0 -36
  134. data/lib/logstash/modules/kibana_base.rb +0 -24
  135. data/lib/logstash/modules/kibana_client.rb +0 -124
  136. data/lib/logstash/modules/kibana_config.rb +0 -105
  137. data/lib/logstash/modules/kibana_dashboards.rb +0 -36
  138. data/lib/logstash/modules/kibana_importer.rb +0 -17
  139. data/lib/logstash/modules/kibana_resource.rb +0 -10
  140. data/lib/logstash/modules/kibana_settings.rb +0 -40
  141. data/lib/logstash/modules/logstash_config.rb +0 -120
  142. data/lib/logstash/modules/resource_base.rb +0 -38
  143. data/lib/logstash/modules/scaffold.rb +0 -52
  144. data/lib/logstash/modules/settings_merger.rb +0 -23
  145. data/lib/logstash/modules/util.rb +0 -17
  146. data/lib/logstash/util/dead_letter_queue_manager.rb +0 -61
  147. data/lib/logstash/util/environment_variables.rb +0 -43
  148. data/spec/logstash/config/loader_spec.rb +0 -38
  149. data/spec/logstash/config/string_escape_spec.rb +0 -24
  150. data/spec/logstash/instrument/periodic_poller/dlq_spec.rb +0 -17
  151. data/spec/logstash/modules/logstash_config_spec.rb +0 -56
  152. data/spec/logstash/modules/scaffold_spec.rb +0 -234
  153. data/spec/logstash/pipeline_dlq_commit_spec.rb +0 -109
  154. data/spec/logstash/settings/splittable_string_array_spec.rb +0 -51
  155. data/spec/logstash/util/wrapped_acked_queue_spec.rb +0 -49
  156. data/versions-gem-copy.yml +0 -12
@@ -3,17 +3,17 @@ require "spec_helper"
3
3
  require "logstash/settings"
4
4
  require "tmpdir"
5
5
  require "socket" # for UNIXSocket
6
- require "fileutils"
7
6
 
8
7
  describe LogStash::Setting::WritableDirectory do
8
+ let(:mode_rx) { 0555 }
9
9
  # linux is 108, Macos is 104, so use a safe value
10
10
  # Stud::Temporary.pathname, will exceed that size without adding anything
11
11
  let(:parent) { File.join(Dir.tmpdir, Time.now.to_f.to_s) }
12
12
  let(:path) { File.join(parent, "fancy") }
13
13
 
14
14
  before { Dir.mkdir(parent) }
15
- after { Dir.exist?(path) && FileUtils.rm_rf(path)}
16
- after { FileUtils.rm_rf(parent) }
15
+ after { Dir.exist?(path) && Dir.unlink(path) rescue nil }
16
+ after { Dir.unlink(parent) }
17
17
 
18
18
  shared_examples "failure" do
19
19
  before { subject.set(path) }
@@ -44,9 +44,8 @@ describe LogStash::Setting::WritableDirectory do
44
44
  end
45
45
 
46
46
  context "and the directory cannot be created" do
47
+ before { File.chmod(mode_rx, parent) }
47
48
  it "should fail" do
48
- # using chmod does not work on Windows better mock and_raise("message")
49
- expect(FileUtils).to receive(:mkdir_p).and_raise("foobar")
50
49
  expect { subject.value }.to raise_error
51
50
  end
52
51
  end
@@ -67,8 +66,7 @@ describe LogStash::Setting::WritableDirectory do
67
66
  end
68
67
 
69
68
  context "but is not writable" do
70
- # chmod does not work on Windows, mock writable? instead
71
- before { expect(File).to receive(:writable?).and_return(false) }
69
+ before { File.chmod(0, path) }
72
70
  it_behaves_like "failure"
73
71
  end
74
72
  end
@@ -86,13 +84,12 @@ describe LogStash::Setting::WritableDirectory do
86
84
  before { socket } # realize `socket` value
87
85
  after { socket.close }
88
86
  it_behaves_like "failure"
89
- end unless LogStash::Environment.windows?
87
+ end
90
88
 
91
-
92
89
  context "but is a symlink" do
93
- before { FileUtils.symlink("whatever", path) }
90
+ before { File::symlink("whatever", path) }
94
91
  it_behaves_like "failure"
95
- end unless LogStash::Environment.windows?
92
+ end
96
93
  end
97
94
 
98
95
  context "when the directory is missing" do
@@ -117,8 +114,8 @@ describe LogStash::Setting::WritableDirectory do
117
114
 
118
115
  context "and cannot be created" do
119
116
  before do
120
- # chmod does not work on Windows, mock writable? instead
121
- expect(File).to receive(:writable?).and_return(false)
117
+ # Remove write permission on the parent
118
+ File.chmod(mode_rx, parent)
122
119
  end
123
120
 
124
121
  it_behaves_like "failure"
@@ -1,6 +1,5 @@
1
1
  # encoding: utf-8
2
2
  require "spec_helper"
3
- require "logstash/util/environment_variables"
4
3
  require "logstash/settings"
5
4
  require "fileutils"
6
5
 
@@ -147,94 +146,4 @@ describe LogStash::Settings do
147
146
  end
148
147
  end
149
148
  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
240
149
  end
@@ -0,0 +1,156 @@
1
+ # encoding: utf-8
2
+ require "spec_helper"
3
+ require_relative "../support/helpers"
4
+ require_relative "../support/matchers"
5
+ require "logstash/state_resolver"
6
+ require "logstash/config/pipeline_config"
7
+ require "logstash/instrument/null_metric"
8
+ require "logstash/pipeline"
9
+ require "ostruct"
10
+ require "digest"
11
+
12
+ describe LogStash::StateResolver do
13
+ subject { described_class.new(metric) }
14
+ let(:metric) { LogStash::Instrument::NullMetric.new }
15
+
16
+ before do
17
+ clear_data_dir
18
+ end
19
+
20
+ after do
21
+ # ensure that the the created pipeline are closed
22
+ running_pipelines.each { |_, pipeline| pipeline.close }
23
+ end
24
+
25
+ context "when no pipeline is running" do
26
+ let(:running_pipelines) { {} }
27
+
28
+ context "no pipeline configs is received" do
29
+ let(:pipeline_configs) { [] }
30
+
31
+ it "returns no action" do
32
+ expect(subject.resolve(running_pipelines, pipeline_configs).size).to eq(0)
33
+ end
34
+ end
35
+
36
+ context "we receive some pipeline configs" do
37
+ let(:pipeline_configs) { [mock_pipeline_config(:hello_world)] }
38
+
39
+ it "returns some actions" do
40
+ expect(subject.resolve(running_pipelines, pipeline_configs)).to have_actions(
41
+ [:create, :hello_world],
42
+ )
43
+ end
44
+ end
45
+ end
46
+
47
+ context "when some pipeline are running" do
48
+ context "when a pipeline is running" do
49
+ let(:running_pipelines) { { :main => mock_pipeline(:main) } }
50
+
51
+ context "when the pipeline config contains a new one and the existing" do
52
+ let(:pipeline_configs) { [mock_pipeline_config(:hello_world), mock_pipeline_config(:main)] }
53
+
54
+ it "creates the new one and keep the other one" do
55
+ expect(subject.resolve(running_pipelines, pipeline_configs)).to have_actions(
56
+ [:create, :hello_world],
57
+ )
58
+ end
59
+
60
+ context "when the pipeline config contains only the new one" do
61
+ let(:pipeline_configs) { [mock_pipeline_config(:hello_world)] }
62
+
63
+ it "creates the new one and stop the old one one" do
64
+ expect(subject.resolve(running_pipelines, pipeline_configs)).to have_actions(
65
+ [:create, :hello_world],
66
+ [:stop, :main]
67
+ )
68
+ end
69
+ end
70
+
71
+ context "when the pipeline config contains no pipeline" do
72
+ let(:pipeline_configs) { [] }
73
+
74
+ it "stops the old one one" do
75
+ expect(subject.resolve(running_pipelines, pipeline_configs)).to have_actions(
76
+ [:stop, :main]
77
+ )
78
+ end
79
+ end
80
+
81
+ context "when pipeline config contains an updated pipeline" do
82
+ let(:pipeline_configs) { [mock_pipeline_config(:main, "input { generator {}}")] }
83
+
84
+ it "reloads the old one one" do
85
+ expect(subject.resolve(running_pipelines, pipeline_configs)).to have_actions(
86
+ [:reload, :main]
87
+ )
88
+ end
89
+ end
90
+ end
91
+ end
92
+
93
+ context "when we have a lot of pipeline running" do
94
+ let(:running_pipelines) do
95
+ {
96
+ :main1 => mock_pipeline(:main1),
97
+ :main2 => mock_pipeline(:main2),
98
+ :main3 => mock_pipeline(:main3),
99
+ :main4 => mock_pipeline(:main4),
100
+ :main5 => mock_pipeline(:main5),
101
+ :main6 => mock_pipeline(:main6),
102
+ }
103
+ end
104
+
105
+ context "without system pipeline" do
106
+ let(:pipeline_configs) do
107
+ [
108
+ mock_pipeline_config(:main1),
109
+ mock_pipeline_config(:main9),
110
+ mock_pipeline_config(:main5, "input { generator {}}"),
111
+ mock_pipeline_config(:main3, "input { generator {}}"),
112
+ mock_pipeline_config(:main7)
113
+ ]
114
+ end
115
+
116
+ it "generates actions required to converge" do
117
+ expect(subject.resolve(running_pipelines, pipeline_configs)).to have_actions(
118
+ [:create, :main7],
119
+ [:create, :main9],
120
+ [:reload, :main3],
121
+ [:reload, :main5],
122
+ [:stop, :main2],
123
+ [:stop, :main4],
124
+ [:stop, :main6]
125
+ )
126
+ end
127
+ end
128
+
129
+ context "with system pipeline" do
130
+ let(:pipeline_configs) do
131
+ [
132
+ mock_pipeline_config(:main1),
133
+ mock_pipeline_config(:main9),
134
+ mock_pipeline_config(:main5, "input { generator {}}"),
135
+ mock_pipeline_config(:main3, "input { generator {}}"),
136
+ mock_pipeline_config(:main7),
137
+ mock_pipeline_config(:monitoring, "input { generator {}}", { "pipeline.system" => true }),
138
+ ]
139
+ end
140
+
141
+ it "creates the system pipeline before user defined pipelines" do
142
+ expect(subject.resolve(running_pipelines, pipeline_configs)).to have_actions(
143
+ [:create, :monitoring],
144
+ [:create, :main7],
145
+ [:create, :main9],
146
+ [:reload, :main3],
147
+ [:reload, :main5],
148
+ [:stop, :main2],
149
+ [:stop, :main4],
150
+ [:stop, :main6]
151
+ )
152
+ end
153
+ end
154
+ end
155
+ end
156
+ end
@@ -7,10 +7,10 @@ describe LogStash::Timestamp do
7
7
  context "constructors" do
8
8
  it "should work" do
9
9
  t = LogStash::Timestamp.new
10
- expect(t.time.to_i).to be_within(2).of Time.now.to_i
10
+ expect(t.time.to_i).to be_within(1).of Time.now.to_i
11
11
 
12
12
  t = LogStash::Timestamp.now
13
- expect(t.time.to_i).to be_within(2).of Time.now.to_i
13
+ expect(t.time.to_i).to be_within(1).of Time.now.to_i
14
14
 
15
15
  now = Time.now.utc
16
16
  t = LogStash::Timestamp.new(now)
@@ -30,10 +30,6 @@ describe LogStash::Timestamp do
30
30
  expect{LogStash::Timestamp.new("foobar")}.to raise_error
31
31
  end
32
32
 
33
- it "should copy itself correctly on clone and dup" do
34
- expect(LogStash::Timestamp.now.clone.to_java).not_to be_nil
35
- expect(LogStash::Timestamp.now.dup.to_java).not_to be_nil
36
- end
37
33
  end
38
34
 
39
35
  end
@@ -39,6 +39,28 @@ describe "LogStash::Util::JavaVersion" do
39
39
  expect(mod.bad_java_version?("pwi3270sr9fp10-20150708_01 (SR9 FP10)")).to be_falsey
40
40
  end
41
41
 
42
+ context ".validate_java_version!" do
43
+ context "with good version" do
44
+ before do
45
+ expect(mod).to receive(:version).and_return("1.8.0")
46
+ end
47
+
48
+ it "doesn't raise an error" do
49
+ expect { mod.validate_java_version! }.not_to raise_error
50
+ end
51
+ end
52
+
53
+ context "with a bad version" do
54
+ before do
55
+ expect(mod).to receive(:version).and_return("1.7.0").twice
56
+ end
57
+
58
+ it "raises an error" do
59
+ expect { mod.validate_java_version! }.to raise_error RuntimeError, /Java version 1.8.0 or later/
60
+ end
61
+ end
62
+ end
63
+
42
64
  describe "parsing java versions" do
43
65
  it "should return nil on a nil version" do
44
66
  expect(mod.parse_java_version(nil)).to be_nil
@@ -16,61 +16,5 @@ module LogStash module Util
16
16
  expect(cloned_safe_uri.query).to eq("a=b")
17
17
  end
18
18
  end
19
-
20
- describe "handling escapable fields" do
21
- let(:user) { "u%20" }
22
- let(:password) { "p%20ss" }
23
- let(:path) { "/a%20/path" }
24
- let(:query) { "a%20query&another=es%3dq" }
25
- let(:fragment) { "spacey%20fragment" }
26
- subject { LogStash::Util::SafeURI.new("http://#{user}:#{password}@example.net#{path}?#{query}\##{fragment}") }
27
-
28
- [:user, :password, :path, :query, :fragment].each do |field|
29
- it "should not escape the #{field} field" do
30
- expected = self.send(field)
31
- expect(subject.send(field)).to eq(expected)
32
- end
33
- end
34
- end
35
-
36
- describe "#initialize" do
37
- context 'when host is required' do
38
- MALFORMED_URIS = ['http:/user:pass@localhost:9600', 'http:/localhost', 'http:/localhost:9600', 'h;localhost', 'http:://localhost']
39
-
40
- context 'malformed uris via string' do
41
- MALFORMED_URIS.each do |arg|
42
- it "#{arg}: should raise an error" do
43
- expect{LogStash::Util::SafeURI.new(arg)}.to raise_error(ArgumentError)
44
- end
45
- end
46
- end
47
-
48
- context 'malformed uris via java.net.URI' do
49
- MALFORMED_URIS.each do |arg|
50
- it "#{arg}: should raise an error" do
51
- java_uri = java.net.URI.new(arg)
52
- expect{LogStash::Util::SafeURI.new(java_uri)}.to raise_error(ArgumentError)
53
- end
54
- end
55
- end
56
-
57
- context 'malformed uris via Ruby URI' do
58
- MALFORMED_URIS.each do |arg|
59
- it "#{arg}: should raise an error" do
60
- ruby_uri = URI.parse(arg)
61
- expect{LogStash::Util::SafeURI.new(ruby_uri)}.to raise_error(ArgumentError)
62
- end
63
- end
64
- end
65
-
66
- context 'uris with a valid host' do
67
- ['http://user:pass@notlocalhost:9600', 'http://notlocalhost', 'https://notlocalhost:9600', '//notlocalhost', 'notlocalhost', 'notlocalhost:9200'].each do |arg|
68
- it "#{arg}: should resolve host correctly" do
69
- expect(LogStash::Util::SafeURI.new(arg).host).to eq('notlocalhost')
70
- end
71
- end
72
- end
73
- end
74
- end
75
19
  end
76
20
  end end
@@ -4,6 +4,28 @@ require "logstash/util/wrapped_synchronous_queue"
4
4
  require "logstash/instrument/collector"
5
5
 
6
6
  describe LogStash::Util::WrappedSynchronousQueue do
7
+ context "#offer" do
8
+ context "queue is blocked" do
9
+ it "fails and give feedback" do
10
+ expect(subject.offer("Bonjour", 2)).to be_falsey
11
+ end
12
+ end
13
+
14
+ context "queue is not blocked" do
15
+ before do
16
+ @consumer = Thread.new { loop { subject.take } }
17
+ sleep(0.1)
18
+ end
19
+
20
+ after do
21
+ @consumer.kill
22
+ end
23
+
24
+ it "inserts successfully" do
25
+ expect(subject.offer("Bonjour", 20)).to be_truthy
26
+ end
27
+ end
28
+ end
7
29
 
8
30
  describe "queue clients" do
9
31
  context "when requesting a write client" do