fluentd 1.17.0-x64-mingw32 → 1.17.1-x64-mingw32
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.
Potentially problematic release.
This version of fluentd might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +46 -0
- data/README.md +1 -0
- data/SECURITY.md +2 -2
- data/fluent.conf +14 -14
- data/lib/fluent/command/cap_ctl.rb +4 -4
- data/lib/fluent/compat/call_super_mixin.rb +3 -3
- data/lib/fluent/compat/propagate_default.rb +4 -4
- data/lib/fluent/config/yaml_parser/parser.rb +4 -0
- data/lib/fluent/log/console_adapter.rb +4 -2
- data/lib/fluent/plugin/in_exec.rb +14 -2
- data/lib/fluent/plugin/in_http.rb +1 -1
- data/lib/fluent/plugin/in_sample.rb +13 -7
- data/lib/fluent/plugin/in_tail.rb +65 -23
- data/lib/fluent/plugin/out_copy.rb +1 -1
- data/lib/fluent/plugin/out_file.rb +8 -0
- data/lib/fluent/plugin/out_http.rb +12 -0
- data/lib/fluent/plugin/parser_json.rb +4 -12
- data/lib/fluent/plugin_helper/http_server/server.rb +1 -1
- data/lib/fluent/version.rb +1 -1
- data/templates/new_gem/fluent-plugin.gemspec.erb +6 -5
- metadata +25 -472
- data/.github/DISCUSSION_TEMPLATE/q-a-japanese.yml +0 -50
- data/.github/DISCUSSION_TEMPLATE/q-a.yml +0 -47
- data/.github/ISSUE_TEMPLATE/bug_report.yml +0 -71
- data/.github/ISSUE_TEMPLATE/config.yml +0 -5
- data/.github/ISSUE_TEMPLATE/feature_request.yml +0 -39
- data/.github/ISSUE_TEMPLATE.md +0 -17
- data/.github/PULL_REQUEST_TEMPLATE.md +0 -14
- data/.github/workflows/stale-actions.yml +0 -24
- data/.github/workflows/test-ruby-head.yml +0 -31
- data/.github/workflows/test.yml +0 -32
- data/.gitignore +0 -30
- data/Gemfile +0 -9
- data/fluentd.gemspec +0 -62
- data/test/command/test_binlog_reader.rb +0 -362
- data/test/command/test_ca_generate.rb +0 -70
- data/test/command/test_cap_ctl.rb +0 -100
- data/test/command/test_cat.rb +0 -128
- data/test/command/test_ctl.rb +0 -56
- data/test/command/test_fluentd.rb +0 -1291
- data/test/command/test_plugin_config_formatter.rb +0 -397
- data/test/command/test_plugin_generator.rb +0 -109
- data/test/compat/test_calls_super.rb +0 -166
- data/test/compat/test_parser.rb +0 -92
- data/test/config/assertions.rb +0 -42
- data/test/config/test_config_parser.rb +0 -551
- data/test/config/test_configurable.rb +0 -1784
- data/test/config/test_configure_proxy.rb +0 -604
- data/test/config/test_dsl.rb +0 -415
- data/test/config/test_element.rb +0 -518
- data/test/config/test_literal_parser.rb +0 -309
- data/test/config/test_plugin_configuration.rb +0 -56
- data/test/config/test_section.rb +0 -191
- data/test/config/test_system_config.rb +0 -195
- data/test/config/test_types.rb +0 -408
- data/test/counter/test_client.rb +0 -563
- data/test/counter/test_error.rb +0 -44
- data/test/counter/test_mutex_hash.rb +0 -179
- data/test/counter/test_server.rb +0 -589
- data/test/counter/test_store.rb +0 -258
- data/test/counter/test_validator.rb +0 -137
- data/test/helper.rb +0 -155
- data/test/helpers/fuzzy_assert.rb +0 -89
- data/test/helpers/process_extenstion.rb +0 -33
- data/test/log/test_console_adapter.rb +0 -117
- data/test/plugin/data/2010/01/20100102-030405.log +0 -0
- data/test/plugin/data/2010/01/20100102-030406.log +0 -0
- data/test/plugin/data/2010/01/20100102.log +0 -0
- data/test/plugin/data/log/bar +0 -0
- data/test/plugin/data/log/foo/bar.log +0 -0
- data/test/plugin/data/log/foo/bar2 +0 -0
- data/test/plugin/data/log/test.log +0 -0
- data/test/plugin/data/log_numeric/01.log +0 -0
- data/test/plugin/data/log_numeric/02.log +0 -0
- data/test/plugin/data/log_numeric/12.log +0 -0
- data/test/plugin/data/log_numeric/14.log +0 -0
- data/test/plugin/data/sd_file/config +0 -11
- data/test/plugin/data/sd_file/config.json +0 -17
- data/test/plugin/data/sd_file/config.yaml +0 -11
- data/test/plugin/data/sd_file/config.yml +0 -11
- data/test/plugin/data/sd_file/invalid_config.yml +0 -7
- data/test/plugin/in_tail/test_fifo.rb +0 -121
- data/test/plugin/in_tail/test_io_handler.rb +0 -150
- data/test/plugin/in_tail/test_position_file.rb +0 -346
- data/test/plugin/out_forward/test_ack_handler.rb +0 -140
- data/test/plugin/out_forward/test_connection_manager.rb +0 -145
- data/test/plugin/out_forward/test_handshake_protocol.rb +0 -112
- data/test/plugin/out_forward/test_load_balancer.rb +0 -106
- data/test/plugin/out_forward/test_socket_cache.rb +0 -174
- data/test/plugin/test_bare_output.rb +0 -131
- data/test/plugin/test_base.rb +0 -247
- data/test/plugin/test_buf_file.rb +0 -1314
- data/test/plugin/test_buf_file_single.rb +0 -898
- data/test/plugin/test_buf_memory.rb +0 -42
- data/test/plugin/test_buffer.rb +0 -1493
- data/test/plugin/test_buffer_chunk.rb +0 -209
- data/test/plugin/test_buffer_file_chunk.rb +0 -871
- data/test/plugin/test_buffer_file_single_chunk.rb +0 -611
- data/test/plugin/test_buffer_memory_chunk.rb +0 -339
- data/test/plugin/test_compressable.rb +0 -87
- data/test/plugin/test_file_util.rb +0 -96
- data/test/plugin/test_filter.rb +0 -368
- data/test/plugin/test_filter_grep.rb +0 -697
- data/test/plugin/test_filter_parser.rb +0 -731
- data/test/plugin/test_filter_record_transformer.rb +0 -577
- data/test/plugin/test_filter_stdout.rb +0 -207
- data/test/plugin/test_formatter_csv.rb +0 -136
- data/test/plugin/test_formatter_hash.rb +0 -38
- data/test/plugin/test_formatter_json.rb +0 -61
- data/test/plugin/test_formatter_ltsv.rb +0 -70
- data/test/plugin/test_formatter_msgpack.rb +0 -28
- data/test/plugin/test_formatter_out_file.rb +0 -116
- data/test/plugin/test_formatter_single_value.rb +0 -44
- data/test/plugin/test_formatter_tsv.rb +0 -76
- data/test/plugin/test_in_debug_agent.rb +0 -49
- data/test/plugin/test_in_exec.rb +0 -261
- data/test/plugin/test_in_forward.rb +0 -1178
- data/test/plugin/test_in_gc_stat.rb +0 -62
- data/test/plugin/test_in_http.rb +0 -1124
- data/test/plugin/test_in_monitor_agent.rb +0 -922
- data/test/plugin/test_in_object_space.rb +0 -66
- data/test/plugin/test_in_sample.rb +0 -190
- data/test/plugin/test_in_syslog.rb +0 -505
- data/test/plugin/test_in_tail.rb +0 -3429
- data/test/plugin/test_in_tcp.rb +0 -328
- data/test/plugin/test_in_udp.rb +0 -296
- data/test/plugin/test_in_unix.rb +0 -181
- data/test/plugin/test_input.rb +0 -137
- data/test/plugin/test_metadata.rb +0 -89
- data/test/plugin/test_metrics.rb +0 -294
- data/test/plugin/test_metrics_local.rb +0 -96
- data/test/plugin/test_multi_output.rb +0 -204
- data/test/plugin/test_out_copy.rb +0 -308
- data/test/plugin/test_out_exec.rb +0 -312
- data/test/plugin/test_out_exec_filter.rb +0 -606
- data/test/plugin/test_out_file.rb +0 -1038
- data/test/plugin/test_out_forward.rb +0 -1349
- data/test/plugin/test_out_http.rb +0 -557
- data/test/plugin/test_out_null.rb +0 -105
- data/test/plugin/test_out_relabel.rb +0 -28
- data/test/plugin/test_out_roundrobin.rb +0 -146
- data/test/plugin/test_out_secondary_file.rb +0 -458
- data/test/plugin/test_out_stdout.rb +0 -205
- data/test/plugin/test_out_stream.rb +0 -103
- data/test/plugin/test_output.rb +0 -1334
- data/test/plugin/test_output_as_buffered.rb +0 -2024
- data/test/plugin/test_output_as_buffered_backup.rb +0 -363
- data/test/plugin/test_output_as_buffered_compress.rb +0 -179
- data/test/plugin/test_output_as_buffered_overflow.rb +0 -250
- data/test/plugin/test_output_as_buffered_retries.rb +0 -966
- data/test/plugin/test_output_as_buffered_secondary.rb +0 -882
- data/test/plugin/test_output_as_standard.rb +0 -374
- data/test/plugin/test_owned_by.rb +0 -34
- data/test/plugin/test_parser.rb +0 -399
- data/test/plugin/test_parser_apache.rb +0 -42
- data/test/plugin/test_parser_apache2.rb +0 -47
- data/test/plugin/test_parser_apache_error.rb +0 -45
- data/test/plugin/test_parser_csv.rb +0 -200
- data/test/plugin/test_parser_json.rb +0 -244
- data/test/plugin/test_parser_labeled_tsv.rb +0 -160
- data/test/plugin/test_parser_msgpack.rb +0 -127
- data/test/plugin/test_parser_multiline.rb +0 -111
- data/test/plugin/test_parser_nginx.rb +0 -88
- data/test/plugin/test_parser_none.rb +0 -52
- data/test/plugin/test_parser_regexp.rb +0 -284
- data/test/plugin/test_parser_syslog.rb +0 -650
- data/test/plugin/test_parser_tsv.rb +0 -122
- data/test/plugin/test_sd_file.rb +0 -228
- data/test/plugin/test_sd_srv.rb +0 -230
- data/test/plugin/test_storage.rb +0 -166
- data/test/plugin/test_storage_local.rb +0 -335
- data/test/plugin/test_string_util.rb +0 -26
- data/test/plugin_helper/data/cert/cert-key.pem +0 -27
- data/test/plugin_helper/data/cert/cert-with-CRLF.pem +0 -19
- data/test/plugin_helper/data/cert/cert-with-no-newline.pem +0 -19
- data/test/plugin_helper/data/cert/cert.pem +0 -19
- data/test/plugin_helper/data/cert/cert_chains/ca-cert-key.pem +0 -27
- data/test/plugin_helper/data/cert/cert_chains/ca-cert.pem +0 -20
- data/test/plugin_helper/data/cert/cert_chains/cert-key.pem +0 -27
- data/test/plugin_helper/data/cert/cert_chains/cert.pem +0 -40
- data/test/plugin_helper/data/cert/empty.pem +0 -0
- data/test/plugin_helper/data/cert/generate_cert.rb +0 -125
- data/test/plugin_helper/data/cert/with_ca/ca-cert-key-pass.pem +0 -30
- data/test/plugin_helper/data/cert/with_ca/ca-cert-key.pem +0 -27
- data/test/plugin_helper/data/cert/with_ca/ca-cert-pass.pem +0 -20
- data/test/plugin_helper/data/cert/with_ca/ca-cert.pem +0 -20
- data/test/plugin_helper/data/cert/with_ca/cert-key-pass.pem +0 -30
- data/test/plugin_helper/data/cert/with_ca/cert-key.pem +0 -27
- data/test/plugin_helper/data/cert/with_ca/cert-pass.pem +0 -21
- data/test/plugin_helper/data/cert/with_ca/cert.pem +0 -21
- data/test/plugin_helper/data/cert/without_ca/cert-key-pass.pem +0 -30
- data/test/plugin_helper/data/cert/without_ca/cert-key.pem +0 -27
- data/test/plugin_helper/data/cert/without_ca/cert-pass.pem +0 -20
- data/test/plugin_helper/data/cert/without_ca/cert.pem +0 -20
- data/test/plugin_helper/http_server/test_app.rb +0 -65
- data/test/plugin_helper/http_server/test_route.rb +0 -32
- data/test/plugin_helper/service_discovery/test_manager.rb +0 -93
- data/test/plugin_helper/service_discovery/test_round_robin_balancer.rb +0 -21
- data/test/plugin_helper/test_cert_option.rb +0 -25
- data/test/plugin_helper/test_child_process.rb +0 -862
- data/test/plugin_helper/test_compat_parameters.rb +0 -358
- data/test/plugin_helper/test_event_emitter.rb +0 -80
- data/test/plugin_helper/test_event_loop.rb +0 -52
- data/test/plugin_helper/test_extract.rb +0 -194
- data/test/plugin_helper/test_formatter.rb +0 -255
- data/test/plugin_helper/test_http_server_helper.rb +0 -372
- data/test/plugin_helper/test_inject.rb +0 -561
- data/test/plugin_helper/test_metrics.rb +0 -137
- data/test/plugin_helper/test_parser.rb +0 -264
- data/test/plugin_helper/test_record_accessor.rb +0 -238
- data/test/plugin_helper/test_retry_state.rb +0 -1006
- data/test/plugin_helper/test_server.rb +0 -1895
- data/test/plugin_helper/test_service_discovery.rb +0 -165
- data/test/plugin_helper/test_socket.rb +0 -146
- data/test/plugin_helper/test_storage.rb +0 -542
- data/test/plugin_helper/test_thread.rb +0 -164
- data/test/plugin_helper/test_timer.rb +0 -130
- data/test/scripts/exec_script.rb +0 -32
- data/test/scripts/fluent/plugin/formatter1/formatter_test1.rb +0 -7
- data/test/scripts/fluent/plugin/formatter2/formatter_test2.rb +0 -7
- data/test/scripts/fluent/plugin/formatter_known.rb +0 -8
- data/test/scripts/fluent/plugin/out_test.rb +0 -81
- data/test/scripts/fluent/plugin/out_test2.rb +0 -80
- data/test/scripts/fluent/plugin/parser_known.rb +0 -4
- data/test/test_capability.rb +0 -74
- data/test/test_clock.rb +0 -164
- data/test/test_config.rb +0 -369
- data/test/test_configdsl.rb +0 -148
- data/test/test_daemonizer.rb +0 -91
- data/test/test_engine.rb +0 -203
- data/test/test_event.rb +0 -531
- data/test/test_event_router.rb +0 -348
- data/test/test_event_time.rb +0 -199
- data/test/test_file_wrapper.rb +0 -53
- data/test/test_filter.rb +0 -121
- data/test/test_fluent_log_event_router.rb +0 -99
- data/test/test_formatter.rb +0 -369
- data/test/test_input.rb +0 -31
- data/test/test_log.rb +0 -1076
- data/test/test_match.rb +0 -148
- data/test/test_mixin.rb +0 -351
- data/test/test_msgpack_factory.rb +0 -50
- data/test/test_oj_options.rb +0 -55
- data/test/test_output.rb +0 -278
- data/test/test_plugin.rb +0 -251
- data/test/test_plugin_classes.rb +0 -370
- data/test/test_plugin_helper.rb +0 -81
- data/test/test_plugin_id.rb +0 -119
- data/test/test_process.rb +0 -14
- data/test/test_root_agent.rb +0 -951
- data/test/test_static_config_analysis.rb +0 -177
- data/test/test_supervisor.rb +0 -821
- data/test/test_test_drivers.rb +0 -136
- data/test/test_time_formatter.rb +0 -301
- data/test/test_time_parser.rb +0 -362
- data/test/test_tls.rb +0 -65
- data/test/test_unique_id.rb +0 -47
- data/test/test_variable_store.rb +0 -65
data/test/plugin/test_parser.rb
DELETED
@@ -1,399 +0,0 @@
|
|
1
|
-
require_relative '../helper'
|
2
|
-
require 'fluent/test/driver/parser'
|
3
|
-
require 'fluent/plugin/parser'
|
4
|
-
require 'json'
|
5
|
-
require 'timecop'
|
6
|
-
|
7
|
-
class ParserTest < ::Test::Unit::TestCase
|
8
|
-
class ExampleParser < Fluent::Plugin::Parser
|
9
|
-
def parse(data)
|
10
|
-
r = JSON.parse(data)
|
11
|
-
yield convert_values(parse_time(r), r)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
def create_driver(conf={})
|
16
|
-
Fluent::Test::Driver::Parser.new(Fluent::Plugin::Parser).configure(conf)
|
17
|
-
end
|
18
|
-
|
19
|
-
def setup
|
20
|
-
Fluent::Test.setup
|
21
|
-
end
|
22
|
-
|
23
|
-
sub_test_case 'base class works as plugin' do
|
24
|
-
def test_init
|
25
|
-
i = Fluent::Plugin::Parser.new
|
26
|
-
assert_nil i.types
|
27
|
-
assert_nil i.null_value_pattern
|
28
|
-
assert !i.null_empty_string
|
29
|
-
assert i.estimate_current_event
|
30
|
-
assert !i.keep_time_key
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_configure_against_string_literal
|
34
|
-
d = create_driver('keep_time_key true')
|
35
|
-
assert_true d.instance.keep_time_key
|
36
|
-
end
|
37
|
-
|
38
|
-
def test_parse
|
39
|
-
d = create_driver
|
40
|
-
assert_raise NotImplementedError do
|
41
|
-
d.instance.parse('')
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
sub_test_case '#string_like_null' do
|
47
|
-
setup do
|
48
|
-
@i = ExampleParser.new
|
49
|
-
end
|
50
|
-
|
51
|
-
test 'returns false if null_empty_string is false and null_value_regexp is nil' do
|
52
|
-
assert ! @i.string_like_null('a', false, nil)
|
53
|
-
assert ! @i.string_like_null('', false, nil)
|
54
|
-
end
|
55
|
-
|
56
|
-
test 'returns true if null_empty_string is true and string value is empty' do
|
57
|
-
assert ! @i.string_like_null('a', true, nil)
|
58
|
-
assert @i.string_like_null('', true, nil)
|
59
|
-
end
|
60
|
-
|
61
|
-
test 'returns true if null_value_regexp has regexp and it matches string value' do
|
62
|
-
assert ! @i.string_like_null('a', false, /null/i)
|
63
|
-
assert @i.string_like_null('NULL', false, /null/i)
|
64
|
-
assert @i.string_like_null('empty', false, /null|empty/i)
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
sub_test_case '#build_type_converters converters' do
|
69
|
-
setup do
|
70
|
-
@i = ExampleParser.new
|
71
|
-
types_config = {
|
72
|
-
"s" => "string",
|
73
|
-
"i" => "integer",
|
74
|
-
"f" => "float",
|
75
|
-
"b" => "bool",
|
76
|
-
"t1" => "time",
|
77
|
-
"t2" => "time:%Y-%m-%d %H:%M:%S.%N",
|
78
|
-
"t3" => "time:+0100:%Y-%m-%d %H:%M:%S.%N",
|
79
|
-
"t4" => "time:unixtime",
|
80
|
-
"t5" => "time:float",
|
81
|
-
"a1" => "array",
|
82
|
-
"a2" => "array:|",
|
83
|
-
}
|
84
|
-
@hash = {
|
85
|
-
'types' => JSON.dump(types_config),
|
86
|
-
}
|
87
|
-
end
|
88
|
-
|
89
|
-
test 'to do #to_s by "string" type' do
|
90
|
-
@i.configure(config_element('parse', '', @hash))
|
91
|
-
c = @i.type_converters["s"]
|
92
|
-
assert_equal "", c.call("")
|
93
|
-
assert_equal "a", c.call("a")
|
94
|
-
assert_equal "1", c.call(1)
|
95
|
-
assert_equal "1.01", c.call(1.01)
|
96
|
-
assert_equal "true", c.call(true)
|
97
|
-
assert_equal "false", c.call(false)
|
98
|
-
end
|
99
|
-
|
100
|
-
test 'to do #to_i by "integer" type' do
|
101
|
-
@i.configure(config_element('parse', '', @hash))
|
102
|
-
c = @i.type_converters["i"]
|
103
|
-
assert_equal 0, c.call("")
|
104
|
-
assert_equal 0, c.call("0")
|
105
|
-
assert_equal 0, c.call("a")
|
106
|
-
assert_equal(-1000, c.call("-1000"))
|
107
|
-
assert_equal 1, c.call(1)
|
108
|
-
assert_equal 1, c.call(1.01)
|
109
|
-
assert_equal 0, c.call(true)
|
110
|
-
assert_equal 0, c.call(false)
|
111
|
-
end
|
112
|
-
|
113
|
-
test 'to do #to_f by "float" type' do
|
114
|
-
@i.configure(config_element('parse', '', @hash))
|
115
|
-
c = @i.type_converters["f"]
|
116
|
-
assert_equal 0.0, c.call("")
|
117
|
-
assert_equal 0.0, c.call("0")
|
118
|
-
assert_equal 0.0, c.call("a")
|
119
|
-
assert_equal(-1000.0, c.call("-1000"))
|
120
|
-
assert_equal 1.0, c.call(1)
|
121
|
-
assert_equal 1.01, c.call(1.01)
|
122
|
-
assert_equal 0.0, c.call(true)
|
123
|
-
assert_equal 0.0, c.call(false)
|
124
|
-
end
|
125
|
-
|
126
|
-
test 'to return true/false, which returns true only for true/yes/1 (C & perl style), by "bool"' do
|
127
|
-
@i.configure(config_element('parse', '', @hash))
|
128
|
-
c = @i.type_converters["b"]
|
129
|
-
assert_false c.call("")
|
130
|
-
assert_false c.call("0")
|
131
|
-
assert_false c.call("a")
|
132
|
-
assert_true c.call("1")
|
133
|
-
assert_true c.call("true")
|
134
|
-
assert_true c.call("True")
|
135
|
-
assert_true c.call("YES")
|
136
|
-
assert_true c.call(true)
|
137
|
-
assert_false c.call(false)
|
138
|
-
assert_false c.call("1.0")
|
139
|
-
end
|
140
|
-
|
141
|
-
test 'to parse time string by ruby default time parser without any options' do
|
142
|
-
# "t1" => "time",
|
143
|
-
with_timezone("UTC+02") do # -0200
|
144
|
-
@i.configure(config_element('parse', '', @hash))
|
145
|
-
c = @i.type_converters["t1"]
|
146
|
-
assert_nil c.call("")
|
147
|
-
assert_equal_event_time event_time("2016-10-21 01:54:30 -0200"), c.call("2016-10-21 01:54:30")
|
148
|
-
assert_equal_event_time event_time("2016-10-21 03:54:30 -0200"), c.call("2016-10-21 01:54:30 -0400")
|
149
|
-
assert_equal_event_time event_time("2016-10-21 01:55:24 -0200"), c.call("2016-10-21T01:55:24-02:00")
|
150
|
-
assert_equal_event_time event_time("2016-10-21 01:55:24 -0200"), c.call("2016-10-21T03:55:24Z")
|
151
|
-
end
|
152
|
-
end
|
153
|
-
|
154
|
-
test 'to parse time string with specified time format' do
|
155
|
-
# "t2" => "time:%Y-%m-%d %H:%M:%S.%N",
|
156
|
-
with_timezone("UTC+02") do # -0200
|
157
|
-
@i.configure(config_element('parse', '', @hash))
|
158
|
-
c = @i.type_converters["t2"]
|
159
|
-
assert_nil c.call("")
|
160
|
-
assert_equal_event_time event_time("2016-10-21 01:54:30.123000000 -0200"), c.call("2016-10-21 01:54:30.123")
|
161
|
-
assert_equal_event_time event_time("2016-10-21 01:54:30.012345678 -0200"), c.call("2016-10-21 01:54:30.012345678")
|
162
|
-
assert_nil c.call("2016/10/21 015430")
|
163
|
-
end
|
164
|
-
end
|
165
|
-
|
166
|
-
test 'to parse time string with specified time format and timezone' do
|
167
|
-
# "t3" => "time:+0100:%Y-%m-%d %H:%M:%S.%N",
|
168
|
-
with_timezone("UTC+02") do # -0200
|
169
|
-
@i.configure(config_element('parse', '', @hash))
|
170
|
-
c = @i.type_converters["t3"]
|
171
|
-
assert_nil c.call("")
|
172
|
-
assert_equal_event_time event_time("2016-10-21 01:54:30.123000000 +0100"), c.call("2016-10-21 01:54:30.123")
|
173
|
-
assert_equal_event_time event_time("2016-10-21 01:54:30.012345678 +0100"), c.call("2016-10-21 01:54:30.012345678")
|
174
|
-
end
|
175
|
-
end
|
176
|
-
|
177
|
-
test 'to parse time string in unix timestamp' do
|
178
|
-
# "t4" => "time:unixtime",
|
179
|
-
with_timezone("UTC+02") do # -0200
|
180
|
-
@i.configure(config_element('parse', '', @hash))
|
181
|
-
c = @i.type_converters["t4"]
|
182
|
-
assert_equal_event_time event_time("1970-01-01 00:00:00.0 +0000"), c.call("")
|
183
|
-
assert_equal_event_time event_time("2016-10-21 01:54:30.0 -0200"), c.call("1477022070")
|
184
|
-
assert_equal_event_time event_time("2016-10-21 01:54:30.0 -0200"), c.call("1477022070.01")
|
185
|
-
end
|
186
|
-
end
|
187
|
-
|
188
|
-
test 'to parse time string in floating poing value' do
|
189
|
-
# "t5" => "time:float",
|
190
|
-
with_timezone("UTC+02") do # -0200
|
191
|
-
@i.configure(config_element('parse', '', @hash))
|
192
|
-
c = @i.type_converters["t5"]
|
193
|
-
assert_equal_event_time event_time("1970-01-01 00:00:00.0 +0000"), c.call("")
|
194
|
-
assert_equal_event_time event_time("2016-10-21 01:54:30.012 -0200"), c.call("1477022070.012")
|
195
|
-
assert_equal_event_time event_time("2016-10-21 01:54:30.123456789 -0200"), c.call("1477022070.123456789")
|
196
|
-
end
|
197
|
-
end
|
198
|
-
|
199
|
-
test 'to return array of string' do
|
200
|
-
@i.configure(config_element('parse', '', @hash))
|
201
|
-
c = @i.type_converters["a1"]
|
202
|
-
assert_equal [], c.call("")
|
203
|
-
assert_equal ["0"], c.call("0")
|
204
|
-
assert_equal ["0"], c.call(0)
|
205
|
-
assert_equal ["0", "1"], c.call("0,1")
|
206
|
-
assert_equal ["0|1", "2"], c.call("0|1,2")
|
207
|
-
assert_equal ["true"], c.call(true)
|
208
|
-
end
|
209
|
-
|
210
|
-
test 'to return array of string using specified delimiter' do
|
211
|
-
@i.configure(config_element('parse', '', @hash))
|
212
|
-
c = @i.type_converters["a2"]
|
213
|
-
assert_equal [], c.call("")
|
214
|
-
assert_equal ["0"], c.call("0")
|
215
|
-
assert_equal ["0"], c.call(0)
|
216
|
-
assert_equal ["0,1"], c.call("0,1")
|
217
|
-
assert_equal ["0", "1,2"], c.call("0|1,2")
|
218
|
-
assert_equal ["true"], c.call(true)
|
219
|
-
end
|
220
|
-
end
|
221
|
-
|
222
|
-
sub_test_case 'example parser without any configurations' do
|
223
|
-
setup do
|
224
|
-
@current_time = Time.parse("2016-10-21 14:22:01.0 +1000")
|
225
|
-
@current_event_time = Fluent::EventTime.new(@current_time.to_i, 0)
|
226
|
-
# @current_time.to_i #=> 1477023721
|
227
|
-
Timecop.freeze(@current_time)
|
228
|
-
@i = ExampleParser.new
|
229
|
-
@i.configure(config_element('parse', '', {}))
|
230
|
-
end
|
231
|
-
|
232
|
-
teardown do
|
233
|
-
Timecop.return
|
234
|
-
end
|
235
|
-
|
236
|
-
test 'parser returns parsed JSON object, leaving empty/NULL strings, with current time' do
|
237
|
-
json = '{"t1":"1477023720.101","s1":"","s2":"NULL","s3":"null","k1":1,"k2":"13.1","k3":"1","k4":"yes"}'
|
238
|
-
@i.parse(json) do |time, record|
|
239
|
-
assert_equal_event_time @current_event_time, time
|
240
|
-
assert_equal "1477023720.101", record["t1"]
|
241
|
-
assert_equal "", record["s1"]
|
242
|
-
assert_equal "NULL", record["s2"]
|
243
|
-
assert_equal "null", record["s3"]
|
244
|
-
assert_equal 1, record["k1"]
|
245
|
-
assert_equal "13.1", record["k2"]
|
246
|
-
assert_equal "1", record["k3"]
|
247
|
-
assert_equal "yes", record["k4"]
|
248
|
-
end
|
249
|
-
end
|
250
|
-
end
|
251
|
-
|
252
|
-
sub_test_case 'example parser fully configured' do
|
253
|
-
setup do
|
254
|
-
@current_time = Time.parse("2016-10-21 14:22:01.0 +1000")
|
255
|
-
@current_event_time = Fluent::EventTime.new(@current_time.to_i, 0)
|
256
|
-
# @current_time.to_i #=> 1477023721
|
257
|
-
Timecop.freeze(@current_time)
|
258
|
-
@i = ExampleParser.new
|
259
|
-
hash = {
|
260
|
-
'keep_time_key' => "no",
|
261
|
-
'estimate_current_event' => "yes",
|
262
|
-
'time_key' => "t1",
|
263
|
-
'time_type' => "float",
|
264
|
-
'null_empty_string' => 'yes',
|
265
|
-
'null_value_pattern' => 'NULL|null',
|
266
|
-
'types' => "k1:string, k2:integer, k3:float, k4:bool",
|
267
|
-
}
|
268
|
-
@i.configure(config_element('parse', '', hash))
|
269
|
-
end
|
270
|
-
|
271
|
-
teardown do
|
272
|
-
Timecop.return
|
273
|
-
end
|
274
|
-
|
275
|
-
test 'parser returns parsed JSON object, leaving empty/NULL strings, with current time' do
|
276
|
-
json = '{"t1":"1477023720.101","s1":"","s2":"NULL","s3":"null","k1":1,"k2":"13.1","k3":"1","k4":"yes"}'
|
277
|
-
@i.parse(json) do |time, record|
|
278
|
-
assert_equal_event_time Fluent::EventTime.new(1477023720, 101_000_000), time
|
279
|
-
assert !record.has_key?("t1")
|
280
|
-
assert{ record.has_key?("s1") && record["s1"].nil? }
|
281
|
-
assert{ record.has_key?("s2") && record["s2"].nil? }
|
282
|
-
assert{ record.has_key?("s3") && record["s3"].nil? }
|
283
|
-
assert_equal "1", record["k1"]
|
284
|
-
assert_equal 13, record["k2"]
|
285
|
-
assert_equal 1.0, record["k3"]
|
286
|
-
assert_equal true, record["k4"]
|
287
|
-
end
|
288
|
-
end
|
289
|
-
|
290
|
-
test 'parser returns current time if a field is missing specified by time_key' do
|
291
|
-
json = '{"s1":"","s2":"NULL","s3":"null","k1":1,"k2":"13.1","k3":"1","k4":"yes"}'
|
292
|
-
@i.parse(json) do |time, record|
|
293
|
-
assert_equal_event_time @current_event_time, time
|
294
|
-
assert !record.has_key?("t1")
|
295
|
-
assert{ record.has_key?("s1") && record["s1"].nil? }
|
296
|
-
assert{ record.has_key?("s2") && record["s2"].nil? }
|
297
|
-
assert{ record.has_key?("s3") && record["s3"].nil? }
|
298
|
-
assert_equal "1", record["k1"]
|
299
|
-
assert_equal 13, record["k2"]
|
300
|
-
assert_equal 1.0, record["k3"]
|
301
|
-
assert_equal true, record["k4"]
|
302
|
-
end
|
303
|
-
end
|
304
|
-
end
|
305
|
-
|
306
|
-
sub_test_case 'example parser configured not to estimate current time, and to keep time key' do
|
307
|
-
setup do
|
308
|
-
@current_time = Time.parse("2016-10-21 14:22:01.0 +1000")
|
309
|
-
@current_event_time = Fluent::EventTime.new(@current_time.to_i, 0)
|
310
|
-
# @current_time.to_i #=> 1477023721
|
311
|
-
Timecop.freeze(@current_time)
|
312
|
-
@i = ExampleParser.new
|
313
|
-
hash = {
|
314
|
-
'keep_time_key' => "yes",
|
315
|
-
'estimate_current_event' => "no",
|
316
|
-
'time_key' => "t1",
|
317
|
-
'time_type' => "float",
|
318
|
-
'null_empty_string' => 'yes',
|
319
|
-
'null_value_pattern' => 'NULL|null',
|
320
|
-
'types' => "k1:string, k2:integer, k3:float, k4:bool",
|
321
|
-
}
|
322
|
-
@i.configure(config_element('parse', '', hash))
|
323
|
-
end
|
324
|
-
|
325
|
-
teardown do
|
326
|
-
Timecop.return
|
327
|
-
end
|
328
|
-
|
329
|
-
test 'parser returns parsed time with original field and value if the field of time exists' do
|
330
|
-
json = '{"t1":"1477023720.101","s1":"","s2":"NULL","s3":"null","k1":1,"k2":"13.1","k3":"1","k4":"yes"}'
|
331
|
-
@i.parse(json) do |time, record|
|
332
|
-
assert_equal_event_time Fluent::EventTime.new(1477023720, 101_000_000), time
|
333
|
-
assert_equal "1477023720.101", record["t1"]
|
334
|
-
assert{ record.has_key?("s1") && record["s1"].nil? }
|
335
|
-
assert{ record.has_key?("s2") && record["s2"].nil? }
|
336
|
-
assert{ record.has_key?("s3") && record["s3"].nil? }
|
337
|
-
assert_equal "1", record["k1"]
|
338
|
-
assert_equal 13, record["k2"]
|
339
|
-
assert_equal 1.0, record["k3"]
|
340
|
-
assert_equal true, record["k4"]
|
341
|
-
end
|
342
|
-
end
|
343
|
-
|
344
|
-
test 'parser returns nil as time if the field of time is missing' do
|
345
|
-
json = '{"s1":"","s2":"NULL","s3":"null","k1":1,"k2":"13.1","k3":"1","k4":"yes"}'
|
346
|
-
@i.parse(json) do |time, record|
|
347
|
-
assert_nil time
|
348
|
-
assert !record.has_key?("t1")
|
349
|
-
assert{ record.has_key?("s1") && record["s1"].nil? }
|
350
|
-
assert{ record.has_key?("s2") && record["s2"].nil? }
|
351
|
-
assert{ record.has_key?("s3") && record["s3"].nil? }
|
352
|
-
assert_equal "1", record["k1"]
|
353
|
-
assert_equal 13, record["k2"]
|
354
|
-
assert_equal 1.0, record["k3"]
|
355
|
-
assert_equal true, record["k4"]
|
356
|
-
end
|
357
|
-
end
|
358
|
-
end
|
359
|
-
|
360
|
-
sub_test_case 'timeout' do
|
361
|
-
class SleepParser < Fluent::Plugin::Parser
|
362
|
-
attr :test_value
|
363
|
-
|
364
|
-
def configure(conf)
|
365
|
-
super
|
366
|
-
|
367
|
-
@test_value = nil
|
368
|
-
end
|
369
|
-
|
370
|
-
def parse(data)
|
371
|
-
sleep 10
|
372
|
-
@test_value = :passed
|
373
|
-
yield JSON.parse(data), Fluent::EventTime.now
|
374
|
-
end
|
375
|
-
end
|
376
|
-
|
377
|
-
setup do
|
378
|
-
@i = SleepParser.new
|
379
|
-
@i.instance_variable_set(:@log, Fluent::Test::TestLogger.new)
|
380
|
-
@i.configure(config_element('parse', '', {'timeout' => '1.0'}))
|
381
|
-
@i.start
|
382
|
-
end
|
383
|
-
|
384
|
-
teardown do
|
385
|
-
@i.stop
|
386
|
-
end
|
387
|
-
|
388
|
-
test 'stop longer processing and return nil' do
|
389
|
-
waiting(10) {
|
390
|
-
@i.parse('{"k":"v"}') do |time, record|
|
391
|
-
assert_nil @i.test_value
|
392
|
-
assert_nil time
|
393
|
-
assert_nil record
|
394
|
-
end
|
395
|
-
assert_true @i.log.out.logs.first.include?('parsing timed out')
|
396
|
-
}
|
397
|
-
end
|
398
|
-
end
|
399
|
-
end
|
@@ -1,42 +0,0 @@
|
|
1
|
-
require_relative '../helper'
|
2
|
-
require 'fluent/test/driver/parser'
|
3
|
-
require 'fluent/plugin/parser_apache'
|
4
|
-
|
5
|
-
class ApacheParserTest < ::Test::Unit::TestCase
|
6
|
-
def setup
|
7
|
-
Fluent::Test.setup
|
8
|
-
end
|
9
|
-
|
10
|
-
def create_driver(conf = {})
|
11
|
-
Fluent::Test::Driver::Parser.new(Fluent::Plugin::ApacheParser.new).configure(conf)
|
12
|
-
end
|
13
|
-
|
14
|
-
data('parse' => :parse, 'call' => :call)
|
15
|
-
def test_call(method_name)
|
16
|
-
d = create_driver
|
17
|
-
m = d.instance.method(method_name)
|
18
|
-
m.call('192.168.0.1 - - [28/Feb/2013:12:00:00 +0900] "GET / HTTP/1.1" 200 777') { |time, record|
|
19
|
-
assert_equal(event_time('28/Feb/2013:12:00:00 +0900', format: '%d/%b/%Y:%H:%M:%S %z'), time)
|
20
|
-
assert_equal({
|
21
|
-
'user' => '-',
|
22
|
-
'method' => 'GET',
|
23
|
-
'code' => '200',
|
24
|
-
'size' => '777',
|
25
|
-
'host' => '192.168.0.1',
|
26
|
-
'path' => '/'
|
27
|
-
}, record)
|
28
|
-
}
|
29
|
-
end
|
30
|
-
|
31
|
-
def test_parse_with_keep_time_key
|
32
|
-
conf = {
|
33
|
-
'time_format' => "%d/%b/%Y:%H:%M:%S %z",
|
34
|
-
'keep_time_key' => 'true',
|
35
|
-
}
|
36
|
-
d = create_driver(conf)
|
37
|
-
text = '192.168.0.1 - - [28/Feb/2013:12:00:00 +0900] "GET / HTTP/1.1" 200 777'
|
38
|
-
d.instance.parse(text) do |_time, record|
|
39
|
-
assert_equal "28/Feb/2013:12:00:00 +0900", record['time']
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
@@ -1,47 +0,0 @@
|
|
1
|
-
require_relative '../helper'
|
2
|
-
require 'fluent/test/driver/parser'
|
3
|
-
require 'fluent/plugin/parser'
|
4
|
-
|
5
|
-
class Apache2ParserTest < ::Test::Unit::TestCase
|
6
|
-
def setup
|
7
|
-
Fluent::Test.setup
|
8
|
-
@parser = Fluent::Test::Driver::Parser.new(Fluent::Plugin::Apache2Parser)
|
9
|
-
@expected = {
|
10
|
-
'user' => nil,
|
11
|
-
'method' => 'GET',
|
12
|
-
'code' => 200,
|
13
|
-
'size' => 777,
|
14
|
-
'host' => '192.168.0.1',
|
15
|
-
'path' => '/',
|
16
|
-
'referer' => nil,
|
17
|
-
'agent' => 'Opera/12.0'
|
18
|
-
}
|
19
|
-
@parser.configure({})
|
20
|
-
end
|
21
|
-
|
22
|
-
def test_parse
|
23
|
-
@parser.instance.parse('192.168.0.1 - - [28/Feb/2013:12:00:00 +0900] "GET / HTTP/1.1" 200 777 "-" "Opera/12.0"') { |time, record|
|
24
|
-
assert_equal(event_time('28/Feb/2013:12:00:00 +0900', format: '%d/%b/%Y:%H:%M:%S %z'), time)
|
25
|
-
assert_equal(@expected, record)
|
26
|
-
}
|
27
|
-
assert_equal(Fluent::Plugin::Apache2Parser::REGEXP,
|
28
|
-
@parser.instance.patterns['format'])
|
29
|
-
assert_equal(Fluent::Plugin::Apache2Parser::TIME_FORMAT,
|
30
|
-
@parser.instance.patterns['time_format'])
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_parse_without_http_version
|
34
|
-
@parser.instance.parse('192.168.0.1 - - [28/Feb/2013:12:00:00 +0900] "GET /" 200 777 "-" "Opera/12.0"') { |time, record|
|
35
|
-
assert_equal(event_time('28/Feb/2013:12:00:00 +0900', format: '%d/%b/%Y:%H:%M:%S %z'), time)
|
36
|
-
assert_equal(@expected, record)
|
37
|
-
}
|
38
|
-
end
|
39
|
-
|
40
|
-
def test_parse_with_escape_sequence
|
41
|
-
@parser.instance.parse('192.168.0.1 - - [28/Feb/2013:12:00:00 +0900] "GET /\" HTTP/1.1" 200 777 "referer \\\ \"" "user agent \\\ \""') { |_, record|
|
42
|
-
assert_equal('/\"', record['path'])
|
43
|
-
assert_equal('referer \\\ \"', record['referer'])
|
44
|
-
assert_equal('user agent \\\ \"', record['agent'])
|
45
|
-
}
|
46
|
-
end
|
47
|
-
end
|
@@ -1,45 +0,0 @@
|
|
1
|
-
require_relative '../helper'
|
2
|
-
require 'fluent/test/driver/parser'
|
3
|
-
require 'fluent/plugin/parser_apache_error'
|
4
|
-
|
5
|
-
class ApacheErrorParserTest < ::Test::Unit::TestCase
|
6
|
-
def setup
|
7
|
-
Fluent::Test.setup
|
8
|
-
@expected = {
|
9
|
-
'level' => 'error',
|
10
|
-
'client' => '127.0.0.1',
|
11
|
-
'message' => 'client denied by server configuration'
|
12
|
-
}
|
13
|
-
end
|
14
|
-
|
15
|
-
def create_driver
|
16
|
-
Fluent::Test::Driver::Parser.new(Fluent::Plugin::ApacheErrorParser.new).configure({})
|
17
|
-
end
|
18
|
-
|
19
|
-
def test_parse
|
20
|
-
d = create_driver
|
21
|
-
d.instance.parse('[Wed Oct 11 14:32:52 2000] [error] [client 127.0.0.1] client denied by server configuration') { |time, record|
|
22
|
-
assert_equal(event_time('Wed Oct 11 14:32:52 2000'), time)
|
23
|
-
assert_equal(@expected, record)
|
24
|
-
}
|
25
|
-
end
|
26
|
-
|
27
|
-
def test_parse_with_pid
|
28
|
-
d = create_driver
|
29
|
-
d.instance.parse('[Wed Oct 11 14:32:52 2000] [error] [pid 1000] [client 127.0.0.1] client denied by server configuration') { |time, record|
|
30
|
-
assert_equal(event_time('Wed Oct 11 14:32:52 2000'), time)
|
31
|
-
assert_equal(@expected.merge('pid' => '1000'), record)
|
32
|
-
}
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_parse_without_client
|
36
|
-
d = create_driver
|
37
|
-
d.instance.parse('[Wed Oct 11 14:32:52 2000] [notice] Apache/2.2.15 (Unix) DAV/2 configured -- resuming normal operations') { |time, record|
|
38
|
-
assert_equal(event_time('Wed Oct 11 14:32:52 2000'), time)
|
39
|
-
assert_equal({
|
40
|
-
'level' => 'notice',
|
41
|
-
'message' => 'Apache/2.2.15 (Unix) DAV/2 configured -- resuming normal operations'
|
42
|
-
}, record)
|
43
|
-
}
|
44
|
-
end
|
45
|
-
end
|