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,96 +0,0 @@
|
|
1
|
-
require_relative '../helper'
|
2
|
-
require 'fluent/plugin/metrics_local'
|
3
|
-
require 'fluent/system_config'
|
4
|
-
|
5
|
-
class LocalMetricsTest < ::Test::Unit::TestCase
|
6
|
-
sub_test_case 'configure' do
|
7
|
-
test "configured for counter mode" do
|
8
|
-
m = Fluent::Plugin::LocalMetrics.new
|
9
|
-
m.configure(config_element('metrics', '', {"labels" => {test: "test-unit", language: "Ruby"}}))
|
10
|
-
|
11
|
-
assert_false m.use_gauge_metric
|
12
|
-
assert_equal({agent: "Fluentd", hostname: "#{Socket.gethostname}"}, m.default_labels)
|
13
|
-
assert_equal({test: "test-unit", language: "Ruby"}, m.labels)
|
14
|
-
assert_true m.has_methods_for_counter
|
15
|
-
assert_false m.has_methods_for_gauge
|
16
|
-
end
|
17
|
-
|
18
|
-
test "configured for gauge mode" do
|
19
|
-
m = Fluent::Plugin::LocalMetrics.new
|
20
|
-
m.use_gauge_metric = true
|
21
|
-
m.configure(config_element('metrics', '', {"labels" => {test: "test-unit", language: "Ruby"}}))
|
22
|
-
|
23
|
-
assert_true m.use_gauge_metric
|
24
|
-
assert_equal({agent: "Fluentd", hostname: "#{Socket.gethostname}"}, m.default_labels)
|
25
|
-
assert_equal({test: "test-unit", language: "Ruby"}, m.labels)
|
26
|
-
assert_false m.has_methods_for_counter
|
27
|
-
assert_true m.has_methods_for_gauge
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
sub_test_case 'LocalMetric' do
|
32
|
-
sub_test_case "counter" do
|
33
|
-
setup do
|
34
|
-
@m = Fluent::Plugin::LocalMetrics.new
|
35
|
-
@m.configure(config_element('metrics', '', {}))
|
36
|
-
end
|
37
|
-
|
38
|
-
test '#configure' do
|
39
|
-
assert_true @m.has_methods_for_counter
|
40
|
-
assert_false @m.has_methods_for_gauge
|
41
|
-
end
|
42
|
-
|
43
|
-
test 'all local counter operations work well' do
|
44
|
-
assert_equal 0, @m.get
|
45
|
-
assert_equal 1, @m.inc
|
46
|
-
|
47
|
-
@m.add(20)
|
48
|
-
assert_equal 21, @m.get
|
49
|
-
assert_raise NotImplementedError do
|
50
|
-
@m.dec
|
51
|
-
end
|
52
|
-
|
53
|
-
@m.set(100)
|
54
|
-
assert_equal 100, @m.get
|
55
|
-
|
56
|
-
@m.set(10)
|
57
|
-
assert_equal 100, @m.get # On counter, value should be overwritten bigger than stored one.
|
58
|
-
assert_raise NotImplementedError do
|
59
|
-
@m.sub(11)
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
sub_test_case "gauge" do
|
65
|
-
setup do
|
66
|
-
@m = Fluent::Plugin::LocalMetrics.new
|
67
|
-
@m.use_gauge_metric = true
|
68
|
-
@m.configure(config_element('metrics', '', {}))
|
69
|
-
end
|
70
|
-
|
71
|
-
test '#configure' do
|
72
|
-
assert_false @m.has_methods_for_counter
|
73
|
-
assert_true @m.has_methods_for_gauge
|
74
|
-
end
|
75
|
-
|
76
|
-
test 'all local gauge operations work well' do
|
77
|
-
assert_equal 0, @m.get
|
78
|
-
assert_equal 1, @m.inc
|
79
|
-
|
80
|
-
@m.add(20)
|
81
|
-
assert_equal 21, @m.get
|
82
|
-
@m.dec
|
83
|
-
assert_equal 20, @m.get
|
84
|
-
|
85
|
-
@m.set(100)
|
86
|
-
assert_equal 100, @m.get
|
87
|
-
|
88
|
-
@m.sub(11)
|
89
|
-
assert_equal 89, @m.get
|
90
|
-
|
91
|
-
@m.set(10)
|
92
|
-
assert_equal 10, @m.get # On gauge, value always should be overwritten.
|
93
|
-
end
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
@@ -1,204 +0,0 @@
|
|
1
|
-
require_relative '../helper'
|
2
|
-
require 'fluent/plugin/multi_output'
|
3
|
-
require 'fluent/event'
|
4
|
-
|
5
|
-
require 'json'
|
6
|
-
require 'time'
|
7
|
-
require 'timeout'
|
8
|
-
|
9
|
-
module FluentPluginMultiOutputTest
|
10
|
-
class DummyMultiOutput < Fluent::Plugin::MultiOutput
|
11
|
-
attr_reader :events
|
12
|
-
def initialize
|
13
|
-
super
|
14
|
-
@events = []
|
15
|
-
end
|
16
|
-
def configure(conf)
|
17
|
-
super
|
18
|
-
end
|
19
|
-
def process(tag, es)
|
20
|
-
es.each do |time, record|
|
21
|
-
@events << [tag, time, record]
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
class DummyCompatMultiOutput < Fluent::Plugin::MultiOutput
|
26
|
-
def initialize
|
27
|
-
super
|
28
|
-
@compat = true
|
29
|
-
end
|
30
|
-
def configure(conf)
|
31
|
-
super
|
32
|
-
end
|
33
|
-
def process(tag, es)
|
34
|
-
# ...
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
class Dummy1Output < Fluent::Plugin::Output
|
39
|
-
Fluent::Plugin.register_output('dummy_test_multi_output_1', self)
|
40
|
-
attr_reader :configured
|
41
|
-
def configure(conf)
|
42
|
-
super
|
43
|
-
@configured = true
|
44
|
-
end
|
45
|
-
def process(tag, es)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
class Dummy2Output < Fluent::Plugin::Output
|
49
|
-
Fluent::Plugin.register_output('dummy_test_multi_output_2', self)
|
50
|
-
attr_reader :configured
|
51
|
-
def configure(conf)
|
52
|
-
super
|
53
|
-
@configured = true
|
54
|
-
end
|
55
|
-
def process(tag, es)
|
56
|
-
end
|
57
|
-
end
|
58
|
-
class Dummy3Output < Fluent::Plugin::Output
|
59
|
-
Fluent::Plugin.register_output('dummy_test_multi_output_3', self)
|
60
|
-
attr_reader :configured
|
61
|
-
def configure(conf)
|
62
|
-
super
|
63
|
-
@configured = true
|
64
|
-
end
|
65
|
-
def process(tag, es)
|
66
|
-
end
|
67
|
-
end
|
68
|
-
class Dummy4Output < Fluent::Plugin::Output
|
69
|
-
Fluent::Plugin.register_output('dummy_test_multi_output_4', self)
|
70
|
-
attr_reader :configured
|
71
|
-
def configure(conf)
|
72
|
-
super
|
73
|
-
@configured = true
|
74
|
-
end
|
75
|
-
def process(tag, es)
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
class MultiOutputTest < Test::Unit::TestCase
|
81
|
-
def create_output(type=:multi)
|
82
|
-
case type
|
83
|
-
when :compat_multi
|
84
|
-
FluentPluginMultiOutputTest::DummyCompatMultiOutput.new
|
85
|
-
else
|
86
|
-
FluentPluginMultiOutputTest::DummyMultiOutput.new
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
sub_test_case 'basic multi output plugin' do
|
91
|
-
setup do
|
92
|
-
Fluent::Test.setup
|
93
|
-
@i = create_output()
|
94
|
-
end
|
95
|
-
|
96
|
-
teardown do
|
97
|
-
@i.log.out.reset
|
98
|
-
end
|
99
|
-
|
100
|
-
test '#configure raises error if <store> sections are missing' do
|
101
|
-
conf = config_element('ROOT', '', { '@type' => 'dummy_test_multi_output' }, [])
|
102
|
-
assert_raise Fluent::ConfigError do
|
103
|
-
@i.configure(conf)
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
test '#configure initialize child plugins and call these #configure' do
|
108
|
-
assert_equal [], @i.outputs
|
109
|
-
|
110
|
-
conf = config_element('ROOT', '', { '@type' => 'dummy_test_multi_output' },
|
111
|
-
[
|
112
|
-
config_element('store', '', { '@type' => 'dummy_test_multi_output_1' }),
|
113
|
-
config_element('store', '', { '@type' => 'dummy_test_multi_output_2' }),
|
114
|
-
config_element('store', '', { '@type' => 'dummy_test_multi_output_3' }),
|
115
|
-
config_element('store', '', { '@type' => 'dummy_test_multi_output_4' }),
|
116
|
-
]
|
117
|
-
)
|
118
|
-
@i.configure(conf)
|
119
|
-
|
120
|
-
assert_equal 4, @i.outputs.size
|
121
|
-
|
122
|
-
assert @i.outputs[0].is_a? FluentPluginMultiOutputTest::Dummy1Output
|
123
|
-
assert @i.outputs[0].configured
|
124
|
-
|
125
|
-
assert @i.outputs[1].is_a? FluentPluginMultiOutputTest::Dummy2Output
|
126
|
-
assert @i.outputs[1].configured
|
127
|
-
|
128
|
-
assert @i.outputs[2].is_a? FluentPluginMultiOutputTest::Dummy3Output
|
129
|
-
assert @i.outputs[2].configured
|
130
|
-
|
131
|
-
assert @i.outputs[3].is_a? FluentPluginMultiOutputTest::Dummy4Output
|
132
|
-
assert @i.outputs[3].configured
|
133
|
-
end
|
134
|
-
|
135
|
-
test '#configure warns if "type" is used in <store> sections instead of "@type"' do
|
136
|
-
assert_equal [], @i.log.out.logs
|
137
|
-
|
138
|
-
conf = config_element('ROOT', '', { '@type' => 'dummy_test_multi_output' },
|
139
|
-
[
|
140
|
-
config_element('store', '', { 'type' => 'dummy_test_multi_output_1' }),
|
141
|
-
config_element('store', '', { 'type' => 'dummy_test_multi_output_2' }),
|
142
|
-
config_element('store', '', { 'type' => 'dummy_test_multi_output_3' }),
|
143
|
-
config_element('store', '', { 'type' => 'dummy_test_multi_output_4' }),
|
144
|
-
]
|
145
|
-
)
|
146
|
-
@i.configure(conf)
|
147
|
-
assert_equal 4, @i.outputs.size
|
148
|
-
|
149
|
-
log_size_for_multi_output_itself = 4
|
150
|
-
log_size_for_metrics_plugin_helper = 4
|
151
|
-
expected_warn_log_size = log_size_for_multi_output_itself + log_size_for_metrics_plugin_helper
|
152
|
-
logs = @i.log.out.logs
|
153
|
-
assert{ logs.count{|log| log.include?('[warn]') && log.include?("'type' is deprecated parameter name. use '@type' instead.") } == expected_warn_log_size }
|
154
|
-
end
|
155
|
-
|
156
|
-
test '#emit_events calls #process always' do
|
157
|
-
conf = config_element('ROOT', '', { '@type' => 'dummy_test_multi_output' },
|
158
|
-
[
|
159
|
-
config_element('store', '', { '@type' => 'dummy_test_multi_output_1' }),
|
160
|
-
config_element('store', '', { '@type' => 'dummy_test_multi_output_2' }),
|
161
|
-
config_element('store', '', { '@type' => 'dummy_test_multi_output_3' }),
|
162
|
-
config_element('store', '', { '@type' => 'dummy_test_multi_output_4' }),
|
163
|
-
]
|
164
|
-
)
|
165
|
-
@i.configure(conf)
|
166
|
-
@i.start
|
167
|
-
|
168
|
-
assert @i.events.empty?
|
169
|
-
|
170
|
-
@i.emit_events(
|
171
|
-
'test.tag',
|
172
|
-
Fluent::ArrayEventStream.new(
|
173
|
-
[
|
174
|
-
[event_time(), {"message" => "multi test 1"}],
|
175
|
-
[event_time(), {"message" => "multi test 1"}],
|
176
|
-
]
|
177
|
-
)
|
178
|
-
)
|
179
|
-
|
180
|
-
assert_equal 2, @i.events.size
|
181
|
-
end
|
182
|
-
|
183
|
-
test 'can use metrics plugins and fallback methods' do
|
184
|
-
conf = config_element('ROOT', '', { '@type' => 'dummy_test_multi_output' },
|
185
|
-
[
|
186
|
-
config_element('store', '', { 'type' => 'dummy_test_multi_output_1' }),
|
187
|
-
config_element('store', '', { 'type' => 'dummy_test_multi_output_2' }),
|
188
|
-
config_element('store', '', { 'type' => 'dummy_test_multi_output_3' }),
|
189
|
-
config_element('store', '', { 'type' => 'dummy_test_multi_output_4' }),
|
190
|
-
]
|
191
|
-
)
|
192
|
-
@i.configure(conf)
|
193
|
-
|
194
|
-
%w[num_errors_metrics emit_count_metrics emit_size_metrics emit_records_metrics].each do |metric_name|
|
195
|
-
assert_true @i.instance_variable_get(:"@#{metric_name}").is_a?(Fluent::Plugin::Metrics)
|
196
|
-
end
|
197
|
-
|
198
|
-
assert_equal 0, @i.num_errors
|
199
|
-
assert_equal 0, @i.emit_count
|
200
|
-
assert_equal 0, @i.emit_size
|
201
|
-
assert_equal 0, @i.emit_records
|
202
|
-
end
|
203
|
-
end
|
204
|
-
end
|
@@ -1,308 +0,0 @@
|
|
1
|
-
require_relative '../helper'
|
2
|
-
require 'fluent/test/driver/multi_output'
|
3
|
-
require 'fluent/plugin/out_copy'
|
4
|
-
require 'fluent/event'
|
5
|
-
require 'flexmock/test_unit'
|
6
|
-
|
7
|
-
class CopyOutputTest < Test::Unit::TestCase
|
8
|
-
include FlexMock::TestCase
|
9
|
-
|
10
|
-
class << self
|
11
|
-
def startup
|
12
|
-
$LOAD_PATH.unshift File.expand_path(File.join(File.dirname(__FILE__), '..', 'scripts'))
|
13
|
-
require 'fluent/plugin/out_test'
|
14
|
-
require 'fluent/plugin/out_test2'
|
15
|
-
end
|
16
|
-
|
17
|
-
def shutdown
|
18
|
-
$LOAD_PATH.shift
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def setup
|
23
|
-
Fluent::Test.setup
|
24
|
-
end
|
25
|
-
|
26
|
-
CONFIG = %[
|
27
|
-
<store>
|
28
|
-
@type test
|
29
|
-
name c0
|
30
|
-
</store>
|
31
|
-
<store>
|
32
|
-
@type test2
|
33
|
-
name c1
|
34
|
-
</store>
|
35
|
-
<store>
|
36
|
-
@type test
|
37
|
-
name c2
|
38
|
-
</store>
|
39
|
-
]
|
40
|
-
|
41
|
-
def create_driver(conf = CONFIG)
|
42
|
-
Fluent::Test::Driver::MultiOutput.new(Fluent::Plugin::CopyOutput).configure(conf)
|
43
|
-
end
|
44
|
-
|
45
|
-
def test_configure
|
46
|
-
d = create_driver
|
47
|
-
|
48
|
-
outputs = d.instance.outputs
|
49
|
-
assert_equal 3, outputs.size
|
50
|
-
assert_equal Fluent::Plugin::TestOutput, outputs[0].class
|
51
|
-
assert_equal Fluent::Plugin::Test2Output, outputs[1].class
|
52
|
-
assert_equal Fluent::Plugin::TestOutput, outputs[2].class
|
53
|
-
assert_equal "c0", outputs[0].name
|
54
|
-
assert_equal "c1", outputs[1].name
|
55
|
-
assert_equal "c2", outputs[2].name
|
56
|
-
assert_false d.instance.deep_copy
|
57
|
-
assert_equal :no_copy, d.instance.copy_mode
|
58
|
-
end
|
59
|
-
|
60
|
-
ERRORNEOUS_IGNORE_IF_PREV_SUCCESS_CONFIG = %[
|
61
|
-
<store ignore_if_prev_success ignore_error>
|
62
|
-
@type test
|
63
|
-
name c0
|
64
|
-
</store>
|
65
|
-
<store ignore_if_prev_success ignore_error>
|
66
|
-
@type test
|
67
|
-
name c1
|
68
|
-
</store>
|
69
|
-
<store ignore_if_prev_success>
|
70
|
-
@type test
|
71
|
-
name c2
|
72
|
-
</store>
|
73
|
-
]
|
74
|
-
def test_configure_with_errorneus_ignore_if_prev_success
|
75
|
-
assert_raise(Fluent::ConfigError) do
|
76
|
-
create_driver(ERRORNEOUS_IGNORE_IF_PREV_SUCCESS_CONFIG)
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
ALL_IGNORE_ERROR_WITHOUT_IGNORE_IF_PREV_SUCCESS_CONFIG = %[
|
81
|
-
@log_level info
|
82
|
-
<store ignore_error>
|
83
|
-
@type test
|
84
|
-
name c0
|
85
|
-
</store>
|
86
|
-
<store ignore_error>
|
87
|
-
@type test
|
88
|
-
name c1
|
89
|
-
</store>
|
90
|
-
<store ignore_error>
|
91
|
-
@type test
|
92
|
-
name c2
|
93
|
-
</store>
|
94
|
-
]
|
95
|
-
def test_configure_all_ignore_errors_without_ignore_if_prev_success
|
96
|
-
d = create_driver(ALL_IGNORE_ERROR_WITHOUT_IGNORE_IF_PREV_SUCCESS_CONFIG)
|
97
|
-
expected = /ignore_errors are specified in all <store>, but ignore_if_prev_success is not specified./
|
98
|
-
matches = d.logs.grep(expected)
|
99
|
-
assert_equal(1, matches.length, "Logs do not contain '#{expected}' '#{d.logs}'")
|
100
|
-
end
|
101
|
-
|
102
|
-
def test_configure_with_deep_copy_and_use_shallow_copy_mode
|
103
|
-
d = create_driver(%[
|
104
|
-
deep_copy true
|
105
|
-
<store>
|
106
|
-
@type test
|
107
|
-
name c0
|
108
|
-
</store>
|
109
|
-
])
|
110
|
-
|
111
|
-
outputs = d.instance.outputs
|
112
|
-
assert_equal 1, outputs.size
|
113
|
-
assert_equal Fluent::Plugin::TestOutput, outputs[0].class
|
114
|
-
assert_equal "c0", outputs[0].name
|
115
|
-
assert_true d.instance.deep_copy
|
116
|
-
assert_equal :shallow, d.instance.copy_mode
|
117
|
-
end
|
118
|
-
|
119
|
-
def test_feed_events
|
120
|
-
d = create_driver
|
121
|
-
|
122
|
-
assert !d.instance.outputs[0].has_router?
|
123
|
-
assert_not_nil d.instance.outputs[1].router
|
124
|
-
assert !d.instance.outputs[2].has_router?
|
125
|
-
|
126
|
-
time = event_time("2011-01-02 13:14:15 UTC")
|
127
|
-
d.run(default_tag: 'test') do
|
128
|
-
d.feed(time, {"a" => 1})
|
129
|
-
d.feed(time, {"a" => 2})
|
130
|
-
end
|
131
|
-
|
132
|
-
d.instance.outputs.each {|o|
|
133
|
-
assert_equal [ [time, {"a"=>1}], [time, {"a"=>2}] ], o.events
|
134
|
-
}
|
135
|
-
end
|
136
|
-
|
137
|
-
def test_msgpack_unpacker_cache_bug_for_msgpack_event_stream
|
138
|
-
d = create_driver
|
139
|
-
|
140
|
-
time = event_time("2011-01-02 13:14:15 UTC")
|
141
|
-
source = Fluent::ArrayEventStream.new([ [time, {"a" => 1}], [time, {"a" => 2}] ])
|
142
|
-
es = Fluent::MessagePackEventStream.new(source.to_msgpack_stream)
|
143
|
-
|
144
|
-
d.run(default_tag: 'test') do
|
145
|
-
d.feed(es)
|
146
|
-
end
|
147
|
-
|
148
|
-
d.instance.outputs.each { |o|
|
149
|
-
assert_equal [ [time, {"a"=>1}], [time, {"a"=>2}] ], o.events
|
150
|
-
}
|
151
|
-
end
|
152
|
-
|
153
|
-
def create_event_test_driver(copy_mode = 'no_copy')
|
154
|
-
config = %[
|
155
|
-
copy_mode #{copy_mode}
|
156
|
-
<store>
|
157
|
-
@type test
|
158
|
-
name output1
|
159
|
-
</store>
|
160
|
-
<store>
|
161
|
-
@type test
|
162
|
-
name output2
|
163
|
-
</store>
|
164
|
-
]
|
165
|
-
|
166
|
-
d = Fluent::Test::Driver::MultiOutput.new(Fluent::Plugin::CopyOutput).configure(config)
|
167
|
-
d.instance.outputs[0].define_singleton_method(:process) do |tag, es|
|
168
|
-
es.each do |time, record|
|
169
|
-
record['foo'] = 'bar'
|
170
|
-
end
|
171
|
-
super(tag, es)
|
172
|
-
end
|
173
|
-
d
|
174
|
-
end
|
175
|
-
|
176
|
-
time = event_time("2013-05-26 06:37:22 UTC")
|
177
|
-
gen_multi_es = Proc.new {
|
178
|
-
es = Fluent::MultiEventStream.new
|
179
|
-
es.add(time, {"a" => 1, "nest" => {'k' => 'v'}})
|
180
|
-
es.add(time, {"b" => 1, "nest" => {'k' => 'v'}})
|
181
|
-
es
|
182
|
-
}
|
183
|
-
|
184
|
-
data(
|
185
|
-
"OneEventStream without copy" => ['no_copy', Fluent::OneEventStream.new(time, {"a" => 1, "nest" => {'k' => 'v'}})],
|
186
|
-
"OneEventStream with shallow" => ['shallow', Fluent::OneEventStream.new(time, {"a" => 1, "nest" => {'k' => 'v'}})],
|
187
|
-
"OneEventStream with marshal" => ['marshal', Fluent::OneEventStream.new(time, {"a" => 1, "nest" => {'k' => 'v'}})],
|
188
|
-
"OneEventStream with deep" => ['deep', Fluent::OneEventStream.new(time, {"a" => 1, "nest" => {'k' => 'v'}})],
|
189
|
-
"ArrayEventStream without copy" => ['no_copy', Fluent::ArrayEventStream.new([[time, {"a" => 1, "nest" => {'k' => 'v'}}], [time, {"b" => 2, "nest" => {'k' => 'v'}}]])],
|
190
|
-
"ArrayEventStream with shallow" => ['shallow', Fluent::ArrayEventStream.new([[time, {"a" => 1, "nest" => {'k' => 'v'}}], [time, {"b" => 2, "nest" => {'k' => 'v'}}]])],
|
191
|
-
"ArrayEventStream with marshal" => ['marshal', Fluent::ArrayEventStream.new([[time, {"a" => 1, "nest" => {'k' => 'v'}}], [time, {"b" => 2, "nest" => {'k' => 'v'}}]])],
|
192
|
-
"ArrayEventStream with deep" => ['deep', Fluent::ArrayEventStream.new([[time, {"a" => 1, "nest" => {'k' => 'v'}}], [time, {"b" => 2, "nest" => {'k' => 'v'}}]])],
|
193
|
-
"MultiEventStream without copy" => ['no_copy', gen_multi_es.call],
|
194
|
-
"MultiEventStream with shallow" => ['shallow', gen_multi_es.call],
|
195
|
-
"MultiEventStream with marshal" => ['marshal', gen_multi_es.call],
|
196
|
-
"MultiEventStream with deep" => ['deep', gen_multi_es.call],
|
197
|
-
)
|
198
|
-
def test_copy_mode_with_event_streams(data)
|
199
|
-
copy_mode, es = data
|
200
|
-
|
201
|
-
d = create_event_test_driver(copy_mode)
|
202
|
-
d.run(default_tag: 'test') do
|
203
|
-
d.feed(es)
|
204
|
-
end
|
205
|
-
|
206
|
-
events = d.instance.outputs.map(&:events)
|
207
|
-
|
208
|
-
if copy_mode != 'no_copy'
|
209
|
-
events[0].each_with_index do |entry0, i|
|
210
|
-
record0 = entry0.last
|
211
|
-
record1 = events[1][i].last
|
212
|
-
|
213
|
-
assert_not_equal record0.object_id, record1.object_id
|
214
|
-
assert_equal "bar", record0["foo"]
|
215
|
-
assert !record1.has_key?("foo")
|
216
|
-
if copy_mode == 'shallow'
|
217
|
-
assert_equal record0['nest'].object_id, record1['nest'].object_id
|
218
|
-
else
|
219
|
-
assert_not_equal record0['nest'].object_id, record1['nest'].object_id
|
220
|
-
end
|
221
|
-
end
|
222
|
-
else
|
223
|
-
events[0].each_with_index do |entry0, i|
|
224
|
-
record0 = entry0.last
|
225
|
-
record1 = events[1][i].last
|
226
|
-
|
227
|
-
assert_equal record0.object_id, record1.object_id
|
228
|
-
assert_equal "bar", record0["foo"]
|
229
|
-
assert_equal "bar", record1["foo"]
|
230
|
-
assert_equal record0['nest'].object_id, record1['nest'].object_id
|
231
|
-
end
|
232
|
-
end
|
233
|
-
end
|
234
|
-
|
235
|
-
IGNORE_ERROR_CONFIG = %[
|
236
|
-
<store ignore_error>
|
237
|
-
@type test
|
238
|
-
name c0
|
239
|
-
</store>
|
240
|
-
<store ignore_error>
|
241
|
-
@type test
|
242
|
-
name c1
|
243
|
-
</store>
|
244
|
-
<store>
|
245
|
-
@type test
|
246
|
-
name c2
|
247
|
-
</store>
|
248
|
-
]
|
249
|
-
|
250
|
-
def test_ignore_error
|
251
|
-
d = create_driver(IGNORE_ERROR_CONFIG)
|
252
|
-
|
253
|
-
# override to raise an error
|
254
|
-
d.instance.outputs[0].define_singleton_method(:process) do |tag, es|
|
255
|
-
raise ArgumentError, 'Failed'
|
256
|
-
end
|
257
|
-
|
258
|
-
time = Time.parse("2011-01-02 13:14:15 UTC").to_i
|
259
|
-
assert_nothing_raised do
|
260
|
-
d.run(default_tag: 'test') do
|
261
|
-
d.feed(time, {"a"=>1})
|
262
|
-
end
|
263
|
-
end
|
264
|
-
end
|
265
|
-
|
266
|
-
IGNORE_IF_PREV_SUCCESS_CONFIG = %[
|
267
|
-
<store ignore_error>
|
268
|
-
@type test
|
269
|
-
name c0
|
270
|
-
</store>
|
271
|
-
<store ignore_if_prev_success ignore_error>
|
272
|
-
@type test
|
273
|
-
name c1
|
274
|
-
</store>
|
275
|
-
<store ignore_if_prev_success>
|
276
|
-
@type test
|
277
|
-
name c2
|
278
|
-
</store>
|
279
|
-
]
|
280
|
-
|
281
|
-
def test_ignore_if_prev_success
|
282
|
-
d = create_driver(IGNORE_IF_PREV_SUCCESS_CONFIG)
|
283
|
-
|
284
|
-
# override to raise an error
|
285
|
-
d.instance.outputs[0].define_singleton_method(:process) do |tag, es|
|
286
|
-
raise ArgumentError, 'Failed'
|
287
|
-
end
|
288
|
-
|
289
|
-
# check ingore_if_prev_success functionality:
|
290
|
-
# 1. output 2 is succeeded.
|
291
|
-
# 2. output 3 is not called.
|
292
|
-
flexstub(d.instance.outputs[1]) do |output|
|
293
|
-
output.should_receive(:process).once
|
294
|
-
end
|
295
|
-
flexstub(d.instance.outputs[2]) do |output|
|
296
|
-
output.should_receive(:process).never
|
297
|
-
end
|
298
|
-
|
299
|
-
time = Time.parse("2011-01-02 13:14:15 UTC").to_i
|
300
|
-
assert_nothing_raised do
|
301
|
-
d.run(default_tag: 'test') do
|
302
|
-
d.feed(time, {"a"=>1})
|
303
|
-
end
|
304
|
-
end
|
305
|
-
end
|
306
|
-
|
307
|
-
end
|
308
|
-
|