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,187 @@
1
+ #
2
+ # Fluent
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require 'fluent/configurable'
18
+ require 'fluent/config/element'
19
+
20
+ module Fluent
21
+ class SystemConfig
22
+ include Configurable
23
+
24
+ SYSTEM_CONFIG_PARAMETERS = [
25
+ :workers, :root_dir, :log_level,
26
+ :suppress_repeated_stacktrace, :emit_error_log_interval, :suppress_config_dump,
27
+ :log_event_verbose, :ignore_repeated_log_interval, :ignore_same_log_interval,
28
+ :without_source, :rpc_endpoint, :enable_get_dump, :process_name,
29
+ :file_permission, :dir_permission, :counter_server, :counter_client,
30
+ :strict_config_value, :enable_msgpack_time_support, :disable_shared_socket,
31
+ :metrics, :enable_input_metrics, :enable_size_metrics
32
+ ]
33
+
34
+ config_param :workers, :integer, default: 1
35
+ config_param :root_dir, :string, default: nil
36
+ config_param :log_level, :enum, list: [:trace, :debug, :info, :warn, :error, :fatal], default: 'info'
37
+ config_param :suppress_repeated_stacktrace, :bool, default: nil
38
+ config_param :ignore_repeated_log_interval, :time, default: nil
39
+ config_param :ignore_same_log_interval, :time, default: nil
40
+ config_param :emit_error_log_interval, :time, default: nil
41
+ config_param :suppress_config_dump, :bool, default: nil
42
+ config_param :log_event_verbose, :bool, default: nil
43
+ config_param :without_source, :bool, default: nil
44
+ config_param :rpc_endpoint, :string, default: nil
45
+ config_param :enable_get_dump, :bool, default: nil
46
+ config_param :process_name, :string, default: nil
47
+ config_param :strict_config_value, :bool, default: nil
48
+ config_param :enable_msgpack_time_support, :bool, default: nil
49
+ config_param :disable_shared_socket, :bool, default: nil
50
+ config_param :enable_input_metrics, :bool, default: nil
51
+ config_param :enable_size_metrics, :bool, default: nil
52
+ config_param :file_permission, default: nil do |v|
53
+ v.to_i(8)
54
+ end
55
+ config_param :dir_permission, default: nil do |v|
56
+ v.to_i(8)
57
+ end
58
+ config_section :log, required: false, init: true, multi: false do
59
+ config_param :format, :enum, list: [:text, :json], default: :text
60
+ config_param :time_format, :string, default: '%Y-%m-%d %H:%M:%S %z'
61
+ config_param :rotate_age, default: nil do |v|
62
+ if Fluent::Log::LOG_ROTATE_AGE.include?(v)
63
+ v.to_sym
64
+ else
65
+ begin
66
+ Integer(v)
67
+ rescue ArgumentError => e
68
+ raise Fluent::ConfigError, e.message
69
+ else
70
+ v.to_i
71
+ end
72
+ end
73
+ end
74
+ config_param :rotate_size, :size, default: nil
75
+ end
76
+
77
+ config_section :counter_server, multi: false do
78
+ desc 'scope name of counter server'
79
+ config_param :scope, :string
80
+
81
+ desc 'the port of counter server to listen to'
82
+ config_param :port, :integer, default: nil
83
+ desc 'the bind address of counter server to listen to'
84
+ config_param :bind, :string, default: nil
85
+
86
+ desc 'backup file path of counter values'
87
+ config_param :backup_path, :string
88
+ end
89
+
90
+ config_section :counter_client, multi: false do
91
+ desc 'the port of counter server'
92
+ config_param :port, :integer, default: nil
93
+ desc 'the IP address or hostname of counter server'
94
+ config_param :host, :string
95
+ desc 'the timeout of each operation'
96
+ config_param :timeout, :time, default: nil
97
+ end
98
+
99
+ config_section :metrics, multi: false do
100
+ config_param :@type, :string, default: "local"
101
+ config_param :labels, :hash, default: {}
102
+ end
103
+
104
+ def self.create(conf, strict_config_value=false)
105
+ systems = conf.elements(name: 'system')
106
+ return SystemConfig.new if systems.empty?
107
+ raise Fluent::ConfigError, "<system> is duplicated. <system> should be only one" if systems.size > 1
108
+
109
+ SystemConfig.new(systems.first, strict_config_value)
110
+ end
111
+
112
+ def self.blank_system_config
113
+ Fluent::Config::Element.new('<SYSTEM>', '', {}, [])
114
+ end
115
+
116
+ def self.overwrite_system_config(hash)
117
+ older = defined?($_system_config) ? $_system_config : nil
118
+ begin
119
+ $_system_config = SystemConfig.new(Fluent::Config::Element.new('system', '', hash, []))
120
+ yield
121
+ ensure
122
+ $_system_config = older
123
+ end
124
+ end
125
+
126
+ def initialize(conf=nil, strict_config_value=false)
127
+ super()
128
+ conf ||= SystemConfig.blank_system_config
129
+ configure(conf, strict_config_value)
130
+ end
131
+
132
+ def configure(conf, strict_config_value=false)
133
+ strict = strict_config_value
134
+ if !strict && conf && conf.has_key?("strict_config_value")
135
+ strict = Fluent::Config.bool_value(conf["strict_config_value"])
136
+ end
137
+
138
+ begin
139
+ super(conf, strict)
140
+ rescue ConfigError => e
141
+ $log.error "config error in:\n#{conf}"
142
+ $log.error 'config error', error: e
143
+ $log.debug_backtrace
144
+ exit!(1)
145
+ end
146
+
147
+ @log_level = Log.str_to_level(@log_level.to_s) if @log_level
148
+ end
149
+
150
+ def dup
151
+ s = SystemConfig.new
152
+ SYSTEM_CONFIG_PARAMETERS.each do |param|
153
+ s.__send__("#{param}=", instance_variable_get("@#{param}"))
154
+ end
155
+ s
156
+ end
157
+
158
+ def overwrite_variables(**opt)
159
+ SYSTEM_CONFIG_PARAMETERS.each do |param|
160
+ if opt.key?(param) && !opt[param].nil? && instance_variable_defined?("@#{param}")
161
+ instance_variable_set("@#{param}", opt[param])
162
+ end
163
+ end
164
+ end
165
+
166
+ module Mixin
167
+ def system_config
168
+ require 'fluent/engine'
169
+ unless defined?($_system_config)
170
+ $_system_config = nil
171
+ end
172
+ (instance_variable_defined?("@_system_config") && @_system_config) ||
173
+ $_system_config || Fluent::Engine.system_config
174
+ end
175
+
176
+ def system_config_override(opts={})
177
+ require 'fluent/engine'
178
+ if !instance_variable_defined?("@_system_config") || @_system_config.nil?
179
+ @_system_config = (defined?($_system_config) && $_system_config ? $_system_config : Fluent::Engine.system_config).dup
180
+ end
181
+ opts.each_pair do |key, value|
182
+ @_system_config.__send__(:"#{key.to_s}=", value)
183
+ end
184
+ end
185
+ end
186
+ end
187
+ end
@@ -0,0 +1,78 @@
1
+ #
2
+ # Fluentd
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require 'fluent/config'
18
+ require 'fluent/engine'
19
+ require 'fluent/system_config'
20
+ require 'fluent/test/log'
21
+ require 'serverengine'
22
+
23
+ module Fluent
24
+ module Test
25
+ class TestDriver
26
+ include ::Test::Unit::Assertions
27
+
28
+ def initialize(klass, &block)
29
+ if klass.is_a?(Class)
30
+ if block
31
+ # Create new class for test w/ overwritten methods
32
+ # klass.dup is worse because its ancestors does NOT include original class name
33
+ klass_name = klass.name
34
+ klass = Class.new(klass)
35
+ klass.define_singleton_method("name") { klass_name }
36
+ klass.module_eval(&block)
37
+ end
38
+ @instance = klass.new
39
+ else
40
+ @instance = klass
41
+ end
42
+ @instance.router = Engine.root_agent.event_router
43
+ @instance.log = TestLogger.new
44
+ Engine.root_agent.instance_variable_set(:@log, @instance.log)
45
+
46
+ @config = Config.new
47
+ end
48
+
49
+ attr_reader :instance, :config
50
+
51
+ def configure(str, use_v1 = false)
52
+ if str.is_a?(Fluent::Config::Element)
53
+ @config = str
54
+ else
55
+ @config = Config.parse(str, "(test)", "(test_dir)", use_v1)
56
+ end
57
+ if label_name = @config['@label']
58
+ Engine.root_agent.add_label(label_name)
59
+ end
60
+ @instance.configure(@config)
61
+ self
62
+ end
63
+
64
+ # num_waits is for checking thread status. This will be removed after improved plugin API
65
+ def run(num_waits = 10, &block)
66
+ @instance.start
67
+ @instance.after_start
68
+ begin
69
+ # wait until thread starts
70
+ num_waits.times { sleep 0.05 }
71
+ return yield
72
+ ensure
73
+ @instance.shutdown
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,225 @@
1
+ #
2
+ # Fluentd
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require 'fluent/config'
18
+ require 'fluent/config/element'
19
+ require 'fluent/log'
20
+ require 'fluent/clock'
21
+
22
+ require 'serverengine/socket_manager'
23
+ require 'fileutils'
24
+ require 'timeout'
25
+ require 'logger'
26
+
27
+ module Fluent
28
+ module Test
29
+ module Driver
30
+ class TestTimedOut < RuntimeError; end
31
+
32
+ class Base
33
+ attr_reader :instance, :logs
34
+
35
+ DEFAULT_TIMEOUT = 300
36
+
37
+ def initialize(klass, opts: {}, &block)
38
+ if klass.is_a?(Class)
39
+ @instance = klass.new
40
+ if block
41
+ @instance.singleton_class.module_eval(&block)
42
+ @instance.send(:initialize)
43
+ end
44
+ else
45
+ @instance = klass
46
+ end
47
+ @instance.under_plugin_development = true
48
+
49
+ @socket_manager_server = nil
50
+
51
+ @logs = []
52
+
53
+ @run_post_conditions = []
54
+ @run_breaking_conditions = []
55
+ @broken = false
56
+ end
57
+
58
+ def configure(conf, syntax: :v1)
59
+ raise NotImplementedError
60
+ end
61
+
62
+ def end_if(&block)
63
+ raise ArgumentError, "block is not given" unless block_given?
64
+ @run_post_conditions << block
65
+ end
66
+
67
+ def break_if(&block)
68
+ raise ArgumentError, "block is not given" unless block_given?
69
+ @run_breaking_conditions << block
70
+ end
71
+
72
+ def broken?
73
+ @broken
74
+ end
75
+
76
+ def run(timeout: nil, start: true, shutdown: true, &block)
77
+ instance_start if start
78
+
79
+ timeout ||= DEFAULT_TIMEOUT
80
+ stop_at = Fluent::Clock.now + timeout
81
+ @run_breaking_conditions << ->(){ Fluent::Clock.now >= stop_at }
82
+
83
+ if !block_given? && @run_post_conditions.empty? && @run_breaking_conditions.empty?
84
+ raise ArgumentError, "no stop conditions nor block specified"
85
+ end
86
+
87
+ sleep_with_watching_threads = ->(){
88
+ if @instance.respond_to?(:_threads)
89
+ @instance._threads.values.each{|t| t.join(0) }
90
+ end
91
+ sleep 0.1
92
+ }
93
+
94
+ begin
95
+ retval = run_actual(timeout: timeout, &block)
96
+ sleep_with_watching_threads.call until stop?
97
+ retval
98
+ ensure
99
+ instance_shutdown if shutdown
100
+ end
101
+ end
102
+
103
+ def instance_start
104
+ if @instance.respond_to?(:server_wait_until_start)
105
+ @socket_manager_path = ServerEngine::SocketManager::Server.generate_path
106
+ if @socket_manager_path.is_a?(String) && File.exist?(@socket_manager_path)
107
+ FileUtils.rm_f @socket_manager_path
108
+ end
109
+ @socket_manager_server = ServerEngine::SocketManager::Server.open(@socket_manager_path)
110
+ ENV['SERVERENGINE_SOCKETMANAGER_PATH'] = @socket_manager_path.to_s
111
+ end
112
+
113
+ unless @instance.started?
114
+ @instance.start
115
+ end
116
+ unless @instance.after_started?
117
+ @instance.after_start
118
+ end
119
+
120
+ if @instance.respond_to?(:thread_wait_until_start)
121
+ @instance.thread_wait_until_start
122
+ end
123
+
124
+ if @instance.respond_to?(:event_loop_wait_until_start)
125
+ @instance.event_loop_wait_until_start
126
+ end
127
+
128
+ instance_hook_after_started
129
+ end
130
+
131
+ def instance_hook_after_started
132
+ # insert hooks for tests available after instance.start
133
+ end
134
+
135
+ def instance_hook_before_stopped
136
+ # same with above
137
+ end
138
+
139
+ def instance_shutdown(log: Logger.new($stdout))
140
+ instance_hook_before_stopped
141
+
142
+ show_errors_if_exists = ->(label, block){
143
+ begin
144
+ block.call
145
+ rescue => e
146
+ log.error "unexpected error while #{label}, #{e.class}:#{e.message}"
147
+ e.backtrace.each do |bt|
148
+ log.error "\t#{bt}"
149
+ end
150
+ end
151
+ }
152
+
153
+ show_errors_if_exists.call(:stop, ->(){ @instance.stop unless @instance.stopped? })
154
+ show_errors_if_exists.call(:before_shutdown, ->(){ @instance.before_shutdown unless @instance.before_shutdown? })
155
+ show_errors_if_exists.call(:shutdown, ->(){ @instance.shutdown unless @instance.shutdown? })
156
+ show_errors_if_exists.call(:after_shutdown, ->(){ @instance.after_shutdown unless @instance.after_shutdown? })
157
+
158
+ if @instance.respond_to?(:server_wait_until_stop)
159
+ @instance.server_wait_until_stop
160
+ end
161
+
162
+ if @instance.respond_to?(:event_loop_wait_until_stop)
163
+ @instance.event_loop_wait_until_stop
164
+ end
165
+
166
+ show_errors_if_exists.call(:close, ->(){ @instance.close unless @instance.closed? })
167
+
168
+ if @instance.respond_to?(:thread_wait_until_stop)
169
+ @instance.thread_wait_until_stop
170
+ end
171
+
172
+ show_errors_if_exists.call(:terminate, ->(){ @instance.terminate unless @instance.terminated? })
173
+
174
+ if @socket_manager_server
175
+ @socket_manager_server.close
176
+ if @socket_manager_server.is_a?(String) && File.exist?(@socket_manager_path)
177
+ FileUtils.rm_f @socket_manager_path
178
+ end
179
+ end
180
+ end
181
+
182
+ def run_actual(timeout: DEFAULT_TIMEOUT, &block)
183
+ if @instance.respond_to?(:_threads)
184
+ sleep 0.1 until @instance._threads.values.all?(&:alive?)
185
+ end
186
+
187
+ if @instance.respond_to?(:event_loop_running?)
188
+ sleep 0.1 until @instance.event_loop_running?
189
+ end
190
+
191
+ if @instance.respond_to?(:_child_process_processes)
192
+ sleep 0.1 until @instance._child_process_processes.values.all?{|pinfo| pinfo.alive }
193
+ end
194
+
195
+ return_value = nil
196
+ begin
197
+ Timeout.timeout(timeout * 2) do |sec|
198
+ return_value = block.call if block_given?
199
+ end
200
+ rescue Timeout::Error
201
+ raise TestTimedOut, "Test case timed out with hard limit."
202
+ end
203
+ return_value
204
+ end
205
+
206
+ def stop?
207
+ # Should stop running if post conditions are not registered.
208
+ return true unless @run_post_conditions || @run_post_conditions.empty?
209
+
210
+ # Should stop running if all of the post conditions are true.
211
+ return true if @run_post_conditions.all? {|proc| proc.call }
212
+
213
+ # Should stop running if some of the breaking conditions is true.
214
+ # In this case, some post conditions may be not true.
215
+ if @run_breaking_conditions.any? {|proc| proc.call }
216
+ @broken = true
217
+ return true
218
+ end
219
+
220
+ false
221
+ end
222
+ end
223
+ end
224
+ end
225
+ end
@@ -0,0 +1,83 @@
1
+ #
2
+ # Fluentd
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require 'fluent/test/driver/base'
18
+
19
+ require 'fluent/plugin/base'
20
+ require 'fluent/plugin_id'
21
+ require 'fluent/log'
22
+ require 'fluent/plugin_helper'
23
+
24
+ module Fluent
25
+ module Test
26
+ module Driver
27
+ class OwnerDummy < Fluent::Plugin::Base
28
+ include PluginId
29
+ include PluginLoggerMixin
30
+ include PluginHelper::Mixin
31
+ end
32
+
33
+ class BaseOwned < Base
34
+ attr_accessor :section_name
35
+
36
+ def initialize(klass, opts: {}, &block)
37
+ super
38
+
39
+ owner = OwnerDummy.new
40
+ if opts
41
+ owner.system_config_override(opts)
42
+ end
43
+ owner.log = TestLogger.new
44
+
45
+ if @instance.respond_to?(:owner=)
46
+ @instance.owner = owner
47
+ if opts
48
+ @instance.system_config_override(opts)
49
+ end
50
+ end
51
+
52
+ @logs = owner.log.out.logs
53
+ @section_name = ''
54
+ end
55
+
56
+ def configure(conf)
57
+ if conf.is_a?(Fluent::Config::Element)
58
+ @config = conf
59
+ elsif conf.is_a?(Hash)
60
+ @config = Fluent::Config::Element.new(@section_name, "", Hash[conf.map{|k,v| [k.to_s, v]}], [])
61
+ else
62
+ @config = Fluent::Config.parse(conf, @section_name, "", syntax: :v1)
63
+ end
64
+ @instance.configure(@config)
65
+ self
66
+ end
67
+
68
+ # this is special method for v0 and should be deleted
69
+ def configure_v0(conf)
70
+ if conf.is_a?(Fluent::Config::Element)
71
+ @config = conf
72
+ elsif conf.is_a?(Hash)
73
+ @config = Fluent::Config::Element.new(@section_name, "", Hash[conf.map{|k,v| [k.to_s, v]}], [])
74
+ else
75
+ @config = Fluent::Config.parse(conf, @section_name, "", syntax: :v0)
76
+ end
77
+ @instance.configure(@config)
78
+ self
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,135 @@
1
+ #
2
+ # Fluentd
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require 'fluent/test/driver/base'
18
+ require 'fluent/test/driver/test_event_router'
19
+
20
+ module Fluent
21
+ module Test
22
+ module Driver
23
+ class BaseOwner < Base
24
+ def initialize(klass, opts: {}, &block)
25
+ super
26
+
27
+ if opts
28
+ @instance.system_config_override(opts)
29
+ end
30
+ @instance.log = TestLogger.new
31
+ @logs = @instance.log.out.logs
32
+
33
+ @event_streams = nil
34
+ @error_events = nil
35
+ end
36
+
37
+ def configure(conf, syntax: :v1)
38
+ if conf.is_a?(Fluent::Config::Element)
39
+ @config = conf
40
+ else
41
+ @config = Config.parse(conf, "(test)", "(test_dir)", syntax: syntax)
42
+ end
43
+
44
+ if @instance.respond_to?(:router=)
45
+ @event_streams = []
46
+ @error_events = []
47
+
48
+ driver = self
49
+ mojule = Module.new do
50
+ define_method(:event_emitter_router) do |label_name|
51
+ TestEventRouter.new(driver)
52
+ end
53
+ end
54
+ @instance.singleton_class.prepend mojule
55
+ end
56
+
57
+ @instance.configure(@config)
58
+ self
59
+ end
60
+
61
+ Emit = Struct.new(:tag, :es)
62
+ ErrorEvent = Struct.new(:tag, :time, :record, :error)
63
+
64
+ # via TestEventRouter
65
+ def emit_event_stream(tag, es)
66
+ @event_streams << Emit.new(tag, es)
67
+ end
68
+
69
+ def emit_error_event(tag, time, record, error)
70
+ @error_events << ErrorEvent.new(tag, time, record, error)
71
+ end
72
+
73
+ def events(tag: nil)
74
+ if block_given?
75
+ event_streams(tag: tag) do |t, es|
76
+ es.each do |time, record|
77
+ yield t, time, record
78
+ end
79
+ end
80
+ else
81
+ list = []
82
+ event_streams(tag: tag) do |t, es|
83
+ es.each do |time, record|
84
+ list << [t, time, record]
85
+ end
86
+ end
87
+ list
88
+ end
89
+ end
90
+
91
+ def event_streams(tag: nil)
92
+ return [] if @event_streams.nil?
93
+ selected = @event_streams.select{|e| tag.nil? ? true : e.tag == tag }
94
+ if block_given?
95
+ selected.each do |e|
96
+ yield e.tag, e.es
97
+ end
98
+ else
99
+ selected.map{|e| [e.tag, e.es] }
100
+ end
101
+ end
102
+
103
+ def emit_count
104
+ @event_streams.size
105
+ end
106
+
107
+ def record_count
108
+ @event_streams.reduce(0) {|a, e| a + e.es.size }
109
+ end
110
+
111
+ def error_events(tag: nil)
112
+ selected = @error_events.select{|e| tag.nil? ? true : e.tag == tag }
113
+ if block_given?
114
+ selected.each do |e|
115
+ yield e.tag, e.time, e.record, e.error
116
+ end
117
+ else
118
+ selected.map{|e| [e.tag, e.time, e.record, e.error] }
119
+ end
120
+ end
121
+
122
+ def run(expect_emits: nil, expect_records: nil, timeout: nil, start: true, shutdown: true, &block)
123
+ if expect_emits
124
+ @run_post_conditions << ->(){ emit_count >= expect_emits }
125
+ end
126
+ if expect_records
127
+ @run_post_conditions << ->(){ record_count >= expect_records }
128
+ end
129
+
130
+ super(timeout: timeout, start: start, shutdown: shutdown, &block)
131
+ end
132
+ end
133
+ end
134
+ end
135
+ end