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,951 @@
1
+ require_relative 'helper'
2
+ require 'fluent/event_router'
3
+ require 'fluent/system_config'
4
+ require 'timecop'
5
+ require_relative 'test_plugin_classes'
6
+
7
+ class RootAgentTest < ::Test::Unit::TestCase
8
+ include Fluent
9
+ include FluentTest
10
+
11
+ def test_initialize
12
+ ra = RootAgent.new(log: $log)
13
+ assert_equal 0, ra.instance_variable_get(:@suppress_emit_error_log_interval)
14
+ assert_nil ra.instance_variable_get(:@next_emit_error_log_time)
15
+ end
16
+
17
+ data(
18
+ 'suppress interval' => [{'emit_error_log_interval' => 30}, {:@suppress_emit_error_log_interval => 30}],
19
+ 'without source' => [{'without_source' => true}, {:@without_source => true}],
20
+ 'enable input metrics' => [{'enable_input_metrics' => true}, {:@enable_input_metrics => true}],
21
+ )
22
+ def test_initialize_with_opt(data)
23
+ opt, expected = data
24
+ ra = RootAgent.new(log: $log, system_config: SystemConfig.new(opt))
25
+ expected.each { |k, v|
26
+ assert_equal v, ra.instance_variable_get(k)
27
+ }
28
+ end
29
+
30
+ sub_test_case 'configure' do
31
+ setup do
32
+ @ra = RootAgent.new(log: $log)
33
+ stub(Engine).root_agent { @ra }
34
+ end
35
+
36
+ def configure_ra(conf_str)
37
+ conf = Config.parse(conf_str, "(test)", "(test_dir)", true)
38
+ @ra.configure(conf)
39
+ @ra
40
+ end
41
+
42
+ test 'empty' do
43
+ ra = configure_ra('')
44
+ assert_empty ra.inputs
45
+ assert_empty ra.labels
46
+ assert_empty ra.outputs
47
+ assert_empty ra.filters
48
+ assert_nil ra.context
49
+ assert_nil ra.error_collector
50
+ end
51
+
52
+ test 'raises configuration error for missing type of source' do
53
+ conf = <<-EOC
54
+ <source>
55
+ </source>
56
+ EOC
57
+ errmsg = "Missing '@type' parameter on <source> directive"
58
+ assert_raise Fluent::ConfigError.new(errmsg) do
59
+ configure_ra(conf)
60
+ end
61
+ end
62
+
63
+ test 'raises configuration error for missing type of match' do
64
+ conf = <<-EOC
65
+ <source>
66
+ @type test_in
67
+ </source>
68
+ <match *.**>
69
+ </match>
70
+ EOC
71
+ errmsg = "Missing '@type' parameter on <match> directive"
72
+ assert_raise Fluent::ConfigError.new(errmsg) do
73
+ configure_ra(conf)
74
+ end
75
+ end
76
+
77
+ test 'raises configuration error for missing type of filter' do
78
+ conf = <<-EOC
79
+ <source>
80
+ @type test_in
81
+ </source>
82
+ <filter *.**>
83
+ </filter>
84
+ <match *.**>
85
+ @type test_out
86
+ </match>
87
+ EOC
88
+ errmsg = "Missing '@type' parameter on <filter> directive"
89
+ assert_raise Fluent::ConfigError.new(errmsg) do
90
+ configure_ra(conf)
91
+ end
92
+ end
93
+
94
+ test 'raises configuration error if there are two same label section' do
95
+ conf = <<-EOC
96
+ <source>
97
+ @type test_in
98
+ @label @test
99
+ </source>
100
+ <label @test>
101
+ @type test_out
102
+ </label>
103
+ <label @test>
104
+ @type test_out
105
+ </label>
106
+ EOC
107
+ errmsg = "Section <label @test> appears twice"
108
+ assert_raise Fluent::ConfigError.new(errmsg) do
109
+ configure_ra(conf)
110
+ end
111
+ end
112
+
113
+ test 'raises configuration error for label without name' do
114
+ conf = <<-EOC
115
+ <label>
116
+ @type test_out
117
+ </label>
118
+ EOC
119
+ errmsg = "Missing symbol argument on <label> directive"
120
+ assert_raise Fluent::ConfigError.new(errmsg) do
121
+ configure_ra(conf)
122
+ end
123
+ end
124
+
125
+ test 'raises configuration error for <label @ROOT>' do
126
+ conf = <<-EOC
127
+ <source>
128
+ @type test_in
129
+ @label @ROOT
130
+ </source>
131
+ <label @ROOT>
132
+ @type test_out
133
+ </label>
134
+ EOC
135
+ errmsg = "@ROOT for <label> is not permitted, reserved for getting root router"
136
+ assert_raise Fluent::ConfigError.new(errmsg) do
137
+ configure_ra(conf)
138
+ end
139
+ end
140
+
141
+ test 'raises configuration error if there are not match sections in label section' do
142
+ conf = <<-EOC
143
+ <source>
144
+ @type test_in
145
+ @label @test
146
+ </source>
147
+ <label @test>
148
+ @type test_out
149
+ </label>
150
+ EOC
151
+ errmsg = "Missing <match> sections in <label @test> section"
152
+ assert_raise Fluent::ConfigError.new(errmsg) do
153
+ configure_ra(conf)
154
+ end
155
+ end
156
+
157
+ test 'with plugins' do
158
+ # check @type and type in one configuration
159
+ conf = <<-EOC
160
+ <source>
161
+ @type test_in
162
+ @id test_in
163
+ </source>
164
+ <filter>
165
+ type test_filter
166
+ id test_filter
167
+ </filter>
168
+ <match **>
169
+ @type relabel
170
+ @id test_relabel
171
+ @label @test
172
+ </match>
173
+ <label @test>
174
+ <match **>
175
+ type test_out
176
+ id test_out
177
+ </match>
178
+ </label>
179
+ <label @ERROR>
180
+ <match>
181
+ @type null
182
+ </match>
183
+ </label>
184
+ EOC
185
+ ra = configure_ra(conf)
186
+ assert_kind_of FluentTestInput, ra.inputs.first
187
+ assert_kind_of Plugin::RelabelOutput, ra.outputs.first
188
+ assert_kind_of FluentTestFilter, ra.filters.first
189
+ assert ra.error_collector
190
+
191
+ %W(@test @ERROR).each { |label_symbol|
192
+ assert_include ra.labels, label_symbol
193
+ assert_kind_of Label, ra.labels[label_symbol]
194
+ }
195
+
196
+ test_label = ra.labels['@test']
197
+ assert_kind_of FluentTestOutput, test_label.outputs.first
198
+ assert_equal ra, test_label.root_agent
199
+
200
+ error_label = ra.labels['@ERROR']
201
+ assert_kind_of Fluent::Plugin::NullOutput, error_label.outputs.first
202
+ end
203
+ end
204
+
205
+ sub_test_case 'start/shutdown' do
206
+ def setup_root_agent(conf)
207
+ ra = RootAgent.new(log: $log)
208
+ stub(Engine).root_agent { ra }
209
+ ra.configure(Config.parse(conf, "(test)", "(test_dir)", true))
210
+ ra
211
+ end
212
+
213
+ test 'plugin status' do
214
+ ra = setup_root_agent(<<-EOC)
215
+ <source>
216
+ @type test_in
217
+ @id test_in
218
+ </source>
219
+ <filter>
220
+ type test_filter
221
+ id test_filter
222
+ </filter>
223
+ <match **>
224
+ @type test_out
225
+ @id test_out
226
+ </match>
227
+ EOC
228
+ ra.start
229
+ assert_true ra.inputs.first.started
230
+ assert_true ra.filters.first.started
231
+ assert_true ra.outputs.first.started
232
+
233
+ ra.shutdown
234
+ assert_false ra.inputs.first.started
235
+ assert_false ra.filters.first.started
236
+ assert_false ra.outputs.first.started
237
+ end
238
+
239
+ test 'output plugin threads should run before input plugin is blocked with buffer full' do
240
+ ra = setup_root_agent(<<-EOC)
241
+ <source>
242
+ @type test_in_gen
243
+ @id test_in_gen
244
+ </source>
245
+ <match **>
246
+ @type test_out_buffered
247
+ @id test_out_buffered
248
+ <buffer>
249
+ chunk_limit_size 1k
250
+ queue_limit_length 2
251
+ flush_thread_count 2
252
+ overflow_action block
253
+ </buffer>
254
+ </match>
255
+ EOC
256
+ waiting(5) { ra.start }
257
+ assert_true ra.inputs.first.started
258
+ assert_true ra.outputs.first.started
259
+
260
+ ra.shutdown
261
+ assert_false ra.inputs.first.started
262
+ assert_false ra.outputs.first.started
263
+ end
264
+ end
265
+
266
+ sub_test_case 'configured with label and secondary plugin' do
267
+ setup do
268
+ @ra = RootAgent.new(log: $log)
269
+ stub(Engine).root_agent{ @ra }
270
+ @ra.configure(Config.parse(<<-EOC, "(test)", "(test_dir)", true))
271
+ <source>
272
+ @type test_in
273
+ @label @route_a
274
+ </source>
275
+ <label @route_a>
276
+ <match a.**>
277
+ @type test_out_buffered
278
+ <secondary>
279
+ @type test_out_emit
280
+ </secondary>
281
+ </match>
282
+ </label>
283
+ <label @route_b>
284
+ <match b.**>
285
+ @type test_out
286
+ </match>
287
+ </label>
288
+ EOC
289
+ end
290
+
291
+ test 'secondary plugin has an event router for the label which the plugin is in' do
292
+ assert_equal 1, @ra.inputs.size
293
+ assert_equal 2, @ra.labels.size
294
+ assert_equal ['@route_a', '@route_b'], @ra.labels.keys
295
+ assert_equal '@route_a', @ra.labels['@route_a'].context
296
+ assert_equal '@route_b', @ra.labels['@route_b'].context
297
+
298
+ c1 = @ra.labels['@route_a']
299
+
300
+ assert_equal 1, c1.outputs.size
301
+ assert !c1.outputs.first.has_router?
302
+
303
+ assert c1.outputs.first.secondary
304
+ assert c1.outputs.first.secondary.has_router?
305
+ assert_equal c1.event_router, c1.outputs.first.secondary.router
306
+ end
307
+ end
308
+
309
+ sub_test_case 'configured with label and secondary plugin with @label specifier' do
310
+ setup do
311
+ @ra = RootAgent.new(log: $log)
312
+ stub(Engine).root_agent{ @ra }
313
+ @ra.configure(Config.parse(<<-EOC, "(test)", "(test_dir)", true))
314
+ <source>
315
+ @type test_in
316
+ @label @route_a
317
+ </source>
318
+ <label @route_a>
319
+ <match a.**>
320
+ @type test_out_buffered
321
+ <secondary>
322
+ @type test_out_emit
323
+ @label @route_b
324
+ </secondary>
325
+ </match>
326
+ </label>
327
+ <label @route_b>
328
+ <match b.**>
329
+ @type test_out
330
+ </match>
331
+ </label>
332
+ EOC
333
+ end
334
+
335
+ test 'secondary plugin has an event router for the label specified in secondary section' do
336
+ assert_equal 1, @ra.inputs.size
337
+ assert_equal 2, @ra.labels.size
338
+ assert_equal ['@route_a', '@route_b'], @ra.labels.keys
339
+ assert_equal '@route_a', @ra.labels['@route_a'].context
340
+ assert_equal '@route_b', @ra.labels['@route_b'].context
341
+
342
+ c1 = @ra.labels['@route_a']
343
+ c2 = @ra.labels['@route_b']
344
+
345
+ assert_equal 1, c1.outputs.size
346
+ assert !c1.outputs.first.has_router?
347
+
348
+ assert c1.outputs.first.secondary
349
+ assert c1.outputs.first.secondary.has_router?
350
+ assert_equal c2.event_router, c1.outputs.first.secondary.router
351
+ end
352
+ end
353
+
354
+ sub_test_case 'configured with label and secondary plugin with @label specifier in primary output' do
355
+ setup do
356
+ @ra = RootAgent.new(log: $log)
357
+ stub(Engine).root_agent{ @ra }
358
+ @ra.configure(Config.parse(<<-EOC, "(test)", "(test_dir)", true))
359
+ <source>
360
+ @type test_in
361
+ @label @route_a
362
+ </source>
363
+ <label @route_a>
364
+ <match a.**>
365
+ @type test_out_emit
366
+ @label @route_b
367
+ <secondary>
368
+ @type test_out_emit
369
+ </secondary>
370
+ </match>
371
+ </label>
372
+ <label @route_b>
373
+ <match b.**>
374
+ @type test_out
375
+ </match>
376
+ </label>
377
+ EOC
378
+ end
379
+
380
+ test 'secondary plugin has an event router for the label specified in secondary section' do
381
+ assert_equal 1, @ra.inputs.size
382
+ assert_equal 2, @ra.labels.size
383
+ assert_equal ['@route_a', '@route_b'], @ra.labels.keys
384
+ assert_equal '@route_a', @ra.labels['@route_a'].context
385
+ assert_equal '@route_b', @ra.labels['@route_b'].context
386
+
387
+ c1 = @ra.labels['@route_a']
388
+ c2 = @ra.labels['@route_b']
389
+
390
+ assert_equal 1, c1.outputs.size
391
+ assert c1.outputs.first.secondary
392
+
393
+ p1 = c1.outputs.first
394
+ assert p1.has_router?
395
+ assert_equal c1.event_router, p1.context_router
396
+ assert_equal c2.event_router, p1.router
397
+
398
+ s1 = p1.secondary
399
+ assert s1.has_router?
400
+ assert_equal c1.event_router, s1.context_router
401
+ assert_equal c2.event_router, s1.router
402
+ end
403
+ end
404
+
405
+ sub_test_case 'configured with MultiOutput plugins' do
406
+ setup do
407
+ @ra = RootAgent.new(log: $log)
408
+ stub(Engine).root_agent { @ra }
409
+ @ra.configure(Config.parse(<<-EOC, "(test)", "(test_dir)", true))
410
+ <source>
411
+ @type test_in
412
+ @id test_in
413
+ </source>
414
+ <filter>
415
+ @type test_filter
416
+ @id test_filter
417
+ </filter>
418
+ <match **>
419
+ @type copy
420
+ @id test_copy
421
+ <store>
422
+ @type test_out
423
+ @id test_out1
424
+ </store>
425
+ <store>
426
+ @type test_out
427
+ @id test_out2
428
+ </store>
429
+ </match>
430
+ EOC
431
+ @ra
432
+ end
433
+
434
+ test 'plugin status with multi output' do
435
+ assert_equal 1, @ra.inputs.size
436
+ assert_equal 1, @ra.filters.size
437
+ assert_equal 3, @ra.outputs.size
438
+
439
+ @ra.start
440
+ assert_equal [true], @ra.inputs.map{|i| i.started? }
441
+ assert_equal [true], @ra.filters.map{|i| i.started? }
442
+ assert_equal [true, true, true], @ra.outputs.map{|i| i.started? }
443
+
444
+ assert_equal [true], @ra.inputs.map{|i| i.after_started? }
445
+ assert_equal [true], @ra.filters.map{|i| i.after_started? }
446
+ assert_equal [true, true, true], @ra.outputs.map{|i| i.after_started? }
447
+
448
+ @ra.shutdown
449
+ assert_equal [true], @ra.inputs.map{|i| i.stopped? }
450
+ assert_equal [true], @ra.filters.map{|i| i.stopped? }
451
+ assert_equal [true, true, true], @ra.outputs.map{|i| i.stopped? }
452
+
453
+ assert_equal [true], @ra.inputs.map{|i| i.before_shutdown? }
454
+ assert_equal [true], @ra.filters.map{|i| i.before_shutdown? }
455
+ assert_equal [true, true, true], @ra.outputs.map{|i| i.before_shutdown? }
456
+
457
+ assert_equal [true], @ra.inputs.map{|i| i.shutdown? }
458
+ assert_equal [true], @ra.filters.map{|i| i.shutdown? }
459
+ assert_equal [true, true, true], @ra.outputs.map{|i| i.shutdown? }
460
+
461
+ assert_equal [true], @ra.inputs.map{|i| i.after_shutdown? }
462
+ assert_equal [true], @ra.filters.map{|i| i.after_shutdown? }
463
+ assert_equal [true, true, true], @ra.outputs.map{|i| i.after_shutdown? }
464
+
465
+ assert_equal [true], @ra.inputs.map{|i| i.closed? }
466
+ assert_equal [true], @ra.filters.map{|i| i.closed? }
467
+ assert_equal [true, true, true], @ra.outputs.map{|i| i.closed? }
468
+
469
+ assert_equal [true], @ra.inputs.map{|i| i.terminated? }
470
+ assert_equal [true], @ra.filters.map{|i| i.terminated? }
471
+ assert_equal [true, true, true], @ra.outputs.map{|i| i.terminated? }
472
+ end
473
+ end
474
+
475
+ sub_test_case 'configured with MultiOutput plugins and labels' do
476
+ setup do
477
+ @ra = RootAgent.new(log: $log)
478
+ stub(Engine).root_agent { @ra }
479
+ @ra.configure(Config.parse(<<-EOC, "(test)", "(test_dir)", true))
480
+ <source>
481
+ @type test_in
482
+ @id test_in
483
+ @label @testing
484
+ </source>
485
+ <label @testing>
486
+ <filter>
487
+ @type test_filter
488
+ @id test_filter
489
+ </filter>
490
+ <match **>
491
+ @type copy
492
+ @id test_copy
493
+ <store>
494
+ @type test_out
495
+ @id test_out1
496
+ </store>
497
+ <store>
498
+ @type test_out
499
+ @id test_out2
500
+ </store>
501
+ </match>
502
+ </label>
503
+ EOC
504
+ @ra
505
+ end
506
+
507
+ test 'plugin status with multi output' do
508
+ assert_equal 1, @ra.inputs.size
509
+ assert_equal 0, @ra.filters.size
510
+ assert_equal 0, @ra.outputs.size
511
+ assert_equal 1, @ra.labels.size
512
+ assert_equal '@testing', @ra.labels.keys.first
513
+ assert_equal 1, @ra.labels.values.first.filters.size
514
+ assert_equal 3, @ra.labels.values.first.outputs.size
515
+
516
+ label_filters = @ra.labels.values.first.filters
517
+ label_outputs = @ra.labels.values.first.outputs
518
+
519
+ @ra.start
520
+ assert_equal [true], @ra.inputs.map{|i| i.started? }
521
+ assert_equal [true], label_filters.map{|i| i.started? }
522
+ assert_equal [true, true, true], label_outputs.map{|i| i.started? }
523
+
524
+ @ra.shutdown
525
+ assert_equal [true], @ra.inputs.map{|i| i.stopped? }
526
+ assert_equal [true], label_filters.map{|i| i.stopped? }
527
+ assert_equal [true, true, true], label_outputs.map{|i| i.stopped? }
528
+
529
+ assert_equal [true], @ra.inputs.map{|i| i.before_shutdown? }
530
+ assert_equal [true], label_filters.map{|i| i.before_shutdown? }
531
+ assert_equal [true, true, true], label_outputs.map{|i| i.before_shutdown? }
532
+
533
+ assert_equal [true], @ra.inputs.map{|i| i.shutdown? }
534
+ assert_equal [true], label_filters.map{|i| i.shutdown? }
535
+ assert_equal [true, true, true], label_outputs.map{|i| i.shutdown? }
536
+
537
+ assert_equal [true], @ra.inputs.map{|i| i.after_shutdown? }
538
+ assert_equal [true], label_filters.map{|i| i.after_shutdown? }
539
+ assert_equal [true, true, true], label_outputs.map{|i| i.after_shutdown? }
540
+
541
+ assert_equal [true], @ra.inputs.map{|i| i.closed? }
542
+ assert_equal [true], label_filters.map{|i| i.closed? }
543
+ assert_equal [true, true, true], label_outputs.map{|i| i.closed? }
544
+
545
+ assert_equal [true], @ra.inputs.map{|i| i.terminated? }
546
+ assert_equal [true], label_filters.map{|i| i.terminated? }
547
+ assert_equal [true, true, true], label_outputs.map{|i| i.terminated? }
548
+ end
549
+
550
+ test 'plugin #shutdown is not called twice' do
551
+ assert_equal 1, @ra.inputs.size
552
+ assert_equal 0, @ra.filters.size
553
+ assert_equal 0, @ra.outputs.size
554
+ assert_equal 1, @ra.labels.size
555
+ assert_equal '@testing', @ra.labels.keys.first
556
+ assert_equal 1, @ra.labels.values.first.filters.size
557
+ assert_equal 3, @ra.labels.values.first.outputs.size
558
+
559
+ @ra.start
560
+
561
+ old_level = @ra.log.level
562
+ begin
563
+ @ra.log.instance_variable_get(:@logger).level = Fluent::Log::LEVEL_INFO - 1
564
+ assert_equal Fluent::Log::LEVEL_INFO, @ra.log.level
565
+
566
+ @ra.log.out.flush_logs = false
567
+
568
+ @ra.shutdown
569
+
570
+ test_out1_shutdown_logs = @ra.log.out.logs.select{|line| line =~ /shutting down output plugin type=:test_out plugin_id="test_out1"/ }
571
+ assert_equal 1, test_out1_shutdown_logs.size
572
+ ensure
573
+ @ra.log.out.flush_logs = true
574
+ @ra.log.out.reset
575
+ @ra.log.level = old_level
576
+ end
577
+ end
578
+ end
579
+
580
+ sub_test_case 'configured with MultiOutput plugin which creates plugin instances dynamically' do
581
+ setup do
582
+ @ra = RootAgent.new(log: $log)
583
+ stub(Engine).root_agent { @ra }
584
+ @ra.configure(Config.parse(<<-EOC, "(test)", "(test_dir)", true))
585
+ <source>
586
+ @type test_in
587
+ @id test_in
588
+ @label @testing
589
+ </source>
590
+ <label @testing>
591
+ <match **>
592
+ @type test_dynamic_out
593
+ @id test_dyn
594
+ </match>
595
+ </label>
596
+ EOC
597
+ @ra
598
+ end
599
+
600
+ test 'plugin status with multi output' do
601
+ assert_equal 1, @ra.inputs.size
602
+ assert_equal 0, @ra.filters.size
603
+ assert_equal 0, @ra.outputs.size
604
+ assert_equal 1, @ra.labels.size
605
+ assert_equal '@testing', @ra.labels.keys.first
606
+ assert_equal 0, @ra.labels.values.first.filters.size
607
+ assert_equal 1, @ra.labels.values.first.outputs.size
608
+
609
+ dyn_out = @ra.labels.values.first.outputs.first
610
+ assert_nil dyn_out.child
611
+
612
+ @ra.start
613
+
614
+ assert_equal 1, @ra.labels.values.first.outputs.size
615
+
616
+ assert dyn_out.child
617
+ assert_false dyn_out.child.outputs_statically_created
618
+ assert_equal 2, dyn_out.child.outputs.size
619
+
620
+ assert_equal true, dyn_out.child.outputs[0].started?
621
+ assert_equal true, dyn_out.child.outputs[1].started?
622
+ assert_equal true, dyn_out.child.outputs[0].after_started?
623
+ assert_equal true, dyn_out.child.outputs[1].after_started?
624
+
625
+ @ra.shutdown
626
+
627
+ assert_equal 1, @ra.labels.values.first.outputs.size
628
+
629
+ assert_false dyn_out.child.outputs_statically_created
630
+ assert_equal 2, dyn_out.child.outputs.size
631
+
632
+ assert_equal [true, true], dyn_out.child.outputs.map{|i| i.stopped? }
633
+ assert_equal [true, true], dyn_out.child.outputs.map{|i| i.before_shutdown? }
634
+ assert_equal [true, true], dyn_out.child.outputs.map{|i| i.shutdown? }
635
+ assert_equal [true, true], dyn_out.child.outputs.map{|i| i.after_shutdown? }
636
+ assert_equal [true, true], dyn_out.child.outputs.map{|i| i.closed? }
637
+ assert_equal [true, true], dyn_out.child.outputs.map{|i| i.terminated? }
638
+ end
639
+ end
640
+
641
+ sub_test_case 'configure emit_error_interval' do
642
+ setup do
643
+ system_config = SystemConfig.new
644
+ system_config.emit_error_log_interval = 30
645
+ @ra = RootAgent.new(log: $log, system_config: system_config)
646
+ stub(Engine).root_agent { @ra }
647
+ @ra.log.out.reset
648
+ one_minute_ago = Time.now.to_i - 60
649
+ Timecop.freeze(one_minute_ago)
650
+ end
651
+
652
+ teardown do
653
+ Timecop.return
654
+ end
655
+
656
+ test 'suppresses errors' do
657
+ mock(@ra.log).warn_backtrace()
658
+ e = StandardError.new('standard error')
659
+ begin
660
+ @ra.handle_emits_error("tag", nil, e)
661
+ rescue
662
+ end
663
+
664
+ begin
665
+ @ra.handle_emits_error("tag", nil, e)
666
+ rescue
667
+ end
668
+
669
+ assert_equal 1, @ra.log.out.logs.size
670
+ end
671
+ end
672
+
673
+ sub_test_case 'configured at worker2 with 4 workers environment' do
674
+ setup do
675
+ ENV['SERVERENGINE_WORKER_ID'] = '2'
676
+ @ra = RootAgent.new(log: $log)
677
+ system_config = SystemConfig.new
678
+ system_config.workers = 4
679
+ stub(Engine).worker_id { 2 }
680
+ stub(Engine).root_agent { @ra }
681
+ stub(Engine).system_config { system_config }
682
+ @ra
683
+ end
684
+
685
+ teardown '' do
686
+ ENV.delete('SERVERENGINE_WORKER_ID')
687
+ end
688
+
689
+ def configure_ra(conf_str)
690
+ conf = Config.parse(conf_str, "(test)", "(test_dir)", true)
691
+ @ra.configure(conf)
692
+ @ra
693
+ end
694
+
695
+ test 'raises configuration error for missing worker id' do
696
+ errmsg = 'Missing worker id on <worker> directive'
697
+ assert_raise Fluent::ConfigError.new(errmsg) do
698
+ conf = <<-EOC
699
+ <worker>
700
+ </worker>
701
+ EOC
702
+ configure_ra(conf)
703
+ end
704
+ end
705
+
706
+ test 'raises configuration error for too big worker id' do
707
+ errmsg = "worker id 4 specified by <worker> directive is not allowed. Available worker id is between 0 and 3"
708
+ assert_raise Fluent::ConfigError.new(errmsg) do
709
+ conf = <<-EOC
710
+ <worker 4>
711
+ </worker>
712
+ EOC
713
+ configure_ra(conf)
714
+ end
715
+ end
716
+
717
+ test 'raises configuration error for too big worker id on multi workers syntax' do
718
+ errmsg = "worker id 4 specified by <worker> directive is not allowed. Available worker id is between 0 and 3"
719
+ assert_raise Fluent::ConfigError.new(errmsg) do
720
+ conf = <<-EOC
721
+ <worker 1-4>
722
+ </worker>
723
+ EOC
724
+ configure_ra(conf)
725
+ end
726
+ end
727
+
728
+ test 'raises configuration error for worker id collisions on multi workers syntax' do
729
+ errmsg = "specified worker_id<2> collisions is detected on <worker> directive. Available worker id(s): [3]"
730
+ assert_raise Fluent::ConfigError.new(errmsg) do
731
+ conf = <<-EOC
732
+ <worker 0-2>
733
+ </worker>
734
+ <worker 2-4>
735
+ </worker>
736
+ EOC
737
+ configure_ra(conf)
738
+ end
739
+ end
740
+
741
+ test 'raises configuration error for worker id collisions on multi workers syntax when multi available worker_ids are left' do
742
+ errmsg = "specified worker_id<1> collisions is detected on <worker> directive. Available worker id(s): [2, 3]"
743
+ assert_raise Fluent::ConfigError.new(errmsg) do
744
+ conf = <<-EOC
745
+ <worker 0-1>
746
+ </worker>
747
+ <worker 1-3>
748
+ </worker>
749
+ EOC
750
+ configure_ra(conf)
751
+ end
752
+ end
753
+
754
+ test 'raises configuration error for too big worker id on invalid reversed multi workers syntax' do
755
+ errmsg = "greater first_worker_id<3> than last_worker_id<0> specified by <worker> directive is not allowed. Available multi worker assign syntax is <smaller_worker_id>-<greater_worker_id>"
756
+ assert_raise Fluent::ConfigError.new(errmsg) do
757
+ conf = <<-EOC
758
+ <worker 3-0>
759
+ </worker>
760
+ EOC
761
+ configure_ra(conf)
762
+ end
763
+ end
764
+
765
+ test 'raises configuration error for invalid elements as a child of worker section' do
766
+ errmsg = '<worker> section cannot have <system> directive'
767
+ assert_raise Fluent::ConfigError.new(errmsg) do
768
+ conf = <<-EOC
769
+ <worker 2>
770
+ <system>
771
+ </system>
772
+ </worker>
773
+ EOC
774
+ configure_ra(conf)
775
+ end
776
+ end
777
+
778
+ test 'raises configuration error when configured plugins do not have support multi worker configuration' do
779
+ errmsg = "Plugin 'test_out' does not support multi workers configuration (FluentTest::FluentTestOutput)"
780
+ assert_raise Fluent::ConfigError.new(errmsg) do
781
+ conf = <<-EOC
782
+ <match **>
783
+ @type test_out
784
+ </match>
785
+ EOC
786
+ configure_ra(conf)
787
+ end
788
+ end
789
+
790
+ test 'does not raise configuration error when configured plugins in worker section do not have support multi worker configuration' do
791
+ assert_nothing_raised do
792
+ conf = <<-EOC
793
+ <worker 2>
794
+ <match **>
795
+ @type test_out
796
+ </match>
797
+ </worker>
798
+ EOC
799
+ configure_ra(conf)
800
+ end
801
+ end
802
+
803
+ test 'does not raise configuration error when configured plugins as a children of MultiOutput in worker section do not have support multi worker configuration' do
804
+ assert_nothing_raised do
805
+ conf = <<-EOC
806
+ <worker 2>
807
+ <match **>
808
+ @type copy
809
+ <store>
810
+ @type test_out
811
+ </store>
812
+ <store>
813
+ @type test_out
814
+ </store>
815
+ </match>
816
+ </worker>
817
+ EOC
818
+ configure_ra(conf)
819
+ end
820
+ end
821
+
822
+ test 'does not raise configuration error when configured plugins owned by plugin do not have support multi worker configuration' do
823
+ assert_nothing_raised do
824
+ conf = <<-EOC
825
+ <worker 2>
826
+ <match **>
827
+ @type test_out_buffered
828
+ <buffer>
829
+ @type test_buffer
830
+ </buffer>
831
+ </match>
832
+ </worker>
833
+ EOC
834
+ configure_ra(conf)
835
+ end
836
+ end
837
+
838
+ test 'with plugins' do
839
+ conf = <<-EOC
840
+ <worker 2>
841
+ <source>
842
+ @type test_in
843
+ @id test_in
844
+ </source>
845
+ <filter>
846
+ type test_filter
847
+ id test_filter
848
+ </filter>
849
+ <match **>
850
+ @type relabel
851
+ @id test_relabel
852
+ @label @test
853
+ </match>
854
+ <label @test>
855
+ <match **>
856
+ type test_out
857
+ id test_out
858
+ </match>
859
+ </label>
860
+ <label @ERROR>
861
+ <match>
862
+ @type null
863
+ </match>
864
+ </label>
865
+ </worker>
866
+ EOC
867
+ ra = configure_ra(conf)
868
+ assert_kind_of FluentTestInput, ra.inputs.first
869
+ assert_kind_of Plugin::RelabelOutput, ra.outputs.first
870
+ assert_kind_of FluentTestFilter, ra.filters.first
871
+ assert ra.error_collector
872
+
873
+ %W(@test @ERROR).each { |label_symbol|
874
+ assert_include ra.labels, label_symbol
875
+ assert_kind_of Label, ra.labels[label_symbol]
876
+ }
877
+
878
+ test_label = ra.labels['@test']
879
+ assert_kind_of FluentTestOutput, test_label.outputs.first
880
+ assert_equal ra, test_label.root_agent
881
+
882
+ error_label = ra.labels['@ERROR']
883
+ assert_kind_of Fluent::Plugin::NullOutput, error_label.outputs.first
884
+ end
885
+
886
+ test 'with plugins but for another worker' do
887
+ conf = <<-EOC
888
+ <worker 0>
889
+ <source>
890
+ @type test_in
891
+ @id test_in
892
+ </source>
893
+ <filter>
894
+ type test_filter
895
+ id test_filter
896
+ </filter>
897
+ <match **>
898
+ @type relabel
899
+ @id test_relabel
900
+ @label @test
901
+ </match>
902
+ <label @test>
903
+ <match **>
904
+ type test_out
905
+ id test_out
906
+ </match>
907
+ </label>
908
+ <label @ERROR>
909
+ <match>
910
+ @type null
911
+ </match>
912
+ </label>
913
+ </worker>
914
+ EOC
915
+ ra = configure_ra(conf)
916
+ assert_equal 0, ra.inputs.size
917
+ assert_equal 0, ra.outputs.size
918
+ assert_equal 0, ra.filters.size
919
+ assert_equal 0, ra.labels.size
920
+ refute ra.error_collector
921
+ end
922
+
923
+ test 'with plugins for workers syntax should match worker_id equals to 2' do
924
+ conf = <<-EOC
925
+ <worker 0-2>
926
+ <source>
927
+ @type forward
928
+ </source>
929
+ <filter **>
930
+ @type test_filter
931
+ @id test_filter
932
+ </filter>
933
+ <match pattern>
934
+ @type stdout
935
+ </match>
936
+ <label @ERROR>
937
+ <match>
938
+ @type null
939
+ </match>
940
+ </label>
941
+ </worker>
942
+ EOC
943
+
944
+ ra = configure_ra(conf)
945
+ assert_kind_of Fluent::Plugin::ForwardInput, ra.inputs.first
946
+ assert_kind_of Fluent::Plugin::StdoutOutput, ra.outputs.first
947
+ assert_kind_of FluentTestFilter, ra.filters.first
948
+ assert ra.error_collector
949
+ end
950
+ end
951
+ end