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.
Files changed (259) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +46 -0
  3. data/README.md +1 -0
  4. data/SECURITY.md +2 -2
  5. data/fluent.conf +14 -14
  6. data/lib/fluent/command/cap_ctl.rb +4 -4
  7. data/lib/fluent/compat/call_super_mixin.rb +3 -3
  8. data/lib/fluent/compat/propagate_default.rb +4 -4
  9. data/lib/fluent/config/yaml_parser/parser.rb +4 -0
  10. data/lib/fluent/log/console_adapter.rb +4 -2
  11. data/lib/fluent/plugin/in_exec.rb +14 -2
  12. data/lib/fluent/plugin/in_http.rb +1 -1
  13. data/lib/fluent/plugin/in_sample.rb +13 -7
  14. data/lib/fluent/plugin/in_tail.rb +65 -23
  15. data/lib/fluent/plugin/out_copy.rb +1 -1
  16. data/lib/fluent/plugin/out_file.rb +8 -0
  17. data/lib/fluent/plugin/out_http.rb +12 -0
  18. data/lib/fluent/plugin/parser_json.rb +4 -12
  19. data/lib/fluent/plugin_helper/http_server/server.rb +1 -1
  20. data/lib/fluent/version.rb +1 -1
  21. data/templates/new_gem/fluent-plugin.gemspec.erb +6 -5
  22. metadata +25 -472
  23. data/.github/DISCUSSION_TEMPLATE/q-a-japanese.yml +0 -50
  24. data/.github/DISCUSSION_TEMPLATE/q-a.yml +0 -47
  25. data/.github/ISSUE_TEMPLATE/bug_report.yml +0 -71
  26. data/.github/ISSUE_TEMPLATE/config.yml +0 -5
  27. data/.github/ISSUE_TEMPLATE/feature_request.yml +0 -39
  28. data/.github/ISSUE_TEMPLATE.md +0 -17
  29. data/.github/PULL_REQUEST_TEMPLATE.md +0 -14
  30. data/.github/workflows/stale-actions.yml +0 -24
  31. data/.github/workflows/test-ruby-head.yml +0 -31
  32. data/.github/workflows/test.yml +0 -32
  33. data/.gitignore +0 -30
  34. data/Gemfile +0 -9
  35. data/fluentd.gemspec +0 -62
  36. data/test/command/test_binlog_reader.rb +0 -362
  37. data/test/command/test_ca_generate.rb +0 -70
  38. data/test/command/test_cap_ctl.rb +0 -100
  39. data/test/command/test_cat.rb +0 -128
  40. data/test/command/test_ctl.rb +0 -56
  41. data/test/command/test_fluentd.rb +0 -1291
  42. data/test/command/test_plugin_config_formatter.rb +0 -397
  43. data/test/command/test_plugin_generator.rb +0 -109
  44. data/test/compat/test_calls_super.rb +0 -166
  45. data/test/compat/test_parser.rb +0 -92
  46. data/test/config/assertions.rb +0 -42
  47. data/test/config/test_config_parser.rb +0 -551
  48. data/test/config/test_configurable.rb +0 -1784
  49. data/test/config/test_configure_proxy.rb +0 -604
  50. data/test/config/test_dsl.rb +0 -415
  51. data/test/config/test_element.rb +0 -518
  52. data/test/config/test_literal_parser.rb +0 -309
  53. data/test/config/test_plugin_configuration.rb +0 -56
  54. data/test/config/test_section.rb +0 -191
  55. data/test/config/test_system_config.rb +0 -195
  56. data/test/config/test_types.rb +0 -408
  57. data/test/counter/test_client.rb +0 -563
  58. data/test/counter/test_error.rb +0 -44
  59. data/test/counter/test_mutex_hash.rb +0 -179
  60. data/test/counter/test_server.rb +0 -589
  61. data/test/counter/test_store.rb +0 -258
  62. data/test/counter/test_validator.rb +0 -137
  63. data/test/helper.rb +0 -155
  64. data/test/helpers/fuzzy_assert.rb +0 -89
  65. data/test/helpers/process_extenstion.rb +0 -33
  66. data/test/log/test_console_adapter.rb +0 -117
  67. data/test/plugin/data/2010/01/20100102-030405.log +0 -0
  68. data/test/plugin/data/2010/01/20100102-030406.log +0 -0
  69. data/test/plugin/data/2010/01/20100102.log +0 -0
  70. data/test/plugin/data/log/bar +0 -0
  71. data/test/plugin/data/log/foo/bar.log +0 -0
  72. data/test/plugin/data/log/foo/bar2 +0 -0
  73. data/test/plugin/data/log/test.log +0 -0
  74. data/test/plugin/data/log_numeric/01.log +0 -0
  75. data/test/plugin/data/log_numeric/02.log +0 -0
  76. data/test/plugin/data/log_numeric/12.log +0 -0
  77. data/test/plugin/data/log_numeric/14.log +0 -0
  78. data/test/plugin/data/sd_file/config +0 -11
  79. data/test/plugin/data/sd_file/config.json +0 -17
  80. data/test/plugin/data/sd_file/config.yaml +0 -11
  81. data/test/plugin/data/sd_file/config.yml +0 -11
  82. data/test/plugin/data/sd_file/invalid_config.yml +0 -7
  83. data/test/plugin/in_tail/test_fifo.rb +0 -121
  84. data/test/plugin/in_tail/test_io_handler.rb +0 -150
  85. data/test/plugin/in_tail/test_position_file.rb +0 -346
  86. data/test/plugin/out_forward/test_ack_handler.rb +0 -140
  87. data/test/plugin/out_forward/test_connection_manager.rb +0 -145
  88. data/test/plugin/out_forward/test_handshake_protocol.rb +0 -112
  89. data/test/plugin/out_forward/test_load_balancer.rb +0 -106
  90. data/test/plugin/out_forward/test_socket_cache.rb +0 -174
  91. data/test/plugin/test_bare_output.rb +0 -131
  92. data/test/plugin/test_base.rb +0 -247
  93. data/test/plugin/test_buf_file.rb +0 -1314
  94. data/test/plugin/test_buf_file_single.rb +0 -898
  95. data/test/plugin/test_buf_memory.rb +0 -42
  96. data/test/plugin/test_buffer.rb +0 -1493
  97. data/test/plugin/test_buffer_chunk.rb +0 -209
  98. data/test/plugin/test_buffer_file_chunk.rb +0 -871
  99. data/test/plugin/test_buffer_file_single_chunk.rb +0 -611
  100. data/test/plugin/test_buffer_memory_chunk.rb +0 -339
  101. data/test/plugin/test_compressable.rb +0 -87
  102. data/test/plugin/test_file_util.rb +0 -96
  103. data/test/plugin/test_filter.rb +0 -368
  104. data/test/plugin/test_filter_grep.rb +0 -697
  105. data/test/plugin/test_filter_parser.rb +0 -731
  106. data/test/plugin/test_filter_record_transformer.rb +0 -577
  107. data/test/plugin/test_filter_stdout.rb +0 -207
  108. data/test/plugin/test_formatter_csv.rb +0 -136
  109. data/test/plugin/test_formatter_hash.rb +0 -38
  110. data/test/plugin/test_formatter_json.rb +0 -61
  111. data/test/plugin/test_formatter_ltsv.rb +0 -70
  112. data/test/plugin/test_formatter_msgpack.rb +0 -28
  113. data/test/plugin/test_formatter_out_file.rb +0 -116
  114. data/test/plugin/test_formatter_single_value.rb +0 -44
  115. data/test/plugin/test_formatter_tsv.rb +0 -76
  116. data/test/plugin/test_in_debug_agent.rb +0 -49
  117. data/test/plugin/test_in_exec.rb +0 -261
  118. data/test/plugin/test_in_forward.rb +0 -1178
  119. data/test/plugin/test_in_gc_stat.rb +0 -62
  120. data/test/plugin/test_in_http.rb +0 -1124
  121. data/test/plugin/test_in_monitor_agent.rb +0 -922
  122. data/test/plugin/test_in_object_space.rb +0 -66
  123. data/test/plugin/test_in_sample.rb +0 -190
  124. data/test/plugin/test_in_syslog.rb +0 -505
  125. data/test/plugin/test_in_tail.rb +0 -3429
  126. data/test/plugin/test_in_tcp.rb +0 -328
  127. data/test/plugin/test_in_udp.rb +0 -296
  128. data/test/plugin/test_in_unix.rb +0 -181
  129. data/test/plugin/test_input.rb +0 -137
  130. data/test/plugin/test_metadata.rb +0 -89
  131. data/test/plugin/test_metrics.rb +0 -294
  132. data/test/plugin/test_metrics_local.rb +0 -96
  133. data/test/plugin/test_multi_output.rb +0 -204
  134. data/test/plugin/test_out_copy.rb +0 -308
  135. data/test/plugin/test_out_exec.rb +0 -312
  136. data/test/plugin/test_out_exec_filter.rb +0 -606
  137. data/test/plugin/test_out_file.rb +0 -1038
  138. data/test/plugin/test_out_forward.rb +0 -1349
  139. data/test/plugin/test_out_http.rb +0 -557
  140. data/test/plugin/test_out_null.rb +0 -105
  141. data/test/plugin/test_out_relabel.rb +0 -28
  142. data/test/plugin/test_out_roundrobin.rb +0 -146
  143. data/test/plugin/test_out_secondary_file.rb +0 -458
  144. data/test/plugin/test_out_stdout.rb +0 -205
  145. data/test/plugin/test_out_stream.rb +0 -103
  146. data/test/plugin/test_output.rb +0 -1334
  147. data/test/plugin/test_output_as_buffered.rb +0 -2024
  148. data/test/plugin/test_output_as_buffered_backup.rb +0 -363
  149. data/test/plugin/test_output_as_buffered_compress.rb +0 -179
  150. data/test/plugin/test_output_as_buffered_overflow.rb +0 -250
  151. data/test/plugin/test_output_as_buffered_retries.rb +0 -966
  152. data/test/plugin/test_output_as_buffered_secondary.rb +0 -882
  153. data/test/plugin/test_output_as_standard.rb +0 -374
  154. data/test/plugin/test_owned_by.rb +0 -34
  155. data/test/plugin/test_parser.rb +0 -399
  156. data/test/plugin/test_parser_apache.rb +0 -42
  157. data/test/plugin/test_parser_apache2.rb +0 -47
  158. data/test/plugin/test_parser_apache_error.rb +0 -45
  159. data/test/plugin/test_parser_csv.rb +0 -200
  160. data/test/plugin/test_parser_json.rb +0 -244
  161. data/test/plugin/test_parser_labeled_tsv.rb +0 -160
  162. data/test/plugin/test_parser_msgpack.rb +0 -127
  163. data/test/plugin/test_parser_multiline.rb +0 -111
  164. data/test/plugin/test_parser_nginx.rb +0 -88
  165. data/test/plugin/test_parser_none.rb +0 -52
  166. data/test/plugin/test_parser_regexp.rb +0 -284
  167. data/test/plugin/test_parser_syslog.rb +0 -650
  168. data/test/plugin/test_parser_tsv.rb +0 -122
  169. data/test/plugin/test_sd_file.rb +0 -228
  170. data/test/plugin/test_sd_srv.rb +0 -230
  171. data/test/plugin/test_storage.rb +0 -166
  172. data/test/plugin/test_storage_local.rb +0 -335
  173. data/test/plugin/test_string_util.rb +0 -26
  174. data/test/plugin_helper/data/cert/cert-key.pem +0 -27
  175. data/test/plugin_helper/data/cert/cert-with-CRLF.pem +0 -19
  176. data/test/plugin_helper/data/cert/cert-with-no-newline.pem +0 -19
  177. data/test/plugin_helper/data/cert/cert.pem +0 -19
  178. data/test/plugin_helper/data/cert/cert_chains/ca-cert-key.pem +0 -27
  179. data/test/plugin_helper/data/cert/cert_chains/ca-cert.pem +0 -20
  180. data/test/plugin_helper/data/cert/cert_chains/cert-key.pem +0 -27
  181. data/test/plugin_helper/data/cert/cert_chains/cert.pem +0 -40
  182. data/test/plugin_helper/data/cert/empty.pem +0 -0
  183. data/test/plugin_helper/data/cert/generate_cert.rb +0 -125
  184. data/test/plugin_helper/data/cert/with_ca/ca-cert-key-pass.pem +0 -30
  185. data/test/plugin_helper/data/cert/with_ca/ca-cert-key.pem +0 -27
  186. data/test/plugin_helper/data/cert/with_ca/ca-cert-pass.pem +0 -20
  187. data/test/plugin_helper/data/cert/with_ca/ca-cert.pem +0 -20
  188. data/test/plugin_helper/data/cert/with_ca/cert-key-pass.pem +0 -30
  189. data/test/plugin_helper/data/cert/with_ca/cert-key.pem +0 -27
  190. data/test/plugin_helper/data/cert/with_ca/cert-pass.pem +0 -21
  191. data/test/plugin_helper/data/cert/with_ca/cert.pem +0 -21
  192. data/test/plugin_helper/data/cert/without_ca/cert-key-pass.pem +0 -30
  193. data/test/plugin_helper/data/cert/without_ca/cert-key.pem +0 -27
  194. data/test/plugin_helper/data/cert/without_ca/cert-pass.pem +0 -20
  195. data/test/plugin_helper/data/cert/without_ca/cert.pem +0 -20
  196. data/test/plugin_helper/http_server/test_app.rb +0 -65
  197. data/test/plugin_helper/http_server/test_route.rb +0 -32
  198. data/test/plugin_helper/service_discovery/test_manager.rb +0 -93
  199. data/test/plugin_helper/service_discovery/test_round_robin_balancer.rb +0 -21
  200. data/test/plugin_helper/test_cert_option.rb +0 -25
  201. data/test/plugin_helper/test_child_process.rb +0 -862
  202. data/test/plugin_helper/test_compat_parameters.rb +0 -358
  203. data/test/plugin_helper/test_event_emitter.rb +0 -80
  204. data/test/plugin_helper/test_event_loop.rb +0 -52
  205. data/test/plugin_helper/test_extract.rb +0 -194
  206. data/test/plugin_helper/test_formatter.rb +0 -255
  207. data/test/plugin_helper/test_http_server_helper.rb +0 -372
  208. data/test/plugin_helper/test_inject.rb +0 -561
  209. data/test/plugin_helper/test_metrics.rb +0 -137
  210. data/test/plugin_helper/test_parser.rb +0 -264
  211. data/test/plugin_helper/test_record_accessor.rb +0 -238
  212. data/test/plugin_helper/test_retry_state.rb +0 -1006
  213. data/test/plugin_helper/test_server.rb +0 -1895
  214. data/test/plugin_helper/test_service_discovery.rb +0 -165
  215. data/test/plugin_helper/test_socket.rb +0 -146
  216. data/test/plugin_helper/test_storage.rb +0 -542
  217. data/test/plugin_helper/test_thread.rb +0 -164
  218. data/test/plugin_helper/test_timer.rb +0 -130
  219. data/test/scripts/exec_script.rb +0 -32
  220. data/test/scripts/fluent/plugin/formatter1/formatter_test1.rb +0 -7
  221. data/test/scripts/fluent/plugin/formatter2/formatter_test2.rb +0 -7
  222. data/test/scripts/fluent/plugin/formatter_known.rb +0 -8
  223. data/test/scripts/fluent/plugin/out_test.rb +0 -81
  224. data/test/scripts/fluent/plugin/out_test2.rb +0 -80
  225. data/test/scripts/fluent/plugin/parser_known.rb +0 -4
  226. data/test/test_capability.rb +0 -74
  227. data/test/test_clock.rb +0 -164
  228. data/test/test_config.rb +0 -369
  229. data/test/test_configdsl.rb +0 -148
  230. data/test/test_daemonizer.rb +0 -91
  231. data/test/test_engine.rb +0 -203
  232. data/test/test_event.rb +0 -531
  233. data/test/test_event_router.rb +0 -348
  234. data/test/test_event_time.rb +0 -199
  235. data/test/test_file_wrapper.rb +0 -53
  236. data/test/test_filter.rb +0 -121
  237. data/test/test_fluent_log_event_router.rb +0 -99
  238. data/test/test_formatter.rb +0 -369
  239. data/test/test_input.rb +0 -31
  240. data/test/test_log.rb +0 -1076
  241. data/test/test_match.rb +0 -148
  242. data/test/test_mixin.rb +0 -351
  243. data/test/test_msgpack_factory.rb +0 -50
  244. data/test/test_oj_options.rb +0 -55
  245. data/test/test_output.rb +0 -278
  246. data/test/test_plugin.rb +0 -251
  247. data/test/test_plugin_classes.rb +0 -370
  248. data/test/test_plugin_helper.rb +0 -81
  249. data/test/test_plugin_id.rb +0 -119
  250. data/test/test_process.rb +0 -14
  251. data/test/test_root_agent.rb +0 -951
  252. data/test/test_static_config_analysis.rb +0 -177
  253. data/test/test_supervisor.rb +0 -821
  254. data/test/test_test_drivers.rb +0 -136
  255. data/test/test_time_formatter.rb +0 -301
  256. data/test/test_time_parser.rb +0 -362
  257. data/test/test_tls.rb +0 -65
  258. data/test/test_unique_id.rb +0 -47
  259. data/test/test_variable_store.rb +0 -65
@@ -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
@@ -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