fluentd 1.10.0 → 1.11.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of fluentd might be problematic. Click here for more details.

Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +117 -1
  3. data/CONTRIBUTING.md +1 -1
  4. data/README.md +4 -0
  5. data/docs/SECURITY_AUDIT.pdf +0 -0
  6. data/lib/fluent/command/debug.rb +1 -0
  7. data/lib/fluent/command/fluentd.rb +14 -1
  8. data/lib/fluent/config.rb +1 -0
  9. data/lib/fluent/daemonizer.rb +88 -0
  10. data/lib/fluent/log.rb +45 -6
  11. data/lib/fluent/match.rb +1 -1
  12. data/lib/fluent/plugin/in_dummy.rb +2 -2
  13. data/lib/fluent/plugin/in_forward.rb +2 -2
  14. data/lib/fluent/plugin/in_gc_stat.rb +16 -0
  15. data/lib/fluent/plugin/in_http.rb +2 -2
  16. data/lib/fluent/plugin/in_monitor_agent.rb +1 -1
  17. data/lib/fluent/plugin/in_syslog.rb +4 -4
  18. data/lib/fluent/plugin/in_tail.rb +3 -3
  19. data/lib/fluent/plugin/in_tail/position_file.rb +23 -6
  20. data/lib/fluent/plugin/in_unix.rb +77 -77
  21. data/lib/fluent/plugin/out_copy.rb +1 -1
  22. data/lib/fluent/plugin/out_file.rb +1 -1
  23. data/lib/fluent/plugin/out_forward.rb +23 -18
  24. data/lib/fluent/plugin/out_forward/load_balancer.rb +1 -1
  25. data/lib/fluent/plugin/out_http.rb +15 -2
  26. data/lib/fluent/plugin/parser_multiline.rb +1 -1
  27. data/lib/fluent/plugin/parser_syslog.rb +216 -55
  28. data/lib/fluent/plugin_helper/record_accessor.rb +14 -0
  29. data/lib/fluent/plugin_helper/service_discovery.rb +7 -0
  30. data/lib/fluent/plugin_helper/service_discovery/manager.rb +8 -0
  31. data/lib/fluent/plugin_helper/socket.rb +20 -2
  32. data/lib/fluent/plugin_helper/socket_option.rb +2 -2
  33. data/lib/fluent/supervisor.rb +21 -9
  34. data/lib/fluent/system_config.rb +2 -1
  35. data/lib/fluent/test/filter_test.rb +2 -2
  36. data/lib/fluent/test/output_test.rb +3 -3
  37. data/lib/fluent/version.rb +1 -1
  38. data/test/command/test_fluentd.rb +57 -10
  39. data/test/config/test_system_config.rb +2 -0
  40. data/test/plugin/in_tail/test_position_file.rb +24 -0
  41. data/test/plugin/out_forward/test_load_balancer.rb +46 -0
  42. data/test/plugin/test_in_gc_stat.rb +24 -1
  43. data/test/plugin/test_in_syslog.rb +16 -1
  44. data/test/plugin/test_in_tail.rb +39 -16
  45. data/test/plugin/test_in_unix.rb +128 -73
  46. data/test/plugin/test_out_forward.rb +11 -2
  47. data/test/plugin/test_out_http.rb +38 -0
  48. data/test/plugin/test_out_null.rb +1 -1
  49. data/test/plugin/test_output_as_buffered_retries.rb +12 -4
  50. data/test/plugin/test_output_as_buffered_secondary.rb +9 -1
  51. data/test/plugin/test_parser_syslog.rb +77 -29
  52. data/test/plugin_helper/data/cert/cert_chains/ca-cert-key.pem +27 -0
  53. data/test/plugin_helper/data/cert/cert_chains/ca-cert.pem +20 -0
  54. data/test/plugin_helper/data/cert/cert_chains/cert-key.pem +27 -0
  55. data/test/plugin_helper/data/cert/cert_chains/cert.pem +40 -0
  56. data/test/plugin_helper/data/cert/generate_cert.rb +38 -0
  57. data/test/plugin_helper/http_server/test_app.rb +1 -1
  58. data/test/plugin_helper/http_server/test_route.rb +1 -1
  59. data/test/plugin_helper/test_http_server_helper.rb +2 -2
  60. data/test/plugin_helper/test_record_accessor.rb +41 -0
  61. data/test/plugin_helper/test_server.rb +1 -1
  62. data/test/plugin_helper/test_service_discovery.rb +37 -4
  63. data/test/plugin_helper/test_socket.rb +131 -0
  64. data/test/test_daemonizer.rb +91 -0
  65. data/test/test_log.rb +44 -0
  66. metadata +16 -2
