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,278 @@
1
+ require_relative 'helper'
2
+ require 'fluent/test'
3
+ require 'fluent/output'
4
+ require 'fluent/output_chain'
5
+ require 'fluent/plugin/buffer'
6
+ require 'timecop'
7
+ require 'flexmock/test_unit'
8
+
9
+ module FluentOutputTest
10
+ include Fluent
11
+ include FlexMock::TestCase
12
+
13
+ class BufferedOutputTest < ::Test::Unit::TestCase
14
+ include FluentOutputTest
15
+
16
+ class << self
17
+ def startup
18
+ $LOAD_PATH.unshift File.expand_path(File.join(File.dirname(__FILE__), 'scripts'))
19
+ require 'fluent/plugin/out_test'
20
+ require 'fluent/plugin/out_test2'
21
+ end
22
+
23
+ def shutdown
24
+ $LOAD_PATH.shift
25
+ end
26
+ end
27
+
28
+ def setup
29
+ Fluent::Test.setup
30
+ end
31
+
32
+ CONFIG = %[]
33
+
34
+ def create_driver(conf=CONFIG)
35
+ Fluent::Test::BufferedOutputTestDriver.new(Fluent::BufferedOutput) do
36
+ def write(chunk)
37
+ chunk.read
38
+ end
39
+ end.configure(conf)
40
+ end
41
+
42
+ def test_configure
43
+ # default
44
+ d = create_driver
45
+ assert_equal 'memory', d.instance.buffer_type
46
+ assert_equal 60, d.instance.flush_interval
47
+ assert_equal false, d.instance.disable_retry_limit
48
+ assert_equal 17, d.instance.retry_limit
49
+ assert_equal 1.0, d.instance.retry_wait
50
+ assert_equal nil, d.instance.max_retry_wait
51
+ assert_equal 1.0, d.instance.retry_wait
52
+ assert_equal 1, d.instance.num_threads
53
+ assert_equal 1, d.instance.queued_chunk_flush_interval
54
+
55
+ # max_retry_wait
56
+ d = create_driver(CONFIG + %[max_retry_wait 4])
57
+ assert_equal 4, d.instance.max_retry_wait
58
+
59
+ # disable_retry_limit
60
+ d = create_driver(CONFIG + %[disable_retry_limit true])
61
+ assert_equal true, d.instance.disable_retry_limit
62
+
63
+ #### retry_state cares it
64
+ # # retry_wait is converted to Float for calc_retry_wait
65
+ # d = create_driver(CONFIG + %[retry_wait 1s])
66
+ # assert_equal Float, d.instance.retry_wait.class
67
+ end
68
+
69
+ class FormatterInjectTestOutput < Fluent::Output
70
+ def initialize
71
+ super
72
+ @formatter = nil
73
+ end
74
+ end
75
+ def test_start
76
+ i = FormatterInjectTestOutput.new
77
+ i.configure(config_element('ROOT', '', {}, [config_element('inject', '', {'hostname_key' => "host"})]))
78
+ assert_nothing_raised do
79
+ i.start
80
+ end
81
+ end
82
+
83
+ def create_mock_driver(conf=CONFIG)
84
+ Fluent::Test::BufferedOutputTestDriver.new(Fluent::BufferedOutput) do
85
+ attr_accessor :submit_flush_threads
86
+
87
+ def start_mock
88
+ @started = false
89
+ start
90
+ # ensure OutputThread to start successfully
91
+ submit_flush
92
+ sleep 0.5
93
+ while !@started
94
+ submit_flush
95
+ sleep 0.5
96
+ end
97
+ end
98
+
99
+ def try_flush
100
+ @started = true
101
+ @submit_flush_threads ||= {}
102
+ @submit_flush_threads[Thread.current] ||= 0
103
+ @submit_flush_threads[Thread.current] += 1
104
+ end
105
+
106
+ def write(chunk)
107
+ chunk.read
108
+ end
109
+ end.configure(conf)
110
+ end
111
+
112
+ def test_secondary
113
+ d = Fluent::Test::BufferedOutputTestDriver.new(Fluent::BufferedOutput) do
114
+ def write(chunk)
115
+ chunk.read
116
+ end
117
+ end
118
+
119
+ mock(d.instance.log).warn("Use different plugin for secondary. Check the plugin works with primary like secondary_file",
120
+ primary: d.instance.class.to_s, secondary: "Fluent::Plugin::Test2Output")
121
+ d.configure(CONFIG + %[
122
+ <secondary>
123
+ type test2
124
+ name c0
125
+ </secondary>
126
+ ])
127
+
128
+ assert_not_nil d.instance.instance_variable_get(:@secondary).router
129
+ end
130
+
131
+ def test_secondary_with_no_warn_log
132
+ # ObjectBufferedOutput doesn't implement `custom_filter`
133
+ d = Fluent::Test::BufferedOutputTestDriver.new(Fluent::ObjectBufferedOutput)
134
+
135
+ mock(d.instance.log).warn("Use different plugin for secondary. Check the plugin works with primary like secondary_file",
136
+ primary: d.instance.class.to_s, secondary: "Fluent::Plugin::Test2Output").never
137
+ d.configure(CONFIG + %[
138
+ <secondary>
139
+ type test2
140
+ name c0
141
+ </secondary>
142
+ ])
143
+
144
+ assert_not_nil d.instance.instance_variable_get(:@secondary).router
145
+ end
146
+
147
+ test 'BufferQueueLimitError compatibility' do
148
+ assert_equal Fluent::Plugin::Buffer::BufferOverflowError, Fluent::BufferQueueLimitError
149
+ end
150
+ end
151
+
152
+ class ObjectBufferedOutputTest < ::Test::Unit::TestCase
153
+ include FluentOutputTest
154
+
155
+ def setup
156
+ Fluent::Test.setup
157
+ end
158
+
159
+ CONFIG = %[]
160
+
161
+ def create_driver(conf=CONFIG)
162
+ Fluent::Test::OutputTestDriver.new(Fluent::ObjectBufferedOutput).configure(conf, true)
163
+ end
164
+
165
+ def test_configure
166
+ # default
167
+ d = create_driver
168
+ assert_equal true, d.instance.time_as_integer
169
+ end
170
+ end
171
+
172
+ class TimeSlicedOutputTest < ::Test::Unit::TestCase
173
+ include FluentOutputTest
174
+ include FlexMock::TestCase
175
+
176
+ def setup
177
+ Fluent::Test.setup
178
+ FileUtils.rm_rf(TMP_DIR)
179
+ FileUtils.mkdir_p(TMP_DIR)
180
+ end
181
+
182
+ TMP_DIR = File.expand_path(File.dirname(__FILE__) + "/tmp/time_sliced_output")
183
+
184
+ CONFIG = %[
185
+ buffer_path #{TMP_DIR}/foo
186
+ time_slice_format %Y%m%d%H
187
+ ]
188
+
189
+ class TimeSlicedOutputTestPlugin < Fluent::TimeSlicedOutput
190
+ attr_reader :written_chunk_keys, :errors_in_write
191
+ def initialize
192
+ super
193
+ @written_chunk_keys = []
194
+ @errors_in_write = []
195
+ end
196
+
197
+ def configure(conf)
198
+ super
199
+
200
+ @formatter = Fluent::Plugin.new_formatter('out_file')
201
+ @formatter.configure(conf)
202
+ end
203
+
204
+ def format(tag, time, record)
205
+ @formatter.format(tag, time, record)
206
+ end
207
+ def write(chunk)
208
+ @written_chunk_keys << chunk.key
209
+ true
210
+ rescue => e
211
+ @errors_in_write << e
212
+ end
213
+ end
214
+
215
+ def create_driver(conf=CONFIG)
216
+ Fluent::Test::TimeSlicedOutputTestDriver.new(TimeSlicedOutputTestPlugin).configure(conf, true)
217
+ end
218
+
219
+ data(:none => '',
220
+ :utc => "utc",
221
+ :localtime => 'localtime',
222
+ :timezone => 'timezone +0000')
223
+ test 'configure with timezone related parameters' do |param|
224
+ assert_nothing_raised {
225
+ create_driver(CONFIG + param)
226
+ }
227
+ end
228
+
229
+ sub_test_case "test emit" do
230
+ setup do
231
+ @time = Time.parse("2011-01-02 13:14:15 UTC")
232
+ Timecop.freeze(@time)
233
+ @newline = if Fluent.windows?
234
+ "\r\n"
235
+ else
236
+ "\n"
237
+ end
238
+ end
239
+
240
+ teardown do
241
+ Timecop.return
242
+ end
243
+
244
+ test "emit with invalid event" do
245
+ d = create_driver
246
+ d.instance.start
247
+ d.instance.after_start
248
+ assert_raise ArgumentError, "time must be a Fluent::EventTime (or Integer)" do
249
+ d.instance.emit_events('test', OneEventStream.new('string', 10))
250
+ end
251
+ end
252
+
253
+ test "plugin can get key of chunk in #write" do
254
+ d = create_driver
255
+ d.instance.start
256
+ d.instance.after_start
257
+ d.instance.emit_events('test', OneEventStream.new(event_time("2016-11-08 17:44:30 +0900"), {"message" => "yay"}))
258
+ d.instance.force_flush
259
+ waiting(10) do
260
+ sleep 0.1 until d.instance.written_chunk_keys.size == 1
261
+ end
262
+ assert_equal [], d.instance.errors_in_write
263
+ assert_equal ["2016110808"], d.instance.written_chunk_keys # default timezone is UTC
264
+ end
265
+
266
+ test "check formatted time compatibility with utc. Should Z, not +00:00" do
267
+ d = create_driver(CONFIG + %[
268
+ utc
269
+ include_time_key
270
+ ])
271
+ time = Time.parse("2016-11-08 12:00:00 UTC").to_i
272
+ d.emit({"a" => 1}, time)
273
+ d.expect_format %[2016-11-08T12:00:00Z\ttest\t{"a":1,"time":"2016-11-08T12:00:00Z"}#{@newline}]
274
+ d.run
275
+ end
276
+ end
277
+ end
278
+ end
@@ -0,0 +1,251 @@
1
+ require_relative 'helper'
2
+
3
+ require 'fluent/plugin'
4
+ require 'fluent/plugin/input'
5
+ require 'fluent/plugin/filter'
6
+ require 'fluent/plugin/output'
7
+ require 'fluent/plugin/buffer'
8
+ require 'fluent/plugin/parser'
9
+ require 'fluent/plugin/formatter'
10
+ require 'fluent/plugin/storage'
11
+
12
+ class PluginTest < Test::Unit::TestCase
13
+ class Dummy1Input < Fluent::Plugin::Input
14
+ Fluent::Plugin.register_input('plugin_test_dummy1', self)
15
+ end
16
+ class Dummy2Input < Fluent::Plugin::Input
17
+ Fluent::Plugin.register_input('plugin_test_dummy2', self)
18
+ helpers :storage
19
+ config_section :storage do
20
+ config_set_default :@type, 'plugin_test_dummy1'
21
+ end
22
+ def multi_workers_ready?
23
+ true
24
+ end
25
+ end
26
+ class DummyFilter < Fluent::Plugin::Filter
27
+ Fluent::Plugin.register_filter('plugin_test_dummy', self)
28
+ helpers :parser, :formatter
29
+ config_section :parse do
30
+ config_set_default :@type, 'plugin_test_dummy'
31
+ end
32
+ config_section :format do
33
+ config_set_default :@type, 'plugin_test_dummy'
34
+ end
35
+ def filter(tag, time, record)
36
+ record
37
+ end
38
+ end
39
+ class Dummy1Output < Fluent::Plugin::Output
40
+ Fluent::Plugin.register_output('plugin_test_dummy1', self)
41
+ def write(chunk)
42
+ # drop
43
+ end
44
+ end
45
+ class Dummy2Output < Fluent::Plugin::Output
46
+ Fluent::Plugin.register_output('plugin_test_dummy2', self)
47
+ config_section :buffer do
48
+ config_set_default :@type, 'plugin_test_dummy1'
49
+ end
50
+ def multi_workers_ready?
51
+ true
52
+ end
53
+ def write(chunk)
54
+ # drop
55
+ end
56
+ end
57
+ class Dummy1Buffer < Fluent::Plugin::Buffer
58
+ Fluent::Plugin.register_buffer('plugin_test_dummy1', self)
59
+ end
60
+ class Dummy2Buffer < Fluent::Plugin::Buffer
61
+ Fluent::Plugin.register_buffer('plugin_test_dummy2', self)
62
+ def multi_workers_ready?
63
+ false
64
+ end
65
+ end
66
+ class DummyParser < Fluent::Plugin::Parser
67
+ Fluent::Plugin.register_parser('plugin_test_dummy', self)
68
+ end
69
+ class DummyFormatter < Fluent::Plugin::Formatter
70
+ Fluent::Plugin.register_formatter('plugin_test_dummy', self)
71
+ end
72
+ class Dummy1Storage < Fluent::Plugin::Storage
73
+ Fluent::Plugin.register_storage('plugin_test_dummy1', self)
74
+ end
75
+ class Dummy2Storage < Fluent::Plugin::Storage
76
+ Fluent::Plugin.register_storage('plugin_test_dummy2', self)
77
+ def multi_workers_ready?
78
+ false
79
+ end
80
+ end
81
+ class DummyOwner < Fluent::Plugin::Base
82
+ include Fluent::PluginId
83
+ include Fluent::PluginLoggerMixin
84
+ end
85
+ class DummyEventRouter
86
+ def emit(tag, time, record); end
87
+ def emit_array(tag, array); end
88
+ def emit_stream(tag, es); end
89
+ def emit_error_event(tag, time, record, error); end
90
+ end
91
+
92
+ sub_test_case '#new_* methods' do
93
+ data(
94
+ input1: ['plugin_test_dummy1', Dummy1Input, :new_input],
95
+ input2: ['plugin_test_dummy2', Dummy2Input, :new_input],
96
+ filter: ['plugin_test_dummy', DummyFilter, :new_filter],
97
+ output1: ['plugin_test_dummy1', Dummy1Output, :new_output],
98
+ output2: ['plugin_test_dummy2', Dummy2Output, :new_output],
99
+ )
100
+ test 'returns plugin instances of registered plugin classes' do |(type, klass, m)|
101
+ instance = Fluent::Plugin.__send__(m, type)
102
+ assert_kind_of klass, instance
103
+ end
104
+
105
+ data(
106
+ buffer1: ['plugin_test_dummy1', Dummy1Buffer, :new_buffer],
107
+ buffer2: ['plugin_test_dummy2', Dummy2Buffer, :new_buffer],
108
+ parser: ['plugin_test_dummy', DummyParser, :new_parser],
109
+ formatter: ['plugin_test_dummy', DummyFormatter, :new_formatter],
110
+ storage1: ['plugin_test_dummy1', Dummy1Storage, :new_storage],
111
+ storage2: ['plugin_test_dummy2', Dummy2Storage, :new_storage],
112
+ )
113
+ test 'returns plugin instances of registered owned plugin classes' do |(type, klass, m)|
114
+ owner = DummyOwner.new
115
+ instance = Fluent::Plugin.__send__(m, type, parent: owner)
116
+ assert_kind_of klass, instance
117
+ end
118
+
119
+ data(
120
+ input1: ['plugin_test_dummy1', Dummy1Input, :new_input, nil],
121
+ input2: ['plugin_test_dummy2', Dummy2Input, :new_input, nil],
122
+ filter: ['plugin_test_dummy', DummyFilter, :new_filter, nil],
123
+ output1: ['plugin_test_dummy1', Dummy1Output, :new_output, nil],
124
+ output2: ['plugin_test_dummy2', Dummy2Output, :new_output, nil],
125
+ buffer1: ['plugin_test_dummy1', Dummy1Buffer, :new_buffer, {parent: DummyOwner.new}],
126
+ buffer2: ['plugin_test_dummy2', Dummy2Buffer, :new_buffer, {parent: DummyOwner.new}],
127
+ parser: ['plugin_test_dummy', DummyParser, :new_parser, {parent: DummyOwner.new}],
128
+ formatter: ['plugin_test_dummy', DummyFormatter, :new_formatter, {parent: DummyOwner.new}],
129
+ storage1: ['plugin_test_dummy1', Dummy1Storage, :new_storage, {parent: DummyOwner.new}],
130
+ storage2: ['plugin_test_dummy2', Dummy2Storage, :new_storage, {parent: DummyOwner.new}],
131
+ )
132
+ test 'returns plugin instances which are extended by FeatureAvailabilityChecker module' do |(type, _, m, kwargs)|
133
+ instance = if kwargs
134
+ Fluent::Plugin.__send__(m, type, **kwargs)
135
+ else
136
+ Fluent::Plugin.__send__(m, type)
137
+ end
138
+ assert_kind_of Fluent::Plugin::FeatureAvailabilityChecker, instance
139
+ end
140
+ end
141
+
142
+ sub_test_case 'with default system configuration' do
143
+ data(
144
+ input1: ['plugin_test_dummy1', Dummy1Input, :new_input, nil],
145
+ input2: ['plugin_test_dummy2', Dummy2Input, :new_input, nil],
146
+ filter: ['plugin_test_dummy', DummyFilter, :new_filter, nil],
147
+ output1: ['plugin_test_dummy1', Dummy1Output, :new_output, nil],
148
+ output2: ['plugin_test_dummy2', Dummy2Output, :new_output, nil],
149
+ buffer1: ['plugin_test_dummy1', Dummy1Buffer, :new_buffer, {parent: DummyOwner.new}],
150
+ buffer2: ['plugin_test_dummy2', Dummy2Buffer, :new_buffer, {parent: DummyOwner.new}],
151
+ parser: ['plugin_test_dummy', DummyParser, :new_parser, {parent: DummyOwner.new}],
152
+ formatter: ['plugin_test_dummy', DummyFormatter, :new_formatter, {parent: DummyOwner.new}],
153
+ storage1: ['plugin_test_dummy1', Dummy1Storage, :new_storage, {parent: DummyOwner.new}],
154
+ storage2: ['plugin_test_dummy2', Dummy2Storage, :new_storage, {parent: DummyOwner.new}],
155
+ )
156
+ test '#configure does not raise anything' do |(type, _, m, kwargs)|
157
+ instance = if kwargs
158
+ Fluent::Plugin.__send__(m, type, **kwargs)
159
+ else
160
+ Fluent::Plugin.__send__(m, type)
161
+ end
162
+ if instance.respond_to?(:context_router=)
163
+ instance.context_router = DummyEventRouter.new
164
+ end
165
+ assert_nothing_raised do
166
+ instance.configure(config_element())
167
+ end
168
+ end
169
+ end
170
+
171
+ sub_test_case 'with single worker configuration' do
172
+ data(
173
+ input1: ['plugin_test_dummy1', Dummy1Input, :new_input, nil],
174
+ input2: ['plugin_test_dummy2', Dummy2Input, :new_input, nil],
175
+ filter: ['plugin_test_dummy', DummyFilter, :new_filter, nil],
176
+ output1: ['plugin_test_dummy1', Dummy1Output, :new_output, nil],
177
+ output2: ['plugin_test_dummy2', Dummy2Output, :new_output, nil],
178
+ buffer1: ['plugin_test_dummy1', Dummy1Buffer, :new_buffer, {parent: DummyOwner.new}],
179
+ buffer2: ['plugin_test_dummy2', Dummy2Buffer, :new_buffer, {parent: DummyOwner.new}],
180
+ parser: ['plugin_test_dummy', DummyParser, :new_parser, {parent: DummyOwner.new}],
181
+ formatter: ['plugin_test_dummy', DummyFormatter, :new_formatter, {parent: DummyOwner.new}],
182
+ storage1: ['plugin_test_dummy1', Dummy1Storage, :new_storage, {parent: DummyOwner.new}],
183
+ storage2: ['plugin_test_dummy2', Dummy2Storage, :new_storage, {parent: DummyOwner.new}],
184
+ )
185
+ test '#configure does not raise anything' do |(type, _, m, kwargs)|
186
+ instance = if kwargs
187
+ Fluent::Plugin.__send__(m, type, **kwargs)
188
+ else
189
+ Fluent::Plugin.__send__(m, type)
190
+ end
191
+ if instance.respond_to?(:context_router=)
192
+ instance.context_router = DummyEventRouter.new
193
+ end
194
+ assert_nothing_raised do
195
+ instance.system_config_override('workers' => 1)
196
+ instance.configure(config_element())
197
+ end
198
+ end
199
+ end
200
+
201
+ sub_test_case 'with multi workers configuration' do
202
+ data(
203
+ input1: ['plugin_test_dummy1', Dummy1Input, :new_input],
204
+ output1: ['plugin_test_dummy1', Dummy1Output, :new_output],
205
+ )
206
+ test '#configure raise configuration error if plugins are not ready for multi workers' do |(type, klass, new_method)|
207
+ conf = config_element()
208
+ instance = Fluent::Plugin.__send__(new_method, type)
209
+ if instance.respond_to?(:context_router=)
210
+ instance.context_router = DummyEventRouter.new
211
+ end
212
+ assert_raise Fluent::ConfigError.new("Plugin '#{type}' does not support multi workers configuration (#{klass})") do
213
+ instance.system_config_override('workers' => 3)
214
+ instance.configure(conf)
215
+ end
216
+ end
217
+
218
+ data(
219
+ input2: ['plugin_test_dummy2', Dummy2Input, :new_input], # with Dummy1Storage
220
+ filter: ['plugin_test_dummy', DummyFilter, :new_filter], # with DummyParser and DummyFormatter
221
+ output2: ['plugin_test_dummy2', Dummy2Output, :new_output], # with Dummy1Buffer
222
+ )
223
+ test '#configure does not raise any errors if plugins and its owned plugins are ready for multi workers' do |(type, _klass, new_method)|
224
+ conf = config_element()
225
+ instance = Fluent::Plugin.__send__(new_method, type)
226
+ if instance.respond_to?(:context_router=)
227
+ instance.context_router = DummyEventRouter.new
228
+ end
229
+ assert_nothing_raised do
230
+ instance.system_config_override('workers' => 3)
231
+ instance.configure(conf)
232
+ end
233
+ end
234
+
235
+ data(
236
+ input2: ['plugin_test_dummy2', Dummy2Input, :new_input, 'storage', 'plugin_test_dummy2', Dummy2Storage],
237
+ output2: ['plugin_test_dummy2', Dummy2Output, :new_output, 'buffer', 'plugin_test_dummy2', Dummy2Buffer],
238
+ )
239
+ test '#configure raise configuration error if configured owned plugins are not ready for multi workers' do |(type, _klass, new_method, subsection, subsection_type, problematic)|
240
+ conf = config_element('root', '', {}, [config_element(subsection, '', {'@type' => subsection_type})])
241
+ instance = Fluent::Plugin.__send__(new_method, type)
242
+ if instance.respond_to?(:context_router=)
243
+ instance.context_router = DummyEventRouter.new
244
+ end
245
+ assert_raise Fluent::ConfigError.new("Plugin '#{subsection_type}' does not support multi workers configuration (#{problematic})") do
246
+ instance.system_config_override('workers' => 3)
247
+ instance.configure(conf)
248
+ end
249
+ end
250
+ end
251
+ end