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,428 @@
1
+ require_relative "../helper"
2
+ require 'fluent/test/driver/output'
3
+ require 'fluent/plugin/out_http'
4
+
5
+ require 'webrick'
6
+ require 'webrick/https'
7
+ require 'net/http'
8
+ require 'uri'
9
+ require 'json'
10
+
11
+ # WEBrick's ProcHandler doesn't handle PUT by default
12
+ module WEBrick::HTTPServlet
13
+ class ProcHandler < AbstractServlet
14
+ alias do_PUT do_GET
15
+ end
16
+ end
17
+
18
+ class HTTPOutputTest < Test::Unit::TestCase
19
+ include Fluent::Test::Helpers
20
+
21
+ TMP_DIR = File.join(__dir__, "../tmp/out_http#{ENV['TEST_ENV_NUMBER']}")
22
+ DEFAULT_LOGGER = ::WEBrick::Log.new(::STDOUT, ::WEBrick::BasicLog::FATAL)
23
+
24
+ class << self
25
+ # Use class variable to reduce server start/shutdown time
26
+ def startup
27
+ @@result = nil
28
+ @@auth_handler = nil
29
+ @@http_server_thread = nil
30
+ end
31
+
32
+ def shutdown
33
+ @@http_server_thread.kill
34
+ @@http_server_thread.join
35
+ rescue
36
+ end
37
+ end
38
+
39
+ def server_port
40
+ 19880
41
+ end
42
+
43
+ def base_endpoint
44
+ "http://127.0.0.1:#{server_port}"
45
+ end
46
+
47
+ def server_config
48
+ config = {BindAddress: '127.0.0.1', Port: server_port}
49
+ # Suppress webrick logs
50
+ config[:Logger] = DEFAULT_LOGGER
51
+ config[:AccessLog] = []
52
+ config
53
+ end
54
+
55
+ def http_client(**opts, &block)
56
+ opts = opts.merge(open_timeout: 1, read_timeout: 1)
57
+ if block_given?
58
+ Net::HTTP.start('127.0.0.1', server_port, **opts, &block)
59
+ else
60
+ Net::HTTP.start('127.0.0.1', server_port, **opts)
61
+ end
62
+ end
63
+
64
+ def run_http_server
65
+ server = ::WEBrick::HTTPServer.new(server_config)
66
+ server.mount_proc('/test') { |req, res|
67
+ if @@auth_handler
68
+ @@auth_handler.call(req, res)
69
+ end
70
+
71
+ @@result.method = req.request_method
72
+ @@result.content_type = req.content_type
73
+ req.each do |key, value|
74
+ @@result.headers[key] = value
75
+ end
76
+
77
+ data = []
78
+ case req.content_type
79
+ when 'application/x-ndjson'
80
+ req.body.each_line { |l|
81
+ data << JSON.parse(l)
82
+ }
83
+ when 'application/json'
84
+ data = JSON.parse(req.body)
85
+ when 'text/plain'
86
+ # Use single_value in this test
87
+ req.body.each_line { |line|
88
+ data << line.chomp
89
+ }
90
+ else
91
+ data << req.body
92
+ end
93
+ @@result.data = data
94
+
95
+ res.status = 200
96
+ res.body = "success"
97
+ }
98
+ server.mount_proc('/503') { |_, res|
99
+ res.status = 503
100
+ res.body = 'Service Unavailable'
101
+ }
102
+ server.mount_proc('/404') { |_, res|
103
+ res.status = 404
104
+ res.body = 'Not Found'
105
+ }
106
+ # For start check
107
+ server.mount_proc('/') { |_, res|
108
+ res.status = 200
109
+ res.body = 'Hello Fluentd!'
110
+ }
111
+ server.start
112
+ ensure
113
+ server.shutdown rescue nil
114
+ end
115
+
116
+ Result = Struct.new("Result", :method, :content_type, :headers, :data)
117
+
118
+ setup do
119
+ Fluent::Test.setup
120
+ FileUtils.rm_rf(TMP_DIR)
121
+
122
+ @@result = Result.new(nil, nil, {}, nil)
123
+ @@http_server_thread ||= Thread.new do
124
+ run_http_server
125
+ end
126
+
127
+ now = Time.now
128
+ started = false
129
+ until started
130
+ raise "Server not started" if (Time.now - now > 10.0)
131
+ begin
132
+ http_client { |c| c.request_get('/') }
133
+ started = true
134
+ rescue
135
+ sleep 0.5
136
+ end
137
+ end
138
+ end
139
+
140
+ teardown do
141
+ @@result = nil
142
+ @@auth_handler = nil
143
+ end
144
+
145
+ def create_driver(conf)
146
+ Fluent::Test::Driver::Output.new(Fluent::Plugin::HTTPOutput).configure(conf)
147
+ end
148
+
149
+ def config
150
+ %[
151
+ endpoint #{base_endpoint}/test
152
+ ]
153
+ end
154
+
155
+ def test_events
156
+ [
157
+ {"message" => "hello", "num" => 10, "bool" => true},
158
+ {"message" => "hello", "num" => 11, "bool" => false}
159
+ ]
160
+ end
161
+
162
+ def test_configure
163
+ d = create_driver(config)
164
+ assert_equal "http://127.0.0.1:#{server_port}/test", d.instance.endpoint
165
+ assert_equal :post, d.instance.http_method
166
+ assert_equal 'application/x-ndjson', d.instance.content_type
167
+ assert_equal [503], d.instance.retryable_response_codes
168
+ assert_true d.instance.error_response_as_unrecoverable
169
+ assert_nil d.instance.proxy
170
+ assert_nil d.instance.headers
171
+ end
172
+
173
+ def test_configure_with_warn
174
+ d = create_driver(config)
175
+ assert_match(/Status code 503 is going to be removed/, d.instance.log.out.logs.join)
176
+ end
177
+
178
+ def test_configure_without_warn
179
+ d = create_driver(<<~CONFIG)
180
+ endpoint #{base_endpoint}/test
181
+ retryable_response_codes [503]
182
+ CONFIG
183
+ assert_not_match(/Status code 503 is going to be removed/, d.instance.log.out.logs.join)
184
+ end
185
+
186
+ # Check if an exception is raised on not JSON format use
187
+ data('not_json' => 'msgpack')
188
+ def test_configure_with_json_array_err(format_type)
189
+ assert_raise(Fluent::ConfigError) do
190
+ create_driver(config + %[
191
+ json_array true
192
+ <format>
193
+ @type #{format_type}
194
+ </format>
195
+ ])
196
+ end
197
+ end
198
+
199
+ data('json' => ['json', 'application/x-ndjson'],
200
+ 'ltsv' => ['ltsv', 'text/tab-separated-values'],
201
+ 'msgpack' => ['msgpack', 'application/x-msgpack'],
202
+ 'single_value' => ['single_value', 'text/plain'])
203
+ def test_configure_content_type(types)
204
+ format_type, content_type = types
205
+ d = create_driver(config + %[
206
+ <format>
207
+ @type #{format_type}
208
+ </format>
209
+ ])
210
+ assert_equal content_type, d.instance.content_type
211
+ end
212
+
213
+ # Check that json_array setting sets content_type = application/json
214
+ data('json' => 'application/json')
215
+ def test_configure_content_type_json_array(content_type)
216
+ d = create_driver(config + "json_array true")
217
+
218
+ assert_equal content_type, d.instance.content_type
219
+ end
220
+
221
+ data('PUT' => 'put', 'POST' => 'post')
222
+ def test_write_with_method(method)
223
+ d = create_driver(config + "http_method #{method}")
224
+ d.run(default_tag: 'test.http') do
225
+ test_events.each { |event|
226
+ d.feed(event)
227
+ }
228
+ end
229
+
230
+ result = @@result
231
+ assert_equal method.upcase, result.method
232
+ assert_equal 'application/x-ndjson', result.content_type
233
+ assert_equal test_events, result.data
234
+ assert_not_empty result.headers
235
+ end
236
+
237
+ # Check that JSON at HTTP request body is valid
238
+ def test_write_with_json_array_setting
239
+ d = create_driver(config + "json_array true")
240
+ d.run(default_tag: 'test.http') do
241
+ test_events.each { |event|
242
+ d.feed(event)
243
+ }
244
+ end
245
+
246
+ result = @@result
247
+ assert_equal 'application/json', result.content_type
248
+ assert_equal test_events, result.data
249
+ assert_not_empty result.headers
250
+ end
251
+
252
+ def test_write_with_single_value_format
253
+ d = create_driver(config + %[
254
+ <format>
255
+ @type single_value
256
+ </format>
257
+ ])
258
+ d.run(default_tag: 'test.http') do
259
+ test_events.each { |event|
260
+ d.feed(event)
261
+ }
262
+ end
263
+
264
+ result = @@result
265
+ assert_equal 'text/plain', result.content_type
266
+ assert_equal (test_events.map { |e| e['message'] }), result.data
267
+ assert_not_empty result.headers
268
+ end
269
+
270
+ def test_write_with_headers
271
+ d = create_driver(config + 'headers {"test_header":"fluentd!"}')
272
+ d.run(default_tag: 'test.http') do
273
+ test_events.each { |event|
274
+ d.feed(event)
275
+ }
276
+ end
277
+
278
+ result = @@result
279
+ assert_true result.headers.has_key?('test_header')
280
+ assert_equal "fluentd!", result.headers['test_header']
281
+ end
282
+
283
+ def test_write_with_headers_from_placeholders
284
+ d = create_driver(config + %[
285
+ headers_from_placeholders {"x-test":"${$.foo.bar}-test","x-tag":"${tag}"}
286
+ <buffer tag,$.foo.bar>
287
+ </buffer>
288
+ ])
289
+ d.run(default_tag: 'test.http') do
290
+ test_events.each { |event|
291
+ ev = event.dup
292
+ ev['foo'] = {'bar' => 'abcd'}
293
+ d.feed(ev)
294
+ }
295
+ end
296
+
297
+ result = @@result
298
+ assert_equal "abcd-test", result.headers['x-test']
299
+ assert_equal "test.http", result.headers['x-tag']
300
+ end
301
+
302
+ def test_write_with_retryable_response
303
+ old_report_on_exception = Thread.report_on_exception
304
+ Thread.report_on_exception = false # thread finished as invalid state since RetryableResponse raises.
305
+
306
+ d = create_driver("endpoint #{base_endpoint}/503")
307
+ assert_raise(Fluent::Plugin::HTTPOutput::RetryableResponse) do
308
+ d.run(default_tag: 'test.http', shutdown: false) do
309
+ test_events.each { |event|
310
+ d.feed(event)
311
+ }
312
+ end
313
+ end
314
+
315
+ d.instance_shutdown(log: $log)
316
+ ensure
317
+ Thread.report_on_exception = old_report_on_exception
318
+ end
319
+
320
+ def test_write_with_disabled_unrecoverable
321
+ d = create_driver(%[
322
+ endpoint #{base_endpoint}/404
323
+ error_response_as_unrecoverable false
324
+ ])
325
+ d.run(default_tag: 'test.http', shutdown: false) do
326
+ test_events.each { |event|
327
+ d.feed(event)
328
+ }
329
+ end
330
+ assert_match(/got error response from.*404 Not Found Not Found/, d.instance.log.out.logs.join)
331
+ d.instance_shutdown
332
+ end
333
+
334
+ sub_test_case 'basic auth' do
335
+ setup do
336
+ FileUtils.mkdir_p(TMP_DIR)
337
+ htpd = WEBrick::HTTPAuth::Htpasswd.new(File.join(TMP_DIR, 'dot.htpasswd'))
338
+ htpd.set_passwd(nil, 'test', 'hey')
339
+ authenticator = WEBrick::HTTPAuth::BasicAuth.new(:UserDB => htpd, :Realm => 'test', :Logger => DEFAULT_LOGGER)
340
+ @@auth_handler = Proc.new { |req, res| authenticator.authenticate(req, res) }
341
+ end
342
+
343
+ teardown do
344
+ FileUtils.rm_rf(TMP_DIR)
345
+ end
346
+
347
+ def server_port
348
+ 19881
349
+ end
350
+
351
+ def test_basic_auth
352
+ d = create_driver(config + %[
353
+ <auth>
354
+ method basic
355
+ username test
356
+ password hey
357
+ </auth>
358
+ ])
359
+ d.run(default_tag: 'test.http') do
360
+ test_events.each { |event|
361
+ d.feed(event)
362
+ }
363
+ end
364
+
365
+ result = @@result
366
+ assert_equal 'POST', result.method
367
+ assert_equal 'application/x-ndjson', result.content_type
368
+ assert_equal test_events, result.data
369
+ assert_not_empty result.headers
370
+ end
371
+
372
+ # This test includes `error_response_as_unrecoverable true` behaviour check
373
+ def test_basic_auth_with_invalid_auth
374
+ d = create_driver(config + %[
375
+ <auth>
376
+ method basic
377
+ username ayaya
378
+ password hello?
379
+ </auth>
380
+ ])
381
+ d.run(default_tag: 'test.http', shutdown: false) do
382
+ test_events.each { |event|
383
+ d.feed(event)
384
+ }
385
+ end
386
+ assert_match(/got unrecoverable error/, d.instance.log.out.logs.join)
387
+
388
+ d.instance_shutdown
389
+ end
390
+ end
391
+
392
+ sub_test_case 'HTTPS' do
393
+ def server_port
394
+ 19882
395
+ end
396
+
397
+ def server_config
398
+ config = super
399
+ # WEBrick supports self-generated self-signed certificate
400
+ config[:SSLEnable] = true
401
+ config[:SSLCertName] = [["CN", WEBrick::Utils::getservername]]
402
+ config
403
+ end
404
+
405
+ def http_client(&block)
406
+ super(use_ssl: true, verify_mode: OpenSSL::SSL::VERIFY_NONE, &block)
407
+ end
408
+
409
+ def test_write_with_https
410
+ d = create_driver(%[
411
+ endpoint https://127.0.0.1:#{server_port}/test
412
+ tls_verify_mode none
413
+ ssl_timeout 2s
414
+ ])
415
+ d.run(default_tag: 'test.http') do
416
+ test_events.each { |event|
417
+ d.feed(event)
418
+ }
419
+ end
420
+
421
+ result = @@result
422
+ assert_equal 'POST', result.method
423
+ assert_equal 'application/x-ndjson', result.content_type
424
+ assert_equal test_events, result.data
425
+ assert_not_empty result.headers
426
+ end
427
+ end
428
+ end
@@ -0,0 +1,105 @@
1
+ require_relative '../helper'
2
+ require 'fluent/test/driver/output'
3
+ require 'fluent/plugin/out_null'
4
+
5
+ class NullOutputTest < Test::Unit::TestCase
6
+ def setup
7
+ Fluent::Test.setup
8
+ end
9
+
10
+ def create_driver(conf = "")
11
+ Fluent::Test::Driver::Output.new(Fluent::Plugin::NullOutput).configure(conf)
12
+ end
13
+
14
+ sub_test_case 'non-buffered' do
15
+ test 'configure' do
16
+ assert_nothing_raised do
17
+ create_driver
18
+ end
19
+ end
20
+
21
+ test 'process' do
22
+ d = create_driver
23
+ assert_nothing_raised do
24
+ d.run do
25
+ d.feed("test", Fluent::EventTime.now, {"test" => "null"})
26
+ end
27
+ end
28
+ assert_equal([], d.events(tag: "test"))
29
+ end
30
+ end
31
+
32
+ sub_test_case 'buffered' do
33
+ test 'default chunk limit size is 100' do
34
+ d = create_driver(config_element("ROOT", "", {}, [config_element("buffer")]))
35
+ assert_equal 10 * 1024, d.instance.buffer_config.chunk_limit_size
36
+ assert d.instance.buffer_config.flush_at_shutdown
37
+ assert_equal ['tag'], d.instance.buffer_config.chunk_keys
38
+ assert d.instance.chunk_key_tag
39
+ assert !d.instance.chunk_key_time
40
+ assert_equal [], d.instance.chunk_keys
41
+ end
42
+
43
+ test 'writes standard formatted chunks' do
44
+ d = create_driver(config_element("ROOT", "", {}, [config_element("buffer")]))
45
+ t = event_time("2016-05-23 00:22:13 -0800")
46
+ d.run(default_tag: 'test', flush: true) do
47
+ d.feed(t, {"message" => "null null null"})
48
+ d.feed(t, {"message" => "null null"})
49
+ d.feed(t, {"message" => "null"})
50
+ end
51
+
52
+ assert_equal 3, d.instance.emit_count
53
+ assert_equal 3, d.instance.emit_records
54
+ end
55
+
56
+ test 'check for chunk passed to #write' do
57
+ d = create_driver(config_element("ROOT", "", {}, [config_element("buffer")]))
58
+ data = []
59
+ d.instance.feed_proc = ->(chunk){ data << [chunk.unique_id, chunk.metadata.tag, chunk.read] }
60
+
61
+ t = event_time("2016-05-23 00:22:13 -0800")
62
+ d.run(default_tag: 'test', flush: true) do
63
+ d.feed(t, {"message" => "null null null"})
64
+ d.feed(t, {"message" => "null null"})
65
+ d.feed(t, {"message" => "null"})
66
+ end
67
+
68
+ assert_equal 1, data.size
69
+ _, tag, binary = data.first
70
+ events = []
71
+ Fluent::MessagePackFactory.unpacker.feed_each(binary){|obj| events << obj }
72
+ assert_equal 'test', tag
73
+ assert_equal [ [t, {"message" => "null null null"}], [t, {"message" => "null null"}], [t, {"message" => "null"}] ], events
74
+ end
75
+
76
+ test 'check for chunk passed to #try_write' do
77
+ d = create_driver(config_element("ROOT", "", {}, [config_element("buffer")]))
78
+ data = []
79
+ d.instance.feed_proc = ->(chunk){ data << [chunk.unique_id, chunk.metadata.tag, chunk.read] }
80
+ d.instance.delayed = true
81
+
82
+ t = event_time("2016-05-23 00:22:13 -0800")
83
+ d.run(default_tag: 'test', flush: true, wait_flush_completion: false, shutdown: false) do
84
+ d.feed(t, {"message" => "null null null"})
85
+ d.feed(t, {"message" => "null null"})
86
+ d.feed(t, {"message" => "null"})
87
+ end
88
+
89
+ assert_equal 1, data.size
90
+ chunk_id, tag, binary = data.first
91
+ events = []
92
+ Fluent::MessagePackFactory.unpacker.feed_each(binary){|obj| events << obj }
93
+ assert_equal 'test', tag
94
+ assert_equal [ [t, {"message" => "null null null"}], [t, {"message" => "null null"}], [t, {"message" => "null"}] ], events
95
+
96
+ assert_equal [chunk_id], d.instance.buffer.dequeued.keys
97
+
98
+ d.instance.commit_write(chunk_id)
99
+
100
+ assert_equal [], d.instance.buffer.dequeued.keys
101
+
102
+ d.instance_shutdown
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,28 @@
1
+ require_relative '../helper'
2
+ require 'fluent/test/driver/output'
3
+ require 'fluent/plugin/out_relabel'
4
+
5
+ class RelabelOutputTest < Test::Unit::TestCase
6
+ def setup
7
+ Fluent::Test.setup
8
+ end
9
+
10
+ def default_config
11
+ config_element('ROOT', '', {"@type"=>"relabel", "@label"=>"@RELABELED"})
12
+ end
13
+
14
+ def create_driver(conf = default_config)
15
+ Fluent::Test::Driver::Output.new(Fluent::Plugin::RelabelOutput).configure(conf)
16
+ end
17
+
18
+ def test_process
19
+ d = create_driver
20
+
21
+ time = event_time("2011-01-02 13:14:15 UTC")
22
+ d.run(default_tag: 'test') do
23
+ d.feed(time, {"a"=>1})
24
+ d.feed(time, {"a"=>2})
25
+ end
26
+ assert_equal [["test", time, {"a"=>1}], ["test", time, {"a"=>2}]], d.events
27
+ end
28
+ end
@@ -0,0 +1,146 @@
1
+ require_relative '../helper'
2
+ require 'fluent/test/driver/multi_output'
3
+ require 'fluent/plugin/out_roundrobin'
4
+
5
+ class RoundRobinOutputTest < Test::Unit::TestCase
6
+ class << self
7
+ def startup
8
+ $LOAD_PATH.unshift File.expand_path(File.join(File.dirname(__FILE__), '..', 'scripts'))
9
+ require 'fluent/plugin/out_test'
10
+ require 'fluent/plugin/out_test2'
11
+ end
12
+
13
+ def shutdown
14
+ $LOAD_PATH.shift
15
+ end
16
+ end
17
+
18
+ def setup
19
+ Fluent::Test.setup
20
+ end
21
+
22
+ CONFIG = %[
23
+ <store>
24
+ @type test
25
+ name c0
26
+ </store>
27
+ <store>
28
+ @type test2
29
+ name c1
30
+ </store>
31
+ <store>
32
+ @type test
33
+ name c2
34
+ </store>
35
+ ]
36
+ CONFIG_WITH_WEIGHT = %[
37
+ <store>
38
+ @type test
39
+ name c0
40
+ weight 3
41
+ </store>
42
+ <store>
43
+ @type test2
44
+ name c1
45
+ weight 3
46
+ </store>
47
+ <store>
48
+ @type test
49
+ name c2
50
+ </store>
51
+ ]
52
+
53
+ def create_driver(conf = CONFIG)
54
+ Fluent::Test::Driver::MultiOutput.new(Fluent::Plugin::RoundRobinOutput).configure(conf)
55
+ end
56
+
57
+ def test_configure
58
+ d = create_driver
59
+
60
+ outputs = d.instance.outputs
61
+ assert_equal 3, outputs.size
62
+
63
+ assert_equal Fluent::Plugin::TestOutput, outputs[0].class
64
+ assert_equal Fluent::Plugin::Test2Output, outputs[1].class
65
+ assert_equal Fluent::Plugin::TestOutput, outputs[2].class
66
+
67
+ assert !outputs[0].has_router?
68
+ assert outputs[1].has_router?
69
+ assert outputs[1].router
70
+ assert !outputs[2].has_router?
71
+
72
+ assert_equal "c0", outputs[0].name
73
+ assert_equal "c1", outputs[1].name
74
+ assert_equal "c2", outputs[2].name
75
+
76
+ weights = d.instance.weights
77
+ assert_equal 3, weights.size
78
+ assert_equal 1, weights[0]
79
+ assert_equal 1, weights[1]
80
+ assert_equal 1, weights[2]
81
+
82
+ d = create_driver(CONFIG_WITH_WEIGHT)
83
+
84
+ outputs = d.instance.outputs
85
+ assert_equal 3, outputs.size
86
+
87
+ assert_equal Fluent::Plugin::TestOutput, outputs[0].class
88
+ assert_equal Fluent::Plugin::Test2Output, outputs[1].class
89
+ assert_equal Fluent::Plugin::TestOutput, outputs[2].class
90
+
91
+ assert_equal "c0", outputs[0].name
92
+ assert_equal "c1", outputs[1].name
93
+ assert_equal "c2", outputs[2].name
94
+
95
+ weights = d.instance.weights
96
+ assert_equal 3, weights.size
97
+ assert_equal 3, weights[0]
98
+ assert_equal 3, weights[1]
99
+ assert_equal 1, weights[2]
100
+ end
101
+
102
+ def test_events_feeded_to_plugins_by_roundrobin
103
+ d = create_driver
104
+
105
+ time = event_time("2011-01-02 13:14:15 UTC")
106
+ d.run(default_tag: 'test') do
107
+ d.feed(time, {"a" => 1})
108
+ d.feed(time, {"a" => 2})
109
+ d.feed(time, {"a" => 3})
110
+ d.feed(time, {"a" => 4})
111
+ end
112
+
113
+ os = d.instance.outputs
114
+
115
+ assert_equal [
116
+ [time, {"a"=>1}],
117
+ [time, {"a"=>4}],
118
+ ], os[0].events
119
+
120
+ assert_equal [
121
+ [time, {"a"=>2}],
122
+ ], os[1].events
123
+
124
+ assert_equal [
125
+ [time, {"a"=>3}],
126
+ ], os[2].events
127
+ end
128
+
129
+ def test_events_feeded_with_specified_weights
130
+ d = create_driver(CONFIG_WITH_WEIGHT)
131
+
132
+ time = event_time("2011-01-02 13:14:15 UTC")
133
+ d.run(default_tag: 'test') do
134
+ 14.times do |i|
135
+ d.feed(time, {"a" => i})
136
+ end
137
+ end
138
+
139
+ os = d.instance.outputs
140
+
141
+ assert_equal 6, os[0].events.size # weight=3
142
+ assert_equal 6, os[1].events.size # weight=3
143
+ assert_equal 2, os[2].events.size # weight=1
144
+ end
145
+ end
146
+