Skip to content

Commit b56b87c

Browse files
committed
Ecs-ify unit test
Unit tests were failing due to the setting of ECS by default in Logstash v8. This commit updates the unit tests to work when ECS is disabled, or set to v1/v8, and to work with the default logstash distribution
1 parent bf2182a commit b56b87c

File tree

1 file changed

+128
-11
lines changed

1 file changed

+128
-11
lines changed

spec/filters/grok_spec.rb

Lines changed: 128 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,20 @@ def self.sample(message, &block)
2929
let(:config) { { "match" => { "message" => "%{SYSLOGLINE}" }, "overwrite" => [ "message" ] } }
3030
let(:message) { 'Mar 16 00:01:25 evita postfix/smtpd[1713]: connect from camomile.cloud9.net[168.100.1.3]' }
3131

32-
it "matches pattern" do
33-
expect( event.get("tags") ).to be nil
34-
expect( event.get("logsource") ).to eql "evita"
35-
expect( event.get("timestamp") ).to eql "Mar 16 00:01:25"
36-
expect( event.get("message") ).to eql "connect from camomile.cloud9.net[168.100.1.3]"
37-
expect( event.get("program") ).to eql "postfix/smtpd"
38-
expect( event.get("pid") ).to eql "1713"
32+
context "in ecs mode disabled" do
33+
let(:config) { super().merge('ecs_compatibility' => 'disabled') }
34+
35+
it "matches pattern" do
36+
expect( event.get("tags") ).to be nil
37+
expect( event.get("timestamp") ).to eql "Mar 16 00:01:25"
38+
expect( event.get("logsource") ).to eql "evita"
39+
expect( event.get("program") ).to eql "postfix/smtpd"
40+
expect( event.get("pid") ).to eql "1713"
41+
expect( event.get("message") ).to eql "connect from camomile.cloud9.net[168.100.1.3]"
42+
end
3943
end
4044

45+
4146
%w(v1 v8).each do |ecs_mode|
4247
context "in ecs mode #{ecs_mode}" do
4348
let(:config) { super().merge('ecs_compatibility' => ecs_mode) }
@@ -59,7 +64,7 @@ def self.sample(message, &block)
5964
expect( event.get("grok") ).to_not be nil
6065
expect( event.get("[grok][timestamp]") ).to eql "Mar 16 00:01:25"
6166
expect( event.get("[grok][message]") ).to eql "connect from camomile.cloud9.net[168.100.1.3]"
62-
expect( event.get("[grok][pid]") ).to eql "1713"
67+
expect( event.get("[grok][process][pid]") ).to eql 1713
6368
end
6469
end
6570

@@ -70,14 +75,15 @@ def self.sample(message, &block)
7075
expect( event.get("message") ).to eql message
7176
expect( event.get("tags") ).to be nil
7277
expect( event.get("grok") ).to be nil
73-
expect( event.get("[@metadata][grok][logsource]") ).to eql "evita"
78+
expect( event.get("[@metadata][grok][host][hostname]") ).to eql "evita"
7479
expect( event.get("[@metadata][grok][message]") ).to eql "connect from camomile.cloud9.net[168.100.1.3]"
7580
end
7681
end
7782
end
7883

79-
describe "ietf 5424 syslog line" do
80-
let(:config) { { "match" => { "message" => "%{SYSLOG5424LINE}" } } }
84+
%w(disabled).each do |ecs_mode|
85+
describe "ietf 5424 syslog line" do
86+
let(:config) { { 'ecs_compatibility' => ecs_mode, "match" => { "message" => "%{SYSLOG5424LINE}" } } }
8187