@@ -1056,7 +1056,7 @@ EOL
1056
1056
  e = assert_raise Fluent::UnrecoverableError do
1057
1057
  d.instance_start
1058
1058
  end
1059
- assert_match(/Failed to establish connection/, e.message)
1059
+ assert_match(/failed to establish connection/, e.message)
1060
1060
  end
1061
1061
  end
1062
1062
 
@@ -1092,7 +1092,7 @@ EOL
1092
1092
  d.instance_start
1093
1093
  end
1094
1094
 
1095
- assert_match(/Failed to establish connection/, e.message)
1095
+ assert_match(/failed to establish connection/, e.message)
1096
1096
  end
1097
1097
  end
1098
1098
 
@@ -1200,6 +1200,15 @@ EOL
1200
1200
  end
1201
1201
  end
1202
1202
 
1203
+ test 'create timer of purging obsolete sockets' do
1204
+ output_conf = CONFIG + %[keepalive true]
1205
+ d = create_driver(output_conf)
1206
+
1207
+ mock(d.instance).timer_execute(:out_forward_heartbeat_request, 1).once
1208
+ mock(d.instance).timer_execute(:out_forward_keep_alived_socket_watcher, 5).once
1209
+ d.instance_start
1210
+ end
1211
+
1203
1212
  sub_test_case 'with require_ack_response' do
1204
1213
  test 'Create connection per send_data' do
1205
1214
  target_input_driver = create_target_input_driver(conf: TARGET_CONFIG)
@@ -80,6 +80,8 @@ class HTTPOutputTest < Test::Unit::TestCase
80
80
  req.body.each_line { |l|
81
81
  data << JSON.parse(l)
82
82
  }
83
+ when 'application/json'
84
+ data = JSON.parse(req.body)
83
85
  when 'text/plain'
84
86
  # Use single_value in this test
