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
data/test/compat/test_parser.rb
DELETED
@@ -1,92 +0,0 @@
|
|
1
|
-
require_relative '../helper'
|
2
|
-
require 'fluent/plugin/parser'
|
3
|
-
|
4
|
-
class TextParserTest < ::Test::Unit::TestCase
|
5
|
-
def setup
|
6
|
-
Fluent::Test.setup
|
7
|
-
end
|
8
|
-
|
9
|
-
class MultiEventTestParser < ::Fluent::Parser
|
10
|
-
include Fluent::Configurable
|
11
|
-
|
12
|
-
def parse(text)
|
13
|
-
2.times { |i|
|
14
|
-
record = {}
|
15
|
-
record['message'] = text
|
16
|
-
record['number'] = i
|
17
|
-
yield Fluent::Engine.now, record
|
18
|
-
}
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
Fluent::TextParser.register_template('multi_event_test', Proc.new { MultiEventTestParser.new })
|
23
|
-
|
24
|
-
def test_lookup_unknown_format
|
25
|
-
assert_raise Fluent::NotFoundPluginError do
|
26
|
-
Fluent::Plugin.new_parser('unknown')
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
data('register_formatter' => 'known', 'register_template' => 'known_old')
|
31
|
-
def test_lookup_known_parser(data)
|
32
|
-
$LOAD_PATH.unshift(File.join(File.expand_path(File.dirname(__FILE__)), '..', 'scripts'))
|
33
|
-
assert_nothing_raised Fluent::ConfigError do
|
34
|
-
Fluent::Plugin.new_parser(data)
|
35
|
-
end
|
36
|
-
$LOAD_PATH.shift
|
37
|
-
end
|
38
|
-
|
39
|
-
def test_parse_with_return
|
40
|
-
parser = Fluent::TextParser.new
|
41
|
-
parser.configure(config_element('test', '', 'format' => 'none'))
|
42
|
-
_time, record = parser.parse('log message!')
|
43
|
-
assert_equal({'message' => 'log message!'}, record)
|
44
|
-
end
|
45
|
-
|
46
|
-
def test_parse_with_block
|
47
|
-
parser = Fluent::TextParser.new
|
48
|
-
parser.configure(config_element('test', '', 'format' => 'none'))
|
49
|
-
parser.parse('log message!') { |time, record|
|
50
|
-
assert_equal({'message' => 'log message!'}, record)
|
51
|
-
}
|
52
|
-
end
|
53
|
-
|
54
|
-
def test_multi_event_parser
|
55
|
-
parser = Fluent::TextParser.new
|
56
|
-
parser.configure(config_element('test', '', 'format' => 'multi_event_test'))
|
57
|
-
i = 0
|
58
|
-
parser.parse('log message!') { |time, record|
|
59
|
-
assert_equal('log message!', record['message'])
|
60
|
-
assert_equal(i, record['number'])
|
61
|
-
i += 1
|
62
|
-
}
|
63
|
-
end
|
64
|
-
|
65
|
-
def test_setting_estimate_current_event_value
|
66
|
-
p1 = Fluent::TextParser.new
|
67
|
-
assert_nil p1.estimate_current_event
|
68
|
-
assert_nil p1.parser
|
69
|
-
|
70
|
-
p1.configure(config_element('test', '', 'format' => 'none'))
|
71
|
-
assert_equal true, p1.parser.estimate_current_event
|
72
|
-
|
73
|
-
p2 = Fluent::TextParser.new
|
74
|
-
assert_nil p2.estimate_current_event
|
75
|
-
assert_nil p2.parser
|
76
|
-
|
77
|
-
p2.estimate_current_event = false
|
78
|
-
|
79
|
-
p2.configure(config_element('test', '', 'format' => 'none'))
|
80
|
-
assert_equal false, p2.parser.estimate_current_event
|
81
|
-
end
|
82
|
-
|
83
|
-
data(ignorecase: Regexp::IGNORECASE,
|
84
|
-
multiline: Regexp::MULTILINE,
|
85
|
-
both: Regexp::IGNORECASE & Regexp::MULTILINE)
|
86
|
-
def test_regexp_parser_config(options)
|
87
|
-
source = "(?<test>.*)"
|
88
|
-
parser = Fluent::TextParser::RegexpParser.new(Regexp.new(source, options), { "dummy" => "dummy" })
|
89
|
-
regexp = parser.instance_variable_get("@regexp")
|
90
|
-
assert_equal(options, regexp.options)
|
91
|
-
end
|
92
|
-
end
|
data/test/config/assertions.rb
DELETED
@@ -1,42 +0,0 @@
|
|
1
|
-
require 'test/unit/assertions'
|
2
|
-
|
3
|
-
module Test::Unit::Assertions
|
4
|
-
def assert_text_parsed_as(expected, actual)
|
5
|
-
msg = parse_text(actual).inspect rescue 'failed'
|
6
|
-
msg = "expected that #{actual.inspect} would be a parsed as #{expected.inspect} but got #{msg}"
|
7
|
-
assert_block(msg) {
|
8
|
-
v = parse_text(actual)
|
9
|
-
if expected.is_a?(Float)
|
10
|
-
v.is_a?(Float) && (v == obj || (v.nan? && obj.nan?) || (v - obj).abs < 0.000001)
|
11
|
-
else
|
12
|
-
v == expected
|
13
|
-
end
|
14
|
-
}
|
15
|
-
end
|
16
|
-
|
17
|
-
def assert_text_parsed_as_json(expected, actual)
|
18
|
-
msg = parse_text(actual).inspect rescue 'failed'
|
19
|
-
msg = "expected that #{actual.inspect} would be a parsed as #{expected.inspect} but got #{msg}"
|
20
|
-
assert_block(msg) {
|
21
|
-
v = JSON.parse(parse_text(actual))
|
22
|
-
v == expected
|
23
|
-
}
|
24
|
-
end
|
25
|
-
|
26
|
-
def assert_parse_error(actual)
|
27
|
-
msg = begin
|
28
|
-
parse_text(actual).inspect
|
29
|
-
rescue => e
|
30
|
-
e.inspect
|
31
|
-
end
|
32
|
-
msg = "expected that #{actual.inspect} would cause a parse error but got #{msg}"
|
33
|
-
assert_block(msg) {
|
34
|
-
begin
|
35
|
-
parse_text(actual)
|
36
|
-
false
|
37
|
-
rescue Fluent::ConfigParseError
|
38
|
-
true
|
39
|
-
end
|
40
|
-
}
|
41
|
-
end
|
42
|
-
end
|
@@ -1,551 +0,0 @@
|
|
1
|
-
require_relative '../helper'
|
2
|
-
require_relative "assertions"
|
3
|
-
require "json"
|
4
|
-
require "fluent/config/error"
|
5
|
-
require "fluent/config/basic_parser"
|
6
|
-
require "fluent/config/literal_parser"
|
7
|
-
require "fluent/config/v1_parser"
|
8
|
-
require 'fluent/config/parser'
|
9
|
-
|
10
|
-
module Fluent::Config
|
11
|
-
module V1TestHelper
|
12
|
-
def root(*elements)
|
13
|
-
if elements.first.is_a?(Fluent::Config::Element)
|
14
|
-
attrs = {}
|
15
|
-
else
|
16
|
-
attrs = elements.shift || {}
|
17
|
-
end
|
18
|
-
Fluent::Config::Element.new('ROOT', '', attrs, elements)
|
19
|
-
end
|
20
|
-
|
21
|
-
def e(name, arg='', attrs={}, elements=[])
|
22
|
-
Fluent::Config::Element.new(name, arg, attrs, elements)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
class AllTypes
|
27
|
-
include Fluent::Configurable
|
28
|
-
|
29
|
-
config_param :param_string, :string
|
30
|
-
config_param :param_enum, :enum, list: [:foo, :bar, :baz]
|
31
|
-
config_param :param_integer, :integer
|
32
|
-
config_param :param_float, :float
|
33
|
-
config_param :param_size, :size
|
34
|
-
config_param :param_bool, :bool
|
35
|
-
config_param :param_time, :time
|
36
|
-
config_param :param_hash, :hash
|
37
|
-
config_param :param_array, :array
|
38
|
-
config_param :param_regexp, :regexp
|
39
|
-
end
|
40
|
-
|
41
|
-
class TestV1Parser < ::Test::Unit::TestCase
|
42
|
-
def read_config(path)
|
43
|
-
path = File.expand_path(path)
|
44
|
-
data = File.read(path)
|
45
|
-
Fluent::Config::V1Parser.parse(data, File.basename(path), File.dirname(path))
|
46
|
-
end
|
47
|
-
|
48
|
-
def parse_text(text)
|
49
|
-
basepath = File.expand_path(File.dirname(__FILE__) + '/../../')
|
50
|
-
Fluent::Config::V1Parser.parse(text, '(test)', basepath, nil)
|
51
|
-
end
|
52
|
-
|
53
|
-
include V1TestHelper
|
54
|
-
extend V1TestHelper
|
55
|
-
|
56
|
-
sub_test_case 'attribute parsing' do
|
57
|
-
test "parses attributes" do
|
58
|
-
assert_text_parsed_as(e('ROOT', '', {"k1"=>"v1", "k2"=>"v2"}), %[
|
59
|
-
k1 v1
|
60
|
-
k2 v2
|
61
|
-
])
|
62
|
-
end
|
63
|
-
|
64
|
-
test "allows attribute without value" do
|
65
|
-
assert_text_parsed_as(e('ROOT', '', {"k1"=>"", "k2"=>"v2"}), %[
|
66
|
-
k1
|
67
|
-
k2 v2
|
68
|
-
])
|
69
|
-
end
|
70
|
-
|
71
|
-
test "parses attribute key always string" do
|
72
|
-
assert_text_parsed_as(e('ROOT', '', {"1" => "1"}), "1 1")
|
73
|
-
end
|
74
|
-
|
75
|
-
data("_.%$!," => "_.%$!,",
|
76
|
-
"/=~-~@\`:?" => "/=~-~@\`:?",
|
77
|
-
"()*{}.[]" => "()*{}.[]")
|
78
|
-
test "parses a value with symbols" do |v|
|
79
|
-
assert_text_parsed_as(e('ROOT', '', {"k" => v}), "k #{v}")
|
80
|
-
end
|
81
|
-
|
82
|
-
test "ignores spacing around value" do
|
83
|
-
assert_text_parsed_as(e('ROOT', '', {"k1" => "a"}), " k1 a ")
|
84
|
-
end
|
85
|
-
|
86
|
-
test "allows spaces in value" do
|
87
|
-
assert_text_parsed_as(e('ROOT', '', {"k1" => "a b c"}), "k1 a b c")
|
88
|
-
end
|
89
|
-
|
90
|
-
test "parses value into empty string if only key exists" do
|
91
|
-
# value parser parses empty string as true for bool type
|
92
|
-
assert_text_parsed_as(e('ROOT', '', {"k1" => ""}), "k1\n")
|
93
|
-
assert_text_parsed_as(e('ROOT', '', {"k1" => ""}), "k1")
|
94
|
-
end
|
95
|
-
|
96
|
-
sub_test_case 'non-quoted string' do
|
97
|
-
test "remains text starting with '#'" do
|
98
|
-
assert_text_parsed_as(e('ROOT', '', {"k1" => "#not_comment"}), " k1 #not_comment")
|
99
|
-
end
|
100
|
-
|
101
|
-
test "remains text just after '#'" do
|
102
|
-
assert_text_parsed_as(e('ROOT', '', {"k1" => "a#not_comment"}), " k1 a#not_comment")
|
103
|
-
end
|
104
|
-
|
105
|
-
test "remove text after ` #` (comment)" do
|
106
|
-
assert_text_parsed_as(e('ROOT', '', {"k1" => "a"}), " k1 a #comment")
|
107
|
-
end
|
108
|
-
|
109
|
-
test "does not require escaping backslash" do
|
110
|
-
assert_text_parsed_as(e('ROOT', '', {"k1" => "\\\\"}), " k1 \\\\")
|
111
|
-
assert_text_parsed_as(e('ROOT', '', {"k1" => "\\"}), " k1 \\")
|
112
|
-
end
|
113
|
-
|
114
|
-
test "remains backslash in front of a normal character" do
|
115
|
-
assert_text_parsed_as(e('ROOT', '', {"k1" => '\['}), " k1 \\[")
|
116
|
-
end
|
117
|
-
|
118
|
-
test "does not accept escape characters" do
|
119
|
-
assert_text_parsed_as(e('ROOT', '', {"k1" => '\n'}), " k1 \\n")
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
sub_test_case 'double quoted string' do
|
124
|
-
test "allows # in value" do
|
125
|
-
assert_text_parsed_as(e('ROOT', '', {"k1" => "a#comment"}), ' k1 "a#comment"')
|
126
|
-
end
|
127
|
-
|
128
|
-
test "rejects characters after double quoted string" do
|
129
|
-
assert_parse_error(' k1 "a" 1')
|
130
|
-
end
|
131
|
-
|
132
|
-
test "requires escaping backslash" do
|
133
|
-
assert_text_parsed_as(e('ROOT', '', {"k1" => "\\"}), ' k1 "\\\\"')
|
134
|
-
assert_parse_error(' k1 "\\"')
|
135
|
-
end
|
136
|
-
|
137
|
-
test "requires escaping double quote" do
|
138
|
-
assert_text_parsed_as(e('ROOT', '', {"k1" => '"'}), ' k1 "\\""')
|
139
|
-
assert_parse_error(' k1 """')
|
140
|
-
assert_parse_error(' k1 ""\'')
|
141
|
-
end
|
142
|
-
|
143
|
-
test "removes backslash in front of a normal character" do
|
144
|
-
assert_text_parsed_as(e('ROOT', '', {"k1" => '['}), ' k1 "\\["')
|
145
|
-
end
|
146
|
-
|
147
|
-
test "accepts escape characters" do
|
148
|
-
assert_text_parsed_as(e('ROOT', '', {"k1" => "\n"}), ' k1 "\\n"')
|
149
|
-
end
|
150
|
-
|
151
|
-
test "support multiline string" do
|
152
|
-
assert_text_parsed_as(e('ROOT', '',
|
153
|
-
{"k1" => %[line1
|
154
|
-
line2]
|
155
|
-
}),
|
156
|
-
%[k1 "line1
|
157
|
-
line2"]
|
158
|
-
)
|
159
|
-
assert_text_parsed_as(e('ROOT', '',
|
160
|
-
{"k1" => %[line1 line2]
|
161
|
-
}),
|
162
|
-
%[k1 "line1\\
|
163
|
-
line2"]
|
164
|
-
)
|
165
|
-
assert_text_parsed_as(e('ROOT', '',
|
166
|
-
{"k1" => %[line1
|
167
|
-
line2
|
168
|
-
line3]
|
169
|
-
}),
|
170
|
-
%[k1 "line1
|
171
|
-
line2
|
172
|
-
line3"]
|
173
|
-
)
|
174
|
-
assert_text_parsed_as(e('ROOT', '',
|
175
|
-
{"k1" => %[line1
|
176
|
-
line2 line3]
|
177
|
-
}),
|
178
|
-
%[k1 "line1
|
179
|
-
line2\\
|
180
|
-
line3"]
|
181
|
-
)
|
182
|
-
end
|
183
|
-
end
|
184
|
-
|
185
|
-
sub_test_case 'single quoted string' do
|
186
|
-
test "allows # in value" do
|
187
|
-
assert_text_parsed_as(e('ROOT', '', {"k1" => "a#comment"}), " k1 'a#comment'")
|
188
|
-
end
|
189
|
-
|
190
|
-
test "rejects characters after single quoted string" do
|
191
|
-
assert_parse_error(" k1 'a' 1")
|
192
|
-
end
|
193
|
-
|
194
|
-
test "requires escaping backslash" do
|
195
|
-
assert_text_parsed_as(e('ROOT', '', {"k1" => "\\"}), " k1 '\\\\'")
|
196
|
-
assert_parse_error(" k1 '\\'")
|
197
|
-
end
|
198
|
-
|
199
|
-
test "requires escaping single quote" do
|
200
|
-
assert_text_parsed_as(e('ROOT', '', {"k1" => "'"}), " k1 '\\''")
|
201
|
-
assert_parse_error(" k1 '''")
|
202
|
-
end
|
203
|
-
|
204
|
-
test "remains backslash in front of a normal character" do
|
205
|
-
assert_text_parsed_as(e('ROOT', '', {"k1" => '\\['}), " k1 '\\['")
|
206
|
-
end
|
207
|
-
|
208
|
-
test "does not accept escape characters" do
|
209
|
-
assert_text_parsed_as(e('ROOT', '', {"k1" => "\\n"}), " k1 '\\n'")
|
210
|
-
end
|
211
|
-
end
|
212
|
-
|
213
|
-
data(
|
214
|
-
"in match" => %[
|
215
|
-
<match>
|
216
|
-
@k v
|
217
|
-
</match>
|
218
|
-
],
|
219
|
-
"in source" => %[
|
220
|
-
<source>
|
221
|
-
@k v
|
222
|
-
</source>
|
223
|
-
],
|
224
|
-
"in filter" => %[
|
225
|
-
<filter>
|
226
|
-
@k v
|
227
|
-
</filter>
|
228
|
-
],
|
229
|
-
"in top-level" => ' @k v '
|
230
|
-
)
|
231
|
-
def test_rejects_at_prefix_in_the_parameter_name(data)
|
232
|
-
assert_parse_error(data)
|
233
|
-
end
|
234
|
-
|
235
|
-
data(
|
236
|
-
"in nested" => %[
|
237
|
-
<match>
|
238
|
-
<record>
|
239
|
-
@k v
|
240
|
-
</record>
|
241
|
-
</match>
|
242
|
-
]
|
243
|
-
)
|
244
|
-
def test_not_reject_at_prefix_in_the_parameter_name(data)
|
245
|
-
assert_nothing_raised { parse_text(data) }
|
246
|
-
end
|
247
|
-
end
|
248
|
-
|
249
|
-
sub_test_case 'element parsing' do
|
250
|
-
data(
|
251
|
-
'root' => [root, ""],
|
252
|
-
"accepts empty element" => [root(e("test")), %[
|
253
|
-
<test>
|
254
|
-
</test>
|
255
|
-
]],
|
256
|
-
"accepts argument and attributes" => [root(e("test", 'var', {'key'=>"val"})), %[
|
257
|
-
<test var>
|
258
|
-
key val
|
259
|
-
</test>
|
260
|
-
]],
|
261
|
-
"accepts nested elements" => [root(
|
262
|
-
e("test", 'var', {'key'=>'1'}, [
|
263
|
-
e('nested1'),
|
264
|
-
e('nested2')
|
265
|
-
])), %[
|
266
|
-
<test var>
|
267
|
-
key 1
|
268
|
-
<nested1>
|
269
|
-
</nested1>
|
270
|
-
<nested2>
|
271
|
-
</nested2>
|
272
|
-
</test>
|
273
|
-
]],
|
274
|
-
"accepts multiline json values" => [root(e("test", 'var', {'key'=>"[\"a\",\"b\",\"c\",\"d\"]"})), %[
|
275
|
-
<test var>
|
276
|
-
key ["a",
|
277
|
-
"b", "c",
|
278
|
-
"d"]
|
279
|
-
</test>
|
280
|
-
]],
|
281
|
-
"parses empty element argument to nil" => [root(e("test", '')), %[
|
282
|
-
<test >
|
283
|
-
</test>
|
284
|
-
]],
|
285
|
-
"ignores spacing around element argument" => [root(e("test", "a")), %[
|
286
|
-
<test a >
|
287
|
-
</test>
|
288
|
-
]],
|
289
|
-
"accepts spacing inside element argument (for multiple tags)" => [root(e("test", "a.** b.**")), %[
|
290
|
-
<test a.** b.** >
|
291
|
-
</test>
|
292
|
-
]])
|
293
|
-
def test_parse_element(data)
|
294
|
-
expected, target = data
|
295
|
-
assert_text_parsed_as(expected, target)
|
296
|
-
end
|
297
|
-
|
298
|
-
[
|
299
|
-
"**",
|
300
|
-
"*.*",
|
301
|
-
"1",
|
302
|
-
"_.%$!",
|
303
|
-
"/",
|
304
|
-
"()*{}.[]",
|
305
|
-
].each do |arg|
|
306
|
-
test "parses symbol element argument:#{arg}" do
|
307
|
-
assert_text_parsed_as(root(e("test", arg)), %[
|
308
|
-
<test #{arg}>
|
309
|
-
</test>
|
310
|
-
])
|
311
|
-
end
|
312
|
-
end
|
313
|
-
|
314
|
-
data(
|
315
|
-
"considers comments in element argument" => %[
|
316
|
-
<test #a>
|
317
|
-
</test>
|
318
|
-
],
|
319
|
-
"requires line_end after begin tag" => %[
|
320
|
-
<test></test>
|
321
|
-
],
|
322
|
-
"requires line_end after end tag" => %[
|
323
|
-
<test>
|
324
|
-
</test><test>
|
325
|
-
</test>
|
326
|
-
])
|
327
|
-
def test_parse_error(data)
|
328
|
-
assert_parse_error(data)
|
329
|
-
end
|
330
|
-
end
|
331
|
-
|
332
|
-
sub_test_case "Embedded Ruby Code in section attributes" do
|
333
|
-
setup do
|
334
|
-
ENV["EMBEDDED_VAR"] = "embedded"
|
335
|
-
ENV["NESTED_EMBEDDED_VAR"] = "nested-embedded"
|
336
|
-
@hostname = Socket.gethostname
|
337
|
-
end
|
338
|
-
|
339
|
-
teardown do
|
340
|
-
ENV["EMBEDDED_VAR"] = nil
|
341
|
-
ENV["NESTED_EMBEDDED_VAR"] = nil
|
342
|
-
end
|
343
|
-
|
344
|
-
test "embedded Ruby code should be expanded" do
|
345
|
-
assert_text_parsed_as(root(
|
346
|
-
e("test", 'embedded', {'key'=>'1'}, [
|
347
|
-
e('nested1', 'nested-embedded'),
|
348
|
-
e('nested2', "#{@hostname}")
|
349
|
-
])), <<-EOF
|
350
|
-
<test "#{ENV["EMBEDDED_VAR"]}">
|
351
|
-
key 1
|
352
|
-
<nested1 "#{ENV["NESTED_EMBEDDED_VAR"]}">
|
353
|
-
</nested1>
|
354
|
-
<nested2 "#{Socket.gethostname}">
|
355
|
-
</nested2>
|
356
|
-
</test>
|
357
|
-
EOF
|
358
|
-
)
|
359
|
-
end
|
360
|
-
end
|
361
|
-
|
362
|
-
# port from test_config.rb
|
363
|
-
sub_test_case '@include parsing' do
|
364
|
-
TMP_DIR = File.dirname(__FILE__) + "/tmp/v1_config#{ENV['TEST_ENV_NUMBER']}"
|
365
|
-
TMP_DIR_WITH_SPACES = File.dirname(__FILE__) + "/tmp/folder with spaces/v1_config#{ENV['TEST_ENV_NUMBER']}"
|
366
|
-
|
367
|
-
def write_config(path, data)
|
368
|
-
FileUtils.mkdir_p(File.dirname(path))
|
369
|
-
File.open(path, "w") { |f| f.write data }
|
370
|
-
end
|
371
|
-
|
372
|
-
def prepare_config(tmp_dir)
|
373
|
-
write_config "#{tmp_dir}/config_test_1.conf", %[
|
374
|
-
k1 root_config
|
375
|
-
include dir/config_test_2.conf #
|
376
|
-
@include #{tmp_dir}/config_test_4.conf
|
377
|
-
include file://#{tmp_dir}/config_test_5.conf
|
378
|
-
@include config.d/*.conf
|
379
|
-
]
|
380
|
-
write_config "#{tmp_dir}/dir/config_test_2.conf", %[
|
381
|
-
k2 relative_path_include
|
382
|
-
@include ../config_test_3.conf
|
383
|
-
]
|
384
|
-
write_config "#{tmp_dir}/config_test_3.conf", %[
|
385
|
-
k3 relative_include_in_included_file
|
386
|
-
]
|
387
|
-
write_config "#{tmp_dir}/config_test_4.conf", %[
|
388
|
-
k4 absolute_path_include
|
389
|
-
]
|
390
|
-
write_config "#{tmp_dir}/config_test_5.conf", %[
|
391
|
-
k5 uri_include
|
392
|
-
]
|
393
|
-
write_config "#{tmp_dir}/config.d/config_test_6.conf", %[
|
394
|
-
k6 wildcard_include_1
|
395
|
-
<elem1 name>
|
396
|
-
include normal_parameter
|
397
|
-
</elem1>
|
398
|
-
]
|
399
|
-
write_config "#{tmp_dir}/config.d/config_test_7.conf", %[
|
400
|
-
k7 wildcard_include_2
|
401
|
-
]
|
402
|
-
write_config "#{tmp_dir}/config.d/config_test_8.conf", %[
|
403
|
-
<elem2 name>
|
404
|
-
@include ../dir/config_test_9.conf
|
405
|
-
</elem2>
|
406
|
-
]
|
407
|
-
write_config "#{tmp_dir}/dir/config_test_9.conf", %[
|
408
|
-
k9 embedded
|
409
|
-
<elem3 name>
|
410
|
-
nested nested_value
|
411
|
-
include hoge
|
412
|
-
</elem3>
|
413
|
-
]
|
414
|
-
write_config "#{tmp_dir}/config.d/00_config_test_8.conf", %[
|
415
|
-
k8 wildcard_include_3
|
416
|
-
<elem4 name>
|
417
|
-
include normal_parameter
|
418
|
-
</elem4>
|
419
|
-
]
|
420
|
-
end
|
421
|
-
|
422
|
-
data("TMP_DIR without spaces" => TMP_DIR,
|
423
|
-
"TMP_DIR with spaces" => TMP_DIR_WITH_SPACES)
|
424
|
-
test 'parses @include / include correctly' do |data|
|
425
|
-
prepare_config(data)
|
426
|
-
c = read_config("#{data}/config_test_1.conf")
|
427
|
-
assert_equal('root_config', c['k1'])
|
428
|
-
assert_equal('relative_path_include', c['k2'])
|
429
|
-
assert_equal('relative_include_in_included_file', c['k3'])
|
430
|
-
assert_equal('absolute_path_include', c['k4'])
|
431
|
-
assert_equal('uri_include', c['k5'])
|
432
|
-
assert_equal('wildcard_include_1', c['k6'])
|
433
|
-
assert_equal('wildcard_include_2', c['k7'])
|
434
|
-
assert_equal('wildcard_include_3', c['k8'])
|
435
|
-
assert_equal([
|
436
|
-
'k1',
|
437
|
-
'k2',
|
438
|
-
'k3',
|
439
|
-
'k4',
|
440
|
-
'k5',
|
441
|
-
'k8', # Because of the file name this comes first.
|
442
|
-
'k6',
|
443
|
-
'k7',
|
444
|
-
], c.keys)
|
445
|
-
|
446
|
-
elem1 = c.elements.find { |e| e.name == 'elem1' }
|
447
|
-
assert(elem1)
|
448
|
-
assert_equal('name', elem1.arg)
|
449
|
-
assert_equal('normal_parameter', elem1['include'])
|
450
|
-
|
451
|
-
elem2 = c.elements.find { |e| e.name == 'elem2' }
|
452
|
-
assert(elem2)
|
453
|
-
assert_equal('name', elem2.arg)
|
454
|
-
assert_equal('embedded', elem2['k9'])
|
455
|
-
assert_not_include(elem2, 'include')
|
456
|
-
|
457
|
-
elem3 = elem2.elements.find { |e| e.name == 'elem3' }
|
458
|
-
assert(elem3)
|
459
|
-
assert_equal('nested_value', elem3['nested'])
|
460
|
-
assert_equal('hoge', elem3['include'])
|
461
|
-
end
|
462
|
-
|
463
|
-
# TODO: Add uri based include spec
|
464
|
-
end
|
465
|
-
|
466
|
-
sub_test_case '#to_s' do
|
467
|
-
test 'parses dumpped configuration' do
|
468
|
-
original = %q!a\\\n\r\f\b'"z!
|
469
|
-
expected = %q!a\\\n\r\f\b'"z!
|
470
|
-
|
471
|
-
conf = parse_text(%[k1 #{original}])
|
472
|
-
assert_equal(expected, conf['k1']) # escape check
|
473
|
-
conf2 = parse_text(conf.to_s) # use dumpped configuration to check unescape
|
474
|
-
assert_equal(expected, conf2.elements.first['k1'])
|
475
|
-
end
|
476
|
-
|
477
|
-
test 'all types' do
|
478
|
-
conf = parse_text(%[
|
479
|
-
param_string "value"
|
480
|
-
param_enum foo
|
481
|
-
param_integer 999
|
482
|
-
param_float 55.55
|
483
|
-
param_size 4k
|
484
|
-
param_bool true
|
485
|
-
param_time 10m
|
486
|
-
param_hash { "key1": "value1", "key2": 2 }
|
487
|
-
param_array ["value1", "value2", 100]
|
488
|
-
param_regexp /pattern/
|
489
|
-
])
|
490
|
-
target = AllTypes.new.configure(conf)
|
491
|
-
assert_equal(conf.to_s, target.config.to_s)
|
492
|
-
expected = <<DUMP
|
493
|
-
<ROOT>
|
494
|
-
param_string "value"
|
495
|
-
param_enum foo
|
496
|
-
param_integer 999
|
497
|
-
param_float 55.55
|
498
|
-
param_size 4k
|
499
|
-
param_bool true
|
500
|
-
param_time 10m
|
501
|
-
param_hash {"key1":"value1","key2":2}
|
502
|
-
param_array ["value1","value2",100]
|
503
|
-
param_regexp /pattern/
|
504
|
-
</ROOT>
|
505
|
-
DUMP
|
506
|
-
assert_equal(expected, conf.to_s)
|
507
|
-
end
|
508
|
-
end
|
509
|
-
end
|
510
|
-
|
511
|
-
class TestV0Parser < ::Test::Unit::TestCase
|
512
|
-
def parse_text(text)
|
513
|
-
basepath = File.expand_path(File.dirname(__FILE__) + '/../../')
|
514
|
-
Fluent::Config::Parser.parse(StringIO.new(text), '(test)', basepath)
|
515
|
-
end
|
516
|
-
|
517
|
-
sub_test_case "Fluent::Config::Element#to_s" do
|
518
|
-
test 'all types' do
|
519
|
-
conf = parse_text(%[
|
520
|
-
param_string value
|
521
|
-
param_enum foo
|
522
|
-
param_integer 999
|
523
|
-
param_float 55.55
|
524
|
-
param_size 4k
|
525
|
-
param_bool true
|
526
|
-
param_time 10m
|
527
|
-
param_hash { "key1": "value1", "key2": 2 }
|
528
|
-
param_array ["value1", "value2", 100]
|
529
|
-
param_regexp /pattern/
|
530
|
-
])
|
531
|
-
target = AllTypes.new.configure(conf)
|
532
|
-
assert_equal(conf.to_s, target.config.to_s)
|
533
|
-
expected = <<DUMP
|
534
|
-
<ROOT>
|
535
|
-
param_string value
|
536
|
-
param_enum foo
|
537
|
-
param_integer 999
|
538
|
-
param_float 55.55
|
539
|
-
param_size 4k
|
540
|
-
param_bool true
|
541
|
-
param_time 10m
|
542
|
-
param_hash { "key1": "value1", "key2": 2 }
|
543
|
-
param_array ["value1", "value2", 100]
|
544
|
-
param_regexp /pattern/
|
545
|
-
</ROOT>
|
546
|
-
DUMP
|
547
|
-
assert_equal(expected, conf.to_s)
|
548
|
-
end
|
549
|
-
end
|
550
|
-
end
|
551
|
-
end
|