fluentd 1.14.4-x64-mingw-ucrt

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of fluentd might be problematic. Click here for more details.

Files changed (558) hide show
  1. checksums.yaml +7 -0
  2. data/.deepsource.toml +13 -0
  3. data/.drone.yml +35 -0
  4. data/.github/ISSUE_TEMPLATE/bug_report.yaml +70 -0
  5. data/.github/ISSUE_TEMPLATE/config.yml +5 -0
  6. data/.github/ISSUE_TEMPLATE/feature_request.yaml +38 -0
  7. data/.github/ISSUE_TEMPLATE.md +17 -0
  8. data/.github/PULL_REQUEST_TEMPLATE.md +14 -0
  9. data/.github/workflows/issue-auto-closer.yml +12 -0
  10. data/.github/workflows/linux-test.yaml +36 -0
  11. data/.github/workflows/macos-test.yaml +30 -0
  12. data/.github/workflows/stale-actions.yml +22 -0
  13. data/.github/workflows/windows-test.yaml +46 -0
  14. data/.gitignore +30 -0
  15. data/.gitlab-ci.yml +103 -0
  16. data/ADOPTERS.md +5 -0
  17. data/AUTHORS +2 -0
  18. data/CHANGELOG.md +2409 -0
  19. data/CONTRIBUTING.md +45 -0
  20. data/GOVERNANCE.md +55 -0
  21. data/Gemfile +9 -0
  22. data/GithubWorkflow.md +78 -0
  23. data/LICENSE +202 -0
  24. data/MAINTAINERS.md +11 -0
  25. data/README.md +97 -0
  26. data/Rakefile +79 -0
  27. data/SECURITY.md +18 -0
  28. data/bin/fluent-binlog-reader +7 -0
  29. data/bin/fluent-ca-generate +6 -0
  30. data/bin/fluent-cap-ctl +7 -0
  31. data/bin/fluent-cat +5 -0
  32. data/bin/fluent-ctl +7 -0
  33. data/bin/fluent-debug +5 -0
  34. data/bin/fluent-gem +9 -0
  35. data/bin/fluent-plugin-config-format +5 -0
  36. data/bin/fluent-plugin-generate +5 -0
  37. data/bin/fluentd +15 -0
  38. data/code-of-conduct.md +3 -0
  39. data/docs/SECURITY_AUDIT.pdf +0 -0
  40. data/example/copy_roundrobin.conf +39 -0
  41. data/example/counter.conf +18 -0
  42. data/example/filter_stdout.conf +22 -0
  43. data/example/in_forward.conf +14 -0
  44. data/example/in_forward_client.conf +37 -0
  45. data/example/in_forward_shared_key.conf +15 -0
  46. data/example/in_forward_tls.conf +14 -0
  47. data/example/in_forward_users.conf +24 -0
  48. data/example/in_forward_workers.conf +21 -0
  49. data/example/in_http.conf +16 -0
  50. data/example/in_out_forward.conf +17 -0
  51. data/example/in_sample_blocks.conf +17 -0
  52. data/example/in_sample_with_compression.conf +23 -0
  53. data/example/in_syslog.conf +15 -0
  54. data/example/in_tail.conf +14 -0
  55. data/example/in_tcp.conf +13 -0
  56. data/example/in_udp.conf +13 -0
  57. data/example/logevents.conf +25 -0
  58. data/example/multi_filters.conf +61 -0
  59. data/example/out_copy.conf +20 -0
  60. data/example/out_exec_filter.conf +42 -0
  61. data/example/out_file.conf +13 -0
  62. data/example/out_forward.conf +35 -0
  63. data/example/out_forward_buf_file.conf +23 -0
  64. data/example/out_forward_client.conf +109 -0
  65. data/example/out_forward_heartbeat_none.conf +16 -0
  66. data/example/out_forward_sd.conf +17 -0
  67. data/example/out_forward_shared_key.conf +36 -0
  68. data/example/out_forward_tls.conf +18 -0
  69. data/example/out_forward_users.conf +65 -0
  70. data/example/out_null.conf +36 -0
  71. data/example/sd.yaml +8 -0
  72. data/example/secondary_file.conf +42 -0
  73. data/example/suppress_config_dump.conf +7 -0
  74. data/example/v0_12_filter.conf +78 -0
  75. data/example/v1_literal_example.conf +36 -0
  76. data/example/worker_section.conf +36 -0
  77. data/fluent.conf +139 -0
  78. data/fluentd.gemspec +55 -0
  79. data/lib/fluent/agent.rb +168 -0
  80. data/lib/fluent/capability.rb +87 -0
  81. data/lib/fluent/clock.rb +66 -0
  82. data/lib/fluent/command/binlog_reader.rb +244 -0
  83. data/lib/fluent/command/bundler_injection.rb +45 -0
  84. data/lib/fluent/command/ca_generate.rb +184 -0
  85. data/lib/fluent/command/cap_ctl.rb +174 -0
  86. data/lib/fluent/command/cat.rb +365 -0
  87. data/lib/fluent/command/ctl.rb +177 -0
  88. data/lib/fluent/command/debug.rb +103 -0
  89. data/lib/fluent/command/fluentd.rb +374 -0
  90. data/lib/fluent/command/plugin_config_formatter.rb +308 -0
  91. data/lib/fluent/command/plugin_generator.rb +365 -0
  92. data/lib/fluent/compat/call_super_mixin.rb +76 -0
  93. data/lib/fluent/compat/detach_process_mixin.rb +33 -0
  94. data/lib/fluent/compat/exec_util.rb +129 -0
  95. data/lib/fluent/compat/file_util.rb +54 -0
  96. data/lib/fluent/compat/filter.rb +68 -0
  97. data/lib/fluent/compat/formatter.rb +111 -0
  98. data/lib/fluent/compat/formatter_utils.rb +85 -0
  99. data/lib/fluent/compat/handle_tag_and_time_mixin.rb +62 -0
  100. data/lib/fluent/compat/handle_tag_name_mixin.rb +53 -0
  101. data/lib/fluent/compat/input.rb +49 -0
  102. data/lib/fluent/compat/output.rb +721 -0
  103. data/lib/fluent/compat/output_chain.rb +60 -0
  104. data/lib/fluent/compat/parser.rb +310 -0
  105. data/lib/fluent/compat/parser_utils.rb +40 -0
  106. data/lib/fluent/compat/propagate_default.rb +62 -0
  107. data/lib/fluent/compat/record_filter_mixin.rb +34 -0
  108. data/lib/fluent/compat/set_tag_key_mixin.rb +50 -0
  109. data/lib/fluent/compat/set_time_key_mixin.rb +69 -0
  110. data/lib/fluent/compat/socket_util.rb +165 -0
  111. data/lib/fluent/compat/string_util.rb +34 -0
  112. data/lib/fluent/compat/structured_format_mixin.rb +26 -0
  113. data/lib/fluent/compat/type_converter.rb +90 -0
  114. data/lib/fluent/config/basic_parser.rb +123 -0
  115. data/lib/fluent/config/configure_proxy.rb +424 -0
  116. data/lib/fluent/config/dsl.rb +152 -0
  117. data/lib/fluent/config/element.rb +265 -0
  118. data/lib/fluent/config/error.rb +32 -0
  119. data/lib/fluent/config/literal_parser.rb +286 -0
  120. data/lib/fluent/config/parser.rb +107 -0
  121. data/lib/fluent/config/section.rb +272 -0
  122. data/lib/fluent/config/types.rb +249 -0
  123. data/lib/fluent/config/v1_parser.rb +192 -0
  124. data/lib/fluent/config.rb +76 -0
  125. data/lib/fluent/configurable.rb +201 -0
  126. data/lib/fluent/counter/base_socket.rb +44 -0
  127. data/lib/fluent/counter/client.rb +297 -0
  128. data/lib/fluent/counter/error.rb +86 -0
  129. data/lib/fluent/counter/mutex_hash.rb +163 -0
  130. data/lib/fluent/counter/server.rb +273 -0
  131. data/lib/fluent/counter/store.rb +205 -0
  132. data/lib/fluent/counter/validator.rb +145 -0
  133. data/lib/fluent/counter.rb +23 -0
  134. data/lib/fluent/daemon.rb +15 -0
  135. data/lib/fluent/daemonizer.rb +88 -0
  136. data/lib/fluent/engine.rb +253 -0
  137. data/lib/fluent/env.rb +40 -0
  138. data/lib/fluent/error.rb +34 -0
  139. data/lib/fluent/event.rb +326 -0
  140. data/lib/fluent/event_router.rb +297 -0
  141. data/lib/fluent/ext_monitor_require.rb +28 -0
  142. data/lib/fluent/filter.rb +21 -0
  143. data/lib/fluent/fluent_log_event_router.rb +141 -0
  144. data/lib/fluent/formatter.rb +23 -0
  145. data/lib/fluent/input.rb +21 -0
  146. data/lib/fluent/label.rb +46 -0
  147. data/lib/fluent/load.rb +34 -0
  148. data/lib/fluent/log.rb +713 -0
  149. data/lib/fluent/match.rb +187 -0
  150. data/lib/fluent/mixin.rb +31 -0
  151. data/lib/fluent/msgpack_factory.rb +106 -0
  152. data/lib/fluent/oj_options.rb +62 -0
  153. data/lib/fluent/output.rb +29 -0
  154. data/lib/fluent/output_chain.rb +23 -0
  155. data/lib/fluent/parser.rb +23 -0
  156. data/lib/fluent/plugin/bare_output.rb +104 -0
  157. data/lib/fluent/plugin/base.rb +197 -0
  158. data/lib/fluent/plugin/buf_file.rb +213 -0
  159. data/lib/fluent/plugin/buf_file_single.rb +225 -0
  160. data/lib/fluent/plugin/buf_memory.rb +34 -0
  161. data/lib/fluent/plugin/buffer/chunk.rb +240 -0
  162. data/lib/fluent/plugin/buffer/file_chunk.rb +413 -0
  163. data/lib/fluent/plugin/buffer/file_single_chunk.rb +311 -0
  164. data/lib/fluent/plugin/buffer/memory_chunk.rb +91 -0
  165. data/lib/fluent/plugin/buffer.rb +918 -0
  166. data/lib/fluent/plugin/compressable.rb +96 -0
  167. data/lib/fluent/plugin/exec_util.rb +22 -0
  168. data/lib/fluent/plugin/file_util.rb +22 -0
  169. data/lib/fluent/plugin/file_wrapper.rb +187 -0
  170. data/lib/fluent/plugin/filter.rb +127 -0
  171. data/lib/fluent/plugin/filter_grep.rb +189 -0
  172. data/lib/fluent/plugin/filter_parser.rb +130 -0
  173. data/lib/fluent/plugin/filter_record_transformer.rb +324 -0
  174. data/lib/fluent/plugin/filter_stdout.rb +53 -0
  175. data/lib/fluent/plugin/formatter.rb +75 -0
  176. data/lib/fluent/plugin/formatter_csv.rb +78 -0
  177. data/lib/fluent/plugin/formatter_hash.rb +35 -0
  178. data/lib/fluent/plugin/formatter_json.rb +59 -0
  179. data/lib/fluent/plugin/formatter_ltsv.rb +44 -0
  180. data/lib/fluent/plugin/formatter_msgpack.rb +33 -0
  181. data/lib/fluent/plugin/formatter_out_file.rb +53 -0
  182. data/lib/fluent/plugin/formatter_single_value.rb +36 -0
  183. data/lib/fluent/plugin/formatter_stdout.rb +76 -0
  184. data/lib/fluent/plugin/formatter_tsv.rb +40 -0
  185. data/lib/fluent/plugin/in_debug_agent.rb +71 -0
  186. data/lib/fluent/plugin/in_dummy.rb +18 -0
  187. data/lib/fluent/plugin/in_exec.rb +110 -0
  188. data/lib/fluent/plugin/in_forward.rb +473 -0
  189. data/lib/fluent/plugin/in_gc_stat.rb +72 -0
  190. data/lib/fluent/plugin/in_http.rb +667 -0
  191. data/lib/fluent/plugin/in_monitor_agent.rb +412 -0
  192. data/lib/fluent/plugin/in_object_space.rb +93 -0
  193. data/lib/fluent/plugin/in_sample.rb +141 -0
  194. data/lib/fluent/plugin/in_syslog.rb +276 -0
  195. data/lib/fluent/plugin/in_tail/position_file.rb +269 -0
  196. data/lib/fluent/plugin/in_tail.rb +1228 -0
  197. data/lib/fluent/plugin/in_tcp.rb +181 -0
  198. data/lib/fluent/plugin/in_udp.rb +92 -0
  199. data/lib/fluent/plugin/in_unix.rb +195 -0
  200. data/lib/fluent/plugin/input.rb +75 -0
  201. data/lib/fluent/plugin/metrics.rb +119 -0
  202. data/lib/fluent/plugin/metrics_local.rb +96 -0
  203. data/lib/fluent/plugin/multi_output.rb +195 -0
  204. data/lib/fluent/plugin/out_copy.rb +120 -0
  205. data/lib/fluent/plugin/out_exec.rb +105 -0
  206. data/lib/fluent/plugin/out_exec_filter.rb +319 -0
  207. data/lib/fluent/plugin/out_file.rb +334 -0
  208. data/lib/fluent/plugin/out_forward/ack_handler.rb +161 -0
  209. data/lib/fluent/plugin/out_forward/connection_manager.rb +113 -0
  210. data/lib/fluent/plugin/out_forward/error.rb +28 -0
  211. data/lib/fluent/plugin/out_forward/failure_detector.rb +84 -0
  212. data/lib/fluent/plugin/out_forward/handshake_protocol.rb +125 -0
  213. data/lib/fluent/plugin/out_forward/load_balancer.rb +114 -0
  214. data/lib/fluent/plugin/out_forward/socket_cache.rb +140 -0
  215. data/lib/fluent/plugin/out_forward.rb +826 -0
  216. data/lib/fluent/plugin/out_http.rb +275 -0
  217. data/lib/fluent/plugin/out_null.rb +74 -0
  218. data/lib/fluent/plugin/out_relabel.rb +32 -0
  219. data/lib/fluent/plugin/out_roundrobin.rb +84 -0
  220. data/lib/fluent/plugin/out_secondary_file.rb +131 -0
  221. data/lib/fluent/plugin/out_stdout.rb +74 -0
  222. data/lib/fluent/plugin/out_stream.rb +130 -0
  223. data/lib/fluent/plugin/output.rb +1556 -0
  224. data/lib/fluent/plugin/owned_by_mixin.rb +42 -0
  225. data/lib/fluent/plugin/parser.rb +275 -0
  226. data/lib/fluent/plugin/parser_apache.rb +28 -0
  227. data/lib/fluent/plugin/parser_apache2.rb +88 -0
  228. data/lib/fluent/plugin/parser_apache_error.rb +26 -0
  229. data/lib/fluent/plugin/parser_csv.rb +114 -0
  230. data/lib/fluent/plugin/parser_json.rb +96 -0
  231. data/lib/fluent/plugin/parser_ltsv.rb +51 -0
  232. data/lib/fluent/plugin/parser_msgpack.rb +50 -0
  233. data/lib/fluent/plugin/parser_multiline.rb +152 -0
  234. data/lib/fluent/plugin/parser_nginx.rb +28 -0
  235. data/lib/fluent/plugin/parser_none.rb +36 -0
  236. data/lib/fluent/plugin/parser_regexp.rb +68 -0
  237. data/lib/fluent/plugin/parser_syslog.rb +496 -0
  238. data/lib/fluent/plugin/parser_tsv.rb +42 -0
  239. data/lib/fluent/plugin/sd_file.rb +156 -0
  240. data/lib/fluent/plugin/sd_srv.rb +135 -0
  241. data/lib/fluent/plugin/sd_static.rb +58 -0
  242. data/lib/fluent/plugin/service_discovery.rb +65 -0
  243. data/lib/fluent/plugin/socket_util.rb +22 -0
  244. data/lib/fluent/plugin/storage.rb +84 -0
  245. data/lib/fluent/plugin/storage_local.rb +162 -0
  246. data/lib/fluent/plugin/string_util.rb +22 -0
  247. data/lib/fluent/plugin.rb +206 -0
  248. data/lib/fluent/plugin_helper/cert_option.rb +191 -0
  249. data/lib/fluent/plugin_helper/child_process.rb +366 -0
  250. data/lib/fluent/plugin_helper/compat_parameters.rb +343 -0
  251. data/lib/fluent/plugin_helper/counter.rb +51 -0
  252. data/lib/fluent/plugin_helper/event_emitter.rb +100 -0
  253. data/lib/fluent/plugin_helper/event_loop.rb +170 -0
  254. data/lib/fluent/plugin_helper/extract.rb +104 -0
  255. data/lib/fluent/plugin_helper/formatter.rb +147 -0
  256. data/lib/fluent/plugin_helper/http_server/app.rb +79 -0
  257. data/lib/fluent/plugin_helper/http_server/compat/server.rb +92 -0
  258. data/lib/fluent/plugin_helper/http_server/compat/ssl_context_extractor.rb +52 -0
  259. data/lib/fluent/plugin_helper/http_server/compat/webrick_handler.rb +58 -0
  260. data/lib/fluent/plugin_helper/http_server/methods.rb +35 -0
  261. data/lib/fluent/plugin_helper/http_server/request.rb +42 -0
  262. data/lib/fluent/plugin_helper/http_server/router.rb +54 -0
  263. data/lib/fluent/plugin_helper/http_server/server.rb +93 -0
  264. data/lib/fluent/plugin_helper/http_server/ssl_context_builder.rb +41 -0
  265. data/lib/fluent/plugin_helper/http_server.rb +135 -0
  266. data/lib/fluent/plugin_helper/inject.rb +154 -0
  267. data/lib/fluent/plugin_helper/metrics.rb +129 -0
  268. data/lib/fluent/plugin_helper/parser.rb +147 -0
  269. data/lib/fluent/plugin_helper/record_accessor.rb +207 -0
  270. data/lib/fluent/plugin_helper/retry_state.rb +209 -0
  271. data/lib/fluent/plugin_helper/server.rb +801 -0
  272. data/lib/fluent/plugin_helper/service_discovery/manager.rb +146 -0
  273. data/lib/fluent/plugin_helper/service_discovery/round_robin_balancer.rb +43 -0
  274. data/lib/fluent/plugin_helper/service_discovery.rb +125 -0
  275. data/lib/fluent/plugin_helper/socket.rb +277 -0
  276. data/lib/fluent/plugin_helper/socket_option.rb +98 -0
  277. data/lib/fluent/plugin_helper/storage.rb +349 -0
  278. data/lib/fluent/plugin_helper/thread.rb +180 -0
  279. data/lib/fluent/plugin_helper/timer.rb +92 -0
  280. data/lib/fluent/plugin_helper.rb +75 -0
  281. data/lib/fluent/plugin_id.rb +93 -0
  282. data/lib/fluent/process.rb +22 -0
  283. data/lib/fluent/registry.rb +116 -0
  284. data/lib/fluent/root_agent.rb +372 -0
  285. data/lib/fluent/rpc.rb +94 -0
  286. data/lib/fluent/static_config_analysis.rb +194 -0
  287. data/lib/fluent/supervisor.rb +1054 -0
  288. data/lib/fluent/system_config.rb +187 -0
  289. data/lib/fluent/test/base.rb +78 -0
  290. data/lib/fluent/test/driver/base.rb +225 -0
  291. data/lib/fluent/test/driver/base_owned.rb +83 -0
  292. data/lib/fluent/test/driver/base_owner.rb +135 -0
  293. data/lib/fluent/test/driver/event_feeder.rb +98 -0
  294. data/lib/fluent/test/driver/filter.rb +57 -0
  295. data/lib/fluent/test/driver/formatter.rb +30 -0
  296. data/lib/fluent/test/driver/input.rb +31 -0
  297. data/lib/fluent/test/driver/multi_output.rb +53 -0
  298. data/lib/fluent/test/driver/output.rb +102 -0
  299. data/lib/fluent/test/driver/parser.rb +30 -0
  300. data/lib/fluent/test/driver/storage.rb +30 -0
  301. data/lib/fluent/test/driver/test_event_router.rb +45 -0
  302. data/lib/fluent/test/filter_test.rb +77 -0
  303. data/lib/fluent/test/formatter_test.rb +65 -0
  304. data/lib/fluent/test/helpers.rb +134 -0
  305. data/lib/fluent/test/input_test.rb +174 -0
  306. data/lib/fluent/test/log.rb +79 -0
  307. data/lib/fluent/test/output_test.rb +156 -0
  308. data/lib/fluent/test/parser_test.rb +70 -0
  309. data/lib/fluent/test/startup_shutdown.rb +46 -0
  310. data/lib/fluent/test.rb +58 -0
  311. data/lib/fluent/time.rb +512 -0
  312. data/lib/fluent/timezone.rb +171 -0
  313. data/lib/fluent/tls.rb +81 -0
  314. data/lib/fluent/unique_id.rb +39 -0
  315. data/lib/fluent/variable_store.rb +40 -0
  316. data/lib/fluent/version.rb +21 -0
  317. data/lib/fluent/winsvc.rb +103 -0
  318. data/templates/new_gem/Gemfile +3 -0
  319. data/templates/new_gem/README.md.erb +43 -0
  320. data/templates/new_gem/Rakefile +13 -0
  321. data/templates/new_gem/fluent-plugin.gemspec.erb +27 -0
  322. data/templates/new_gem/lib/fluent/plugin/filter.rb.erb +14 -0
  323. data/templates/new_gem/lib/fluent/plugin/formatter.rb.erb +14 -0
  324. data/templates/new_gem/lib/fluent/plugin/input.rb.erb +11 -0
  325. data/templates/new_gem/lib/fluent/plugin/output.rb.erb +11 -0
  326. data/templates/new_gem/lib/fluent/plugin/parser.rb.erb +15 -0
  327. data/templates/new_gem/lib/fluent/plugin/storage.rb.erb +40 -0
  328. data/templates/new_gem/test/helper.rb.erb +8 -0
  329. data/templates/new_gem/test/plugin/test_filter.rb.erb +18 -0
  330. data/templates/new_gem/test/plugin/test_formatter.rb.erb +18 -0
  331. data/templates/new_gem/test/plugin/test_input.rb.erb +18 -0
  332. data/templates/new_gem/test/plugin/test_output.rb.erb +18 -0
  333. data/templates/new_gem/test/plugin/test_parser.rb.erb +18 -0
  334. data/templates/new_gem/test/plugin/test_storage.rb.erb +18 -0
  335. data/templates/plugin_config_formatter/param.md-compact.erb +25 -0
  336. data/templates/plugin_config_formatter/param.md-table.erb +10 -0
  337. data/templates/plugin_config_formatter/param.md.erb +34 -0
  338. data/templates/plugin_config_formatter/section.md.erb +12 -0
  339. data/test/command/test_binlog_reader.rb +362 -0
  340. data/test/command/test_ca_generate.rb +70 -0
  341. data/test/command/test_cap_ctl.rb +100 -0
  342. data/test/command/test_cat.rb +128 -0
  343. data/test/command/test_ctl.rb +57 -0
  344. data/test/command/test_fluentd.rb +1106 -0
  345. data/test/command/test_plugin_config_formatter.rb +398 -0
  346. data/test/command/test_plugin_generator.rb +109 -0
  347. data/test/compat/test_calls_super.rb +166 -0
  348. data/test/compat/test_parser.rb +92 -0
  349. data/test/config/assertions.rb +42 -0
  350. data/test/config/test_config_parser.rb +551 -0
  351. data/test/config/test_configurable.rb +1784 -0
  352. data/test/config/test_configure_proxy.rb +604 -0
  353. data/test/config/test_dsl.rb +415 -0
  354. data/test/config/test_element.rb +518 -0
  355. data/test/config/test_literal_parser.rb +309 -0
  356. data/test/config/test_plugin_configuration.rb +56 -0
  357. data/test/config/test_section.rb +191 -0
  358. data/test/config/test_system_config.rb +199 -0
  359. data/test/config/test_types.rb +408 -0
  360. data/test/counter/test_client.rb +563 -0
  361. data/test/counter/test_error.rb +44 -0
  362. data/test/counter/test_mutex_hash.rb +179 -0
  363. data/test/counter/test_server.rb +589 -0
  364. data/test/counter/test_store.rb +258 -0
  365. data/test/counter/test_validator.rb +137 -0
  366. data/test/helper.rb +155 -0
  367. data/test/helpers/fuzzy_assert.rb +89 -0
  368. data/test/helpers/process_extenstion.rb +33 -0
  369. data/test/plugin/data/2010/01/20100102-030405.log +0 -0
  370. data/test/plugin/data/2010/01/20100102-030406.log +0 -0
  371. data/test/plugin/data/2010/01/20100102.log +0 -0
  372. data/test/plugin/data/log/bar +0 -0
  373. data/test/plugin/data/log/foo/bar.log +0 -0
  374. data/test/plugin/data/log/foo/bar2 +0 -0
  375. data/test/plugin/data/log/test.log +0 -0
  376. data/test/plugin/data/sd_file/config +11 -0
  377. data/test/plugin/data/sd_file/config.json +17 -0
  378. data/test/plugin/data/sd_file/config.yaml +11 -0
  379. data/test/plugin/data/sd_file/config.yml +11 -0
  380. data/test/plugin/data/sd_file/invalid_config.yml +7 -0
  381. data/test/plugin/in_tail/test_fifo.rb +121 -0
  382. data/test/plugin/in_tail/test_io_handler.rb +140 -0
  383. data/test/plugin/in_tail/test_position_file.rb +379 -0
  384. data/test/plugin/out_forward/test_ack_handler.rb +101 -0
  385. data/test/plugin/out_forward/test_connection_manager.rb +145 -0
  386. data/test/plugin/out_forward/test_handshake_protocol.rb +112 -0
  387. data/test/plugin/out_forward/test_load_balancer.rb +106 -0
  388. data/test/plugin/out_forward/test_socket_cache.rb +149 -0
  389. data/test/plugin/test_bare_output.rb +131 -0
  390. data/test/plugin/test_base.rb +115 -0
  391. data/test/plugin/test_buf_file.rb +1275 -0
  392. data/test/plugin/test_buf_file_single.rb +833 -0
  393. data/test/plugin/test_buf_memory.rb +42 -0
  394. data/test/plugin/test_buffer.rb +1383 -0
  395. data/test/plugin/test_buffer_chunk.rb +198 -0
  396. data/test/plugin/test_buffer_file_chunk.rb +871 -0
  397. data/test/plugin/test_buffer_file_single_chunk.rb +611 -0
  398. data/test/plugin/test_buffer_memory_chunk.rb +339 -0
  399. data/test/plugin/test_compressable.rb +87 -0
  400. data/test/plugin/test_file_util.rb +96 -0
  401. data/test/plugin/test_file_wrapper.rb +126 -0
  402. data/test/plugin/test_filter.rb +368 -0
  403. data/test/plugin/test_filter_grep.rb +697 -0
  404. data/test/plugin/test_filter_parser.rb +731 -0
  405. data/test/plugin/test_filter_record_transformer.rb +577 -0
  406. data/test/plugin/test_filter_stdout.rb +207 -0
  407. data/test/plugin/test_formatter_csv.rb +136 -0
  408. data/test/plugin/test_formatter_hash.rb +38 -0
  409. data/test/plugin/test_formatter_json.rb +61 -0
  410. data/test/plugin/test_formatter_ltsv.rb +70 -0
  411. data/test/plugin/test_formatter_msgpack.rb +28 -0
  412. data/test/plugin/test_formatter_out_file.rb +116 -0
  413. data/test/plugin/test_formatter_single_value.rb +44 -0
  414. data/test/plugin/test_formatter_tsv.rb +76 -0
  415. data/test/plugin/test_in_debug_agent.rb +49 -0
  416. data/test/plugin/test_in_exec.rb +261 -0
  417. data/test/plugin/test_in_forward.rb +1180 -0
  418. data/test/plugin/test_in_gc_stat.rb +62 -0
  419. data/test/plugin/test_in_http.rb +1080 -0
  420. data/test/plugin/test_in_monitor_agent.rb +923 -0
  421. data/test/plugin/test_in_object_space.rb +60 -0
  422. data/test/plugin/test_in_sample.rb +190 -0
  423. data/test/plugin/test_in_syslog.rb +505 -0
  424. data/test/plugin/test_in_tail.rb +2363 -0
  425. data/test/plugin/test_in_tcp.rb +243 -0
  426. data/test/plugin/test_in_udp.rb +268 -0
  427. data/test/plugin/test_in_unix.rb +181 -0
  428. data/test/plugin/test_input.rb +137 -0
  429. data/test/plugin/test_metadata.rb +89 -0
  430. data/test/plugin/test_metrics.rb +294 -0
  431. data/test/plugin/test_metrics_local.rb +96 -0
  432. data/test/plugin/test_multi_output.rb +204 -0
  433. data/test/plugin/test_out_copy.rb +308 -0
  434. data/test/plugin/test_out_exec.rb +312 -0
  435. data/test/plugin/test_out_exec_filter.rb +606 -0
  436. data/test/plugin/test_out_file.rb +1037 -0
  437. data/test/plugin/test_out_forward.rb +1348 -0
  438. data/test/plugin/test_out_http.rb +428 -0
  439. data/test/plugin/test_out_null.rb +105 -0
  440. data/test/plugin/test_out_relabel.rb +28 -0
  441. data/test/plugin/test_out_roundrobin.rb +146 -0
  442. data/test/plugin/test_out_secondary_file.rb +458 -0
  443. data/test/plugin/test_out_stdout.rb +205 -0
  444. data/test/plugin/test_out_stream.rb +103 -0
  445. data/test/plugin/test_output.rb +1065 -0
  446. data/test/plugin/test_output_as_buffered.rb +2024 -0
  447. data/test/plugin/test_output_as_buffered_backup.rb +363 -0
  448. data/test/plugin/test_output_as_buffered_compress.rb +165 -0
  449. data/test/plugin/test_output_as_buffered_overflow.rb +250 -0
  450. data/test/plugin/test_output_as_buffered_retries.rb +919 -0
  451. data/test/plugin/test_output_as_buffered_secondary.rb +882 -0
  452. data/test/plugin/test_output_as_standard.rb +374 -0
  453. data/test/plugin/test_owned_by.rb +35 -0
  454. data/test/plugin/test_parser.rb +399 -0
  455. data/test/plugin/test_parser_apache.rb +42 -0
  456. data/test/plugin/test_parser_apache2.rb +47 -0
  457. data/test/plugin/test_parser_apache_error.rb +45 -0
  458. data/test/plugin/test_parser_csv.rb +200 -0
  459. data/test/plugin/test_parser_json.rb +138 -0
  460. data/test/plugin/test_parser_labeled_tsv.rb +160 -0
  461. data/test/plugin/test_parser_multiline.rb +111 -0
  462. data/test/plugin/test_parser_nginx.rb +88 -0
  463. data/test/plugin/test_parser_none.rb +52 -0
  464. data/test/plugin/test_parser_regexp.rb +289 -0
  465. data/test/plugin/test_parser_syslog.rb +650 -0
  466. data/test/plugin/test_parser_tsv.rb +122 -0
  467. data/test/plugin/test_sd_file.rb +228 -0
  468. data/test/plugin/test_sd_srv.rb +230 -0
  469. data/test/plugin/test_storage.rb +167 -0
  470. data/test/plugin/test_storage_local.rb +335 -0
  471. data/test/plugin/test_string_util.rb +26 -0
  472. data/test/plugin_helper/data/cert/cert-key.pem +27 -0
  473. data/test/plugin_helper/data/cert/cert-with-CRLF.pem +19 -0
  474. data/test/plugin_helper/data/cert/cert-with-no-newline.pem +19 -0
  475. data/test/plugin_helper/data/cert/cert.pem +19 -0
  476. data/test/plugin_helper/data/cert/cert_chains/ca-cert-key.pem +27 -0
  477. data/test/plugin_helper/data/cert/cert_chains/ca-cert.pem +20 -0
  478. data/test/plugin_helper/data/cert/cert_chains/cert-key.pem +27 -0
  479. data/test/plugin_helper/data/cert/cert_chains/cert.pem +40 -0
  480. data/test/plugin_helper/data/cert/empty.pem +0 -0
  481. data/test/plugin_helper/data/cert/generate_cert.rb +125 -0
  482. data/test/plugin_helper/data/cert/with_ca/ca-cert-key-pass.pem +30 -0
  483. data/test/plugin_helper/data/cert/with_ca/ca-cert-key.pem +27 -0
  484. data/test/plugin_helper/data/cert/with_ca/ca-cert-pass.pem +20 -0
  485. data/test/plugin_helper/data/cert/with_ca/ca-cert.pem +20 -0
  486. data/test/plugin_helper/data/cert/with_ca/cert-key-pass.pem +30 -0
  487. data/test/plugin_helper/data/cert/with_ca/cert-key.pem +27 -0
  488. data/test/plugin_helper/data/cert/with_ca/cert-pass.pem +21 -0
  489. data/test/plugin_helper/data/cert/with_ca/cert.pem +21 -0
  490. data/test/plugin_helper/data/cert/without_ca/cert-key-pass.pem +30 -0
  491. data/test/plugin_helper/data/cert/without_ca/cert-key.pem +27 -0
  492. data/test/plugin_helper/data/cert/without_ca/cert-pass.pem +20 -0
  493. data/test/plugin_helper/data/cert/without_ca/cert.pem +20 -0
  494. data/test/plugin_helper/http_server/test_app.rb +65 -0
  495. data/test/plugin_helper/http_server/test_route.rb +32 -0
  496. data/test/plugin_helper/service_discovery/test_manager.rb +93 -0
  497. data/test/plugin_helper/service_discovery/test_round_robin_balancer.rb +21 -0
  498. data/test/plugin_helper/test_cert_option.rb +25 -0
  499. data/test/plugin_helper/test_child_process.rb +840 -0
  500. data/test/plugin_helper/test_compat_parameters.rb +358 -0
  501. data/test/plugin_helper/test_event_emitter.rb +80 -0
  502. data/test/plugin_helper/test_event_loop.rb +52 -0
  503. data/test/plugin_helper/test_extract.rb +194 -0
  504. data/test/plugin_helper/test_formatter.rb +255 -0
  505. data/test/plugin_helper/test_http_server_helper.rb +372 -0
  506. data/test/plugin_helper/test_inject.rb +561 -0
  507. data/test/plugin_helper/test_metrics.rb +137 -0
  508. data/test/plugin_helper/test_parser.rb +264 -0
  509. data/test/plugin_helper/test_record_accessor.rb +238 -0
  510. data/test/plugin_helper/test_retry_state.rb +442 -0
  511. data/test/plugin_helper/test_server.rb +1823 -0
  512. data/test/plugin_helper/test_service_discovery.rb +165 -0
  513. data/test/plugin_helper/test_socket.rb +146 -0
  514. data/test/plugin_helper/test_storage.rb +542 -0
  515. data/test/plugin_helper/test_thread.rb +164 -0
  516. data/test/plugin_helper/test_timer.rb +130 -0
  517. data/test/scripts/exec_script.rb +32 -0
  518. data/test/scripts/fluent/plugin/formatter1/formatter_test1.rb +7 -0
  519. data/test/scripts/fluent/plugin/formatter2/formatter_test2.rb +7 -0
  520. data/test/scripts/fluent/plugin/formatter_known.rb +8 -0
  521. data/test/scripts/fluent/plugin/out_test.rb +81 -0
  522. data/test/scripts/fluent/plugin/out_test2.rb +80 -0
  523. data/test/scripts/fluent/plugin/parser_known.rb +4 -0
  524. data/test/test_capability.rb +74 -0
  525. data/test/test_clock.rb +164 -0
  526. data/test/test_config.rb +202 -0
  527. data/test/test_configdsl.rb +148 -0
  528. data/test/test_daemonizer.rb +91 -0
  529. data/test/test_engine.rb +203 -0
  530. data/test/test_event.rb +531 -0
  531. data/test/test_event_router.rb +331 -0
  532. data/test/test_event_time.rb +199 -0
  533. data/test/test_filter.rb +121 -0
  534. data/test/test_fluent_log_event_router.rb +99 -0
  535. data/test/test_formatter.rb +366 -0
  536. data/test/test_input.rb +31 -0
  537. data/test/test_log.rb +994 -0
  538. data/test/test_logger_initializer.rb +46 -0
  539. data/test/test_match.rb +148 -0
  540. data/test/test_mixin.rb +351 -0
  541. data/test/test_msgpack_factory.rb +18 -0
  542. data/test/test_oj_options.rb +55 -0
  543. data/test/test_output.rb +278 -0
  544. data/test/test_plugin.rb +251 -0
  545. data/test/test_plugin_classes.rb +370 -0
  546. data/test/test_plugin_helper.rb +81 -0
  547. data/test/test_plugin_id.rb +119 -0
  548. data/test/test_process.rb +14 -0
  549. data/test/test_root_agent.rb +951 -0
  550. data/test/test_static_config_analysis.rb +177 -0
  551. data/test/test_supervisor.rb +601 -0
  552. data/test/test_test_drivers.rb +136 -0
  553. data/test/test_time_formatter.rb +301 -0
  554. data/test/test_time_parser.rb +362 -0
  555. data/test/test_tls.rb +65 -0
  556. data/test/test_unique_id.rb +47 -0
  557. data/test/test_variable_store.rb +65 -0
  558. metadata +1261 -0
@@ -0,0 +1,92 @@
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::ConfigError 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('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('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('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('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('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
@@ -0,0 +1,42 @@
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
@@ -0,0 +1,551 @@
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