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,557 +0,0 @@
|
|
1
|
-
require_relative "../helper"
|
2
|
-
require 'fluent/test/driver/output'
|
3
|
-
require 'fluent/plugin/out_http'
|
4
|
-
|
5
|
-
require 'webrick'
|
6
|
-
require 'webrick/https'
|
7
|
-
require 'net/http'
|
8
|
-
require 'uri'
|
9
|
-
require 'json'
|
10
|
-
require 'aws-sdk-core'
|
11
|
-
|
12
|
-
# WEBrick's ProcHandler doesn't handle PUT by default
|
13
|
-
module WEBrick::HTTPServlet
|
14
|
-
class ProcHandler < AbstractServlet
|
15
|
-
alias do_PUT do_GET
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
class HTTPOutputTest < Test::Unit::TestCase
|
20
|
-
include Fluent::Test::Helpers
|
21
|
-
|
22
|
-
TMP_DIR = File.join(__dir__, "../tmp/out_http#{ENV['TEST_ENV_NUMBER']}")
|
23
|
-
DEFAULT_LOGGER = ::WEBrick::Log.new(::STDOUT, ::WEBrick::BasicLog::FATAL)
|
24
|
-
|
25
|
-
class << self
|
26
|
-
# Use class variable to reduce server start/shutdown time
|
27
|
-
def startup
|
28
|
-
@@result = nil
|
29
|
-
@@auth_handler = nil
|
30
|
-
@@http_server_thread = nil
|
31
|
-
end
|
32
|
-
|
33
|
-
def shutdown
|
34
|
-
@@http_server_thread.kill
|
35
|
-
@@http_server_thread.join
|
36
|
-
rescue
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
def server_port
|
41
|
-
19880
|
42
|
-
end
|
43
|
-
|
44
|
-
def base_endpoint
|
45
|
-
"http://127.0.0.1:#{server_port}"
|
46
|
-
end
|
47
|
-
|
48
|
-
def server_config
|
49
|
-
config = {BindAddress: '127.0.0.1', Port: server_port}
|
50
|
-
# Suppress webrick logs
|
51
|
-
config[:Logger] = DEFAULT_LOGGER
|
52
|
-
config[:AccessLog] = []
|
53
|
-
config
|
54
|
-
end
|
55
|
-
|
56
|
-
def http_client(**opts, &block)
|
57
|
-
opts = opts.merge(open_timeout: 1, read_timeout: 1)
|
58
|
-
if block_given?
|
59
|
-
Net::HTTP.start('127.0.0.1', server_port, **opts, &block)
|
60
|
-
else
|
61
|
-
Net::HTTP.start('127.0.0.1', server_port, **opts)
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
def run_http_server
|
66
|
-
server = ::WEBrick::HTTPServer.new(server_config)
|
67
|
-
server.mount_proc('/test') { |req, res|
|
68
|
-
if @@auth_handler
|
69
|
-
@@auth_handler.call(req, res)
|
70
|
-
end
|
71
|
-
|
72
|
-
@@result.method = req.request_method
|
73
|
-
@@result.content_type = req.content_type
|
74
|
-
req.each do |key, value|
|
75
|
-
@@result.headers[key] = value
|
76
|
-
end
|
77
|
-
|
78
|
-
data = []
|
79
|
-
case req.content_type
|
80
|
-
when 'application/x-ndjson'
|
81
|
-
req.body.each_line { |l|
|
82
|
-
data << JSON.parse(l)
|
83
|
-
}
|
84
|
-
when 'application/json'
|
85
|
-
data = JSON.parse(req.body)
|
86
|
-
when 'text/plain'
|
87
|
-
# Use single_value in this test
|
88
|
-
req.body.each_line { |line|
|
89
|
-
data << line.chomp
|
90
|
-
}
|
91
|
-
else
|
92
|
-
data << req.body
|
93
|
-
end
|
94
|
-
@@result.data = data
|
95
|
-
|
96
|
-
res.status = 200
|
97
|
-
res.body = "success"
|
98
|
-
}
|
99
|
-
server.mount_proc('/503') { |_, res|
|
100
|
-
res.status = 503
|
101
|
-
res.body = 'Service Unavailable'
|
102
|
-
}
|
103
|
-
server.mount_proc('/404') { |_, res|
|
104
|
-
res.status = 404
|
105
|
-
res.body = 'Not Found'
|
106
|
-
}
|
107
|
-
# For start check
|
108
|
-
server.mount_proc('/') { |_, res|
|
109
|
-
res.status = 200
|
110
|
-
res.body = 'Hello Fluentd!'
|
111
|
-
}
|
112
|
-
server.start
|
113
|
-
ensure
|
114
|
-
server.shutdown rescue nil
|
115
|
-
end
|
116
|
-
|
117
|
-
Result = Struct.new("Result", :method, :content_type, :headers, :data)
|
118
|
-
|
119
|
-
setup do
|
120
|
-
Fluent::Test.setup
|
121
|
-
FileUtils.rm_rf(TMP_DIR)
|
122
|
-
|
123
|
-
@@result = Result.new(nil, nil, {}, nil)
|
124
|
-
@@http_server_thread ||= Thread.new do
|
125
|
-
run_http_server
|
126
|
-
end
|
127
|
-
|
128
|
-
now = Time.now
|
129
|
-
started = false
|
130
|
-
until started
|
131
|
-
raise "Server not started" if (Time.now - now > 10.0)
|
132
|
-
begin
|
133
|
-
http_client { |c| c.request_get('/') }
|
134
|
-
started = true
|
135
|
-
rescue
|
136
|
-
sleep 0.5
|
137
|
-
end
|
138
|
-
end
|
139
|
-
end
|
140
|
-
|
141
|
-
teardown do
|
142
|
-
@@result = nil
|
143
|
-
@@auth_handler = nil
|
144
|
-
end
|
145
|
-
|
146
|
-
def create_driver(conf)
|
147
|
-
Fluent::Test::Driver::Output.new(Fluent::Plugin::HTTPOutput).configure(conf)
|
148
|
-
end
|
149
|
-
|
150
|
-
def config
|
151
|
-
%[
|
152
|
-
endpoint #{base_endpoint}/test
|
153
|
-
]
|
154
|
-
end
|
155
|
-
|
156
|
-
def test_events
|
157
|
-
[
|
158
|
-
{"message" => "hello", "num" => 10, "bool" => true},
|
159
|
-
{"message" => "hello", "num" => 11, "bool" => false}
|
160
|
-
]
|
161
|
-
end
|
162
|
-
|
163
|
-
def test_configure
|
164
|
-
d = create_driver(config)
|
165
|
-
assert_equal "http://127.0.0.1:#{server_port}/test", d.instance.endpoint
|
166
|
-
assert_equal :post, d.instance.http_method
|
167
|
-
assert_equal 'application/x-ndjson', d.instance.content_type
|
168
|
-
assert_equal [503], d.instance.retryable_response_codes
|
169
|
-
assert_true d.instance.error_response_as_unrecoverable
|
170
|
-
assert_nil d.instance.proxy
|
171
|
-
assert_nil d.instance.headers
|
172
|
-
end
|
173
|
-
|
174
|
-
def test_configure_with_warn
|
175
|
-
d = create_driver(config)
|
176
|
-
assert_match(/Status code 503 is going to be removed/, d.instance.log.out.logs.join)
|
177
|
-
end
|
178
|
-
|
179
|
-
def test_configure_without_warn
|
180
|
-
d = create_driver(<<~CONFIG)
|
181
|
-
endpoint #{base_endpoint}/test
|
182
|
-
retryable_response_codes [503]
|
183
|
-
CONFIG
|
184
|
-
assert_not_match(/Status code 503 is going to be removed/, d.instance.log.out.logs.join)
|
185
|
-
end
|
186
|
-
|
187
|
-
# Check if an exception is raised on not JSON format use
|
188
|
-
data('not_json' => 'msgpack')
|
189
|
-
def test_configure_with_json_array_err(format_type)
|
190
|
-
assert_raise(Fluent::ConfigError) do
|
191
|
-
create_driver(config + %[
|
192
|
-
json_array true
|
193
|
-
<format>
|
194
|
-
@type #{format_type}
|
195
|
-
</format>
|
196
|
-
])
|
197
|
-
end
|
198
|
-
end
|
199
|
-
|
200
|
-
data('json' => ['json', 'application/x-ndjson'],
|
201
|
-
'ltsv' => ['ltsv', 'text/tab-separated-values'],
|
202
|
-
'msgpack' => ['msgpack', 'application/x-msgpack'],
|
203
|
-
'single_value' => ['single_value', 'text/plain'])
|
204
|
-
def test_configure_content_type(types)
|
205
|
-
format_type, content_type = types
|
206
|
-
d = create_driver(config + %[
|
207
|
-
<format>
|
208
|
-
@type #{format_type}
|
209
|
-
</format>
|
210
|
-
])
|
211
|
-
assert_equal content_type, d.instance.content_type
|
212
|
-
end
|
213
|
-
|
214
|
-
# Check that json_array setting sets content_type = application/json
|
215
|
-
data('json' => 'application/json')
|
216
|
-
def test_configure_content_type_json_array(content_type)
|
217
|
-
d = create_driver(config + "json_array true")
|
218
|
-
|
219
|
-
assert_equal content_type, d.instance.content_type
|
220
|
-
end
|
221
|
-
|
222
|
-
data('PUT' => 'put', 'POST' => 'post')
|
223
|
-
def test_write_with_method(method)
|
224
|
-
d = create_driver(config + "http_method #{method}")
|
225
|
-
d.run(default_tag: 'test.http') do
|
226
|
-
test_events.each { |event|
|
227
|
-
d.feed(event)
|
228
|
-
}
|
229
|
-
end
|
230
|
-
|
231
|
-
result = @@result
|
232
|
-
assert_equal method.upcase, result.method
|
233
|
-
assert_equal 'application/x-ndjson', result.content_type
|
234
|
-
assert_equal test_events, result.data
|
235
|
-
assert_not_empty result.headers
|
236
|
-
end
|
237
|
-
|
238
|
-
# Check that JSON at HTTP request body is valid
|
239
|
-
def test_write_with_json_array_setting
|
240
|
-
d = create_driver(config + "json_array true")
|
241
|
-
d.run(default_tag: 'test.http') do
|
242
|
-
test_events.each { |event|
|
243
|
-
d.feed(event)
|
244
|
-
}
|
245
|
-
end
|
246
|
-
|
247
|
-
result = @@result
|
248
|
-
assert_equal 'application/json', result.content_type
|
249
|
-
assert_equal test_events, result.data
|
250
|
-
assert_not_empty result.headers
|
251
|
-
end
|
252
|
-
|
253
|
-
def test_write_with_single_value_format
|
254
|
-
d = create_driver(config + %[
|
255
|
-
<format>
|
256
|
-
@type single_value
|
257
|
-
</format>
|
258
|
-
])
|
259
|
-
d.run(default_tag: 'test.http') do
|
260
|
-
test_events.each { |event|
|
261
|
-
d.feed(event)
|
262
|
-
}
|
263
|
-
end
|
264
|
-
|
265
|
-
result = @@result
|
266
|
-
assert_equal 'text/plain', result.content_type
|
267
|
-
assert_equal (test_events.map { |e| e['message'] }), result.data
|
268
|
-
assert_not_empty result.headers
|
269
|
-
end
|
270
|
-
|
271
|
-
def test_write_with_headers
|
272
|
-
d = create_driver(config + 'headers {"test_header":"fluentd!"}')
|
273
|
-
d.run(default_tag: 'test.http') do
|
274
|
-
test_events.each { |event|
|
275
|
-
d.feed(event)
|
276
|
-
}
|
277
|
-
end
|
278
|
-
|
279
|
-
result = @@result
|
280
|
-
assert_true result.headers.has_key?('test_header')
|
281
|
-
assert_equal "fluentd!", result.headers['test_header']
|
282
|
-
end
|
283
|
-
|
284
|
-
def test_write_with_headers_from_placeholders
|
285
|
-
d = create_driver(config + %[
|
286
|
-
headers_from_placeholders {"x-test":"${$.foo.bar}-test","x-tag":"${tag}"}
|
287
|
-
<buffer tag,$.foo.bar>
|
288
|
-
</buffer>
|
289
|
-
])
|
290
|
-
d.run(default_tag: 'test.http') do
|
291
|
-
test_events.each { |event|
|
292
|
-
ev = event.dup
|
293
|
-
ev['foo'] = {'bar' => 'abcd'}
|
294
|
-
d.feed(ev)
|
295
|
-
}
|
296
|
-
end
|
297
|
-
|
298
|
-
result = @@result
|
299
|
-
assert_equal "abcd-test", result.headers['x-test']
|
300
|
-
assert_equal "test.http", result.headers['x-tag']
|
301
|
-
end
|
302
|
-
|
303
|
-
def test_write_with_retryable_response
|
304
|
-
old_report_on_exception = Thread.report_on_exception
|
305
|
-
Thread.report_on_exception = false # thread finished as invalid state since RetryableResponse raises.
|
306
|
-
|
307
|
-
d = create_driver("endpoint #{base_endpoint}/503")
|
308
|
-
assert_raise(Fluent::Plugin::HTTPOutput::RetryableResponse) do
|
309
|
-
d.run(default_tag: 'test.http', shutdown: false) do
|
310
|
-
test_events.each { |event|
|
311
|
-
d.feed(event)
|
312
|
-
}
|
313
|
-
end
|
314
|
-
end
|
315
|
-
|
316
|
-
d.instance_shutdown(log: $log)
|
317
|
-
ensure
|
318
|
-
Thread.report_on_exception = old_report_on_exception
|
319
|
-
end
|
320
|
-
|
321
|
-
def test_write_with_disabled_unrecoverable
|
322
|
-
d = create_driver(%[
|
323
|
-
endpoint #{base_endpoint}/404
|
324
|
-
error_response_as_unrecoverable false
|
325
|
-
])
|
326
|
-
d.run(default_tag: 'test.http', shutdown: false) do
|
327
|
-
test_events.each { |event|
|
328
|
-
d.feed(event)
|
329
|
-
}
|
330
|
-
end
|
331
|
-
assert_match(/got error response from.*404 Not Found Not Found/, d.instance.log.out.logs.join)
|
332
|
-
d.instance_shutdown
|
333
|
-
end
|
334
|
-
|
335
|
-
sub_test_case 'basic auth' do
|
336
|
-
setup do
|
337
|
-
FileUtils.mkdir_p(TMP_DIR)
|
338
|
-
htpd = WEBrick::HTTPAuth::Htpasswd.new(File.join(TMP_DIR, 'dot.htpasswd'))
|
339
|
-
htpd.set_passwd(nil, 'test', 'hey')
|
340
|
-
authenticator = WEBrick::HTTPAuth::BasicAuth.new(:UserDB => htpd, :Realm => 'test', :Logger => DEFAULT_LOGGER)
|
341
|
-
@@auth_handler = Proc.new { |req, res| authenticator.authenticate(req, res) }
|
342
|
-
end
|
343
|
-
|
344
|
-
teardown do
|
345
|
-
FileUtils.rm_rf(TMP_DIR)
|
346
|
-
end
|
347
|
-
|
348
|
-
def server_port
|
349
|
-
19881
|
350
|
-
end
|
351
|
-
|
352
|
-
def test_basic_auth
|
353
|
-
d = create_driver(config + %[
|
354
|
-
<auth>
|
355
|
-
method basic
|
356
|
-
username test
|
357
|
-
password hey
|
358
|
-
</auth>
|
359
|
-
])
|
360
|
-
d.run(default_tag: 'test.http') do
|
361
|
-
test_events.each { |event|
|
362
|
-
d.feed(event)
|
363
|
-
}
|
364
|
-
end
|
365
|
-
|
366
|
-
result = @@result
|
367
|
-
assert_equal 'POST', result.method
|
368
|
-
assert_equal 'application/x-ndjson', result.content_type
|
369
|
-
assert_equal test_events, result.data
|
370
|
-
assert_not_empty result.headers
|
371
|
-
end
|
372
|
-
|
373
|
-
# This test includes `error_response_as_unrecoverable true` behaviour check
|
374
|
-
def test_basic_auth_with_invalid_auth
|
375
|
-
d = create_driver(config + %[
|
376
|
-
<auth>
|
377
|
-
method basic
|
378
|
-
username ayaya
|
379
|
-
password hello?
|
380
|
-
</auth>
|
381
|
-
])
|
382
|
-
d.instance.system_config_override(root_dir: TMP_DIR) # Backup files are generated in TMP_DIR.
|
383
|
-
d.run(default_tag: 'test.http', shutdown: false) do
|
384
|
-
test_events.each { |event|
|
385
|
-
d.feed(event)
|
386
|
-
}
|
387
|
-
end
|
388
|
-
assert_match(/got unrecoverable error/, d.instance.log.out.logs.join)
|
389
|
-
|
390
|
-
d.instance_shutdown
|
391
|
-
end
|
392
|
-
end
|
393
|
-
|
394
|
-
|
395
|
-
sub_test_case 'aws sigv4 auth' do
|
396
|
-
setup do
|
397
|
-
@@fake_aws_credentials = Aws::Credentials.new(
|
398
|
-
'fakeaccess',
|
399
|
-
'fakesecret',
|
400
|
-
'fake session token'
|
401
|
-
)
|
402
|
-
end
|
403
|
-
|
404
|
-
def server_port
|
405
|
-
19883
|
406
|
-
end
|
407
|
-
|
408
|
-
def test_aws_sigv4_sts_role_arn
|
409
|
-
stub(Aws::AssumeRoleCredentials).new do |credentials_provider|
|
410
|
-
stub(credentials_provider).credentials {
|
411
|
-
@@fake_aws_credentials
|
412
|
-
}
|
413
|
-
credentials_provider
|
414
|
-
end
|
415
|
-
|
416
|
-
d = create_driver(config + %[
|
417
|
-
<auth>
|
418
|
-
method aws_sigv4
|
419
|
-
aws_service someservice
|
420
|
-
aws_region my-region-1
|
421
|
-
aws_role_arn arn:aws:iam::123456789012:role/MyRole
|
422
|
-
</auth>
|
423
|
-
])
|
424
|
-
d.run(default_tag: 'test.http') do
|
425
|
-
test_events.each { |event|
|
426
|
-
d.feed(event)
|
427
|
-
}
|
428
|
-
end
|
429
|
-
|
430
|
-
result = @@result
|
431
|
-
assert_equal 'POST', result.method
|
432
|
-
assert_equal 'application/x-ndjson', result.content_type
|
433
|
-
assert_equal test_events, result.data
|
434
|
-
assert_not_empty result.headers
|
435
|
-
assert_not_nil result.headers['authorization']
|
436
|
-
assert_match /AWS4-HMAC-SHA256 Credential=[a-zA-Z0-9]*\/\d+\/my-region-1\/someservice\/aws4_request/, result.headers['authorization']
|
437
|
-
assert_match /SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date;x-amz-security-token/, result.headers['authorization']
|
438
|
-
assert_equal @@fake_aws_credentials.session_token, result.headers['x-amz-security-token']
|
439
|
-
assert_not_nil result.headers['x-amz-content-sha256']
|
440
|
-
assert_not_empty result.headers['x-amz-content-sha256']
|
441
|
-
assert_not_nil result.headers['x-amz-security-token']
|
442
|
-
assert_not_empty result.headers['x-amz-security-token']
|
443
|
-
assert_not_nil result.headers['x-amz-date']
|
444
|
-
assert_not_empty result.headers['x-amz-date']
|
445
|
-
end
|
446
|
-
|
447
|
-
def test_aws_sigv4_no_role
|
448
|
-
stub(Aws::CredentialProviderChain).new do |provider_chain|
|
449
|
-
stub(provider_chain).resolve {
|
450
|
-
@@fake_aws_credentials
|
451
|
-
}
|
452
|
-
provider_chain
|
453
|
-
end
|
454
|
-
d = create_driver(config + %[
|
455
|
-
<auth>
|
456
|
-
method aws_sigv4
|
457
|
-
aws_service someservice
|
458
|
-
aws_region my-region-1
|
459
|
-
</auth>
|
460
|
-
])
|
461
|
-
d.run(default_tag: 'test.http') do
|
462
|
-
test_events.each { |event|
|
463
|
-
d.feed(event)
|
464
|
-
}
|
465
|
-
end
|
466
|
-
|
467
|
-
result = @@result
|
468
|
-
assert_equal 'POST', result.method
|
469
|
-
assert_equal 'application/x-ndjson', result.content_type
|
470
|
-
assert_equal test_events, result.data
|
471
|
-
assert_not_empty result.headers
|
472
|
-
assert_not_nil result.headers['authorization']
|
473
|
-
assert_match /AWS4-HMAC-SHA256 Credential=[a-zA-Z0-9]*\/\d+\/my-region-1\/someservice\/aws4_request/, result.headers['authorization']
|
474
|
-
assert_match /SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date;x-amz-security-token/, result.headers['authorization']
|
475
|
-
assert_equal @@fake_aws_credentials.session_token, result.headers['x-amz-security-token']
|
476
|
-
assert_not_nil result.headers['x-amz-content-sha256']
|
477
|
-
assert_not_empty result.headers['x-amz-content-sha256']
|
478
|
-
assert_not_nil result.headers['x-amz-security-token']
|
479
|
-
assert_not_empty result.headers['x-amz-security-token']
|
480
|
-
assert_not_nil result.headers['x-amz-date']
|
481
|
-
assert_not_empty result.headers['x-amz-date']
|
482
|
-
end
|
483
|
-
end
|
484
|
-
|
485
|
-
sub_test_case 'HTTPS' do
|
486
|
-
def server_port
|
487
|
-
19882
|
488
|
-
end
|
489
|
-
|
490
|
-
def server_config
|
491
|
-
config = super
|
492
|
-
# WEBrick supports self-generated self-signed certificate
|
493
|
-
config[:SSLEnable] = true
|
494
|
-
config[:SSLCertName] = [["CN", WEBrick::Utils::getservername]]
|
495
|
-
config
|
496
|
-
end
|
497
|
-
|
498
|
-
def http_client(&block)
|
499
|
-
super(use_ssl: true, verify_mode: OpenSSL::SSL::VERIFY_NONE, &block)
|
500
|
-
end
|
501
|
-
|
502
|
-
def test_write_with_https
|
503
|
-
d = create_driver(%[
|
504
|
-
endpoint https://127.0.0.1:#{server_port}/test
|
505
|
-
tls_verify_mode none
|
506
|
-
ssl_timeout 2s
|
507
|
-
])
|
508
|
-
d.run(default_tag: 'test.http') do
|
509
|
-
test_events.each { |event|
|
510
|
-
d.feed(event)
|
511
|
-
}
|
512
|
-
end
|
513
|
-
|
514
|
-
result = @@result
|
515
|
-
assert_equal 'POST', result.method
|
516
|
-
assert_equal 'application/x-ndjson', result.content_type
|
517
|
-
assert_equal test_events, result.data
|
518
|
-
assert_not_empty result.headers
|
519
|
-
end
|
520
|
-
end
|
521
|
-
|
522
|
-
sub_test_case 'connection_reuse' do
|
523
|
-
def server_port
|
524
|
-
19883
|
525
|
-
end
|
526
|
-
|
527
|
-
def test_connection_recreation
|
528
|
-
d = create_driver(%[
|
529
|
-
endpoint http://127.0.0.1:#{server_port}/test
|
530
|
-
reuse_connections true
|
531
|
-
])
|
532
|
-
|
533
|
-
d.run(default_tag: 'test.http', shutdown: false) do
|
534
|
-
d.feed(test_events[0])
|
535
|
-
end
|
536
|
-
|
537
|
-
data = @@result.data
|
538
|
-
|
539
|
-
# Restart server to simulate connection loss
|
540
|
-
@@http_server_thread.kill
|
541
|
-
@@http_server_thread.join
|
542
|
-
@@http_server_thread = Thread.new do
|
543
|
-
run_http_server
|
544
|
-
end
|
545
|
-
|
546
|
-
d.run(default_tag: 'test.http') do
|
547
|
-
d.feed(test_events[1])
|
548
|
-
end
|
549
|
-
|
550
|
-
result = @@result
|
551
|
-
assert_equal 'POST', result.method
|
552
|
-
assert_equal 'application/x-ndjson', result.content_type
|
553
|
-
assert_equal test_events, data.concat(result.data)
|
554
|
-
assert_not_empty result.headers
|
555
|
-
end
|
556
|
-
end
|
557
|
-
end
|
@@ -1,105 +0,0 @@
|
|
1
|
-
require_relative '../helper'
|
2
|
-
require 'fluent/test/driver/output'
|
3
|
-
require 'fluent/plugin/out_null'
|
4
|
-
|
5
|
-
class NullOutputTest < Test::Unit::TestCase
|
6
|
-
def setup
|
7
|
-
Fluent::Test.setup
|
8
|
-
end
|
9
|
-
|
10
|
-
def create_driver(conf = "")
|
11
|
-
Fluent::Test::Driver::Output.new(Fluent::Plugin::NullOutput).configure(conf)
|
12
|
-
end
|
13
|
-
|
14
|
-
sub_test_case 'non-buffered' do
|
15
|
-
test 'configure' do
|
16
|
-
assert_nothing_raised do
|
17
|
-
create_driver
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
test 'process' do
|
22
|
-
d = create_driver
|
23
|
-
assert_nothing_raised do
|
24
|
-
d.run do
|
25
|
-
d.feed("test", Fluent::EventTime.now, {"test" => "null"})
|
26
|
-
end
|
27
|
-
end
|
28
|
-
assert_equal([], d.events(tag: "test"))
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
sub_test_case 'buffered' do
|
33
|
-
test 'default chunk limit size is 100' do
|
34
|
-
d = create_driver(config_element("ROOT", "", {}, [config_element("buffer")]))
|
35
|
-
assert_equal 10 * 1024, d.instance.buffer_config.chunk_limit_size
|
36
|
-
assert d.instance.buffer_config.flush_at_shutdown
|
37
|
-
assert_equal ['tag'], d.instance.buffer_config.chunk_keys
|
38
|
-
assert d.instance.chunk_key_tag
|
39
|
-
assert !d.instance.chunk_key_time
|
40
|
-
assert_equal [], d.instance.chunk_keys
|
41
|
-
end
|
42
|
-
|
43
|
-
test 'writes standard formatted chunks' do
|
44
|
-
d = create_driver(config_element("ROOT", "", {}, [config_element("buffer")]))
|
45
|
-
t = event_time("2016-05-23 00:22:13 -0800")
|
46
|
-
d.run(default_tag: 'test', flush: true) do
|
47
|
-
d.feed(t, {"message" => "null null null"})
|
48
|
-
d.feed(t, {"message" => "null null"})
|
49
|
-
d.feed(t, {"message" => "null"})
|
50
|
-
end
|
51
|
-
|
52
|
-
assert_equal 3, d.instance.emit_count
|
53
|
-
assert_equal 3, d.instance.emit_records
|
54
|
-
end
|
55
|
-
|
56
|
-
test 'check for chunk passed to #write' do
|
57
|
-
d = create_driver(config_element("ROOT", "", {}, [config_element("buffer")]))
|
58
|
-
data = []
|
59
|
-
d.instance.feed_proc = ->(chunk){ data << [chunk.unique_id, chunk.metadata.tag, chunk.read] }
|
60
|
-
|
61
|
-
t = event_time("2016-05-23 00:22:13 -0800")
|
62
|
-
d.run(default_tag: 'test', flush: true) do
|
63
|
-
d.feed(t, {"message" => "null null null"})
|
64
|
-
d.feed(t, {"message" => "null null"})
|
65
|
-
d.feed(t, {"message" => "null"})
|
66
|
-
end
|
67
|
-
|
68
|
-
assert_equal 1, data.size
|
69
|
-
_, tag, binary = data.first
|
70
|
-
events = []
|
71
|
-
Fluent::MessagePackFactory.unpacker.feed_each(binary){|obj| events << obj }
|
72
|
-
assert_equal 'test', tag
|
73
|
-
assert_equal [ [t, {"message" => "null null null"}], [t, {"message" => "null null"}], [t, {"message" => "null"}] ], events
|
74
|
-
end
|
75
|
-
|
76
|
-
test 'check for chunk passed to #try_write' do
|
77
|
-
d = create_driver(config_element("ROOT", "", {}, [config_element("buffer")]))
|
78
|
-
data = []
|
79
|
-
d.instance.feed_proc = ->(chunk){ data << [chunk.unique_id, chunk.metadata.tag, chunk.read] }
|
80
|
-
d.instance.delayed = true
|
81
|
-
|
82
|
-
t = event_time("2016-05-23 00:22:13 -0800")
|
83
|
-
d.run(default_tag: 'test', flush: true, wait_flush_completion: false, shutdown: false) do
|
84
|
-
d.feed(t, {"message" => "null null null"})
|
85
|
-
d.feed(t, {"message" => "null null"})
|
86
|
-
d.feed(t, {"message" => "null"})
|
87
|
-
end
|
88
|
-
|
89
|
-
assert_equal 1, data.size
|
90
|
-
chunk_id, tag, binary = data.first
|
91
|
-
events = []
|
92
|
-
Fluent::MessagePackFactory.unpacker.feed_each(binary){|obj| events << obj }
|
93
|
-
assert_equal 'test', tag
|
94
|
-
assert_equal [ [t, {"message" => "null null null"}], [t, {"message" => "null null"}], [t, {"message" => "null"}] ], events
|
95
|
-
|
96
|
-
assert_equal [chunk_id], d.instance.buffer.dequeued.keys
|
97
|
-
|
98
|
-
d.instance.commit_write(chunk_id)
|
99
|
-
|
100
|
-
assert_equal [], d.instance.buffer.dequeued.keys
|
101
|
-
|
102
|
-
d.instance_shutdown
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
require_relative '../helper'
|
2
|
-
require 'fluent/test/driver/output'
|
3
|
-
require 'fluent/plugin/out_relabel'
|
4
|
-
|
5
|
-
class RelabelOutputTest < Test::Unit::TestCase
|
6
|
-
def setup
|
7
|
-
Fluent::Test.setup
|
8
|
-
end
|
9
|
-
|
10
|
-
def default_config
|
11
|
-
config_element('ROOT', '', {"@type"=>"relabel", "@label"=>"@RELABELED"})
|
12
|
-
end
|
13
|
-
|
14
|
-
def create_driver(conf = default_config)
|
15
|
-
Fluent::Test::Driver::Output.new(Fluent::Plugin::RelabelOutput).configure(conf)
|
16
|
-
end
|
17
|
-
|
18
|
-
def test_process
|
19
|
-
d = create_driver
|
20
|
-
|
21
|
-
time = event_time("2011-01-02 13:14:15 UTC")
|
22
|
-
d.run(default_tag: 'test') do
|
23
|
-
d.feed(time, {"a"=>1})
|
24
|
-
d.feed(time, {"a"=>2})
|
25
|
-
end
|
26
|
-
assert_equal [["test", time, {"a"=>1}], ["test", time, {"a"=>2}]], d.events
|
27
|
-
end
|
28
|
-
end
|