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,202 @@
1
+ require_relative 'helper'
2
+ require 'fluent/config'
3
+ require 'fluent/config/parser'
4
+ require 'fluent/supervisor'
5
+ require 'fluent/load'
6
+ require 'fileutils'
7
+
8
+ class ConfigTest < Test::Unit::TestCase
9
+ include Fluent
10
+
11
+ TMP_DIR = File.dirname(__FILE__) + "/tmp/config#{ENV['TEST_ENV_NUMBER']}"
12
+
13
+ def read_config(path)
14
+ path = File.expand_path(path)
15
+ File.open(path) { |io|
16
+ Fluent::Config::Parser.parse(io, File.basename(path), File.dirname(path))
17
+ }
18
+ end
19
+
20
+ def prepare_config
21
+ write_config "#{TMP_DIR}/config_test_1.conf", %[
22
+ k1 root_config
23
+ include dir/config_test_2.conf #
24
+ include #{TMP_DIR}/config_test_4.conf
25
+ include file://#{TMP_DIR}/config_test_5.conf
26
+ <include config.d/*.conf />
27
+ ]
28
+ write_config "#{TMP_DIR}/dir/config_test_2.conf", %[
29
+ k2 relative_path_include
30
+ include ../config_test_3.conf
31
+ ]
32
+ write_config "#{TMP_DIR}/config_test_3.conf", %[
33
+ k3 relative_include_in_included_file
34
+ ]
35
+ write_config "#{TMP_DIR}/config_test_4.conf", %[
36
+ k4 absolute_path_include
37
+ ]
38
+ write_config "#{TMP_DIR}/config_test_5.conf", %[
39
+ k5 uri_include
40
+ ]
41
+ write_config "#{TMP_DIR}/config.d/config_test_6.conf", %[
42
+ k6 wildcard_include_1
43
+ <elem1 name>
44
+ include normal_parameter
45
+ </elem1>
46
+ ]
47
+ write_config "#{TMP_DIR}/config.d/config_test_7.conf", %[
48
+ k7 wildcard_include_2
49
+ ]
50
+ write_config "#{TMP_DIR}/config.d/config_test_8.conf", %[
51
+ <elem2 name>
52
+ <include ../dir/config_test_9.conf />
53
+ </elem2>
54
+ ]
55
+ write_config "#{TMP_DIR}/dir/config_test_9.conf", %[
56
+ k9 embedded
57
+ <elem3 name>
58
+ nested nested_value
59
+ include hoge
60
+ </elem3>
61
+ ]
62
+ write_config "#{TMP_DIR}/config.d/00_config_test_8.conf", %[
63
+ k8 wildcard_include_3
64
+ <elem4 name>
65
+ include normal_parameter
66
+ </elem4>
67
+ ]
68
+
69
+ end
70
+
71
+ def test_include
72
+ prepare_config
73
+ c = read_config("#{TMP_DIR}/config_test_1.conf")
74
+ assert_equal 'root_config', c['k1']
75
+ assert_equal 'relative_path_include', c['k2']
76
+ assert_equal 'relative_include_in_included_file', c['k3']
77
+ assert_equal 'absolute_path_include', c['k4']
78
+ assert_equal 'uri_include', c['k5']
79
+ assert_equal 'wildcard_include_1', c['k6']
80
+ assert_equal 'wildcard_include_2', c['k7']
81
+ assert_equal 'wildcard_include_3', c['k8']
82
+ assert_equal [
83
+ 'k1',
84
+ 'k2',
85
+ 'k3',
86
+ 'k4',
87
+ 'k5',
88
+ 'k8', # Because of the file name this comes first.
89
+ 'k6',
90
+ 'k7',
91
+ ], c.keys
92
+
93
+ elem1 = c.elements.find { |e| e.name == 'elem1' }
94
+ assert_not_nil elem1
95
+ assert_equal 'name', elem1.arg
96
+ assert_equal 'normal_parameter', elem1['include']
97
+
98
+ elem2 = c.elements.find { |e| e.name == 'elem2' }
99
+ assert_not_nil elem2
100
+ assert_equal 'name', elem2.arg
101
+ assert_equal 'embedded', elem2['k9']
102
+ assert !elem2.has_key?('include')
103
+
104
+ elem3 = elem2.elements.find { |e| e.name == 'elem3' }
105
+ assert_not_nil elem3
106
+ assert_equal 'nested_value', elem3['nested']
107
+ assert_equal 'hoge', elem3['include']
108
+ end
109
+
110
+ def test_check_not_fetchd
111
+ write_config "#{TMP_DIR}/config_test_not_fetched.conf", %[
112
+ <match dummy>
113
+ type rewrite
114
+ add_prefix filtered
115
+ <rule>
116
+ key path
117
+ pattern ^[A-Z]+
118
+ replace
119
+ </rule>
120
+ </match>
121
+ ]
122
+ root_conf = read_config("#{TMP_DIR}/config_test_not_fetched.conf")
123
+ match_conf = root_conf.elements.first
124
+ rule_conf = match_conf.elements.first
125
+
126
+ not_fetched = []; root_conf.check_not_fetched {|key, e| not_fetched << key }
127
+ assert_equal %w[type add_prefix key pattern replace], not_fetched
128
+
129
+ not_fetched = []; match_conf.check_not_fetched {|key, e| not_fetched << key }
130
+ assert_equal %w[type add_prefix key pattern replace], not_fetched
131
+
132
+ not_fetched = []; rule_conf.check_not_fetched {|key, e| not_fetched << key }
133
+ assert_equal %w[key pattern replace], not_fetched
134
+
135
+ # accessing should delete
136
+ match_conf['type']
137
+ rule_conf['key']
138
+
139
+ not_fetched = []; root_conf.check_not_fetched {|key, e| not_fetched << key }
140
+ assert_equal %w[add_prefix pattern replace], not_fetched
141
+
142
+ not_fetched = []; match_conf.check_not_fetched {|key, e| not_fetched << key }
143
+ assert_equal %w[add_prefix pattern replace], not_fetched
144
+
145
+ not_fetched = []; rule_conf.check_not_fetched {|key, e| not_fetched << key }
146
+ assert_equal %w[pattern replace], not_fetched
147
+
148
+ # repeatedly accessing should not grow memory usage
149
+ before_size = match_conf.unused.size
150
+ 10.times { match_conf['type'] }
151
+ assert_equal before_size, match_conf.unused.size
152
+ end
153
+
154
+ def write_config(path, data, encoding: 'utf-8')
155
+ FileUtils.mkdir_p(File.dirname(path))
156
+ File.open(path, "w:#{encoding}:utf-8") {|f| f.write data }
157
+ end
158
+
159
+ def test_inline
160
+ prepare_config
161
+ opts = {
162
+ :config_path => "#{TMP_DIR}/config_test_1.conf",
163
+ :inline_config => "<source>\n type http\n port 2222\n </source>",
164
+ :use_v1_config => false
165
+ }
166
+ assert_nothing_raised do
167
+ Fluent::Supervisor.new(opts)
168
+ end
169
+ create_warn_dummy_logger
170
+ end
171
+
172
+ def create_warn_dummy_logger
173
+ dl_opts = {}
174
+ dl_opts[:log_level] = ServerEngine::DaemonLogger::WARN
175
+ logdev = Fluent::Test::DummyLogDevice.new
176
+ logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
177
+ $log = Fluent::Log.new(logger)
178
+ end
179
+
180
+ sub_test_case '.build' do
181
+ test 'read config' do
182
+ write_config("#{TMP_DIR}/build/config_build.conf", 'key value')
183
+ c = Fluent::Config.build(config_path: "#{TMP_DIR}/build/config_build.conf")
184
+ assert_equal('value', c['key'])
185
+ end
186
+
187
+ test 'read config with encoding' do
188
+ write_config("#{TMP_DIR}/build/config_build2.conf", "#てすと\nkey value", encoding: 'shift_jis')
189
+
190
+ c = Fluent::Config.build(config_path: "#{TMP_DIR}/build/config_build2.conf", encoding: 'shift_jis')
191
+ assert_equal('value', c['key'])
192
+ end
193
+
194
+ test 'read config with additional_config' do
195
+ write_config("#{TMP_DIR}/build/config_build2.conf", "key value")
196
+
197
+ c = Fluent::Config.build(config_path: "#{TMP_DIR}/build/config_build2.conf", additional_config: 'key2 value2')
198
+ assert_equal('value', c['key'])
199
+ assert_equal('value2', c['key2'])
200
+ end
201
+ end
202
+ end
@@ -0,0 +1,148 @@
1
+ require_relative 'helper'
2
+ require 'fluent/config/dsl'
3
+ require 'fluent/test'
4
+
5
+ class ConfigDSLTest < Test::Unit::TestCase
6
+ # TEST_CONFIG1 = %[
7
+ # <source>
8
+ # type forward
9
+ # port 24224
10
+ # </source>
11
+ # <match test.**>
12
+ # type forward
13
+ # flush_interval 1s
14
+ # <server>
15
+ # host host0.example.com
16
+ # port 24224
17
+ # </server>
18
+ # <server>
19
+ # host host1.example.com
20
+ # port 24224
21
+ # </server>
22
+ # </match>
23
+ # ]
24
+ TEST_DSL_CONFIG1 = %q[
25
+ source {
26
+ type "forward"
27
+ port 24224
28
+ }
29
+ match('test.**') {
30
+ type "forward"
31
+ flush_interval "1s"
32
+ (0..1).each do |i|
33
+ server {
34
+ host "host#{i}.example.com"
35
+ port 24224
36
+ }
37
+ end
38
+ }
39
+ ]
40
+
41
+ TEST_DSL_CONFIG2 = %q[
42
+ v = [0, 1, 2]
43
+ ]
44
+
45
+ TEST_DSL_CONFIG3 = %q[
46
+ match
47
+ ]
48
+
49
+ TEST_DSL_CONFIG4 = %q[
50
+ match('aa', 'bb'){
51
+ type :null
52
+ }
53
+ ]
54
+
55
+ TEST_DSL_CONFIG5 = %q[
56
+ match('aa')
57
+ ]
58
+
59
+ def test_parse
60
+ root = Fluent::Config::DSL::Parser.parse(TEST_DSL_CONFIG1)
61
+
62
+ assert_equal 0, root.keys.size
63
+ assert_equal 2, root.elements.size
64
+
65
+ e0 = root.elements[0]
66
+ assert_equal 'source', e0.name
67
+ assert_equal '', e0.arg
68
+ assert_equal 'forward', e0['@type']
69
+ assert_equal '24224', e0['port']
70
+
71
+ e1 = root.elements[1]
72
+ assert_equal 'match', e1.name
73
+ assert_equal 'test.**', e1.arg
74
+ assert_equal 'forward', e1['@type']
75
+ assert_equal '1s', e1['flush_interval']
76
+ assert_equal 2, e1.elements.size
77
+ e1s0 = e1.elements[0]
78
+ assert_equal 'server', e1s0.name
79
+ assert_equal 'host0.example.com', e1s0['host']
80
+ assert_equal '24224', e1s0['port']
81
+ e1s1 = e1.elements[1]
82
+ assert_equal 'server', e1s1.name
83
+ assert_equal 'host1.example.com', e1s1['host']
84
+ assert_equal '24224', e1s1['port']
85
+ end
86
+
87
+ def test_parse2
88
+ root = Fluent::Config::DSL::Parser.parse(TEST_DSL_CONFIG2)
89
+
90
+ assert_equal 0, root.keys.size
91
+ assert_equal 0, root.elements.size
92
+ end
93
+
94
+ def test_config_error
95
+ assert_raise(ArgumentError) {
96
+ Fluent::Config::DSL::Parser.parse(TEST_DSL_CONFIG3)
97
+ }
98
+
99
+ assert_raise(ArgumentError) {
100
+ Fluent::Config::DSL::Parser.parse(TEST_DSL_CONFIG4)
101
+ }
102
+
103
+ assert_raise(ArgumentError) {
104
+ Fluent::Config::DSL::Parser.parse(TEST_DSL_CONFIG5)
105
+ }
106
+ end
107
+
108
+ def test_with_ruby_keyword
109
+ uname_string = `uname -a`
110
+ root1 = Fluent::Config::DSL::Parser.parse(<<DSL)
111
+ uname_str = ruby.open('|uname -a'){|out| out.read}
112
+ source {
113
+ uname uname_str
114
+ }
115
+ DSL
116
+ source1 = root1.elements.first
117
+ assert_equal 'source', source1.name
118
+ assert_equal 1, source1.keys.size
119
+ assert_equal uname_string, source1['uname']
120
+
121
+ root2 = Fluent::Config::DSL::Parser.parse(<<DSL)
122
+ ruby_version = ruby {
123
+ require 'erb'
124
+ ERB.new('<%= RUBY_VERSION %> from erb').result
125
+ }
126
+ source {
127
+ version ruby_version
128
+ }
129
+ DSL
130
+ source2 = root2.elements.first
131
+ assert_equal 'source', source2.name
132
+ assert_equal 1, source2.keys.size
133
+ assert_equal "#{RUBY_VERSION} from erb", source2['version']
134
+
135
+ # Parser#parse raises NoMethodError when configuration dsl elements are written in ruby block
136
+ conf3 = <<DSL
137
+ ruby {
138
+ source {
139
+ type "tail"
140
+ }
141
+ }
142
+ source {
143
+ uname uname_str
144
+ }
145
+ DSL
146
+ assert_raise (NoMethodError) { Fluent::Config::DSL::Parser.parse(conf3) }
147
+ end
148
+ end
@@ -0,0 +1,91 @@
1
+ require_relative 'helper'
2
+ require 'fluent/daemonizer'
3
+
4
+ class DaemonizerTest < ::Test::Unit::TestCase
5
+ TMP_DIR = File.join(File.dirname(__FILE__), 'tmp', 'daemonizer')
6
+
7
+ setup do
8
+ FileUtils.mkdir_p(TMP_DIR)
9
+ end
10
+
11
+ teardown do
12
+ FileUtils.rm_rf(TMP_DIR) rescue nil
13
+ end
14
+
15
+ test 'makes pid file' do
16
+ pid_path = File.join(TMP_DIR, 'file.pid')
17
+
18
+ mock(Process).daemon(anything, anything).once
19
+ r = Fluent::Daemonizer.daemonize(pid_path) { 'ret' }
20
+ assert_equal 'ret', r
21
+ assert File.exist?(pid_path)
22
+ assert Process.pid.to_s, File.read(pid_path).to_s
23
+ end
24
+
25
+ test 'in platforms which do not support fork' do
26
+ pid_path = File.join(TMP_DIR, 'file.pid')
27
+
28
+ mock(Process).daemon(anything, anything) { raise NotImplementedError }
29
+ args = ['-c', 'test.conf']
30
+ mock(Process).spawn(anything, *args) { Process.pid }
31
+
32
+ Fluent::Daemonizer.daemonize(pid_path, args) { 'ret' }
33
+ assert File.exist?(pid_path)
34
+ assert Process.pid.to_s, File.read(pid_path).to_s
35
+ end
36
+
37
+ sub_test_case 'when pid file already exists' do
38
+ test 'raise an error when process is running' do
39
+ omit 'chmod of file does not affetct root user' if Process.uid.zero?
40
+ pid_path = File.join(TMP_DIR, 'file.pid')
41
+ File.write(pid_path, '1')
42
+
43
+ mock(Process).daemon(anything, anything).never
44
+ mock(Process).kill(0, 1).once
45
+
46
+ assert_raise(Fluent::ConfigError.new('pid(1) is running')) do
47
+ Fluent::Daemonizer.daemonize(pid_path) { 'ret' }
48
+ end
49
+ end
50
+
51
+ test 'raise an error when file is not redable' do
52
+ omit 'chmod of file does not affetct root user' if Process.uid.zero?
53
+ not_readable_path = File.join(TMP_DIR, 'not_readable.pid')
54
+
55
+ File.write(not_readable_path, '1')
56
+ FileUtils.chmod(0333, not_readable_path)
57
+
58
+ mock(Process).daemon(anything, anything).never
59
+ assert_raise(Fluent::ConfigError.new("Cannot access pid file: #{File.absolute_path(not_readable_path)}")) do
60
+ Fluent::Daemonizer.daemonize(not_readable_path) { 'ret' }
61
+ end
62
+ end
63
+
64
+ test 'raise an error when file is not writable' do
65
+ omit 'chmod of file does not affetct root user' if Process.uid.zero?
66
+ not_writable_path = File.join(TMP_DIR, 'not_writable.pid')
67
+
68
+ File.write(not_writable_path, '1')
69
+ FileUtils.chmod(0555, not_writable_path)
70
+
71
+ mock(Process).daemon(anything, anything).never
72
+ assert_raise(Fluent::ConfigError.new("Cannot access pid file: #{File.absolute_path(not_writable_path)}")) do
73
+ Fluent::Daemonizer.daemonize(not_writable_path) { 'ret' }
74
+ end
75
+ end
76
+
77
+ test 'raise an error when directory is not writable' do
78
+ omit 'chmod of file does not affetct root user' if Process.uid.zero?
79
+ not_writable_dir = File.join(TMP_DIR, 'not_writable')
80
+ pid_path = File.join(not_writable_dir, 'file.pid')
81
+
82
+ FileUtils.mkdir_p(not_writable_dir)
83
+ FileUtils.chmod(0555, not_writable_dir)
84
+
85
+ mock(Process).daemon(anything, anything).never
86
+ assert_raise(Fluent::ConfigError.new("Cannot access directory for pid file: #{File.absolute_path(not_writable_dir)}")) do
87
+ Fluent::Daemonizer.daemonize(pid_path) { 'ret' }
88
+ end
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,203 @@
1
+ require_relative 'helper'
2
+ require 'fluent/engine'
3
+ require 'fluent/config'
4
+ require 'fluent/input'
5
+ require 'fluent/system_config'
6
+
7
+ class EngineTest < ::Test::Unit::TestCase
8
+ class DummyEngineTestOutput < Fluent::Plugin::Output
9
+ Fluent::Plugin.register_output('dummy_engine_test', self)
10
+ def write(chunk); end
11
+ end
12
+
13
+ class DummyEngineTest2Output < Fluent::Plugin::Output
14
+ Fluent::Plugin.register_output('dummy_engine_test2', self)
15
+ def write(chunk); end
16
+ end
17
+
18
+ class DummyEngineTestInput < Fluent::Plugin::Input
19
+ Fluent::Plugin.register_input('dummy_engine_test', self)
20
+ def multi_workers_ready?; true; end
21
+ end
22
+
23
+ class DummyEngineTest2Input < Fluent::Plugin::Input
24
+ Fluent::Plugin.register_input('dummy_engine_test2', self)
25
+ def multi_workers_ready?; true; end
26
+ end
27
+
28
+ class DummyEngineClassVarTestInput < Fluent::Plugin::Input
29
+ Fluent::Plugin.register_input('dummy_engine_class_var_test', self)
30
+ @@test = nil
31
+ def multi_workers_ready?; true; end
32
+ end
33
+
34
+ sub_test_case '#reload_config' do
35
+ test 'reload new configuration' do
36
+ conf_data = <<-CONF
37
+ <source>
38
+ @type dummy_engine_test
39
+ </source>
40
+ <match>
41
+ @type dummy_engine_test
42
+ </match>
43
+ CONF
44
+
45
+ conf = Fluent::Config.parse(conf_data, '(test)', '(test_dir)', true)
46
+ system_config = Fluent::SystemConfig.create(conf)
47
+
48
+ engine = Fluent::EngineClass.new
49
+ engine.init(system_config)
50
+ engine.configure(conf)
51
+
52
+ assert_kind_of DummyEngineTestInput, engine.root_agent.inputs[0]
53
+ assert_kind_of DummyEngineTestOutput, engine.root_agent.outputs[0]
54
+
55
+ new_conf_data = <<-CONF
56
+ <source>
57
+ @type dummy_engine_test2
58
+ </source>
59
+ <match>
60
+ @type dummy_engine_test2
61
+ </match>
62
+ CONF
63
+
64
+ new_conf = Fluent::Config.parse(new_conf_data, '(test)', '(test_dir)', true)
65
+
66
+ agent = Fluent::RootAgent.new(log: $log, system_config: system_config)
67
+ stub(Fluent::RootAgent).new do
68
+ stub(agent).start.once
69
+ agent
70
+ end
71
+
72
+ engine.reload_config(new_conf)
73
+
74
+ assert_kind_of DummyEngineTest2Input, engine.root_agent.inputs[0]
75
+ assert_kind_of DummyEngineTest2Output, engine.root_agent.outputs[0]
76
+ end
77
+
78
+ test "doesn't start RootAgent when supervisor is true" do
79
+ conf_data = <<-CONF
80
+ <source>
81
+ @type dummy_engine_test
82
+ </source>
83
+ <match>
84
+ @type dummy_engine_test
85
+ </match>
86
+ CONF
87
+
88
+ conf = Fluent::Config.parse(conf_data, '(test)', '(test_dir)', true)
89
+ system_config = Fluent::SystemConfig.create(conf)
90
+
91
+ engine = Fluent::EngineClass.new
92
+ engine.init(system_config)
93
+ engine.configure(conf)
94
+
95
+ assert_kind_of DummyEngineTestInput, engine.root_agent.inputs[0]
96
+ assert_kind_of DummyEngineTestOutput, engine.root_agent.outputs[0]
97
+
98
+ new_conf_data = <<-CONF
99
+ <source>
100
+ @type dummy_engine_test2
101
+ </source>
102
+ <match>
103
+ @type dummy_engine_test2
104
+ </match>
105
+ CONF
106
+
107
+ new_conf = Fluent::Config.parse(new_conf_data, '(test)', '(test_dir)', true)
108
+
109
+ agent = Fluent::RootAgent.new(log: $log, system_config: system_config)
110
+ stub(Fluent::RootAgent).new do
111
+ stub(agent).start.never
112
+ agent
113
+ end
114
+
115
+ engine.reload_config(new_conf, supervisor: true)
116
+
117
+ assert_kind_of DummyEngineTest2Input, engine.root_agent.inputs[0]
118
+ assert_kind_of DummyEngineTest2Output, engine.root_agent.outputs[0]
119
+ end
120
+
121
+ test 'raise an error when conf is invalid' do
122
+ conf_data = <<-CONF
123
+ <source>
124
+ @type dummy_engine_test
125
+ </source>
126
+ <match>
127
+ @type dummy_engine_test
128
+ </match>
129
+ CONF
130
+
131
+ conf = Fluent::Config.parse(conf_data, '(test)', '(test_dir)', true)
132
+ system_config = Fluent::SystemConfig.create(conf)
133
+
134
+ engine = Fluent::EngineClass.new
135
+ engine.init(system_config)
136
+ engine.configure(conf)
137
+
138
+ assert_kind_of DummyEngineTestInput, engine.root_agent.inputs[0]
139
+ assert_kind_of DummyEngineTestOutput, engine.root_agent.outputs[0]
140
+
141
+ new_conf_data = <<-CONF
142
+ <source>
143
+ @type
144
+ </source>
145
+ CONF
146
+
147
+ new_conf = Fluent::Config.parse(new_conf_data, '(test)', '(test_dir)', true)
148
+
149
+ agent = Fluent::RootAgent.new(log: $log, system_config: system_config)
150
+ stub(Fluent::RootAgent).new do
151
+ stub(agent).start.never
152
+ agent
153
+ end
154
+
155
+ assert_raise(Fluent::ConfigError.new("Missing '@type' parameter on <source> directive")) do
156
+ engine.reload_config(new_conf)
157
+ end
158
+
159
+ assert_kind_of DummyEngineTestInput, engine.root_agent.inputs[0]
160
+ assert_kind_of DummyEngineTestOutput, engine.root_agent.outputs[0]
161
+ end
162
+
163
+ test 'raise an error when unreloadable exists' do
164
+ conf_data = <<-CONF
165
+ <source>
166
+ @type dummy_engine_test
167
+ </source>
168
+ <match>
169
+ @type dummy_engine_test
170
+ </match>
171
+ CONF
172
+
173
+ conf = Fluent::Config.parse(conf_data, '(test)', '(test_dir)', true)
174
+ system_config = Fluent::SystemConfig.create(conf)
175
+
176
+ engine = Fluent::EngineClass.new
177
+ engine.init(system_config)
178
+ engine.configure(conf)
179
+
180
+ assert_kind_of DummyEngineTestInput, engine.root_agent.inputs[0]
181
+ assert_kind_of DummyEngineTestOutput, engine.root_agent.outputs[0]
182
+
183
+ conf_data = <<-CONF
184
+ <source>
185
+ @type dummy_engine_class_var_test
186
+ </source>
187
+ <match>
188
+ @type dummy_engine_test
189
+ </match>
190
+ CONF
191
+
192
+ new_conf = Fluent::Config.parse(conf_data, '(test)', '(test_dir)', true)
193
+
194
+ e = assert_raise(Fluent::ConfigError) do
195
+ engine.reload_config(new_conf)
196
+ end
197
+ assert e.message.match?('Unreloadable plugin plugin: dummy_engine_class_var_test')
198
+
199
+ assert_kind_of DummyEngineTestInput, engine.root_agent.inputs[0]
200
+ assert_kind_of DummyEngineTestOutput, engine.root_agent.outputs[0]
201
+ end
202
+ end
203
+ end