fluentd 1.9.3-x64-mingw32 → 1.10.0-x64-mingw32
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.
- checksums.yaml +4 -4
- data/.github/workflows/issue-auto-closer.yml +12 -0
- data/CHANGELOG.md +48 -0
- data/lib/fluent/msgpack_factory.rb +13 -6
- data/lib/fluent/plugin/buffer.rb +2 -2
- data/lib/fluent/plugin/in_dummy.rb +1 -1
- data/lib/fluent/plugin/in_tail.rb +35 -26
- data/lib/fluent/plugin/out_forward.rb +4 -6
- data/lib/fluent/plugin/out_forward/handshake_protocol.rb +4 -0
- data/lib/fluent/plugin/parser_syslog.rb +114 -34
- data/lib/fluent/plugin/sd_file.rb +1 -0
- data/lib/fluent/plugin/sd_srv.rb +135 -0
- data/lib/fluent/plugin_helper/cert_option.rb +15 -2
- data/lib/fluent/plugin_helper/server.rb +3 -1
- data/lib/fluent/plugin_helper/socket_option.rb +19 -1
- data/lib/fluent/version.rb +1 -1
- data/test/command/test_fluentd.rb +14 -2
- data/test/helper.rb +2 -2
- data/test/plugin/in_tail/test_fifo.rb +121 -0
- data/test/plugin/in_tail/test_io_handler.rb +132 -0
- data/test/plugin/in_tail/test_position_file.rb +1 -1
- data/test/plugin/out_forward/test_handshake_protocol.rb +10 -1
- data/test/plugin/test_buf_file.rb +3 -1
- data/test/plugin/test_buffer.rb +20 -0
- data/test/plugin/test_compressable.rb +7 -4
- data/test/plugin/test_in_dummy.rb +12 -14
- data/test/plugin/test_in_forward.rb +2 -2
- data/test/plugin/test_in_tail.rb +6 -6
- data/test/plugin/test_out_forward.rb +28 -1
- data/test/plugin/test_output_as_buffered_secondary.rb +1 -1
- data/test/plugin/test_parser_syslog.rb +46 -34
- data/test/plugin/test_sd_file.rb +17 -0
- data/test/plugin/test_sd_srv.rb +230 -0
- data/test/plugin_helper/data/cert/cert-with-CRLF.pem +19 -0
- data/test/plugin_helper/test_cert_option.rb +2 -0
- data/test/plugin_helper/test_child_process.rb +5 -3
- data/test/test_msgpack_factory.rb +18 -0
- metadata +14 -2
@@ -81,6 +81,15 @@ class HandshakeProtocolTest < Test::Unit::TestCase
|
|
81
81
|
assert_equal(ri.state, :established)
|
82
82
|
end
|
83
83
|
|
84
|
+
test 'raises an error when password and username are nil if auth exists' do
|
85
|
+
handshake = Fluent::Plugin::ForwardOutput::HandshakeProtocol.new(log: $log, hostname: 'hostname', shared_key: 'shared_key', password: nil, username: nil)
|
86
|
+
ri = Fluent::Plugin::ForwardOutput::ConnectionManager::RequestInfo.new(:helo)
|
87
|
+
|
88
|
+
assert_raise(Fluent::Plugin::ForwardOutput::PingpongError.new('username and password are required')) do
|
89
|
+
handshake.invoke('', ri, ['HELO', { 'auth' => 'auth' }])
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
84
93
|
data(
|
85
94
|
lack_of_elem: ['PONG', true, '', 'client_hostname'],
|
86
95
|
wrong_message: ['WRONG_PONG', true, '', 'client_hostname', '40a3c5943cc6256e0c5dcf176e97db3826b0909698c330dc8e53d15af63efb47e030d113130255dd6e7ced5176d2999cc2e02a44852d45152503af317b73b33f'],
|
@@ -89,7 +98,7 @@ class HandshakeProtocolTest < Test::Unit::TestCase
|
|
89
98
|
wrong_key: ['PONG', true, '', 'hostname', 'wrong_key'],
|
90
99
|
)
|
91
100
|
test 'raises an error when message is' do |msg|
|
92
|
-
handshake = Fluent::Plugin::ForwardOutput::HandshakeProtocol.new(log: $log, hostname: 'hostname', shared_key: 'shared_key', password:
|
101
|
+
handshake = Fluent::Plugin::ForwardOutput::HandshakeProtocol.new(log: $log, hostname: 'hostname', shared_key: 'shared_key', password: '', username: '')
|
93
102
|
handshake.instance_variable_set(:@shared_key_salt, 'ce1897b0d3dbd76b90d7fb96010dcac3') # to fix salt
|
94
103
|
|
95
104
|
ri = Fluent::Plugin::ForwardOutput::ConnectionManager::RequestInfo.new(:pingpong, '', '')
|
@@ -1062,7 +1062,9 @@ class FileBufferTest < Test::Unit::TestCase
|
|
1062
1062
|
if @bufdir
|
1063
1063
|
Dir.glob(File.join(@bufdir, '*')).each do |path|
|
1064
1064
|
next if ['.', '..'].include?(File.basename(path))
|
1065
|
-
|
1065
|
+
# Windows does not permit to delete files which are used in another process.
|
1066
|
+
# Just ignore for removing failure.
|
1067
|
+
File.delete(path) rescue nil
|
1066
1068
|
end
|
1067
1069
|
end
|
1068
1070
|
end
|
data/test/plugin/test_buffer.rb
CHANGED
@@ -1202,4 +1202,24 @@ class BufferTest < Test::Unit::TestCase
|
|
1202
1202
|
assert chunk.singleton_class.ancestors.include?(Fluent::Plugin::Buffer::Chunk::Decompressable)
|
1203
1203
|
end
|
1204
1204
|
end
|
1205
|
+
|
1206
|
+
sub_test_case '#statistics' do
|
1207
|
+
setup do
|
1208
|
+
@p = create_buffer({ "total_limit_size" => 1024 })
|
1209
|
+
dm = create_metadata(Time.parse('2020-03-13 16:00:00 +0000').to_i, nil, nil)
|
1210
|
+
|
1211
|
+
(class << @p; self; end).module_eval do
|
1212
|
+
define_method(:resume) {
|
1213
|
+
queued = [create_chunk(dm, ["a" * (1024 - 102)]).enqueued!]
|
1214
|
+
return {}, queued
|
1215
|
+
}
|
1216
|
+
end
|
1217
|
+
|
1218
|
+
@p.start
|
1219
|
+
end
|
1220
|
+
|
1221
|
+
test 'returns available_buffer_space_ratios' do
|
1222
|
+
assert_equal 10.0, @p.statistics['buffer']['available_buffer_space_ratios']
|
1223
|
+
end
|
1224
|
+
end
|
1205
1225
|
end
|
@@ -4,6 +4,12 @@ require 'fluent/plugin/compressable'
|
|
4
4
|
class CompressableTest < Test::Unit::TestCase
|
5
5
|
include Fluent::Plugin::Compressable
|
6
6
|
|
7
|
+
def compress_assert_equal(expected, actual)
|
8
|
+
e = Zlib::GzipReader.new(StringIO.new(expected)).read
|
9
|
+
a = Zlib::GzipReader.new(StringIO.new(actual)).read
|
10
|
+
assert_equal(e, a)
|
11
|
+
end
|
12
|
+
|
7
13
|
sub_test_case '#compress' do
|
8
14
|
setup do
|
9
15
|
@src = 'text data for compressing' * 5
|
@@ -18,8 +24,7 @@ class CompressableTest < Test::Unit::TestCase
|
|
18
24
|
test 'write compressed data to IO with output_io option' do
|
19
25
|
io = StringIO.new
|
20
26
|
compress(@src, output_io: io)
|
21
|
-
|
22
|
-
assert_equal @gzipped_src, io.string
|
27
|
+
compress_assert_equal @gzipped_src, io.string
|
23
28
|
end
|
24
29
|
end
|
25
30
|
|
@@ -36,7 +41,6 @@ class CompressableTest < Test::Unit::TestCase
|
|
36
41
|
test 'write decompressed data to IO with output_io option' do
|
37
42
|
io = StringIO.new
|
38
43
|
decompress(@gzipped_src, output_io: io)
|
39
|
-
waiting(10){ sleep 0.1 until @src == io.string }
|
40
44
|
assert_equal @src, io.string
|
41
45
|
end
|
42
46
|
|
@@ -58,7 +62,6 @@ class CompressableTest < Test::Unit::TestCase
|
|
58
62
|
output_io = StringIO.new
|
59
63
|
|
60
64
|
decompress(input_io: input_io, output_io: output_io)
|
61
|
-
waiting(10){ sleep 0.1 until @src == output_io.string }
|
62
65
|
assert_equal @src, output_io.string
|
63
66
|
end
|
64
67
|
|
@@ -95,21 +95,20 @@ class DummyTest < Test::Unit::TestCase
|
|
95
95
|
TEST_PLUGIN_STORAGE_PATH = File.join( File.dirname(File.dirname(__FILE__)), 'tmp', 'in_dummy', 'store' )
|
96
96
|
FileUtils.mkdir_p TEST_PLUGIN_STORAGE_PATH
|
97
97
|
|
98
|
-
sub_test_case
|
98
|
+
sub_test_case 'when dummy plugin has storage which is not specified the path' do
|
99
99
|
config1 = {
|
100
100
|
'tag' => 'dummy',
|
101
|
-
'rate' => '
|
101
|
+
'rate' => '0',
|
102
102
|
'dummy' => '[{"x": 1, "y": "1"}, {"x": 2, "y": "2"}, {"x": 3, "y": "3"}]',
|
103
103
|
'auto_increment_key' => 'id',
|
104
|
-
'suspend' => false,
|
105
104
|
}
|
106
105
|
conf1 = config_element('ROOT', '', config1, [])
|
107
|
-
test "value of auto increment key is not
|
106
|
+
test "value of auto increment key is not kept after stop-and-start" do
|
108
107
|
assert !File.exist?(File.join(TEST_PLUGIN_STORAGE_PATH, 'json', 'test-01.json'))
|
109
108
|
|
110
109
|
d1 = create_driver(conf1)
|
111
110
|
d1.run(timeout: 0.5) do
|
112
|
-
d1.instance.emit(
|
111
|
+
d1.instance.emit(2)
|
113
112
|
end
|
114
113
|
|
115
114
|
events = d1.events.sort{|a,b| a[2]['id'] <=> b[2]['id'] }
|
@@ -124,7 +123,7 @@ class DummyTest < Test::Unit::TestCase
|
|
124
123
|
|
125
124
|
d2 = create_driver(conf1)
|
126
125
|
d2.run(timeout: 0.5) do
|
127
|
-
d2.instance.emit(
|
126
|
+
d2.instance.emit(2)
|
128
127
|
end
|
129
128
|
|
130
129
|
events = d2.events.sort{|a,b| a[2]['id'] <=> b[2]['id'] }
|
@@ -136,7 +135,7 @@ class DummyTest < Test::Unit::TestCase
|
|
136
135
|
end
|
137
136
|
end
|
138
137
|
|
139
|
-
sub_test_case
|
138
|
+
sub_test_case 'when dummy plugin has storage which is specified the path' do
|
140
139
|
setup do
|
141
140
|
FileUtils.rm_rf(TEST_PLUGIN_STORAGE_PATH)
|
142
141
|
FileUtils.mkdir_p(File.join(TEST_PLUGIN_STORAGE_PATH, 'json'))
|
@@ -146,10 +145,9 @@ class DummyTest < Test::Unit::TestCase
|
|
146
145
|
config2 = {
|
147
146
|
'@id' => 'test-02',
|
148
147
|
'tag' => 'dummy',
|
149
|
-
'rate' => '
|
148
|
+
'rate' => '0',
|
150
149
|
'dummy' => '[{"x": 1, "y": "1"}, {"x": 2, "y": "2"}, {"x": 3, "y": "3"}]',
|
151
150
|
'auto_increment_key' => 'id',
|
152
|
-
'suspend' => true,
|
153
151
|
}
|
154
152
|
conf2 = config_element('ROOT', '', config2, [
|
155
153
|
config_element(
|
@@ -161,12 +159,12 @@ class DummyTest < Test::Unit::TestCase
|
|
161
159
|
'persistent' => true,
|
162
160
|
})
|
163
161
|
])
|
164
|
-
test "value of auto increment key is
|
162
|
+
test "value of auto increment key is kept after stop-and-start" do
|
165
163
|
assert !File.exist?(File.join(TEST_PLUGIN_STORAGE_PATH, 'json', 'test-02.json'))
|
166
164
|
|
167
165
|
d1 = create_driver(conf2)
|
168
|
-
d1.run(timeout:
|
169
|
-
d1.instance.emit(
|
166
|
+
d1.run(timeout: 1) do
|
167
|
+
d1.instance.emit(2)
|
170
168
|
end
|
171
169
|
|
172
170
|
first_id1 = d1.events.first[2]['id']
|
@@ -178,8 +176,8 @@ class DummyTest < Test::Unit::TestCase
|
|
178
176
|
assert File.exist?(File.join(TEST_PLUGIN_STORAGE_PATH, 'json', 'test-02.json'))
|
179
177
|
|
180
178
|
d2 = create_driver(conf2)
|
181
|
-
d2.run(timeout:
|
182
|
-
d2.instance.emit(
|
179
|
+
d2.run(timeout: 1) do
|
180
|
+
d2.instance.emit(2)
|
183
181
|
end
|
184
182
|
d2.events
|
185
183
|
|
@@ -218,7 +218,7 @@ class ForwardInputTest < Test::Unit::TestCase
|
|
218
218
|
}
|
219
219
|
end
|
220
220
|
|
221
|
-
assert_equal(records, d.events.sort_by {|a| a[
|
221
|
+
assert_equal(records, d.events.sort_by {|a| a[0] })
|
222
222
|
end
|
223
223
|
|
224
224
|
test 'json_with_newline' do
|
@@ -237,7 +237,7 @@ class ForwardInputTest < Test::Unit::TestCase
|
|
237
237
|
}
|
238
238
|
end
|
239
239
|
|
240
|
-
assert_equal(records, d.events.sort_by {|a| a[
|
240
|
+
assert_equal(records, d.events.sort_by {|a| a[0] })
|
241
241
|
end
|
242
242
|
end
|
243
243
|
|
data/test/plugin/test_in_tail.rb
CHANGED
@@ -226,7 +226,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
226
226
|
d = create_driver(config)
|
227
227
|
msg = 'test' * 2000 # in_tail reads 8192 bytes at once.
|
228
228
|
|
229
|
-
d.run(expect_emits: 1) do
|
229
|
+
d.run(expect_emits: num_events, timeout: 1) do
|
230
230
|
File.open("#{TMP_DIR}/tail.txt", "ab") {|f|
|
231
231
|
f.puts msg
|
232
232
|
f.puts msg
|
@@ -237,7 +237,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
237
237
|
assert_equal(true, events.length > 0)
|
238
238
|
assert_equal({"message" => msg}, events[0][2])
|
239
239
|
assert_equal({"message" => msg}, events[1][2])
|
240
|
-
|
240
|
+
assert num_events <= d.emit_count
|
241
241
|
end
|
242
242
|
|
243
243
|
data(flat: CONFIG_READ_FROM_HEAD + SINGLE_LINE_CONFIG,
|
@@ -1078,11 +1078,11 @@ class TailInputTest < Test::Unit::TestCase
|
|
1078
1078
|
"refresh_interval" => 1,
|
1079
1079
|
})
|
1080
1080
|
d = create_driver(config, false)
|
1081
|
-
d.
|
1081
|
+
d.end_if { d.instance.instance_variable_get(:@tails).keys.size >= 1 }
|
1082
|
+
d.run(expect_emits: 1, shutdown: false, timeout: 1) do
|
1082
1083
|
File.open("#{TMP_DIR}/tail.txt", "ab") { |f| f.puts "test3\n" }
|
1083
1084
|
end
|
1084
1085
|
|
1085
|
-
assert_equal 1, d.instance.instance_variable_get(:@tails).keys.size
|
1086
1086
|
cleanup_directory(TMP_DIR)
|
1087
1087
|
waiting(20) { sleep 0.1 until Dir.glob("#{TMP_DIR}/*.txt").size == 0 } # Ensure file is deleted on Windows
|
1088
1088
|
waiting(5) { sleep 0.1 until d.instance.instance_variable_get(:@tails).keys.size == 0 }
|
@@ -1164,7 +1164,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
1164
1164
|
|
1165
1165
|
Timecop.freeze(2010, 1, 2, 3, 4, 5) do
|
1166
1166
|
EX_PATHS.each do |path|
|
1167
|
-
mock.proxy(Fluent::Plugin::TailInput::TailWatcher).new(path, anything, anything, true,
|
1167
|
+
mock.proxy(Fluent::Plugin::TailInput::TailWatcher).new(path, anything, anything, true, anything, nil, anything).once
|
1168
1168
|
end
|
1169
1169
|
|
1170
1170
|
plugin.refresh_watchers
|
@@ -1173,7 +1173,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
1173
1173
|
mock.proxy(plugin).detach_watcher_after_rotate_wait(plugin.instance_variable_get(:@tails)['test/plugin/data/2010/01/20100102-030405.log'])
|
1174
1174
|
|
1175
1175
|
Timecop.freeze(2010, 1, 2, 3, 4, 6) do
|
1176
|
-
mock.proxy(Fluent::Plugin::TailInput::TailWatcher).new('test/plugin/data/2010/01/20100102-030406.log', anything, anything, true,
|
1176
|
+
mock.proxy(Fluent::Plugin::TailInput::TailWatcher).new('test/plugin/data/2010/01/20100102-030406.log', anything, anything, true, anything, nil, anything).once
|
1177
1177
|
plugin.refresh_watchers
|
1178
1178
|
|
1179
1179
|
flexstub(Fluent::Plugin::TailInput::TailWatcher) do |watcherclass|
|
@@ -284,6 +284,29 @@ EOL
|
|
284
284
|
assert_equal 1235, d.instance.discovery_manager.services[1].port
|
285
285
|
end
|
286
286
|
|
287
|
+
test 'pass username and password as empty string to HandshakeProtocol' do
|
288
|
+
config_path = File.join(TMP_DIR, "sd_file.conf")
|
289
|
+
File.open(config_path, 'w') do |file|
|
290
|
+
file.write(%[
|
291
|
+
- 'host': 127.0.0.1
|
292
|
+
'port': 1234
|
293
|
+
'weight': 1
|
294
|
+
])
|
295
|
+
end
|
296
|
+
|
297
|
+
mock(Fluent::Plugin::ForwardOutput::HandshakeProtocol).new(log: anything, hostname: nil, shared_key: anything, password: '', username: '')
|
298
|
+
@d = d = create_driver(%[
|
299
|
+
<service_discovery>
|
300
|
+
@type file
|
301
|
+
path #{config_path}
|
302
|
+
</service_discovery>
|
303
|
+
])
|
304
|
+
|
305
|
+
assert_equal 1, d.instance.discovery_manager.services.size
|
306
|
+
assert_equal '127.0.0.1', d.instance.discovery_manager.services[0].host
|
307
|
+
assert_equal 1234, d.instance.discovery_manager.services[0].port
|
308
|
+
end
|
309
|
+
|
287
310
|
test 'compress_default_value' do
|
288
311
|
@d = d = create_driver
|
289
312
|
assert_equal :text, d.instance.compress
|
@@ -997,7 +1020,11 @@ EOL
|
|
997
1020
|
e = assert_raise Fluent::UnrecoverableError do
|
998
1021
|
d.instance_start
|
999
1022
|
end
|
1000
|
-
|
1023
|
+
if Fluent.windows?
|
1024
|
+
assert_match(/No connection could be made because the target machine actively refused it/, e.message)
|
1025
|
+
else
|
1026
|
+
assert_match(/Connection refused/, e.message)
|
1027
|
+
end
|
1001
1028
|
|
1002
1029
|
d.instance_shutdown
|
1003
1030
|
end
|
@@ -617,7 +617,7 @@ 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
|
620
|
+
now = first_failure + 60 * 0.8 + 2 + [i, 9].min # must be less than retry_timeout
|
621
621
|
Timecop.freeze( now )
|
622
622
|
@i.flush_thread_wakeup
|
623
623
|
|
@@ -21,7 +21,7 @@ class SyslogParserTest < ::Test::Unit::TestCase
|
|
21
21
|
assert_equal(event_time('Feb 28 12:00:00', format: '%b %d %H:%M:%S'), time)
|
22
22
|
assert_equal(@expected, record)
|
23
23
|
}
|
24
|
-
assert_equal(Fluent::Plugin::SyslogParser::
|
24
|
+
assert_equal(Fluent::Plugin::SyslogParser::RFC3164_WITHOUT_TIME_AND_PRI_REGEXP, @parser.instance.patterns['format'])
|
25
25
|
assert_equal("%b %d %H:%M:%S", @parser.instance.patterns['time_format'])
|
26
26
|
end
|
27
27
|
|
@@ -35,6 +35,24 @@ 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')
|
40
|
+
@parser.instance.parse('2020-03-03T10:14:29Z 192.168.0.1 fluentd[11111]: [error] Syslog test') { |time, record|
|
41
|
+
assert_equal(event_time('Mar 03 10:14:29', format: '%b %d %H:%M:%S'), time)
|
42
|
+
assert_equal(@expected, record)
|
43
|
+
}
|
44
|
+
assert_equal('%Y-%m-%dT%H:%M:%SZ', @parser.instance.patterns['time_format'])
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_parse_with_time_format_rfc5424
|
48
|
+
@parser.configure('time_format' => '%Y-%m-%dT%H:%M:%SZ', 'message_format' => 'rfc5424')
|
49
|
+
@parser.instance.parse('2020-03-03T10:14:29Z 192.168.0.1 fluentd 11111 - - [error] Syslog test') { |time, record|
|
50
|
+
assert_equal(event_time('Mar 03 10:14:29', format: '%b %d %H:%M:%S'), time)
|
51
|
+
assert_equal(@expected.merge('host' => '192.168.0.1', 'msgid' => '-', 'extradata' => '-'), record)
|
52
|
+
}
|
53
|
+
assert_equal('%Y-%m-%dT%H:%M:%SZ', @parser.instance.patterns['time_format'])
|
54
|
+
end
|
55
|
+
|
38
56
|
data('regexp' => 'regexp', 'string' => 'string')
|
39
57
|
def test_parse_with_subsecond_time(param)
|
40
58
|
@parser.configure('time_format' => '%b %d %H:%M:%S.%N', 'parser_type' => param)
|
@@ -51,7 +69,7 @@ class SyslogParserTest < ::Test::Unit::TestCase
|
|
51
69
|
assert_equal(event_time('Feb 28 12:00:00', format: '%b %d %H:%M:%S'), time)
|
52
70
|
assert_equal(@expected.merge('pri' => 6), record)
|
53
71
|
}
|
54
|
-
assert_equal(Fluent::Plugin::SyslogParser::
|
72
|
+
assert_equal(Fluent::Plugin::SyslogParser::RFC3164_WITHOUT_TIME_AND_PRI_REGEXP, @parser.instance.patterns['format'])
|
55
73
|
assert_equal("%b %d %H:%M:%S", @parser.instance.patterns['time_format'])
|
56
74
|
end
|
57
75
|
|
@@ -71,7 +89,7 @@ class SyslogParserTest < ::Test::Unit::TestCase
|
|
71
89
|
assert_equal(event_time('Feb 28 12:00:00', format: '%b %d %H:%M:%S'), time)
|
72
90
|
assert_equal(@expected, record)
|
73
91
|
}
|
74
|
-
assert_equal(Fluent::Plugin::SyslogParser::
|
92
|
+
assert_equal(Fluent::Plugin::SyslogParser::RFC3164_WITHOUT_TIME_AND_PRI_REGEXP, @parser.instance.patterns['format'])
|
75
93
|
assert_equal("%b %d %H:%M:%S", @parser.instance.patterns['time_format'])
|
76
94
|
end
|
77
95
|
|
@@ -184,8 +202,7 @@ class SyslogParserTest < ::Test::Unit::TestCase
|
|
184
202
|
assert_equal "-", record["extradata"]
|
185
203
|
assert_equal "Hi, from Fluentd!", record["message"]
|
186
204
|
end
|
187
|
-
assert_equal(Fluent::Plugin::SyslogParser::
|
188
|
-
@parser.instance.patterns['format'])
|
205
|
+
assert_equal(Fluent::Plugin::SyslogParser::RFC5424_WITHOUT_TIME_AND_PRI_REGEXP, @parser.instance.patterns['format'])
|
189
206
|
end
|
190
207
|
|
191
208
|
def test_parse_with_rfc5424_message_trailing_eol
|
@@ -202,8 +219,7 @@ class SyslogParserTest < ::Test::Unit::TestCase
|
|
202
219
|
assert_equal "-", record["extradata"]
|
203
220
|
assert_equal "Hi, from Fluentd!", record["message"]
|
204
221
|
end
|
205
|
-
assert_equal(Fluent::Plugin::SyslogParser::
|
206
|
-
@parser.instance.patterns['format'])
|
222
|
+
assert_equal(Fluent::Plugin::SyslogParser::RFC5424_WITHOUT_TIME_AND_PRI_REGEXP, @parser.instance.patterns['format'])
|
207
223
|
end
|
208
224
|
|
209
225
|
def test_parse_with_rfc5424_multiline_message
|
@@ -220,8 +236,7 @@ class SyslogParserTest < ::Test::Unit::TestCase
|
|
220
236
|
assert_equal "-", record["extradata"]
|
221
237
|
assert_equal "Hi,\nfrom\nFluentd!", record["message"]
|
222
238
|
end
|
223
|
-
assert_equal(Fluent::Plugin::SyslogParser::
|
224
|
-
@parser.instance.patterns['format'])
|
239
|
+
assert_equal(Fluent::Plugin::SyslogParser::RFC5424_WITHOUT_TIME_AND_PRI_REGEXP, @parser.instance.patterns['format'])
|
225
240
|
end
|
226
241
|
|
227
242
|
def test_parse_with_rfc5424_message_and_without_priority
|
@@ -237,8 +252,7 @@ class SyslogParserTest < ::Test::Unit::TestCase
|
|
237
252
|
assert_equal "-", record["extradata"]
|
238
253
|
assert_equal "Hi, from Fluentd!", record["message"]
|
239
254
|
end
|
240
|
-
assert_equal(Fluent::Plugin::SyslogParser::
|
241
|
-
@parser.instance.patterns['format'])
|
255
|
+
assert_equal(Fluent::Plugin::SyslogParser::RFC5424_WITHOUT_TIME_AND_PRI_REGEXP, @parser.instance.patterns['format'])
|
242
256
|
end
|
243
257
|
|
244
258
|
def test_parse_with_rfc5424_empty_message_and_without_priority
|
@@ -254,8 +268,7 @@ class SyslogParserTest < ::Test::Unit::TestCase
|
|
254
268
|
assert_equal "-", record["extradata"]
|
255
269
|
assert_nil record["message"]
|
256
270
|
end
|
257
|
-
assert_equal(Fluent::Plugin::SyslogParser::
|
258
|
-
@parser.instance.patterns['format'])
|
271
|
+
assert_equal(Fluent::Plugin::SyslogParser::RFC5424_WITHOUT_TIME_AND_PRI_REGEXP, @parser.instance.patterns['format'])
|
259
272
|
end
|
260
273
|
|
261
274
|
def test_parse_with_rfc5424_message_without_time_format
|
@@ -408,7 +421,7 @@ class SyslogParserTest < ::Test::Unit::TestCase
|
|
408
421
|
assert_equal(event_time("Feb 28 00:00:12", format: '%b %d %M:%S:%H'), time)
|
409
422
|
assert_equal(@expected, record)
|
410
423
|
end
|
411
|
-
assert_equal(Fluent::Plugin::SyslogParser::
|
424
|
+
assert_equal(Fluent::Plugin::SyslogParser::RFC3164_WITHOUT_TIME_AND_PRI_REGEXP, @parser.instance.patterns['format'])
|
412
425
|
end
|
413
426
|
|
414
427
|
data('regexp' => 'regexp', 'string' => 'string')
|
@@ -424,7 +437,7 @@ class SyslogParserTest < ::Test::Unit::TestCase
|
|
424
437
|
assert_equal(event_time("Feb 28 12:00:00", format: '%b %d %M:%S:%H'), time)
|
425
438
|
assert_equal(@expected.merge('pri' => 6), record)
|
426
439
|
end
|
427
|
-
assert_equal(Fluent::Plugin::SyslogParser::
|
440
|
+
assert_equal(Fluent::Plugin::SyslogParser::RFC3164_WITHOUT_TIME_AND_PRI_REGEXP, @parser.instance.patterns['format'])
|
428
441
|
end
|
429
442
|
|
430
443
|
data('regexp' => 'regexp', 'string' => 'string')
|
@@ -443,8 +456,7 @@ class SyslogParserTest < ::Test::Unit::TestCase
|
|
443
456
|
assert_equal "-", record["extradata"]
|
444
457
|
assert_equal "Hi, from Fluentd!", record["message"]
|
445
458
|
end
|
446
|
-
assert_equal(Fluent::Plugin::SyslogParser::
|
447
|
-
@parser.instance.patterns['format'])
|
459
|
+
assert_equal(Fluent::Plugin::SyslogParser::RFC5424_WITHOUT_TIME_AND_PRI_REGEXP, @parser.instance.patterns['format'])
|
448
460
|
end
|
449
461
|
|
450
462
|
data('regexp' => 'regexp', 'string' => 'string')
|
@@ -464,9 +476,7 @@ class SyslogParserTest < ::Test::Unit::TestCase
|
|
464
476
|
record["extradata"]
|
465
477
|
assert_equal "Hi, from Fluentd!", record["message"]
|
466
478
|
end
|
467
|
-
assert_equal(Fluent::Plugin::SyslogParser::
|
468
|
-
@parser.instance.patterns['format'])
|
469
|
-
end
|
479
|
+
assert_equal(Fluent::Plugin::SyslogParser::RFC5424_WITHOUT_TIME_AND_PRI_REGEXP, @parser.instance.patterns['format'])end
|
470
480
|
|
471
481
|
data('regexp' => 'regexp', 'string' => 'string')
|
472
482
|
def test_parse_with_both_message_type(param)
|
@@ -482,7 +492,7 @@ class SyslogParserTest < ::Test::Unit::TestCase
|
|
482
492
|
assert_equal(event_time("Feb 28 12:00:00", format: '%b %d %M:%S:%H'), time)
|
483
493
|
assert_equal(@expected.merge('pri' => 1), record)
|
484
494
|
end
|
485
|
-
assert_equal(Fluent::Plugin::SyslogParser::
|
495
|
+
assert_equal(Fluent::Plugin::SyslogParser::RFC3164_WITHOUT_TIME_AND_PRI_REGEXP, @parser.instance.patterns['format'])
|
486
496
|
|
487
497
|
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!'
|
488
498
|
@parser.instance.parse(text) do |time, record|
|
@@ -493,15 +503,21 @@ class SyslogParserTest < ::Test::Unit::TestCase
|
|
493
503
|
record["extradata"]
|
494
504
|
assert_equal "Hi, from Fluentd!", record["message"]
|
495
505
|
end
|
496
|
-
assert_equal(Fluent::Plugin::SyslogParser::
|
497
|
-
|
506
|
+
assert_equal(Fluent::Plugin::SyslogParser::RFC5424_WITHOUT_TIME_AND_PRI_REGEXP, @parser.instance.patterns['format'])
|
507
|
+
|
508
|
+
text = '<1>Feb 28 12:00:02 192.168.0.1 fluentd[11111]: [error] Syslog test 2>1'
|
509
|
+
@parser.instance.parse(text) do |time, record|
|
510
|
+
assert_equal(event_time("Feb 28 12:00:02", format: '%b %d %M:%S:%H'), time)
|
511
|
+
assert_equal(@expected.merge('pri' => 1, 'message'=> '[error] Syslog test 2>1'), record)
|
512
|
+
end
|
513
|
+
assert_equal(Fluent::Plugin::SyslogParser::RFC3164_WITHOUT_TIME_AND_PRI_REGEXP, @parser.instance.patterns['format'])
|
498
514
|
|
499
515
|
text = '<1>Feb 28 12:00:02 192.168.0.1 fluentd[11111]: [error] Syslog test'
|
500
516
|
@parser.instance.parse(text) do |time, record|
|
501
517
|
assert_equal(event_time("Feb 28 12:00:02", format: '%b %d %M:%S:%H'), time)
|
502
518
|
assert_equal(@expected.merge('pri' => 1), record)
|
503
519
|
end
|
504
|
-
assert_equal(Fluent::Plugin::SyslogParser::
|
520
|
+
assert_equal(Fluent::Plugin::SyslogParser::RFC3164_WITHOUT_TIME_AND_PRI_REGEXP, @parser.instance.patterns['format'])
|
505
521
|
|
506
522
|
text = '<16>1 2017-02-06T13:14:15.003Z 192.168.0.1 fluentd - - - Hi, from Fluentd!'
|
507
523
|
@parser.instance.parse(text) do |time, record|
|
@@ -511,8 +527,7 @@ class SyslogParserTest < ::Test::Unit::TestCase
|
|
511
527
|
assert_equal "-", record["extradata"]
|
512
528
|
assert_equal "Hi, from Fluentd!", record["message"]
|
513
529
|
end
|
514
|
-
assert_equal(Fluent::Plugin::SyslogParser::
|
515
|
-
@parser.instance.patterns['format'])
|
530
|
+
assert_equal(Fluent::Plugin::SyslogParser::RFC5424_WITHOUT_TIME_AND_PRI_REGEXP, @parser.instance.patterns['format'])
|
516
531
|
end
|
517
532
|
|
518
533
|
data('regexp' => 'regexp', 'string' => 'string')
|
@@ -529,7 +544,7 @@ class SyslogParserTest < ::Test::Unit::TestCase
|
|
529
544
|
assert_equal(event_time("Feb 28 12:00:00", format: '%b %d %M:%S:%H'), time)
|
530
545
|
assert_equal(@expected.merge('pri' => 6), record)
|
531
546
|
end
|
532
|
-
assert_equal(Fluent::Plugin::SyslogParser::
|
547
|
+
assert_equal(Fluent::Plugin::SyslogParser::RFC3164_WITHOUT_TIME_AND_PRI_REGEXP, @parser.instance.patterns['format'])
|
533
548
|
|
534
549
|
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!'
|
535
550
|
@parser.instance.parse(text) do |time, record|
|
@@ -540,15 +555,14 @@ class SyslogParserTest < ::Test::Unit::TestCase
|
|
540
555
|
record["extradata"]
|
541
556
|
assert_equal "Hi, from Fluentd!", record["message"]
|
542
557
|
end
|
543
|
-
assert_equal(Fluent::Plugin::SyslogParser::
|
544
|
-
@parser.instance.patterns['format'])
|
558
|
+
assert_equal(Fluent::Plugin::SyslogParser::RFC5424_WITHOUT_TIME_AND_PRI_REGEXP, @parser.instance.patterns['format'])
|
545
559
|
|
546
560
|
text = '<16>Feb 28 12:00:02 192.168.0.1 fluentd[11111]: [error] Syslog test'
|
547
561
|
@parser.instance.parse(text) do |time, record|
|
548
562
|
assert_equal(event_time("Feb 28 12:00:02", format: '%b %d %M:%S:%H'), time)
|
549
563
|
assert_equal(@expected.merge('pri' => 16), record)
|
550
564
|
end
|
551
|
-
assert_equal(Fluent::Plugin::SyslogParser::
|
565
|
+
assert_equal(Fluent::Plugin::SyslogParser::RFC3164_WITHOUT_TIME_AND_PRI_REGEXP, @parser.instance.patterns['format'])
|
552
566
|
|
553
567
|
text = '<16>1 2017-02-06T13:14:15.003Z 192.168.0.1 fluentd - - - Hi, from Fluentd!'
|
554
568
|
@parser.instance.parse(text) do |time, record|
|
@@ -558,8 +572,7 @@ class SyslogParserTest < ::Test::Unit::TestCase
|
|
558
572
|
assert_equal "-", record["extradata"]
|
559
573
|
assert_equal "Hi, from Fluentd!", record["message"]
|
560
574
|
end
|
561
|
-
assert_equal(Fluent::Plugin::SyslogParser::
|
562
|
-
@parser.instance.patterns['format'])
|
575
|
+
assert_equal(Fluent::Plugin::SyslogParser::RFC5424_WITHOUT_TIME_AND_PRI_REGEXP, @parser.instance.patterns['format'])
|
563
576
|
|
564
577
|
text = '<16>1 2017-02-06T13:14:15Z 192.168.0.1 fluentd - - - Hi, from Fluentd without subseconds!'
|
565
578
|
@parser.instance.parse(text) do |time, record|
|
@@ -569,8 +582,7 @@ class SyslogParserTest < ::Test::Unit::TestCase
|
|
569
582
|
assert_equal "-", record["extradata"]
|
570
583
|
assert_equal "Hi, from Fluentd without subseconds!", record["message"]
|
571
584
|
end
|
572
|
-
assert_equal(Fluent::Plugin::SyslogParser::
|
573
|
-
@parser.instance.patterns['format'])
|
585
|
+
assert_equal(Fluent::Plugin::SyslogParser::RFC5424_WITHOUT_TIME_AND_PRI_REGEXP, @parser.instance.patterns['format'])
|
574
586
|
end
|
575
587
|
end
|
576
588
|
end
|