85
87
  req.body.each_line { |line|
@@ -181,6 +183,19 @@ class HTTPOutputTest < Test::Unit::TestCase
181
183
  assert_not_match(/Status code 503 is going to be removed/, d.instance.log.out.logs.join)
182
184
  end
183
185
 
186
+ # Check if an exception is raised on not JSON format use
187
+ data('not_json' => 'msgpack')
188
+ def test_configure_with_json_array_err(format_type)
189
+ assert_raise(Fluent::ConfigError) do
190
+ create_driver(config + %[
191
+ json_array true
192
+ <format>
193
+ @type #{format_type}
194
+ </format>
195
+ ])
196
+ end
197
+ end
198
+
184
199
  data('json' => ['json', 'application/x-ndjson'],
185
200
  'ltsv' => ['ltsv', 'text/tab-separated-values'],
186
201
  'msgpack' => ['msgpack', 'application/x-msgpack'],
@@ -195,6 +210,14 @@ class HTTPOutputTest < Test::Unit::TestCase
195
210
  assert_equal content_type, d.instance.content_type
196
211
  end
197
212
 
213
+ # Check that json_array setting sets content_type = application/json
214
+ data('json' => 'application/json')
215
+ def test_configure_content_type_json_array(content_type)
216
+ d = create_driver(config + "json_array true")
217
+
218
+ assert_equal content_type, d.instance.content_type
219
+ end
220
+
198
221
  data('PUT' => 'put', 'POST' => 'post')
199
222
  def test_write_with_method(method)
200
223
  d = create_driver(config + "http_method #{method}")
@@ -211,6 +234,21 @@ class HTTPOutputTest < Test::Unit::TestCase
211
234
  assert_not_empty result.headers
212
235
  end
213
236
 
237
+ # Check that JSON at HTTP request body is valid
238
+ def test_write_with_json_array_setting
239
+ d = create_driver(config + "json_array true")
240
+ d.run(default_tag: 'test.http') do
241
+ test_events.each { |event|
242
+ d.feed(event)
243
+ }
244
+ end
245
+
246
+ result = @@result
247
+ assert_equal 'application/json', result.content_type
248
+ assert_equal test_events, result.data
249
+ assert_not_empty result.headers
250
+ end
251
+
214
252
  def test_write_with_single_value_format
215
253
  d = create_driver(config + %[
216
254
  <format>
@@ -40,7 +40,7 @@ class NullOutputTest < Test::Unit::TestCase
40
40
  assert_equal [], d.instance.chunk_keys
41
41
  end
42
42
 
43
- test 'writes standard formattted chunks' do
43
+ test 'writes standard formatted chunks' do
44
44
  d = create_driver(config_element("ROOT", "", {}, [config_element("buffer")]))
45
45
  t = event_time("2016-05-23 00:22:13 -0800")
46
46
  d.run(default_tag: 'test', flush: true) do
@@ -895,17 +895,25 @@ class BufferedOutputRetryTest < Test::Unit::TestCase
895
895
 
896
896
  @i.flush_thread_wakeup
897
897
  waiting(4){ Thread.pass until @i.write_count > 0 }
898
+ waiting(4) do
899
+ state = @i.instance_variable_get(:@output_flush_threads).first
900
+ state.thread.status == 'sleep'
901
+ end
898
902
 
899
- assert{ @i.write_count > 0 }
900
- assert{ @i.num_errors > 0 }
903
+ assert(@i.write_count > 0)
904
+ assert(@i.num_errors > 0)
901
905
 
902
906
  now = @i.next_flush_time
903
907
  Timecop.freeze( now )
904
908
  @i.flush_thread_wakeup
905
909
  waiting(4){ Thread.pass until @i.write_count > 1 }
910
+ waiting(4) do
911
+ state = @i.instance_variable_get(:@output_flush_threads).first
912
+ state.thread.status == 'sleep'
913
+ end
906
914
 
907
- assert{ @i.write_count > 1 }
908
- assert{ @i.num_errors > 1 }
915
+ assert(@i.write_count > 1)
916
+ assert(@i.num_errors > 1)
909
917
  end
910
918
  end
911
919
  end
@@ -617,7 +617,15 @@ class BufferedOutputSecondaryTest < Test::Unit::TestCase
617
617
  assert{ !chunks[1].empty? }
618
618
 
619
619
  30.times do |i| # large enough
620
- now = first_failure + 60 * 0.8 + 2 + [i, 9].min # must be less than retry_timeout
620
+ # In https://github.com/fluent/fluentd/blob/c90c024576b3d35f356a55fd33d1232947114a9a/lib/fluent/plugin_helper/retry_state.rb
621
+ # @timeout_at is 2016-04-13 18:34:31, @next_time must be less than 2016-04-13 18:34:30
622
+ #
623
+ # first_failure + 60 * 0.8 + 2 # => 2016-04-13 18:34:21
624
+ # @next_time is not added by 1, but by randomize(@retry_wait) https://github.com/fluent/fluentd/blob/c90c024576b3d35f356a55fd33d1232947114a9a/lib/fluent/plugin_helper/retry_state.rb#L196
625
+ # current_time(=Time.now) + randomize(@retry_wait) < @timeout_at
626
+ # (2016-04-13 18:34:21 + 6) + 3 < 2016-04-13 18:34:31
627
+ # So, current_time must be at most 6
628
+ now = first_failure + 60 * 0.8 + 2 + [i, 6].min
621
629
  Timecop.freeze( now )
622
630
  @i.flush_thread_wakeup
623
631
 
@@ -35,8 +35,9 @@ class SyslogParserTest < ::Test::Unit::TestCase
35
35
  assert_equal('%b %d %M:%S:%H', @parser.instance.patterns['time_format'])
36
36
  end
37
37
 
38
- def test_parse_with_time_format2
39
- @parser.configure('time_format' => '%Y-%m-%dT%H:%M:%SZ')
38
+ data('regexp' => 'regexp', 'string' => 'string')
39
+ def test_parse_with_time_format2(param)
40
+ @parser.configure('time_format' => '%Y-%m-%dT%H:%M:%SZ', 'parser_type' => param)
40
41
  @parser.instance.parse('2020-03-03T10:14:29Z 192.168.0.1 fluentd[11111]: [error] Syslog test') { |time, record|
41
42
  assert_equal(event_time('Mar 03 10:14:29', format: '%b %d %H:%M:%S'), time)
42
43
  assert_equal(@expected, record)
@@ -73,6 +74,16 @@ class SyslogParserTest < ::Test::Unit::TestCase
73
74
  assert_equal("%b %d %H:%M:%S", @parser.instance.patterns['time_format'])
74
75
  end
75
76
 
77
+ data('regexp' => 'regexp', 'string' => 'string')
78
+ def test_parse_rfc5452_with_priority(param)
79
+ @parser.configure('with_priority' => true, 'parser_type' => param, 'message_format' => 'rfc5424')
80
+ @parser.instance.parse('<30>1 2020-03-31T20:32:54Z myhostname 02abaf0687f5 10339 02abaf0687f5 - method=POST db=0.00') do |time, record|
81
+ assert_equal(event_time('2020-03-31T20:32:54Z', format: '%Y-%m-%dT%H:%M:%S%z'), time)
82
+ expected = { 'extradata' => '-', 'host' => 'myhostname', 'ident' => '02abaf0687f5', 'message' => 'method=POST db=0.00', 'msgid' => '02abaf0687f5', 'pid' => '10339', 'pri' => 30 }
83
+ assert_equal(expected, record)
84
+ end
85
+ end
86
+
76
87
  data('regexp' => 'regexp', 'string' => 'string')
77
88
  def test_parse_with_empty_priority(param)
78
89
  @parser.configure('with_priority' => true, 'parser_type' => param)
@@ -188,11 +199,13 @@ class SyslogParserTest < ::Test::Unit::TestCase
188
199
  end
189
200
 
190
201
  class TestRFC5424Regexp < self
191
- def test_parse_with_rfc5424_message
202
+ data('regexp' => 'regexp', 'string' => 'string')
203
+ def test_parse_with_rfc5424_message(param)
192
204
  @parser.configure(
193
205
  'time_format' => '%Y-%m-%dT%H:%M:%S.%L%z',
194
206
  'message_format' => 'rfc5424',
195
207
  'with_priority' => true,
208
+ 'parser_type' => param
196
209
  )
197
210
  text = '<16>1 2017-02-06T13:14:15.003Z 192.168.0.1 fluentd - - - Hi, from Fluentd!'
198
211
  @parser.instance.parse(text) do |time, record|
@@ -205,11 +218,13 @@ class SyslogParserTest < ::Test::Unit::TestCase
205
218
  assert_equal(Fluent::Plugin::SyslogParser::RFC5424_WITHOUT_TIME_AND_PRI_REGEXP, @parser.instance.patterns['format'])
206
219
  end
207
220
 
208
- def test_parse_with_rfc5424_message_trailing_eol
221
+ data('regexp' => 'regexp', 'string' => 'string')
222
+ def test_parse_with_rfc5424_message_trailing_eol(param)
209
223
  @parser.configure(
210
224
  'time_format' => '%Y-%m-%dT%H:%M:%S.%L%z',
211
225
  'message_format' => 'rfc5424',
212
226
  'with_priority' => true,
227
+ 'parser_type' => param
213
228
  )
214
229
  text = "<16>1 2017-02-06T13:14:15.003Z 192.168.0.1 fluentd - - - Hi, from Fluentd!\n"
215
230
  @parser.instance.parse(text) do |time, record|
@@ -222,11 +237,13 @@ class SyslogParserTest < ::Test::Unit::TestCase
222
237
  assert_equal(Fluent::Plugin::SyslogParser::RFC5424_WITHOUT_TIME_AND_PRI_REGEXP, @parser.instance.patterns['format'])
223
238
  end
224
239
 
225
- def test_parse_with_rfc5424_multiline_message
240
+ data('regexp' => 'regexp', 'string' => 'string')
241
+ def test_parse_with_rfc5424_multiline_message(param)
226
242
  @parser.configure(
227
243
  'time_format' => '%Y-%m-%dT%H:%M:%S.%L%z',
228
244
  'message_format' => 'rfc5424',
229
245
  'with_priority' => true,
246
+ 'parser_type' => param
230
247
  )
231
248
  text = "<16>1 2017-02-06T13:14:15.003Z 192.168.0.1 fluentd - - - Hi,\nfrom\nFluentd!"
232
249
  @parser.instance.parse(text) do |time, record|
@@ -239,10 +256,12 @@ class SyslogParserTest < ::Test::Unit::TestCase
239
256
  assert_equal(Fluent::Plugin::SyslogParser::RFC5424_WITHOUT_TIME_AND_PRI_REGEXP, @parser.instance.patterns['format'])
240
257
  end
241
258
 
242
- def test_parse_with_rfc5424_message_and_without_priority
259
+ data('regexp' => 'regexp', 'string' => 'string')
260
+ def test_parse_with_rfc5424_message_and_without_priority(param)
243
261
  @parser.configure(
244
262
  'time_format' => '%Y-%m-%dT%H:%M:%S.%L%z',
245
263
  'message_format' => 'rfc5424',
264
+ 'parser_type' => param
246
265
  )
247
266
  text = '2017-02-06T13:14:15.003Z 192.168.0.1 fluentd - - - Hi, from Fluentd!'
248
267
  @parser.instance.parse(text) do |time, record|
@@ -255,10 +274,12 @@ class SyslogParserTest < ::Test::Unit::TestCase
255
274
  assert_equal(Fluent::Plugin::SyslogParser::RFC5424_WITHOUT_TIME_AND_PRI_REGEXP, @parser.instance.patterns['format'])
256
275
  end
257
276
 
258
- def test_parse_with_rfc5424_empty_message_and_without_priority
277
+ data('regexp' => 'regexp', 'string' => 'string')
278
+ def test_parse_with_rfc5424_empty_message_and_without_priority(param)
259
279
  @parser.configure(
260
280
  'time_format' => '%Y-%m-%dT%H:%M:%S.%L%z',
261
281
  'message_format' => 'rfc5424',
282
+ 'parser_type' => param
262
283
  )
263
284
  text = '2017-02-06T13:14:15.003Z 192.168.0.1 fluentd - - -'
264
285
  @parser.instance.parse(text) do |time, record|
@@ -271,10 +292,12 @@ class SyslogParserTest < ::Test::Unit::TestCase
271
292
  assert_equal(Fluent::Plugin::SyslogParser::RFC5424_WITHOUT_TIME_AND_PRI_REGEXP, @parser.instance.patterns['format'])
272
293
  end
273
294
 
274
- def test_parse_with_rfc5424_message_without_time_format
295
+ data('regexp' => 'regexp', 'string' => 'string')
296
+ def test_parse_with_rfc5424_message_without_time_format(param)
275
297
  @parser.configure(
276
298
  'message_format' => 'rfc5424',
277
299
  'with_priority' => true,
300
+ 'parser_type' => param
278
301
  )
279
302
  text = '<16>1 2017-02-06T13:14:15.003Z 192.168.0.1 fluentd - - - Hi, from Fluentd!'
280
303
  @parser.instance.parse(text) do |time, record|
@@ -286,10 +309,12 @@ class SyslogParserTest < ::Test::Unit::TestCase
286
309
  end
287
310
  end
288
311
 
289
- def test_parse_with_rfc5424_message_with_priority_and_pid
312
+ data('regexp' => 'regexp', 'string' => 'string')
313
+ def test_parse_with_rfc5424_message_with_priority_and_pid(param)
290
314
  @parser.configure(
291
315
  'message_format' => 'rfc5424',
292
316
  'with_priority' => true,
317
+ 'parser_type' => param
293
318
  )
294
319
  text = '<28>1 2018-09-26T15:54:26.620412+09:00 machine minissdpd 1298 - - peer 192.168.0.5:50123 is not from a LAN'
295
320
  @parser.instance.parse(text) do |time, record|
@@ -301,11 +326,13 @@ class SyslogParserTest < ::Test::Unit::TestCase
301
326
  end
302
327
  end
303
328
 
304
- def test_parse_with_rfc5424_structured_message
329
+ data('regexp' => 'regexp', 'string' => 'string')
330
+ def test_parse_with_rfc5424_structured_message(param)
305
331
  @parser.configure(
306
332
  'time_format' => '%Y-%m-%dT%H:%M:%S.%L%z',
307
333
  'message_format' => 'rfc5424',
308
334
  'with_priority' => true,
335
+ 'parser_type' => param
309
336
  )
310
337
  text = '<16>1 2017-02-06T13:14:15.003Z 192.168.0.1 fluentd 11111 ID24224 [exampleSDID@20224 iut="3" eventSource="Application" eventID="11211"] [Hi] from Fluentd!'
311
338
  @parser.instance.parse(text) do |time, record|
@@ -318,11 +345,13 @@ class SyslogParserTest < ::Test::Unit::TestCase
318
345
  end
319
346
  end
320
347
 
321
- def test_parse_with_rfc5424_multiple_structured_message
348
+ data('regexp' => 'regexp', 'string' => 'string')
349
+ def test_parse_with_rfc5424_multiple_structured_message(param)
322
350
  @parser.configure(
323
351
  'time_format' => '%Y-%m-%dT%H:%M:%S.%L%z',
324
352
  'message_format' => 'rfc5424',
325
353
  'with_priority' => true,
354
+ 'parser_type' => param
326
355
  )
327
356
  text = '<16>1 2017-02-06T13:14:15.003Z 192.168.0.1 fluentd 11111 ID24224 [exampleSDID@20224 iut="3" eventSource="Application" eventID="11211"][exampleSDID@20224 class="high"] Hi, from Fluentd!'
328
357
  @parser.instance.parse(text) do |time, record|
@@ -335,11 +364,13 @@ class SyslogParserTest < ::Test::Unit::TestCase
335
364
  end
336
365
  end
337
366
 
338
- def test_parse_with_rfc5424_message_includes_right_bracket
367
+ data('regexp' => 'regexp', 'string' => 'string')
368
+ def test_parse_with_rfc5424_message_includes_right_bracket(param)
339
369
  @parser.configure(
340
370
  'time_format' => '%Y-%m-%dT%H:%M:%S.%L%z',
341
371
  'message_format' => 'rfc5424',
342
372
  'with_priority' => true,
373
+ 'parser_type' => param
343
374
  )
344
375
  text = '<16>1 2017-02-06T13:14:15.003Z 192.168.0.1 fluentd 11111 ID24224 [exampleSDID@20224 iut="3" eventSource="Application" eventID="11211"] [Hi] from Fluentd]!'
345
376
  @parser.instance.parse(text) do |time, record|
@@ -352,11 +383,13 @@ class SyslogParserTest < ::Test::Unit::TestCase
352
383
  end
353
384
  end
354
385
 
355
- def test_parse_with_rfc5424_empty_message
386
+ data('regexp' => 'regexp', 'string' => 'string')
387
+ def test_parse_with_rfc5424_empty_message(param)
356
388
  @parser.configure(
357
389
  'time_format' => '%Y-%m-%dT%H:%M:%S.%L%z',
358
390
  'message_format' => 'rfc5424',
359
391
  'with_priority' => true,
392
+ 'parser_type' => param
360
393
  )
361
394
  text = '<16>1 2017-02-06T13:14:15.003Z 192.168.0.1 fluentd 11111 ID24224 [exampleSDID@20224 iut="3" eventSource="Application" eventID="11211"]'
362
395
  @parser.instance.parse(text) do |time, record|
@@ -369,10 +402,35 @@ class SyslogParserTest < ::Test::Unit::TestCase
369
402
  end
370
403
  end
371
404
 
372
- def test_parse_with_rfc5424_message_without_subseconds
405
+ data('regexp' => 'regexp', 'string' => 'string')
406
+ def test_parse_with_rfc5424_space_empty_message(param)
407
+ @parser.configure(
408
+ 'message_format' => 'rfc5424',
409
+ 'with_priority' => true,
410
+ 'parser_type' => param
411
+ )
412
+ text = '<16>1 2017-02-06T13:14:15.003Z 192.168.0.1 fluentd 11111 ID24224 [exampleSDID@20224 iut="3" eventSource="Application" eventID="11211"] '
413
+ @parser.instance.parse(text) do |time, record|
414
+ if param == 'string'
415
+ assert_equal(event_time("2017-02-06T13:14:15.003Z", format: '%Y-%m-%dT%H:%M:%S.%L%z'), time)
416
+ assert_equal "11111", record["pid"]
417
+ assert_equal "ID24224", record["msgid"]
418
+ assert_equal "[exampleSDID@20224 iut=\"3\" eventSource=\"Application\" eventID=\"11211\"]",
419
+ record["extradata"]
420
+ assert_equal '', record["message"]
421
+ else
422
+ assert_nil time
423
+ assert_nil record
424
+ end
425
+ end
426
+ end
427
+
428
+ data('regexp' => 'regexp', 'string' => 'string')
429
+ def test_parse_with_rfc5424_message_without_subseconds(param)
373
430
  @parser.configure(
374
431
  'message_format' => 'rfc5424',
375
432
  'with_priority' => true,
433
+ 'parser_type' => param
376
434
  )
377
435
  text = '<16>1 2017-02-06T13:14:15Z 192.168.0.1 fluentd - - - Hi, from Fluentd!'
378
436
  @parser.instance.parse(text) do |time, record|
@@ -384,10 +442,12 @@ class SyslogParserTest < ::Test::Unit::TestCase
384
442
  end
385
443
  end
386
444
 
387
- def test_parse_with_rfc5424_message_both_timestamp
445
+ data('regexp' => 'regexp', 'string' => 'string')
446
+ def test_parse_with_rfc5424_message_both_timestamp(param)
388
447
  @parser.configure(
389
448
  'message_format' => 'rfc5424',
390
449
  'with_priority' => true,
450
+ 'parser_type' => param
391
451
  )
392
452
  text = '<16>1 2017-02-06T13:14:15Z 192.168.0.1 fluentd - - - Hi, from Fluentd!'
393
453
  @parser.instance.parse(text) do |time, record|
@@ -421,7 +481,6 @@ class SyslogParserTest < ::Test::Unit::TestCase
421
481
  assert_equal(event_time("Feb 28 00:00:12", format: '%b %d %M:%S:%H'), time)
422
482
  assert_equal(@expected, record)
423
483
  end
424
- assert_equal(Fluent::Plugin::SyslogParser::RFC3164_WITHOUT_TIME_AND_PRI_REGEXP, @parser.instance.patterns['format'])
425
484
  end
426
485
 
427
486
  data('regexp' => 'regexp', 'string' => 'string')
@@ -437,7 +496,6 @@ class SyslogParserTest < ::Test::Unit::TestCase
437
496
  assert_equal(event_time("Feb 28 12:00:00", format: '%b %d %M:%S:%H'), time)
438
497
  assert_equal(@expected.merge('pri' => 6), record)
439
498
  end
440
- assert_equal(Fluent::Plugin::SyslogParser::RFC3164_WITHOUT_TIME_AND_PRI_REGEXP, @parser.instance.patterns['format'])
441
499
  end
442
500
 
443
501
  data('regexp' => 'regexp', 'string' => 'string')
@@ -454,9 +512,9 @@ class SyslogParserTest < ::Test::Unit::TestCase
454
512
  assert_equal "-", record["pid"]
455
513
  assert_equal "-", record["msgid"]
456
514
  assert_equal "-", record["extradata"]
515
+ assert_equal 16, record["pri"]
457
516
  assert_equal "Hi, from Fluentd!", record["message"]
458
517
  end
459
- assert_equal(Fluent::Plugin::SyslogParser::RFC5424_WITHOUT_TIME_AND_PRI_REGEXP, @parser.instance.patterns['format'])
460
518
  end
461
519
 
462
520
  data('regexp' => 'regexp', 'string' => 'string')
@@ -476,7 +534,7 @@ class SyslogParserTest < ::Test::Unit::TestCase
476
534
  record["extradata"]
477
535
  assert_equal "Hi, from Fluentd!", record["message"]
478
536
  end
479
- assert_equal(Fluent::Plugin::SyslogParser::RFC5424_WITHOUT_TIME_AND_PRI_REGEXP, @parser.instance.patterns['format'])end
537
+ end
480
538
 
481
539
  data('regexp' => 'regexp', 'string' => 'string')
482
540
  def test_parse_with_both_message_type(param)
@@ -492,7 +550,6 @@ class SyslogParserTest < ::Test::Unit::TestCase
492
550
  assert_equal(event_time("Feb 28 12:00:00", format: '%b %d %M:%S:%H'), time)
493
551
  assert_equal(@expected.merge('pri' => 1), record)
494
552
  end
495
- assert_equal(Fluent::Plugin::SyslogParser::RFC3164_WITHOUT_TIME_AND_PRI_REGEXP, @parser.instance.patterns['format'])
496
553
 
497
554
  text = '<16>1 2017-02-06T13:14:15.003Z 192.168.0.1 fluentd 11111 ID24224 [exampleSDID@20224 iut="3" eventSource="Application" eventID="11211"] Hi, from Fluentd!'
498
555
  @parser.instance.parse(text) do |time, record|
@@ -503,21 +560,18 @@ class SyslogParserTest < ::Test::Unit::TestCase
503
560
  record["extradata"]
504
561
  assert_equal "Hi, from Fluentd!", record["message"]
505
562
  end
506
- assert_equal(Fluent::Plugin::SyslogParser::RFC5424_WITHOUT_TIME_AND_PRI_REGEXP, @parser.instance.patterns['format'])
507
563
 
508
564
  text = '<1>Feb 28 12:00:02 192.168.0.1 fluentd[11111]: [error] Syslog test 2>1'
509
565
  @parser.instance.parse(text) do |time, record|
510
566
  assert_equal(event_time("Feb 28 12:00:02", format: '%b %d %M:%S:%H'), time)
511
567
  assert_equal(@expected.merge('pri' => 1, 'message'=> '[error] Syslog test 2>1'), record)
512
568
  end
513
- assert_equal(Fluent::Plugin::SyslogParser::RFC3164_WITHOUT_TIME_AND_PRI_REGEXP, @parser.instance.patterns['format'])
514
569
 
515
570
  text = '<1>Feb 28 12:00:02 192.168.0.1 fluentd[11111]: [error] Syslog test'
516
571
  @parser.instance.parse(text) do |time, record|
517
572
  assert_equal(event_time("Feb 28 12:00:02", format: '%b %d %M:%S:%H'), time)
518
573
  assert_equal(@expected.merge('pri' => 1), record)
519
574
  end
520
- assert_equal(Fluent::Plugin::SyslogParser::RFC3164_WITHOUT_TIME_AND_PRI_REGEXP, @parser.instance.patterns['format'])
521
575
 
522
576
  text = '<16>1 2017-02-06T13:14:15.003Z 192.168.0.1 fluentd - - - Hi, from Fluentd!'
523
577
  @parser.instance.parse(text) do |time, record|
@@ -527,7 +581,6 @@ class SyslogParserTest < ::Test::Unit::TestCase
527
581
  assert_equal "-", record["extradata"]
528
582
  assert_equal "Hi, from Fluentd!", record["message"]
529
583
  end
530
- assert_equal(Fluent::Plugin::SyslogParser::RFC5424_WITHOUT_TIME_AND_PRI_REGEXP, @parser.instance.patterns['format'])
531
584
  end
532
585
 
533
586
  data('regexp' => 'regexp', 'string' => 'string')
@@ -544,7 +597,6 @@ class SyslogParserTest < ::Test::Unit::TestCase
544
597
  assert_equal(event_time("Feb 28 12:00:00", format: '%b %d %M:%S:%H'), time)
545
598
  assert_equal(@expected.merge('pri' => 6), record)
546
599
  end
547
- assert_equal(Fluent::Plugin::SyslogParser::RFC3164_WITHOUT_TIME_AND_PRI_REGEXP, @parser.instance.patterns['format'])
548
600
 
549
601
  text = '<16>1 2017-02-06T13:14:15.003Z 192.168.0.1 fluentd 11111 ID24224 [exampleSDID@20224 iut="3" eventSource="Application" eventID="11211"] Hi, from Fluentd!'
550
602
  @parser.instance.parse(text) do |time, record|
@@ -555,14 +607,12 @@ class SyslogParserTest < ::Test::Unit::TestCase
555
607
  record["extradata"]
556
608
  assert_equal "Hi, from Fluentd!", record["message"]
557
609
  end
558
- assert_equal(Fluent::Plugin::SyslogParser::RFC5424_WITHOUT_TIME_AND_PRI_REGEXP, @parser.instance.patterns['format'])
559
610
 
560
611
  text = '<16>Feb 28 12:00:02 192.168.0.1 fluentd[11111]: [error] Syslog test'
561
612
  @parser.instance.parse(text) do |time, record|
562
613
  assert_equal(event_time("Feb 28 12:00:02", format: '%b %d %M:%S:%H'), time)
563
614
  assert_equal(@expected.merge('pri' => 16), record)
564
615
  end
565
- assert_equal(Fluent::Plugin::SyslogParser::RFC3164_WITHOUT_TIME_AND_PRI_REGEXP, @parser.instance.patterns['format'])
566
616
 
567
617
  text = '<16>1 2017-02-06T13:14:15.003Z 192.168.0.1 fluentd - - - Hi, from Fluentd!'
568
618
  @parser.instance.parse(text) do |time, record|
@@ -572,7 +622,6 @@ class SyslogParserTest < ::Test::Unit::TestCase
572
622
  assert_equal "-", record["extradata"]
573
623
  assert_equal "Hi, from Fluentd!", record["message"]
574
624
  end
575
- assert_equal(Fluent::Plugin::SyslogParser::RFC5424_WITHOUT_TIME_AND_PRI_REGEXP, @parser.instance.patterns['format'])
576
625
 
577
626
  text = '<16>1 2017-02-06T13:14:15Z 192.168.0.1 fluentd - - - Hi, from Fluentd without subseconds!'
578
627
  @parser.instance.parse(text) do |time, record|
@@ -582,7 +631,6 @@ class SyslogParserTest < ::Test::Unit::TestCase
582
631
  assert_equal "-", record["extradata"]
583
632
  assert_equal "Hi, from Fluentd without subseconds!", record["message"]
584
633
  end
585
- assert_equal(Fluent::Plugin::SyslogParser::RFC5424_WITHOUT_TIME_AND_PRI_REGEXP, @parser.instance.patterns['format'])
586
634
  end
587
635
  end
588
636
  end