8288
sample "<191>1 2009-06-30T18:30:00+02:00 paxton.local grokdebug 4123 - [id1 foo=\"bar\"][id2 baz=\"something\"] Hello, syslog." do
8389
expect( event.get("tags") ).to be nil
@@ -185,6 +191,116 @@ def self.sample(message, &block)
185191
expect( event.get("syslog5424_sd") ).to be nil
186192
expect( event.get("syslog5424_msg") ).to eql "Appname is nil"
187193
end
194+
end
195+
end
196+
%w(v1 v8).each do |ecs_mode|
197+
describe "ietf 5424 syslog line" do
198+
let(:config) { { "overwrite" => [ "message" ], 'ecs_compatibility' => ecs_mode, "match" => { "message" => "%{SYSLOG5424LINE}" } } }
199+
200+
sample "<191>1 2009-06-30T18:30:00+02:00 paxton.local grokdebug 4123 - [id1 foo=\"bar\"][id2 baz=\"something\"] Hello, syslog." do
201+
expect( event.get("tags") ).to be nil
202+
expect( event.get("[log][syslog][priority]") ).to eql 191
203+
expect( event.get("[system][syslog][version]") ).to eql "1"
204+
expect( event.get("timestamp") ).to eql "2009-06-30T18:30:00+02:00"
205+
expect( event.get("[host][hostname]") ).to eql "paxton.local"
206+
expect( event.get("[process][name]") ).to eql "grokdebug"
207+
expect( event.get("[process][pid]") ).to eql 4123
208+
expect( event.get("[event][code]") ).to be nil
209+
expect( event.get("[system][syslog][structured_data]") ).to eql "[id1 foo=\"bar\"][id2 baz=\"something\"]"
210+
expect( event.get("message") ).to eql "Hello, syslog."
211+
end
212+
213+
sample "<191>1 2009-06-30T18:30:00+02:00 paxton.local grokdebug - - [id1 foo=\"bar\"] No process ID." do
214+
expect( event.get("tags") ).to be nil
215+
expect( event.get("[log][syslog][priority]") ).to eql 191
216+
expect( event.get("[system][syslog][version]") ).to eql "1"
217+
expect( event.get("timestamp") ).to eql "2009-06-30T18:30:00+02:00"
218+
expect( event.get("[host][hostname]") ).to eql "paxton.local"
219+
expect( event.get("[process][name]") ).to eql "grokdebug"
220+
expect( event.get("[process][pid]") ).to be nil
221+
expect( event.get("[event][code]") ).to be nil
222+
expect( event.get("[system][syslog][structured_data]") ).to eql "[id1 foo=\"bar\"]"
223+
expect( event.get("message") ).to eql "No process ID."
224+
end
225+
226+
sample "<191>1 2009-06-30T18:30:00+02:00 paxton.local grokdebug 4123 - - No structured data." do
227+
expect( event.get("tags") ).to be nil
228+
expect( event.get("[log][syslog][priority]") ).to eql 191
229+
expect( event.get("[system][syslog][version]") ).to eql "1"
230+
expect( event.get("timestamp") ).to eql "2009-06-30T18:30:00+02:00"
231+
expect( event.get("[host][hostname]") ).to eql "paxton.local"
232+
expect( event.get("[process][name]") ).to eql "grokdebug"
233+
expect( event.get("[process][pid]") ).to be 4123
234+
expect( event.get("[event][code]") ).to be nil
235+
expect( event.get("[system][syslog][structured_data]") ).to be nil
236+
expect( event.get("message") ).to eql "No structured data."
237+
end
238+
239+
sample "<191>1 2009-06-30T18:30:00+02:00 paxton.local grokdebug - - - No PID or SD." do
240+
expect( event.get("tags") ).to be nil
241+
expect( event.get("[log][syslog][priority]") ).to eql 191
242+
expect( event.get("[system][syslog][version]") ).to eql "1"
243+
expect( event.get("timestamp") ).to eql "2009-06-30T18:30:00+02:00"
244+
expect( event.get("[host][hostname]") ).to eql "paxton.local"
245+
expect( event.get("[process][name]") ).to eql "grokdebug"
246+
expect( event.get("[process][pid]") ).to be nil
247+
expect( event.get("[event][code]") ).to be nil
248+
expect( event.get("[system][syslog][structured_data]") ).to be nil
249+
expect( event.get("message") ).to eql "No PID or SD."
250+
end
251+
252+
sample "<191>1 2009-06-30T18:30:00+02:00 paxton.local grokdebug 4123 - Missing structured data." do
253+
expect( event.get("tags") ).to be nil
254+
expect( event.get("[process][pid]") ).to eql 4123
255+
expect( event.get("[event][code]") ).to be nil
256+
expect( event.get("[system][syslog][structured_data]") ).to be nil
257+
expect( event.get("message") ).to eql "Missing structured data."
258+
end
259+
260+
sample "<191>1 2009-06-30T18:30:00+02:00 paxton.local grokdebug 4123 - - Additional spaces." do
261+
expect( event.get("tags") ).to be nil
262+
expect( event.get("[process][name]") ).to eql "grokdebug"
263+
expect( event.get("[process][pid]") ).to be 4123
264+
expect( event.get("[event][code]") ).to be nil
265+
expect( event.get("[system][syslog][structured_data]") ).to be nil
266+
expect( event.get("message") ).to eql "Additional spaces."
267+
end
268+
269+
sample "<191>1 2009-06-30T18:30:00+02:00 paxton.local grokdebug 4123 - Additional spaces and missing SD." do
270+
expect( event.get("tags") ).to be nil
271+
expect( event.get("[process][name]") ).to eql "grokdebug"
272+
expect( event.get("[process][pid]") ).to be 4123
273+
expect( event.get("[event][code]") ).to be nil
274+
expect( event.get("[system][syslog][structured_data]") ).to be nil
275+
expect( event.get("message") ).to eql "Additional spaces and missing SD."
276+
end
277+
278+
sample "<30>1 2014-04-04T16:44:07+02:00 osctrl01 dnsmasq-dhcp 8048 - - Appname contains a dash" do
279+
expect( event.get("tags") ).to be nil
280+
expect( event.get("[log][syslog][priority]") ).to eql 30
281+
expect( event.get("[system][syslog][version]") ).to eql "1"
282+
expect( event.get("timestamp") ).to eql "2014-04-04T16:44:07+02:00"
283+
expect( event.get("[host][hostname]") ).to eql "osctrl01"
284+
expect( event.get("[process][name]") ).to eql "dnsmasq-dhcp"
285+
expect( event.get("[process][pid]") ).to be 8048
286+
expect( event.get("[event][code]") ).to be nil
287+
expect( event.get("[system][syslog][structured_data]") ).to be nil
288+
expect( event.get("message") ).to eql "Appname contains a dash"
289+
end
290+
291+
sample "<30>1 2014-04-04T16:44:07+02:00 osctrl01 - 8048 - - Appname is nil" do
292+
expect( event.get("tags") ).to be nil
293+
expect( event.get("[log][syslog][priority]") ).to eql 30
294+
expect( event.get("[system][syslog][version]") ).to eql "1"
295+
expect( event.get("timestamp") ).to eql "2014-04-04T16:44:07+02:00"
296+
expect( event.get("[host][hostname]") ).to eql "osctrl01"
297+
expect( event.get("[process][name]") ).to eql nil
298+
expect( event.get("[process][pid]") ).to be 8048
299+
expect( event.get("[event][code]") ).to be nil
300+
expect( event.get("[system][syslog][structured_data]") ).to be nil
301+
expect( event.get("message") ).to eql "Appname is nil"
302+
end
303+
end
188304
end
189305

190306
describe "parsing an event with multiple messages (array of strings)", if: false do
@@ -730,6 +846,7 @@ def self.sample(message, &block)
730846
end
731847
end
732848

849+
733850
describe "grok with inline pattern definition overwrites existing pattern definition" do
734851
let(:config) {
735852
{

0 commit comments

Comments
 (0)