fluentd 1.17.0-x64-mingw-ucrt → 1.17.1-x64-mingw-ucrt
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/test_output.rb
DELETED
@@ -1,278 +0,0 @@
|
|
1
|
-
require_relative 'helper'
|
2
|
-
require 'fluent/test'
|
3
|
-
require 'fluent/output'
|
4
|
-
require 'fluent/output_chain'
|
5
|
-
require 'fluent/plugin/buffer'
|
6
|
-
require 'timecop'
|
7
|
-
require 'flexmock/test_unit'
|
8
|
-
|
9
|
-
module FluentOutputTest
|
10
|
-
include Fluent
|
11
|
-
include FlexMock::TestCase
|
12
|
-
|
13
|
-
class BufferedOutputTest < ::Test::Unit::TestCase
|
14
|
-
include FluentOutputTest
|
15
|
-
|
16
|
-
class << self
|
17
|
-
def startup
|
18
|
-
$LOAD_PATH.unshift File.expand_path(File.join(File.dirname(__FILE__), 'scripts'))
|
19
|
-
require 'fluent/plugin/out_test'
|
20
|
-
require 'fluent/plugin/out_test2'
|
21
|
-
end
|
22
|
-
|
23
|
-
def shutdown
|
24
|
-
$LOAD_PATH.shift
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def setup
|
29
|
-
Fluent::Test.setup
|
30
|
-
end
|
31
|
-
|
32
|
-
CONFIG = %[]
|
33
|
-
|
34
|
-
def create_driver(conf=CONFIG)
|
35
|
-
Fluent::Test::BufferedOutputTestDriver.new(Fluent::BufferedOutput) do
|
36
|
-
def write(chunk)
|
37
|
-
chunk.read
|
38
|
-
end
|
39
|
-
end.configure(conf)
|
40
|
-
end
|
41
|
-
|
42
|
-
def test_configure
|
43
|
-
# default
|
44
|
-
d = create_driver
|
45
|
-
assert_equal 'memory', d.instance.buffer_type
|
46
|
-
assert_equal 60, d.instance.flush_interval
|
47
|
-
assert_equal false, d.instance.disable_retry_limit
|
48
|
-
assert_equal 17, d.instance.retry_limit
|
49
|
-
assert_equal 1.0, d.instance.retry_wait
|
50
|
-
assert_equal nil, d.instance.max_retry_wait
|
51
|
-
assert_equal 1.0, d.instance.retry_wait
|
52
|
-
assert_equal 1, d.instance.num_threads
|
53
|
-
assert_equal 1, d.instance.queued_chunk_flush_interval
|
54
|
-
|
55
|
-
# max_retry_wait
|
56
|
-
d = create_driver(CONFIG + %[max_retry_wait 4])
|
57
|
-
assert_equal 4, d.instance.max_retry_wait
|
58
|
-
|
59
|
-
# disable_retry_limit
|
60
|
-
d = create_driver(CONFIG + %[disable_retry_limit true])
|
61
|
-
assert_equal true, d.instance.disable_retry_limit
|
62
|
-
|
63
|
-
#### retry_state cares it
|
64
|
-
# # retry_wait is converted to Float for calc_retry_wait
|
65
|
-
# d = create_driver(CONFIG + %[retry_wait 1s])
|
66
|
-
# assert_equal Float, d.instance.retry_wait.class
|
67
|
-
end
|
68
|
-
|
69
|
-
class FormatterInjectTestOutput < Fluent::Output
|
70
|
-
def initialize
|
71
|
-
super
|
72
|
-
@formatter = nil
|
73
|
-
end
|
74
|
-
end
|
75
|
-
def test_start
|
76
|
-
i = FormatterInjectTestOutput.new
|
77
|
-
i.configure(config_element('ROOT', '', {}, [config_element('inject', '', {'hostname_key' => "host"})]))
|
78
|
-
assert_nothing_raised do
|
79
|
-
i.start
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
def create_mock_driver(conf=CONFIG)
|
84
|
-
Fluent::Test::BufferedOutputTestDriver.new(Fluent::BufferedOutput) do
|
85
|
-
attr_accessor :submit_flush_threads
|
86
|
-
|
87
|
-
def start_mock
|
88
|
-
@started = false
|
89
|
-
start
|
90
|
-
# ensure OutputThread to start successfully
|
91
|
-
submit_flush
|
92
|
-
sleep 0.5
|
93
|
-
while !@started
|
94
|
-
submit_flush
|
95
|
-
sleep 0.5
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
def try_flush
|
100
|
-
@started = true
|
101
|
-
@submit_flush_threads ||= {}
|
102
|
-
@submit_flush_threads[Thread.current] ||= 0
|
103
|
-
@submit_flush_threads[Thread.current] += 1
|
104
|
-
end
|
105
|
-
|
106
|
-
def write(chunk)
|
107
|
-
chunk.read
|
108
|
-
end
|
109
|
-
end.configure(conf)
|
110
|
-
end
|
111
|
-
|
112
|
-
def test_secondary
|
113
|
-
d = Fluent::Test::BufferedOutputTestDriver.new(Fluent::BufferedOutput) do
|
114
|
-
def write(chunk)
|
115
|
-
chunk.read
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
mock(d.instance.log).warn("Use different plugin for secondary. Check the plugin works with primary like secondary_file",
|
120
|
-
primary: d.instance.class.to_s, secondary: "Fluent::Plugin::Test2Output")
|
121
|
-
d.configure(CONFIG + %[
|
122
|
-
<secondary>
|
123
|
-
type test2
|
124
|
-
name c0
|
125
|
-
</secondary>
|
126
|
-
])
|
127
|
-
|
128
|
-
assert_not_nil d.instance.instance_variable_get(:@secondary).router
|
129
|
-
end
|
130
|
-
|
131
|
-
def test_secondary_with_no_warn_log
|
132
|
-
# ObjectBufferedOutput doesn't implement `custom_filter`
|
133
|
-
d = Fluent::Test::BufferedOutputTestDriver.new(Fluent::ObjectBufferedOutput)
|
134
|
-
|
135
|
-
mock(d.instance.log).warn("Use different plugin for secondary. Check the plugin works with primary like secondary_file",
|
136
|
-
primary: d.instance.class.to_s, secondary: "Fluent::Plugin::Test2Output").never
|
137
|
-
d.configure(CONFIG + %[
|
138
|
-
<secondary>
|
139
|
-
type test2
|
140
|
-
name c0
|
141
|
-
</secondary>
|
142
|
-
])
|
143
|
-
|
144
|
-
assert_not_nil d.instance.instance_variable_get(:@secondary).router
|
145
|
-
end
|
146
|
-
|
147
|
-
test 'BufferQueueLimitError compatibility' do
|
148
|
-
assert_equal Fluent::Plugin::Buffer::BufferOverflowError, Fluent::BufferQueueLimitError
|
149
|
-
end
|
150
|
-
end
|
151
|
-
|
152
|
-
class ObjectBufferedOutputTest < ::Test::Unit::TestCase
|
153
|
-
include FluentOutputTest
|
154
|
-
|
155
|
-
def setup
|
156
|
-
Fluent::Test.setup
|
157
|
-
end
|
158
|
-
|
159
|
-
CONFIG = %[]
|
160
|
-
|
161
|
-
def create_driver(conf=CONFIG)
|
162
|
-
Fluent::Test::OutputTestDriver.new(Fluent::ObjectBufferedOutput).configure(conf, true)
|
163
|
-
end
|
164
|
-
|
165
|
-
def test_configure
|
166
|
-
# default
|
167
|
-
d = create_driver
|
168
|
-
assert_equal true, d.instance.time_as_integer
|
169
|
-
end
|
170
|
-
end
|
171
|
-
|
172
|
-
class TimeSlicedOutputTest < ::Test::Unit::TestCase
|
173
|
-
include FluentOutputTest
|
174
|
-
include FlexMock::TestCase
|
175
|
-
|
176
|
-
def setup
|
177
|
-
Fluent::Test.setup
|
178
|
-
FileUtils.rm_rf(TMP_DIR)
|
179
|
-
FileUtils.mkdir_p(TMP_DIR)
|
180
|
-
end
|
181
|
-
|
182
|
-
TMP_DIR = File.expand_path(File.dirname(__FILE__) + "/tmp/time_sliced_output")
|
183
|
-
|
184
|
-
CONFIG = %[
|
185
|
-
buffer_path #{TMP_DIR}/foo
|
186
|
-
time_slice_format %Y%m%d%H
|
187
|
-
]
|
188
|
-
|
189
|
-
class TimeSlicedOutputTestPlugin < Fluent::TimeSlicedOutput
|
190
|
-
attr_reader :written_chunk_keys, :errors_in_write
|
191
|
-
def initialize
|
192
|
-
super
|
193
|
-
@written_chunk_keys = []
|
194
|
-
@errors_in_write = []
|
195
|
-
end
|
196
|
-
|
197
|
-
def configure(conf)
|
198
|
-
super
|
199
|
-
|
200
|
-
@formatter = Fluent::Plugin.new_formatter('out_file')
|
201
|
-
@formatter.configure(conf)
|
202
|
-
end
|
203
|
-
|
204
|
-
def format(tag, time, record)
|
205
|
-
@formatter.format(tag, time, record)
|
206
|
-
end
|
207
|
-
def write(chunk)
|
208
|
-
@written_chunk_keys << chunk.key
|
209
|
-
true
|
210
|
-
rescue => e
|
211
|
-
@errors_in_write << e
|
212
|
-
end
|
213
|
-
end
|
214
|
-
|
215
|
-
def create_driver(conf=CONFIG)
|
216
|
-
Fluent::Test::TimeSlicedOutputTestDriver.new(TimeSlicedOutputTestPlugin).configure(conf, true)
|
217
|
-
end
|
218
|
-
|
219
|
-
data(:none => '',
|
220
|
-
:utc => "utc",
|
221
|
-
:localtime => 'localtime',
|
222
|
-
:timezone => 'timezone +0000')
|
223
|
-
test 'configure with timezone related parameters' do |param|
|
224
|
-
assert_nothing_raised {
|
225
|
-
create_driver(CONFIG + param)
|
226
|
-
}
|
227
|
-
end
|
228
|
-
|
229
|
-
sub_test_case "test emit" do
|
230
|
-
setup do
|
231
|
-
@time = Time.parse("2011-01-02 13:14:15 UTC")
|
232
|
-
Timecop.freeze(@time)
|
233
|
-
@newline = if Fluent.windows?
|
234
|
-
"\r\n"
|
235
|
-
else
|
236
|
-
"\n"
|
237
|
-
end
|
238
|
-
end
|
239
|
-
|
240
|
-
teardown do
|
241
|
-
Timecop.return
|
242
|
-
end
|
243
|
-
|
244
|
-
test "emit with invalid event" do
|
245
|
-
d = create_driver
|
246
|
-
d.instance.start
|
247
|
-
d.instance.after_start
|
248
|
-
assert_raise ArgumentError, "time must be a Fluent::EventTime (or Integer)" do
|
249
|
-
d.instance.emit_events('test', OneEventStream.new('string', 10))
|
250
|
-
end
|
251
|
-
end
|
252
|
-
|
253
|
-
test "plugin can get key of chunk in #write" do
|
254
|
-
d = create_driver
|
255
|
-
d.instance.start
|
256
|
-
d.instance.after_start
|
257
|
-
d.instance.emit_events('test', OneEventStream.new(event_time("2016-11-08 17:44:30 +0900"), {"message" => "yay"}))
|
258
|
-
d.instance.force_flush
|
259
|
-
waiting(10) do
|
260
|
-
sleep 0.1 until d.instance.written_chunk_keys.size == 1
|
261
|
-
end
|
262
|
-
assert_equal [], d.instance.errors_in_write
|
263
|
-
assert_equal ["2016110808"], d.instance.written_chunk_keys # default timezone is UTC
|
264
|
-
end
|
265
|
-
|
266
|
-
test "check formatted time compatibility with utc. Should Z, not +00:00" do
|
267
|
-
d = create_driver(CONFIG + %[
|
268
|
-
utc
|
269
|
-
include_time_key
|
270
|
-
])
|
271
|
-
time = Time.parse("2016-11-08 12:00:00 UTC").to_i
|
272
|
-
d.emit({"a" => 1}, time)
|
273
|
-
d.expect_format %[2016-11-08T12:00:00Z\ttest\t{"a":1,"time":"2016-11-08T12:00:00Z"}#{@newline}]
|
274
|
-
d.run
|
275
|
-
end
|
276
|
-
end
|
277
|
-
end
|
278
|
-
end
|
data/test/test_plugin.rb
DELETED
@@ -1,251 +0,0 @@
|
|
1
|
-
require_relative 'helper'
|
2
|
-
|
3
|
-
require 'fluent/plugin'
|
4
|
-
require 'fluent/plugin/input'
|
5
|
-
require 'fluent/plugin/filter'
|
6
|
-
require 'fluent/plugin/output'
|
7
|
-
require 'fluent/plugin/buffer'
|
8
|
-
require 'fluent/plugin/parser'
|
9
|
-
require 'fluent/plugin/formatter'
|
10
|
-
require 'fluent/plugin/storage'
|
11
|
-
|
12
|
-
class PluginTest < Test::Unit::TestCase
|
13
|
-
class Dummy1Input < Fluent::Plugin::Input
|
14
|
-
Fluent::Plugin.register_input('plugin_test_dummy1', self)
|
15
|
-
end
|
16
|
-
class Dummy2Input < Fluent::Plugin::Input
|
17
|
-
Fluent::Plugin.register_input('plugin_test_dummy2', self)
|
18
|
-
helpers :storage
|
19
|
-
config_section :storage do
|
20
|
-
config_set_default :@type, 'plugin_test_dummy1'
|
21
|
-
end
|
22
|
-
def multi_workers_ready?
|
23
|
-
true
|
24
|
-
end
|
25
|
-
end
|
26
|
-
class DummyFilter < Fluent::Plugin::Filter
|
27
|
-
Fluent::Plugin.register_filter('plugin_test_dummy', self)
|
28
|
-
helpers :parser, :formatter
|
29
|
-
config_section :parse do
|
30
|
-
config_set_default :@type, 'plugin_test_dummy'
|
31
|
-
end
|
32
|
-
config_section :format do
|
33
|
-
config_set_default :@type, 'plugin_test_dummy'
|
34
|
-
end
|
35
|
-
def filter(tag, time, record)
|
36
|
-
record
|
37
|
-
end
|
38
|
-
end
|
39
|
-
class Dummy1Output < Fluent::Plugin::Output
|
40
|
-
Fluent::Plugin.register_output('plugin_test_dummy1', self)
|
41
|
-
def write(chunk)
|
42
|
-
# drop
|
43
|
-
end
|
44
|
-
end
|
45
|
-
class Dummy2Output < Fluent::Plugin::Output
|
46
|
-
Fluent::Plugin.register_output('plugin_test_dummy2', self)
|
47
|
-
config_section :buffer do
|
48
|
-
config_set_default :@type, 'plugin_test_dummy1'
|
49
|
-
end
|
50
|
-
def multi_workers_ready?
|
51
|
-
true
|
52
|
-
end
|
53
|
-
def write(chunk)
|
54
|
-
# drop
|
55
|
-
end
|
56
|
-
end
|
57
|
-
class Dummy1Buffer < Fluent::Plugin::Buffer
|
58
|
-
Fluent::Plugin.register_buffer('plugin_test_dummy1', self)
|
59
|
-
end
|
60
|
-
class Dummy2Buffer < Fluent::Plugin::Buffer
|
61
|
-
Fluent::Plugin.register_buffer('plugin_test_dummy2', self)
|
62
|
-
def multi_workers_ready?
|
63
|
-
false
|
64
|
-
end
|
65
|
-
end
|
66
|
-
class DummyParser < Fluent::Plugin::Parser
|
67
|
-
Fluent::Plugin.register_parser('plugin_test_dummy', self)
|
68
|
-
end
|
69
|
-
class DummyFormatter < Fluent::Plugin::Formatter
|
70
|
-
Fluent::Plugin.register_formatter('plugin_test_dummy', self)
|
71
|
-
end
|
72
|
-
class Dummy1Storage < Fluent::Plugin::Storage
|
73
|
-
Fluent::Plugin.register_storage('plugin_test_dummy1', self)
|
74
|
-
end
|
75
|
-
class Dummy2Storage < Fluent::Plugin::Storage
|
76
|
-
Fluent::Plugin.register_storage('plugin_test_dummy2', self)
|
77
|
-
def multi_workers_ready?
|
78
|
-
false
|
79
|
-
end
|
80
|
-
end
|
81
|
-
class DummyOwner < Fluent::Plugin::Base
|
82
|
-
include Fluent::PluginId
|
83
|
-
include Fluent::PluginLoggerMixin
|
84
|
-
end
|
85
|
-
class DummyEventRouter
|
86
|
-
def emit(tag, time, record); end
|
87
|
-
def emit_array(tag, array); end
|
88
|
-
def emit_stream(tag, es); end
|
89
|
-
def emit_error_event(tag, time, record, error); end
|
90
|
-
end
|
91
|
-
|
92
|
-
sub_test_case '#new_* methods' do
|
93
|
-
data(
|
94
|
-
input1: ['plugin_test_dummy1', Dummy1Input, :new_input],
|
95
|
-
input2: ['plugin_test_dummy2', Dummy2Input, :new_input],
|
96
|
-
filter: ['plugin_test_dummy', DummyFilter, :new_filter],
|
97
|
-
output1: ['plugin_test_dummy1', Dummy1Output, :new_output],
|
98
|
-
output2: ['plugin_test_dummy2', Dummy2Output, :new_output],
|
99
|
-
)
|
100
|
-
test 'returns plugin instances of registered plugin classes' do |(type, klass, m)|
|
101
|
-
instance = Fluent::Plugin.__send__(m, type)
|
102
|
-
assert_kind_of klass, instance
|
103
|
-
end
|
104
|
-
|
105
|
-
data(
|
106
|
-
buffer1: ['plugin_test_dummy1', Dummy1Buffer, :new_buffer],
|
107
|
-
buffer2: ['plugin_test_dummy2', Dummy2Buffer, :new_buffer],
|
108
|
-
parser: ['plugin_test_dummy', DummyParser, :new_parser],
|
109
|
-
formatter: ['plugin_test_dummy', DummyFormatter, :new_formatter],
|
110
|
-
storage1: ['plugin_test_dummy1', Dummy1Storage, :new_storage],
|
111
|
-
storage2: ['plugin_test_dummy2', Dummy2Storage, :new_storage],
|
112
|
-
)
|
113
|
-
test 'returns plugin instances of registered owned plugin classes' do |(type, klass, m)|
|
114
|
-
owner = DummyOwner.new
|
115
|
-
instance = Fluent::Plugin.__send__(m, type, parent: owner)
|
116
|
-
assert_kind_of klass, instance
|
117
|
-
end
|
118
|
-
|
119
|
-
data(
|
120
|
-
input1: ['plugin_test_dummy1', Dummy1Input, :new_input, nil],
|
121
|
-
input2: ['plugin_test_dummy2', Dummy2Input, :new_input, nil],
|
122
|
-
filter: ['plugin_test_dummy', DummyFilter, :new_filter, nil],
|
123
|
-
output1: ['plugin_test_dummy1', Dummy1Output, :new_output, nil],
|
124
|
-
output2: ['plugin_test_dummy2', Dummy2Output, :new_output, nil],
|
125
|
-
buffer1: ['plugin_test_dummy1', Dummy1Buffer, :new_buffer, {parent: DummyOwner.new}],
|
126
|
-
buffer2: ['plugin_test_dummy2', Dummy2Buffer, :new_buffer, {parent: DummyOwner.new}],
|
127
|
-
parser: ['plugin_test_dummy', DummyParser, :new_parser, {parent: DummyOwner.new}],
|
128
|
-
formatter: ['plugin_test_dummy', DummyFormatter, :new_formatter, {parent: DummyOwner.new}],
|
129
|
-
storage1: ['plugin_test_dummy1', Dummy1Storage, :new_storage, {parent: DummyOwner.new}],
|
130
|
-
storage2: ['plugin_test_dummy2', Dummy2Storage, :new_storage, {parent: DummyOwner.new}],
|
131
|
-
)
|
132
|
-
test 'returns plugin instances which are extended by FeatureAvailabilityChecker module' do |(type, _, m, kwargs)|
|
133
|
-
instance = if kwargs
|
134
|
-
Fluent::Plugin.__send__(m, type, **kwargs)
|
135
|
-
else
|
136
|
-
Fluent::Plugin.__send__(m, type)
|
137
|
-
end
|
138
|
-
assert_kind_of Fluent::Plugin::FeatureAvailabilityChecker, instance
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
sub_test_case 'with default system configuration' do
|
143
|
-
data(
|
144
|
-
input1: ['plugin_test_dummy1', Dummy1Input, :new_input, nil],
|
145
|
-
input2: ['plugin_test_dummy2', Dummy2Input, :new_input, nil],
|
146
|
-
filter: ['plugin_test_dummy', DummyFilter, :new_filter, nil],
|
147
|
-
output1: ['plugin_test_dummy1', Dummy1Output, :new_output, nil],
|
148
|
-
output2: ['plugin_test_dummy2', Dummy2Output, :new_output, nil],
|
149
|
-
buffer1: ['plugin_test_dummy1', Dummy1Buffer, :new_buffer, {parent: DummyOwner.new}],
|
150
|
-
buffer2: ['plugin_test_dummy2', Dummy2Buffer, :new_buffer, {parent: DummyOwner.new}],
|
151
|
-
parser: ['plugin_test_dummy', DummyParser, :new_parser, {parent: DummyOwner.new}],
|
152
|
-
formatter: ['plugin_test_dummy', DummyFormatter, :new_formatter, {parent: DummyOwner.new}],
|
153
|
-
storage1: ['plugin_test_dummy1', Dummy1Storage, :new_storage, {parent: DummyOwner.new}],
|
154
|
-
storage2: ['plugin_test_dummy2', Dummy2Storage, :new_storage, {parent: DummyOwner.new}],
|
155
|
-
)
|
156
|
-
test '#configure does not raise anything' do |(type, _, m, kwargs)|
|
157
|
-
instance = if kwargs
|
158
|
-
Fluent::Plugin.__send__(m, type, **kwargs)
|
159
|
-
else
|
160
|
-
Fluent::Plugin.__send__(m, type)
|
161
|
-
end
|
162
|
-
if instance.respond_to?(:context_router=)
|
163
|
-
instance.context_router = DummyEventRouter.new
|
164
|
-
end
|
165
|
-
assert_nothing_raised do
|
166
|
-
instance.configure(config_element())
|
167
|
-
end
|
168
|
-
end
|
169
|
-
end
|
170
|
-
|
171
|
-
sub_test_case 'with single worker configuration' do
|
172
|
-
data(
|
173
|
-
input1: ['plugin_test_dummy1', Dummy1Input, :new_input, nil],
|
174
|
-
input2: ['plugin_test_dummy2', Dummy2Input, :new_input, nil],
|
175
|
-
filter: ['plugin_test_dummy', DummyFilter, :new_filter, nil],
|
176
|
-
output1: ['plugin_test_dummy1', Dummy1Output, :new_output, nil],
|
177
|
-
output2: ['plugin_test_dummy2', Dummy2Output, :new_output, nil],
|
178
|
-
buffer1: ['plugin_test_dummy1', Dummy1Buffer, :new_buffer, {parent: DummyOwner.new}],
|
179
|
-
buffer2: ['plugin_test_dummy2', Dummy2Buffer, :new_buffer, {parent: DummyOwner.new}],
|
180
|
-
parser: ['plugin_test_dummy', DummyParser, :new_parser, {parent: DummyOwner.new}],
|
181
|
-
formatter: ['plugin_test_dummy', DummyFormatter, :new_formatter, {parent: DummyOwner.new}],
|
182
|
-
storage1: ['plugin_test_dummy1', Dummy1Storage, :new_storage, {parent: DummyOwner.new}],
|
183
|
-
storage2: ['plugin_test_dummy2', Dummy2Storage, :new_storage, {parent: DummyOwner.new}],
|
184
|
-
)
|
185
|
-
test '#configure does not raise anything' do |(type, _, m, kwargs)|
|
186
|
-
instance = if kwargs
|
187
|
-
Fluent::Plugin.__send__(m, type, **kwargs)
|
188
|
-
else
|
189
|
-
Fluent::Plugin.__send__(m, type)
|
190
|
-
end
|
191
|
-
if instance.respond_to?(:context_router=)
|
192
|
-
instance.context_router = DummyEventRouter.new
|
193
|
-
end
|
194
|
-
assert_nothing_raised do
|
195
|
-
instance.system_config_override('workers' => 1)
|
196
|
-
instance.configure(config_element())
|
197
|
-
end
|
198
|
-
end
|
199
|
-
end
|
200
|
-
|
201
|
-
sub_test_case 'with multi workers configuration' do
|
202
|
-
data(
|
203
|
-
input1: ['plugin_test_dummy1', Dummy1Input, :new_input],
|
204
|
-
output1: ['plugin_test_dummy1', Dummy1Output, :new_output],
|
205
|
-
)
|
206
|
-
test '#configure raise configuration error if plugins are not ready for multi workers' do |(type, klass, new_method)|
|
207
|
-
conf = config_element()
|
208
|
-
instance = Fluent::Plugin.__send__(new_method, type)
|
209
|
-
if instance.respond_to?(:context_router=)
|
210
|
-
instance.context_router = DummyEventRouter.new
|
211
|
-
end
|
212
|
-
assert_raise Fluent::ConfigError.new("Plugin '#{type}' does not support multi workers configuration (#{klass})") do
|
213
|
-
instance.system_config_override('workers' => 3)
|
214
|
-
instance.configure(conf)
|
215
|
-
end
|
216
|
-
end
|
217
|
-
|
218
|
-
data(
|
219
|
-
input2: ['plugin_test_dummy2', Dummy2Input, :new_input], # with Dummy1Storage
|
220
|
-
filter: ['plugin_test_dummy', DummyFilter, :new_filter], # with DummyParser and DummyFormatter
|
221
|
-
output2: ['plugin_test_dummy2', Dummy2Output, :new_output], # with Dummy1Buffer
|
222
|
-
)
|
223
|
-
test '#configure does not raise any errors if plugins and its owned plugins are ready for multi workers' do |(type, _klass, new_method)|
|
224
|
-
conf = config_element()
|
225
|
-
instance = Fluent::Plugin.__send__(new_method, type)
|
226
|
-
if instance.respond_to?(:context_router=)
|
227
|
-
instance.context_router = DummyEventRouter.new
|
228
|
-
end
|
229
|
-
assert_nothing_raised do
|
230
|
-
instance.system_config_override('workers' => 3)
|
231
|
-
instance.configure(conf)
|
232
|
-
end
|
233
|
-
end
|
234
|
-
|
235
|
-
data(
|
236
|
-
input2: ['plugin_test_dummy2', Dummy2Input, :new_input, 'storage', 'plugin_test_dummy2', Dummy2Storage],
|
237
|
-
output2: ['plugin_test_dummy2', Dummy2Output, :new_output, 'buffer', 'plugin_test_dummy2', Dummy2Buffer],
|
238
|
-
)
|
239
|
-
test '#configure raise configuration error if configured owned plugins are not ready for multi workers' do |(type, _klass, new_method, subsection, subsection_type, problematic)|
|
240
|
-
conf = config_element('root', '', {}, [config_element(subsection, '', {'@type' => subsection_type})])
|
241
|
-
instance = Fluent::Plugin.__send__(new_method, type)
|
242
|
-
if instance.respond_to?(:context_router=)
|
243
|
-
instance.context_router = DummyEventRouter.new
|
244
|
-
end
|
245
|
-
assert_raise Fluent::ConfigError.new("Plugin '#{subsection_type}' does not support multi workers configuration (#{problematic})") do
|
246
|
-
instance.system_config_override('workers' => 3)
|
247
|
-
instance.configure(conf)
|
248
|
-
end
|
249
|
-
end
|
250
|
-
end
|
251
|
-
end
|