fluentd 1.17.0-x86-mingw32 → 1.17.1-x86-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.
- 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
@@ -1,137 +0,0 @@
|
|
1
|
-
require_relative '../helper'
|
2
|
-
require 'fluent/plugin_helper/metrics'
|
3
|
-
require 'fluent/plugin/base'
|
4
|
-
|
5
|
-
class MetricsTest < Test::Unit::TestCase
|
6
|
-
class Dummy < Fluent::Plugin::TestBase
|
7
|
-
helpers :metrics
|
8
|
-
def configure(conf)
|
9
|
-
super
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
setup do
|
14
|
-
@d = nil
|
15
|
-
end
|
16
|
-
|
17
|
-
teardown do
|
18
|
-
if @d
|
19
|
-
@d.stop unless @d.stopped?
|
20
|
-
@d.shutdown unless @d.shutdown?
|
21
|
-
@d.close unless @d.closed?
|
22
|
-
@d.terminate unless @d.terminated?
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
test 'can be initialized without any metrics at first' do
|
27
|
-
d = Dummy.new
|
28
|
-
assert_equal 0, d._metrics.size
|
29
|
-
end
|
30
|
-
|
31
|
-
test 'can be configured' do
|
32
|
-
d1 = Dummy.new
|
33
|
-
assert_nothing_raised do
|
34
|
-
d1.configure(config_element())
|
35
|
-
end
|
36
|
-
assert d1.plugin_id
|
37
|
-
assert d1.log
|
38
|
-
end
|
39
|
-
|
40
|
-
test 'creates metrics instances' do
|
41
|
-
d = Dummy.new
|
42
|
-
i = d.metrics_create(namespace: "fluentd_test", subsystem: "unit-test", name: "metrics1", help_text: "metrics testing")
|
43
|
-
d.configure(config_element())
|
44
|
-
assert do
|
45
|
-
d.instance_variable_get(:@plugin_type_or_id).include?("dummy.object")
|
46
|
-
end
|
47
|
-
assert{ i.is_a?(Fluent::Plugin::LocalMetrics) }
|
48
|
-
assert_true i.has_methods_for_counter
|
49
|
-
assert_false i.has_methods_for_gauge
|
50
|
-
|
51
|
-
d = Dummy.new
|
52
|
-
i = d.metrics_create(namespace: "fluentd_test", subsystem: "unit-test", name: "metrics2", help_text: "metrics testing", prefer_gauge: true)
|
53
|
-
d.configure(config_element())
|
54
|
-
assert do
|
55
|
-
d.instance_variable_get(:@plugin_type_or_id).include?("dummy.object")
|
56
|
-
end
|
57
|
-
assert{ i.is_a?(Fluent::Plugin::LocalMetrics) }
|
58
|
-
assert_false i.has_methods_for_counter
|
59
|
-
assert_true i.has_methods_for_gauge
|
60
|
-
end
|
61
|
-
|
62
|
-
test 'calls lifecycle methods for all plugin instances via owner plugin' do
|
63
|
-
@d = d = Dummy.new
|
64
|
-
i1 = d.metrics_create(namespace: "fluentd_test", subsystem: "unit-test", name: "metrics1", help_text: "metrics testing")
|
65
|
-
i2 = d.metrics_create(namespace: "fluentd_test", subsystem: "unit-test", name: "metrics2", help_text: "metrics testing", prefer_gauge: true)
|
66
|
-
i3 = d.metrics_create(namespace: "fluentd_test", subsystem: "unit-test", name: "metrics3", help_text: "metrics testing")
|
67
|
-
d.configure(config_element())
|
68
|
-
assert do
|
69
|
-
d.instance_variable_get(:@plugin_type_or_id).include?("dummy.object")
|
70
|
-
end
|
71
|
-
d.start
|
72
|
-
|
73
|
-
assert i1.started?
|
74
|
-
assert i2.started?
|
75
|
-
assert i3.started?
|
76
|
-
|
77
|
-
assert !i1.stopped?
|
78
|
-
assert !i2.stopped?
|
79
|
-
assert !i3.stopped?
|
80
|
-
|
81
|
-
d.stop
|
82
|
-
|
83
|
-
assert i1.stopped?
|
84
|
-
assert i2.stopped?
|
85
|
-
assert i3.stopped?
|
86
|
-
|
87
|
-
assert !i1.before_shutdown?
|
88
|
-
assert !i2.before_shutdown?
|
89
|
-
assert !i3.before_shutdown?
|
90
|
-
|
91
|
-
d.before_shutdown
|
92
|
-
|
93
|
-
assert i1.before_shutdown?
|
94
|
-
assert i2.before_shutdown?
|
95
|
-
assert i3.before_shutdown?
|
96
|
-
|
97
|
-
assert !i1.shutdown?
|
98
|
-
assert !i2.shutdown?
|
99
|
-
assert !i3.shutdown?
|
100
|
-
|
101
|
-
d.shutdown
|
102
|
-
|
103
|
-
assert i1.shutdown?
|
104
|
-
assert i2.shutdown?
|
105
|
-
assert i3.shutdown?
|
106
|
-
|
107
|
-
assert !i1.after_shutdown?
|
108
|
-
assert !i2.after_shutdown?
|
109
|
-
assert !i3.after_shutdown?
|
110
|
-
|
111
|
-
d.after_shutdown
|
112
|
-
|
113
|
-
assert i1.after_shutdown?
|
114
|
-
assert i2.after_shutdown?
|
115
|
-
assert i3.after_shutdown?
|
116
|
-
|
117
|
-
assert !i1.closed?
|
118
|
-
assert !i2.closed?
|
119
|
-
assert !i3.closed?
|
120
|
-
|
121
|
-
d.close
|
122
|
-
|
123
|
-
assert i1.closed?
|
124
|
-
assert i2.closed?
|
125
|
-
assert i3.closed?
|
126
|
-
|
127
|
-
assert !i1.terminated?
|
128
|
-
assert !i2.terminated?
|
129
|
-
assert !i3.terminated?
|
130
|
-
|
131
|
-
d.terminate
|
132
|
-
|
133
|
-
assert i1.terminated?
|
134
|
-
assert i2.terminated?
|
135
|
-
assert i3.terminated?
|
136
|
-
end
|
137
|
-
end
|
@@ -1,264 +0,0 @@
|
|
1
|
-
require_relative '../helper'
|
2
|
-
require 'fluent/plugin_helper/parser'
|
3
|
-
require 'fluent/plugin/base'
|
4
|
-
require 'fluent/time'
|
5
|
-
|
6
|
-
class ParserHelperTest < Test::Unit::TestCase
|
7
|
-
class ExampleParser < Fluent::Plugin::Parser
|
8
|
-
Fluent::Plugin.register_parser('example', self)
|
9
|
-
def parse(text)
|
10
|
-
ary = text.split(/\s*,\s*/)
|
11
|
-
r = {}
|
12
|
-
ary.each_with_index do |v, i|
|
13
|
-
r[i.to_s] = v
|
14
|
-
end
|
15
|
-
yield Fluent::EventTime.now, r
|
16
|
-
end
|
17
|
-
end
|
18
|
-
class Example2Parser < Fluent::Plugin::Parser
|
19
|
-
Fluent::Plugin.register_parser('example2', self)
|
20
|
-
def parse(text)
|
21
|
-
ary = text.split(/\s*,\s*/)
|
22
|
-
r = {}
|
23
|
-
ary.each_with_index do |v, i|
|
24
|
-
r[i.to_s] = v
|
25
|
-
end
|
26
|
-
yield Fluent::EventTime.now, r
|
27
|
-
end
|
28
|
-
end
|
29
|
-
class Dummy < Fluent::Plugin::TestBase
|
30
|
-
helpers :parser
|
31
|
-
config_section :parse do
|
32
|
-
config_set_default :@type, 'example'
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
class Dummy2 < Fluent::Plugin::TestBase
|
37
|
-
helpers :parser
|
38
|
-
config_section :parse do
|
39
|
-
config_set_default :@type, 'example2'
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
setup do
|
44
|
-
@d = nil
|
45
|
-
end
|
46
|
-
|
47
|
-
teardown do
|
48
|
-
if @d
|
49
|
-
@d.stop unless @d.stopped?
|
50
|
-
@d.shutdown unless @d.shutdown?
|
51
|
-
@d.close unless @d.closed?
|
52
|
-
@d.terminate unless @d.terminated?
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
test 'can be initialized without any parsers at first' do
|
57
|
-
d = Dummy.new
|
58
|
-
assert_equal 0, d._parsers.size
|
59
|
-
end
|
60
|
-
|
61
|
-
test 'can override default configuration parameters, but not overwrite whole definition' do
|
62
|
-
d = Dummy.new
|
63
|
-
assert_equal [], d.parser_configs
|
64
|
-
|
65
|
-
d = Dummy2.new
|
66
|
-
d.configure(config_element('ROOT', '', {}, [config_element('parse', '', {}, [])]))
|
67
|
-
assert_raise NoMethodError do
|
68
|
-
d.parse
|
69
|
-
end
|
70
|
-
assert_equal 1, d.parser_configs.size
|
71
|
-
assert_equal 'example2', d.parser_configs.first[:@type]
|
72
|
-
end
|
73
|
-
|
74
|
-
test 'creates instance of type specified by conf, or default_type if @type is missing in conf' do
|
75
|
-
d = Dummy2.new
|
76
|
-
d.configure(config_element())
|
77
|
-
i = d.parser_create(conf: config_element('parse', '', {'@type' => 'example'}), default_type: 'example2')
|
78
|
-
assert{ i.is_a?(ExampleParser) }
|
79
|
-
|
80
|
-
d = Dummy2.new
|
81
|
-
d.configure(config_element())
|
82
|
-
i = d.parser_create(conf: nil, default_type: 'example2')
|
83
|
-
assert{ i.is_a?(Example2Parser) }
|
84
|
-
end
|
85
|
-
|
86
|
-
test 'raises config error if config section is specified, but @type is not specified' do
|
87
|
-
d = Dummy2.new
|
88
|
-
d.configure(config_element())
|
89
|
-
assert_raise Fluent::ConfigError.new("@type is required in <parse>") do
|
90
|
-
d.parser_create(conf: config_element('parse', '', {}), default_type: 'example2')
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
test 'can be configured with default type without parse sections' do
|
95
|
-
d = Dummy.new
|
96
|
-
d.configure(config_element())
|
97
|
-
assert_equal 1, d._parsers.size
|
98
|
-
end
|
99
|
-
|
100
|
-
test 'can be configured with a parse section' do
|
101
|
-
d = Dummy.new
|
102
|
-
conf = config_element('ROOT', '', {}, [
|
103
|
-
config_element('parse', '', {'@type' => 'example'})
|
104
|
-
])
|
105
|
-
assert_nothing_raised do
|
106
|
-
d.configure(conf)
|
107
|
-
end
|
108
|
-
assert_equal 1, d._parsers.size
|
109
|
-
assert{ d._parsers.values.all?{ |parser| !parser.started? } }
|
110
|
-
end
|
111
|
-
|
112
|
-
test 'can be configured with 2 or more parse sections with different usages with each other' do
|
113
|
-
d = Dummy.new
|
114
|
-
conf = config_element('ROOT', '', {}, [
|
115
|
-
config_element('parse', 'default', {'@type' => 'example'}),
|
116
|
-
config_element('parse', 'extra', {'@type' => 'example2'}),
|
117
|
-
])
|
118
|
-
assert_nothing_raised do
|
119
|
-
d.configure(conf)
|
120
|
-
end
|
121
|
-
assert_equal 2, d._parsers.size
|
122
|
-
assert{ d._parsers.values.all?{ |parser| !parser.started? } }
|
123
|
-
end
|
124
|
-
|
125
|
-
test 'cannot be configured with 2 parse sections with same usage' do
|
126
|
-
d = Dummy.new
|
127
|
-
conf = config_element('ROOT', '', {}, [
|
128
|
-
config_element('parse', 'default', {'@type' => 'example'}),
|
129
|
-
config_element('parse', 'extra', {'@type' => 'example2'}),
|
130
|
-
config_element('parse', 'extra', {'@type' => 'example2'}),
|
131
|
-
])
|
132
|
-
assert_raises Fluent::ConfigError do
|
133
|
-
d.configure(conf)
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
test 'creates a parse plugin instance which is already configured without usage' do
|
138
|
-
@d = d = Dummy.new
|
139
|
-
conf = config_element('ROOT', '', {}, [
|
140
|
-
config_element('parse', '', {'@type' => 'example'})
|
141
|
-
])
|
142
|
-
d.configure(conf)
|
143
|
-
d.start
|
144
|
-
|
145
|
-
parser = d.parser_create
|
146
|
-
assert{ parser.is_a? ExampleParser }
|
147
|
-
assert parser.started?
|
148
|
-
end
|
149
|
-
|
150
|
-
test 'creates a parser plugin instance which is already configured with usage' do
|
151
|
-
@d = d = Dummy.new
|
152
|
-
conf = config_element('ROOT', '', {}, [
|
153
|
-
config_element('parse', 'mydata', {'@type' => 'example'})
|
154
|
-
])
|
155
|
-
d.configure(conf)
|
156
|
-
d.start
|
157
|
-
|
158
|
-
parser = d.parser_create(usage: 'mydata')
|
159
|
-
assert{ parser.is_a? ExampleParser }
|
160
|
-
assert parser.started?
|
161
|
-
end
|
162
|
-
|
163
|
-
test 'creates a parser plugin without configurations' do
|
164
|
-
@d = d = Dummy.new
|
165
|
-
d.configure(config_element())
|
166
|
-
d.start
|
167
|
-
|
168
|
-
parser = d.parser_create(usage: 'mydata', type: 'example', conf: config_element('parse', 'mydata'))
|
169
|
-
assert{ parser.is_a? ExampleParser }
|
170
|
-
assert parser.started?
|
171
|
-
end
|
172
|
-
|
173
|
-
test 'creates 2 or more parser plugin instances' do
|
174
|
-
@d = d = Dummy.new
|
175
|
-
conf = config_element('ROOT', '', {}, [
|
176
|
-
config_element('parse', 'mydata', {'@type' => 'example'}),
|
177
|
-
config_element('parse', 'secret', {'@type' => 'example2'})
|
178
|
-
])
|
179
|
-
d.configure(conf)
|
180
|
-
d.start
|
181
|
-
|
182
|
-
p1 = d.parser_create(usage: 'mydata')
|
183
|
-
p2 = d.parser_create(usage: 'secret')
|
184
|
-
assert{ p1.is_a? ExampleParser }
|
185
|
-
assert p1.started?
|
186
|
-
assert{ p2.is_a? Example2Parser }
|
187
|
-
assert p2.started?
|
188
|
-
end
|
189
|
-
|
190
|
-
test 'calls lifecycle methods for all plugin instances via owner plugin' do
|
191
|
-
@d = d = Dummy.new
|
192
|
-
conf = config_element('ROOT', '', {}, [ config_element('parse', '', {'@type' => 'example'}), config_element('parse', 'e2', {'@type' => 'example'}) ])
|
193
|
-
d.configure(conf)
|
194
|
-
d.start
|
195
|
-
|
196
|
-
i1 = d.parser_create(usage: '')
|
197
|
-
i2 = d.parser_create(usage: 'e2')
|
198
|
-
i3 = d.parser_create(usage: 'e3', type: 'example2')
|
199
|
-
|
200
|
-
assert i1.started?
|
201
|
-
assert i2.started?
|
202
|
-
assert i3.started?
|
203
|
-
|
204
|
-
assert !i1.stopped?
|
205
|
-
assert !i2.stopped?
|
206
|
-
assert !i3.stopped?
|
207
|
-
|
208
|
-
d.stop
|
209
|
-
|
210
|
-
assert i1.stopped?
|
211
|
-
assert i2.stopped?
|
212
|
-
assert i3.stopped?
|
213
|
-
|
214
|
-
assert !i1.before_shutdown?
|
215
|
-
assert !i2.before_shutdown?
|
216
|
-
assert !i3.before_shutdown?
|
217
|
-
|
218
|
-
d.before_shutdown
|
219
|
-
|
220
|
-
assert i1.before_shutdown?
|
221
|
-
assert i2.before_shutdown?
|
222
|
-
assert i3.before_shutdown?
|
223
|
-
|
224
|
-
assert !i1.shutdown?
|
225
|
-
assert !i2.shutdown?
|
226
|
-
assert !i3.shutdown?
|
227
|
-
|
228
|
-
d.shutdown
|
229
|
-
|
230
|
-
assert i1.shutdown?
|
231
|
-
assert i2.shutdown?
|
232
|
-
assert i3.shutdown?
|
233
|
-
|
234
|
-
assert !i1.after_shutdown?
|
235
|
-
assert !i2.after_shutdown?
|
236
|
-
assert !i3.after_shutdown?
|
237
|
-
|
238
|
-
d.after_shutdown
|
239
|
-
|
240
|
-
assert i1.after_shutdown?
|
241
|
-
assert i2.after_shutdown?
|
242
|
-
assert i3.after_shutdown?
|
243
|
-
|
244
|
-
assert !i1.closed?
|
245
|
-
assert !i2.closed?
|
246
|
-
assert !i3.closed?
|
247
|
-
|
248
|
-
d.close
|
249
|
-
|
250
|
-
assert i1.closed?
|
251
|
-
assert i2.closed?
|
252
|
-
assert i3.closed?
|
253
|
-
|
254
|
-
assert !i1.terminated?
|
255
|
-
assert !i2.terminated?
|
256
|
-
assert !i3.terminated?
|
257
|
-
|
258
|
-
d.terminate
|
259
|
-
|
260
|
-
assert i1.terminated?
|
261
|
-
assert i2.terminated?
|
262
|
-
assert i3.terminated?
|
263
|
-
end
|
264
|
-
end
|
@@ -1,238 +0,0 @@
|
|
1
|
-
require_relative '../helper'
|
2
|
-
require 'fluent/plugin_helper/record_accessor'
|
3
|
-
require 'fluent/plugin/base'
|
4
|
-
|
5
|
-
require 'time'
|
6
|
-
|
7
|
-
class RecordAccessorHelperTest < Test::Unit::TestCase
|
8
|
-
class Dummy < Fluent::Plugin::TestBase
|
9
|
-
helpers :record_accessor
|
10
|
-
end
|
11
|
-
|
12
|
-
sub_test_case 'parse nested key expression' do
|
13
|
-
data('normal' => 'key1',
|
14
|
-
'space' => 'ke y2',
|
15
|
-
'dot key' => 'this.is.key3')
|
16
|
-
test 'parse single key' do |param|
|
17
|
-
result = Fluent::PluginHelper::RecordAccessor::Accessor.parse_parameter(param)
|
18
|
-
assert_equal param, result
|
19
|
-
end
|
20
|
-
|
21
|
-
test "nested bracket keys with dot" do
|
22
|
-
result = Fluent::PluginHelper::RecordAccessor::Accessor.parse_parameter("$['key1']['this.is.key3']")
|
23
|
-
assert_equal ['key1', 'this.is.key3'], result
|
24
|
-
end
|
25
|
-
|
26
|
-
data('dot' => '$.key1.key2[0]',
|
27
|
-
'bracket' => "$['key1']['key2'][0]",
|
28
|
-
'bracket w/ double quotes' => '$["key1"]["key2"][0]')
|
29
|
-
test "nested keys ['key1', 'key2', 0]" do |param|
|
30
|
-
result = Fluent::PluginHelper::RecordAccessor::Accessor.parse_parameter(param)
|
31
|
-
assert_equal ['key1', 'key2', 0], result
|
32
|
-
end
|
33
|
-
|
34
|
-
data('bracket' => "$['key1'][0]['ke y2']",
|
35
|
-
'bracket w/ double quotes' => '$["key1"][0]["ke y2"]')
|
36
|
-
test "nested keys ['key1', 0, 'ke y2']" do |param|
|
37
|
-
result = Fluent::PluginHelper::RecordAccessor::Accessor.parse_parameter(param)
|
38
|
-
assert_equal ['key1', 0, 'ke y2'], result
|
39
|
-
end
|
40
|
-
|
41
|
-
data('dot' => '$.[0].key1.[1].key2',
|
42
|
-
'bracket' => "$[0]['key1'][1]['key2']",
|
43
|
-
'bracket w/ double quotes' => '$[0]["key1"][1]["key2"]')
|
44
|
-
test "nested keys [0, 'key1', 1, 'key2']" do |param|
|
45
|
-
result = Fluent::PluginHelper::RecordAccessor::Accessor.parse_parameter(param)
|
46
|
-
assert_equal [0, 'key1', 1, 'key2'], result
|
47
|
-
end
|
48
|
-
|
49
|
-
data("missing ']'" => "$['key1'",
|
50
|
-
"missing array index with dot" => "$.hello[]",
|
51
|
-
"missing array index with bracket" => "$[]",
|
52
|
-
"more chars" => "$.key1[0]foo",
|
53
|
-
"whitespace char included key in dot notation" => "$.key[0].ke y",
|
54
|
-
"empty keys with dot" => "$.",
|
55
|
-
"empty keys with bracket" => "$[",
|
56
|
-
"mismatched quotes1" => "$['key1']['key2\"]",
|
57
|
-
"mismatched quotes2" => '$["key1"]["key2\']')
|
58
|
-
test 'invalid syntax' do |param|
|
59
|
-
assert_raise Fluent::ConfigError do
|
60
|
-
Fluent::PluginHelper::RecordAccessor::Accessor.parse_parameter(param)
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
sub_test_case 'attr_reader :keys' do
|
66
|
-
setup do
|
67
|
-
@d = Dummy.new
|
68
|
-
end
|
69
|
-
|
70
|
-
data('normal' => 'key1',
|
71
|
-
'space' => 'ke y2',
|
72
|
-
'dot key' => 'this.is.key3')
|
73
|
-
test 'access single key' do |param|
|
74
|
-
accessor = @d.record_accessor_create(param)
|
75
|
-
assert_equal param, accessor.keys
|
76
|
-
end
|
77
|
-
|
78
|
-
test "nested bracket keys with dot" do
|
79
|
-
accessor = @d.record_accessor_create("$['key1']['this.is.key3']")
|
80
|
-
assert_equal ['key1','this.is.key3'], accessor.keys
|
81
|
-
end
|
82
|
-
|
83
|
-
data('dot' => '$.key1.key2[0]',
|
84
|
-
'bracket' => "$['key1']['key2'][0]",
|
85
|
-
'bracket w/ double quotes' => '$["key1"]["key2"][0]')
|
86
|
-
test "nested keys ['key1', 'key2', 0]" do |param|
|
87
|
-
accessor = @d.record_accessor_create(param)
|
88
|
-
assert_equal ['key1', 'key2', 0], accessor.keys
|
89
|
-
end
|
90
|
-
|
91
|
-
data('bracket' => "$['key1'][0]['ke y2']",
|
92
|
-
'bracket w/ double quotes' => '$["key1"][0]["ke y2"]')
|
93
|
-
test "nested keys ['key1', 0, 'ke y2']" do |param|
|
94
|
-
accessor = @d.record_accessor_create(param)
|
95
|
-
assert_equal ['key1', 0, 'ke y2'], accessor.keys
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
sub_test_case Fluent::PluginHelper::RecordAccessor::Accessor do
|
100
|
-
setup do
|
101
|
-
@d = Dummy.new
|
102
|
-
end
|
103
|
-
|
104
|
-
data('normal' => 'key1',
|
105
|
-
'space' => 'ke y2',
|
106
|
-
'dot key' => 'this.is.key3')
|
107
|
-
test 'access single key' do |param|
|
108
|
-
r = {'key1' => 'v1', 'ke y2' => 'v2', 'this.is.key3' => 'v3'}
|
109
|
-
accessor = @d.record_accessor_create(param)
|
110
|
-
assert_equal r[param], accessor.call(r)
|
111
|
-
end
|
112
|
-
|
113
|
-
test "access single dot key using bracket style" do
|
114
|
-
r = {'key1' => 'v1', 'ke y2' => 'v2', 'this.is.key3' => 'v3'}
|
115
|
-
accessor = @d.record_accessor_create('$["this.is.key3"]')
|
116
|
-
assert_equal 'v3', accessor.call(r)
|
117
|
-
end
|
118
|
-
|
119
|
-
test "nested bracket keys with dot" do
|
120
|
-
r = {'key1' => {'this.is.key3' => 'value'}}
|
121
|
-
accessor = @d.record_accessor_create("$['key1']['this.is.key3']")
|
122
|
-
assert_equal 'value', accessor.call(r)
|
123
|
-
end
|
124
|
-
|
125
|
-
data('dot' => '$.key1.key2[0]',
|
126
|
-
'bracket' => "$['key1']['key2'][0]",
|
127
|
-
'bracket w/ double quotes' => '$["key1"]["key2"][0]')
|
128
|
-
test "nested keys ['key1', 'key2', 0]" do |param|
|
129
|
-
r = {'key1' => {'key2' => [1, 2, 3]}}
|
130
|
-
accessor = @d.record_accessor_create(param)
|
131
|
-
assert_equal 1, accessor.call(r)
|
132
|
-
end
|
133
|
-
|
134
|
-
data('bracket' => "$['key1'][0]['ke y2']",
|
135
|
-
'bracket w/ double quotes' => '$["key1"][0]["ke y2"]')
|
136
|
-
test "nested keys ['key1', 0, 'ke y2']" do |param|
|
137
|
-
r = {'key1' => [{'ke y2' => "value"}]}
|
138
|
-
accessor = @d.record_accessor_create(param)
|
139
|
-
assert_equal 'value', accessor.call(r)
|
140
|
-
end
|
141
|
-
|
142
|
-
data("missing ']'" => "$['key1'",
|
143
|
-
"missing array index with dot" => "$.hello[]",
|
144
|
-
"missing array index with bracket" => "$['hello'][]",
|
145
|
-
"whitespace char included key in dot notation" => "$.key[0].ke y",
|
146
|
-
"more chars" => "$.key1[0]foo",
|
147
|
-
"empty keys with dot" => "$.",
|
148
|
-
"empty keys with bracket" => "$[",
|
149
|
-
"mismatched quotes1" => "$['key1']['key2\"]",
|
150
|
-
"mismatched quotes2" => '$["key1"]["key2\']')
|
151
|
-
test 'invalid syntax' do |param|
|
152
|
-
assert_raise Fluent::ConfigError do
|
153
|
-
@d.record_accessor_create(param)
|
154
|
-
end
|
155
|
-
end
|
156
|
-
end
|
157
|
-
|
158
|
-
sub_test_case 'Fluent::PluginHelper::RecordAccessor::Accessor#delete' do
|
159
|
-
setup do
|
160
|
-
@d = Dummy.new
|
161
|
-
end
|
162
|
-
|
163
|
-
data('normal' => 'key1',
|
164
|
-
'space' => 'ke y2',
|
165
|
-
'dot key' => 'this.is.key3')
|
166
|
-
test 'delete top key' do |param|
|
167
|
-
r = {'key1' => 'v1', 'ke y2' => 'v2', 'this.is.key3' => 'v3'}
|
168
|
-
accessor = @d.record_accessor_create(param)
|
169
|
-
accessor.delete(r)
|
170
|
-
assert_not_include(r, param)
|
171
|
-
end
|
172
|
-
|
173
|
-
test "delete top key using bracket style" do
|
174
|
-
r = {'key1' => 'v1', 'ke y2' => 'v2', 'this.is.key3' => 'v3'}
|
175
|
-
accessor = @d.record_accessor_create('$["this.is.key3"]')
|
176
|
-
accessor.delete(r)
|
177
|
-
assert_not_include(r, 'this.is.key3')
|
178
|
-
end
|
179
|
-
|
180
|
-
data('bracket' => "$['key1'][0]['ke y2']",
|
181
|
-
'bracket w/ double quotes' => '$["key1"][0]["ke y2"]')
|
182
|
-
test "delete nested keys ['key1', 0, 'ke y2']" do |param|
|
183
|
-
r = {'key1' => [{'ke y2' => "value"}]}
|
184
|
-
accessor = @d.record_accessor_create(param)
|
185
|
-
accessor.delete(r)
|
186
|
-
assert_not_include(r['key1'][0], 'ke y2')
|
187
|
-
end
|
188
|
-
|
189
|
-
test "don't raise an error when unexpected record is coming" do
|
190
|
-
r = {'key1' => [{'key3' => "value"}]}
|
191
|
-
accessor = @d.record_accessor_create("$['key1']['key2']['key3']")
|
192
|
-
assert_nothing_raised do
|
193
|
-
assert_nil accessor.delete(r)
|
194
|
-
end
|
195
|
-
end
|
196
|
-
end
|
197
|
-
|
198
|
-
sub_test_case 'Fluent::PluginHelper::RecordAccessor::Accessor#set' do
|
199
|
-
setup do
|
200
|
-
@d = Dummy.new
|
201
|
-
end
|
202
|
-
|
203
|
-
data('normal' => 'key1',
|
204
|
-
'space' => 'ke y2',
|
205
|
-
'dot key' => 'this.is.key3')
|
206
|
-
test 'set top key' do |param|
|
207
|
-
r = {'key1' => 'v1', 'ke y2' => 'v2', 'this.is.key3' => 'v3'}
|
208
|
-
accessor = @d.record_accessor_create(param)
|
209
|
-
accessor.set(r, "test")
|
210
|
-
assert_equal "test", r[param]
|
211
|
-
end
|
212
|
-
|
213
|
-
test "set top key using bracket style" do
|
214
|
-
r = {'key1' => 'v1', 'ke y2' => 'v2', 'this.is.key3' => 'v3'}
|
215
|
-
accessor = @d.record_accessor_create('$["this.is.key3"]')
|
216
|
-
accessor.set(r, "test")
|
217
|
-
assert_equal "test", r["this.is.key3"]
|
218
|
-
end
|
219
|
-
|
220
|
-
data('bracket' => "$['key1'][0]['ke y2']",
|
221
|
-
'bracket w/ double quotes' => '$["key1"][0]["ke y2"]')
|
222
|
-
test "set nested keys ['key1', 0, 'ke y2']" do |param|
|
223
|
-
r = {'key1' => [{'ke y2' => "value"}]}
|
224
|
-
accessor = @d.record_accessor_create(param)
|
225
|
-
accessor.set(r, "nested_message")
|
226
|
-
assert_equal "nested_message", r['key1'][0]['ke y2']
|
227
|
-
end
|
228
|
-
|
229
|
-
test "don't raise an error when unexpected record is coming" do
|
230
|
-
r = {'key1' => [{'key3' => "value"}]}
|
231
|
-
accessor = @d.record_accessor_create("$['key1']['key2']['key3']")
|
232
|
-
assert_nothing_raised do
|
233
|
-
accessor.set(r, "unknown field")
|
234
|
-
end
|
235
|
-
assert_equal({'key1' => [{'key3' => "value"}]}, r)
|
236
|
-
end
|
237
|
-
end
|
238
|
-
end
|