dtomasgu-fluentd 1.14.7.pre.dev

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (564) 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 +34 -0
  12. data/.github/workflows/stale-actions.yml +22 -0
  13. data/.github/workflows/windows-test.yaml +49 -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 +2453 -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 +76 -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 +57 -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 +180 -0
  88. data/lib/fluent/command/debug.rb +103 -0
  89. data/lib/fluent/command/fluentd.rb +388 -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 +44 -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/yaml_parser/fluent_value.rb +47 -0
  125. data/lib/fluent/config/yaml_parser/loader.rb +91 -0
  126. data/lib/fluent/config/yaml_parser/parser.rb +166 -0
  127. data/lib/fluent/config/yaml_parser/section_builder.rb +107 -0
  128. data/lib/fluent/config/yaml_parser.rb +56 -0
  129. data/lib/fluent/config.rb +89 -0
  130. data/lib/fluent/configurable.rb +201 -0
  131. data/lib/fluent/counter/base_socket.rb +44 -0
  132. data/lib/fluent/counter/client.rb +297 -0
  133. data/lib/fluent/counter/error.rb +86 -0
  134. data/lib/fluent/counter/mutex_hash.rb +163 -0
  135. data/lib/fluent/counter/server.rb +273 -0
  136. data/lib/fluent/counter/store.rb +205 -0
  137. data/lib/fluent/counter/validator.rb +145 -0
  138. data/lib/fluent/counter.rb +23 -0
  139. data/lib/fluent/daemon.rb +15 -0
  140. data/lib/fluent/daemonizer.rb +88 -0
  141. data/lib/fluent/engine.rb +253 -0
  142. data/lib/fluent/env.rb +40 -0
  143. data/lib/fluent/error.rb +34 -0
  144. data/lib/fluent/event.rb +326 -0
  145. data/lib/fluent/event_router.rb +315 -0
  146. data/lib/fluent/ext_monitor_require.rb +28 -0
  147. data/lib/fluent/filter.rb +21 -0
  148. data/lib/fluent/fluent_log_event_router.rb +141 -0
  149. data/lib/fluent/formatter.rb +23 -0
  150. data/lib/fluent/input.rb +21 -0
  151. data/lib/fluent/label.rb +46 -0
  152. data/lib/fluent/load.rb +34 -0
  153. data/lib/fluent/log.rb +713 -0
  154. data/lib/fluent/match.rb +187 -0
  155. data/lib/fluent/mixin.rb +31 -0
  156. data/lib/fluent/msgpack_factory.rb +106 -0
  157. data/lib/fluent/oj_options.rb +62 -0
  158. data/lib/fluent/output.rb +29 -0
  159. data/lib/fluent/output_chain.rb +23 -0
  160. data/lib/fluent/parser.rb +23 -0
  161. data/lib/fluent/plugin/bare_output.rb +104 -0
  162. data/lib/fluent/plugin/base.rb +197 -0
  163. data/lib/fluent/plugin/buf_file.rb +213 -0
  164. data/lib/fluent/plugin/buf_file_single.rb +225 -0
  165. data/lib/fluent/plugin/buf_memory.rb +34 -0
  166. data/lib/fluent/plugin/buffer/chunk.rb +240 -0
  167. data/lib/fluent/plugin/buffer/file_chunk.rb +413 -0
  168. data/lib/fluent/plugin/buffer/file_single_chunk.rb +311 -0
  169. data/lib/fluent/plugin/buffer/memory_chunk.rb +91 -0
  170. data/lib/fluent/plugin/buffer.rb +918 -0
  171. data/lib/fluent/plugin/compressable.rb +96 -0
  172. data/lib/fluent/plugin/exec_util.rb +22 -0
  173. data/lib/fluent/plugin/file_util.rb +22 -0
  174. data/lib/fluent/plugin/file_wrapper.rb +132 -0
  175. data/lib/fluent/plugin/filter.rb +127 -0
  176. data/lib/fluent/plugin/filter_grep.rb +189 -0
  177. data/lib/fluent/plugin/filter_parser.rb +130 -0
  178. data/lib/fluent/plugin/filter_record_transformer.rb +324 -0
  179. data/lib/fluent/plugin/filter_stdout.rb +53 -0
  180. data/lib/fluent/plugin/formatter.rb +75 -0
  181. data/lib/fluent/plugin/formatter_csv.rb +78 -0
  182. data/lib/fluent/plugin/formatter_hash.rb +35 -0
  183. data/lib/fluent/plugin/formatter_json.rb +59 -0
  184. data/lib/fluent/plugin/formatter_ltsv.rb +44 -0
  185. data/lib/fluent/plugin/formatter_msgpack.rb +33 -0
  186. data/lib/fluent/plugin/formatter_out_file.rb +53 -0
  187. data/lib/fluent/plugin/formatter_single_value.rb +36 -0
  188. data/lib/fluent/plugin/formatter_stdout.rb +76 -0
  189. data/lib/fluent/plugin/formatter_tsv.rb +40 -0
  190. data/lib/fluent/plugin/in_debug_agent.rb +71 -0
  191. data/lib/fluent/plugin/in_dummy.rb +18 -0
  192. data/lib/fluent/plugin/in_exec.rb +110 -0
  193. data/lib/fluent/plugin/in_forward.rb +473 -0
  194. data/lib/fluent/plugin/in_gc_stat.rb +72 -0
  195. data/lib/fluent/plugin/in_http.rb +677 -0
  196. data/lib/fluent/plugin/in_monitor_agent.rb +412 -0
  197. data/lib/fluent/plugin/in_object_space.rb +93 -0
  198. data/lib/fluent/plugin/in_sample.rb +141 -0
  199. data/lib/fluent/plugin/in_syslog.rb +276 -0
  200. data/lib/fluent/plugin/in_tail/group_watch.rb +204 -0
  201. data/lib/fluent/plugin/in_tail/position_file.rb +255 -0
  202. data/lib/fluent/plugin/in_tail.rb +1247 -0
  203. data/lib/fluent/plugin/in_tcp.rb +181 -0
  204. data/lib/fluent/plugin/in_udp.rb +92 -0
  205. data/lib/fluent/plugin/in_unix.rb +195 -0
  206. data/lib/fluent/plugin/input.rb +75 -0
  207. data/lib/fluent/plugin/metrics.rb +119 -0
  208. data/lib/fluent/plugin/metrics_local.rb +96 -0
  209. data/lib/fluent/plugin/multi_output.rb +195 -0
  210. data/lib/fluent/plugin/out_copy.rb +120 -0
  211. data/lib/fluent/plugin/out_exec.rb +105 -0
  212. data/lib/fluent/plugin/out_exec_filter.rb +319 -0
  213. data/lib/fluent/plugin/out_file.rb +334 -0
  214. data/lib/fluent/plugin/out_forward/ack_handler.rb +161 -0
  215. data/lib/fluent/plugin/out_forward/connection_manager.rb +113 -0
  216. data/lib/fluent/plugin/out_forward/error.rb +28 -0
  217. data/lib/fluent/plugin/out_forward/failure_detector.rb +84 -0
  218. data/lib/fluent/plugin/out_forward/handshake_protocol.rb +125 -0
  219. data/lib/fluent/plugin/out_forward/load_balancer.rb +114 -0
  220. data/lib/fluent/plugin/out_forward/socket_cache.rb +142 -0
  221. data/lib/fluent/plugin/out_forward.rb +826 -0
  222. data/lib/fluent/plugin/out_http.rb +280 -0
  223. data/lib/fluent/plugin/out_null.rb +74 -0
  224. data/lib/fluent/plugin/out_relabel.rb +32 -0
  225. data/lib/fluent/plugin/out_roundrobin.rb +84 -0
  226. data/lib/fluent/plugin/out_secondary_file.rb +131 -0
  227. data/lib/fluent/plugin/out_stdout.rb +74 -0
  228. data/lib/fluent/plugin/out_stream.rb +130 -0
  229. data/lib/fluent/plugin/output.rb +1566 -0
  230. data/lib/fluent/plugin/owned_by_mixin.rb +42 -0
  231. data/lib/fluent/plugin/parser.rb +274 -0
  232. data/lib/fluent/plugin/parser_apache.rb +28 -0
  233. data/lib/fluent/plugin/parser_apache2.rb +88 -0
  234. data/lib/fluent/plugin/parser_apache_error.rb +26 -0
  235. data/lib/fluent/plugin/parser_csv.rb +114 -0
  236. data/lib/fluent/plugin/parser_json.rb +96 -0
  237. data/lib/fluent/plugin/parser_ltsv.rb +51 -0
  238. data/lib/fluent/plugin/parser_msgpack.rb +50 -0
  239. data/lib/fluent/plugin/parser_multiline.rb +152 -0
  240. data/lib/fluent/plugin/parser_nginx.rb +28 -0
  241. data/lib/fluent/plugin/parser_none.rb +36 -0
  242. data/lib/fluent/plugin/parser_regexp.rb +68 -0
  243. data/lib/fluent/plugin/parser_syslog.rb +496 -0
  244. data/lib/fluent/plugin/parser_tsv.rb +42 -0
  245. data/lib/fluent/plugin/sd_file.rb +156 -0
  246. data/lib/fluent/plugin/sd_srv.rb +135 -0
  247. data/lib/fluent/plugin/sd_static.rb +58 -0
  248. data/lib/fluent/plugin/service_discovery.rb +65 -0
  249. data/lib/fluent/plugin/socket_util.rb +22 -0
  250. data/lib/fluent/plugin/storage.rb +84 -0
  251. data/lib/fluent/plugin/storage_local.rb +162 -0
  252. data/lib/fluent/plugin/string_util.rb +22 -0
  253. data/lib/fluent/plugin.rb +206 -0
  254. data/lib/fluent/plugin_helper/cert_option.rb +191 -0
  255. data/lib/fluent/plugin_helper/child_process.rb +366 -0
  256. data/lib/fluent/plugin_helper/compat_parameters.rb +343 -0
  257. data/lib/fluent/plugin_helper/counter.rb +51 -0
  258. data/lib/fluent/plugin_helper/event_emitter.rb +100 -0
  259. data/lib/fluent/plugin_helper/event_loop.rb +170 -0
  260. data/lib/fluent/plugin_helper/extract.rb +104 -0
  261. data/lib/fluent/plugin_helper/formatter.rb +147 -0
  262. data/lib/fluent/plugin_helper/http_server/app.rb +79 -0
  263. data/lib/fluent/plugin_helper/http_server/compat/server.rb +92 -0
  264. data/lib/fluent/plugin_helper/http_server/compat/ssl_context_extractor.rb +52 -0
  265. data/lib/fluent/plugin_helper/http_server/compat/webrick_handler.rb +58 -0
  266. data/lib/fluent/plugin_helper/http_server/methods.rb +35 -0
  267. data/lib/fluent/plugin_helper/http_server/request.rb +42 -0
  268. data/lib/fluent/plugin_helper/http_server/router.rb +54 -0
  269. data/lib/fluent/plugin_helper/http_server/server.rb +93 -0
  270. data/lib/fluent/plugin_helper/http_server/ssl_context_builder.rb +41 -0
  271. data/lib/fluent/plugin_helper/http_server.rb +135 -0
  272. data/lib/fluent/plugin_helper/inject.rb +154 -0
  273. data/lib/fluent/plugin_helper/metrics.rb +129 -0
  274. data/lib/fluent/plugin_helper/parser.rb +147 -0
  275. data/lib/fluent/plugin_helper/record_accessor.rb +207 -0
  276. data/lib/fluent/plugin_helper/retry_state.rb +219 -0
  277. data/lib/fluent/plugin_helper/server.rb +820 -0
  278. data/lib/fluent/plugin_helper/service_discovery/manager.rb +146 -0
  279. data/lib/fluent/plugin_helper/service_discovery/round_robin_balancer.rb +43 -0
  280. data/lib/fluent/plugin_helper/service_discovery.rb +125 -0
  281. data/lib/fluent/plugin_helper/socket.rb +288 -0
  282. data/lib/fluent/plugin_helper/socket_option.rb +98 -0
  283. data/lib/fluent/plugin_helper/storage.rb +349 -0
  284. data/lib/fluent/plugin_helper/thread.rb +180 -0
  285. data/lib/fluent/plugin_helper/timer.rb +92 -0
  286. data/lib/fluent/plugin_helper.rb +75 -0
  287. data/lib/fluent/plugin_id.rb +93 -0
  288. data/lib/fluent/process.rb +22 -0
  289. data/lib/fluent/registry.rb +117 -0
  290. data/lib/fluent/root_agent.rb +372 -0
  291. data/lib/fluent/rpc.rb +95 -0
  292. data/lib/fluent/static_config_analysis.rb +194 -0
  293. data/lib/fluent/supervisor.rb +1141 -0
  294. data/lib/fluent/system_config.rb +188 -0
  295. data/lib/fluent/test/base.rb +78 -0
  296. data/lib/fluent/test/driver/base.rb +225 -0
  297. data/lib/fluent/test/driver/base_owned.rb +83 -0
  298. data/lib/fluent/test/driver/base_owner.rb +135 -0
  299. data/lib/fluent/test/driver/event_feeder.rb +98 -0
  300. data/lib/fluent/test/driver/filter.rb +57 -0
  301. data/lib/fluent/test/driver/formatter.rb +30 -0
  302. data/lib/fluent/test/driver/input.rb +31 -0
  303. data/lib/fluent/test/driver/multi_output.rb +53 -0
  304. data/lib/fluent/test/driver/output.rb +102 -0
  305. data/lib/fluent/test/driver/parser.rb +30 -0
  306. data/lib/fluent/test/driver/storage.rb +30 -0
  307. data/lib/fluent/test/driver/test_event_router.rb +45 -0
  308. data/lib/fluent/test/filter_test.rb +77 -0
  309. data/lib/fluent/test/formatter_test.rb +65 -0
  310. data/lib/fluent/test/helpers.rb +134 -0
  311. data/lib/fluent/test/input_test.rb +174 -0
  312. data/lib/fluent/test/log.rb +79 -0
  313. data/lib/fluent/test/output_test.rb +156 -0
  314. data/lib/fluent/test/parser_test.rb +70 -0
  315. data/lib/fluent/test/startup_shutdown.rb +46 -0
  316. data/lib/fluent/test.rb +58 -0
  317. data/lib/fluent/time.rb +512 -0
  318. data/lib/fluent/timezone.rb +171 -0
  319. data/lib/fluent/tls.rb +81 -0
  320. data/lib/fluent/unique_id.rb +39 -0
  321. data/lib/fluent/variable_store.rb +40 -0
  322. data/lib/fluent/version.rb +21 -0
  323. data/lib/fluent/winsvc.rb +105 -0
  324. data/templates/new_gem/Gemfile +3 -0
  325. data/templates/new_gem/README.md.erb +43 -0
  326. data/templates/new_gem/Rakefile +13 -0
  327. data/templates/new_gem/fluent-plugin.gemspec.erb +27 -0
  328. data/templates/new_gem/lib/fluent/plugin/filter.rb.erb +14 -0
  329. data/templates/new_gem/lib/fluent/plugin/formatter.rb.erb +14 -0
  330. data/templates/new_gem/lib/fluent/plugin/input.rb.erb +11 -0
  331. data/templates/new_gem/lib/fluent/plugin/output.rb.erb +11 -0
  332. data/templates/new_gem/lib/fluent/plugin/parser.rb.erb +15 -0
  333. data/templates/new_gem/lib/fluent/plugin/storage.rb.erb +40 -0
  334. data/templates/new_gem/test/helper.rb.erb +8 -0
  335. data/templates/new_gem/test/plugin/test_filter.rb.erb +18 -0
  336. data/templates/new_gem/test/plugin/test_formatter.rb.erb +18 -0
  337. data/templates/new_gem/test/plugin/test_input.rb.erb +18 -0
  338. data/templates/new_gem/test/plugin/test_output.rb.erb +18 -0
  339. data/templates/new_gem/test/plugin/test_parser.rb.erb +18 -0
  340. data/templates/new_gem/test/plugin/test_storage.rb.erb +18 -0
  341. data/templates/plugin_config_formatter/param.md-compact.erb +25 -0
  342. data/templates/plugin_config_formatter/param.md-table.erb +10 -0
  343. data/templates/plugin_config_formatter/param.md.erb +34 -0
  344. data/templates/plugin_config_formatter/section.md.erb +12 -0
  345. data/test/command/test_binlog_reader.rb +362 -0
  346. data/test/command/test_ca_generate.rb +70 -0
  347. data/test/command/test_cap_ctl.rb +100 -0
  348. data/test/command/test_cat.rb +128 -0
  349. data/test/command/test_ctl.rb +56 -0
  350. data/test/command/test_fluentd.rb +1139 -0
  351. data/test/command/test_plugin_config_formatter.rb +398 -0
  352. data/test/command/test_plugin_generator.rb +109 -0
  353. data/test/compat/test_calls_super.rb +166 -0
  354. data/test/compat/test_parser.rb +92 -0
  355. data/test/config/assertions.rb +42 -0
  356. data/test/config/test_config_parser.rb +551 -0
  357. data/test/config/test_configurable.rb +1784 -0
  358. data/test/config/test_configure_proxy.rb +604 -0
  359. data/test/config/test_dsl.rb +415 -0
  360. data/test/config/test_element.rb +518 -0
  361. data/test/config/test_literal_parser.rb +309 -0
  362. data/test/config/test_plugin_configuration.rb +56 -0
  363. data/test/config/test_section.rb +191 -0
  364. data/test/config/test_system_config.rb +201 -0
  365. data/test/config/test_types.rb +408 -0
  366. data/test/counter/test_client.rb +563 -0
  367. data/test/counter/test_error.rb +44 -0
  368. data/test/counter/test_mutex_hash.rb +179 -0
  369. data/test/counter/test_server.rb +589 -0
  370. data/test/counter/test_store.rb +258 -0
  371. data/test/counter/test_validator.rb +137 -0
  372. data/test/helper.rb +155 -0
  373. data/test/helpers/fuzzy_assert.rb +89 -0
  374. data/test/helpers/process_extenstion.rb +33 -0
  375. data/test/plugin/data/2010/01/20100102-030405.log +0 -0
  376. data/test/plugin/data/2010/01/20100102-030406.log +0 -0
  377. data/test/plugin/data/2010/01/20100102.log +0 -0
  378. data/test/plugin/data/log/bar +0 -0
  379. data/test/plugin/data/log/foo/bar.log +0 -0
  380. data/test/plugin/data/log/foo/bar2 +0 -0
  381. data/test/plugin/data/log/test.log +0 -0
  382. data/test/plugin/data/sd_file/config +11 -0
  383. data/test/plugin/data/sd_file/config.json +17 -0
  384. data/test/plugin/data/sd_file/config.yaml +11 -0
  385. data/test/plugin/data/sd_file/config.yml +11 -0
  386. data/test/plugin/data/sd_file/invalid_config.yml +7 -0
  387. data/test/plugin/in_tail/test_fifo.rb +121 -0
  388. data/test/plugin/in_tail/test_io_handler.rb +150 -0
  389. data/test/plugin/in_tail/test_position_file.rb +316 -0
  390. data/test/plugin/out_forward/test_ack_handler.rb +101 -0
  391. data/test/plugin/out_forward/test_connection_manager.rb +145 -0
  392. data/test/plugin/out_forward/test_handshake_protocol.rb +112 -0
  393. data/test/plugin/out_forward/test_load_balancer.rb +106 -0
  394. data/test/plugin/out_forward/test_socket_cache.rb +174 -0
  395. data/test/plugin/test_bare_output.rb +131 -0
  396. data/test/plugin/test_base.rb +115 -0
  397. data/test/plugin/test_buf_file.rb +1275 -0
  398. data/test/plugin/test_buf_file_single.rb +833 -0
  399. data/test/plugin/test_buf_memory.rb +42 -0
  400. data/test/plugin/test_buffer.rb +1383 -0
  401. data/test/plugin/test_buffer_chunk.rb +198 -0
  402. data/test/plugin/test_buffer_file_chunk.rb +871 -0
  403. data/test/plugin/test_buffer_file_single_chunk.rb +611 -0
  404. data/test/plugin/test_buffer_memory_chunk.rb +339 -0
  405. data/test/plugin/test_compressable.rb +87 -0
  406. data/test/plugin/test_file_util.rb +96 -0
  407. data/test/plugin/test_file_wrapper.rb +58 -0
  408. data/test/plugin/test_filter.rb +368 -0
  409. data/test/plugin/test_filter_grep.rb +697 -0
  410. data/test/plugin/test_filter_parser.rb +731 -0
  411. data/test/plugin/test_filter_record_transformer.rb +577 -0
  412. data/test/plugin/test_filter_stdout.rb +207 -0
  413. data/test/plugin/test_formatter_csv.rb +136 -0
  414. data/test/plugin/test_formatter_hash.rb +38 -0
  415. data/test/plugin/test_formatter_json.rb +61 -0
  416. data/test/plugin/test_formatter_ltsv.rb +70 -0
  417. data/test/plugin/test_formatter_msgpack.rb +28 -0
  418. data/test/plugin/test_formatter_out_file.rb +116 -0
  419. data/test/plugin/test_formatter_single_value.rb +44 -0
  420. data/test/plugin/test_formatter_tsv.rb +76 -0
  421. data/test/plugin/test_in_debug_agent.rb +49 -0
  422. data/test/plugin/test_in_exec.rb +261 -0
  423. data/test/plugin/test_in_forward.rb +1178 -0
  424. data/test/plugin/test_in_gc_stat.rb +62 -0
  425. data/test/plugin/test_in_http.rb +1103 -0
  426. data/test/plugin/test_in_monitor_agent.rb +923 -0
  427. data/test/plugin/test_in_object_space.rb +66 -0
  428. data/test/plugin/test_in_sample.rb +190 -0
  429. data/test/plugin/test_in_syslog.rb +505 -0
  430. data/test/plugin/test_in_tail.rb +2639 -0
  431. data/test/plugin/test_in_tcp.rb +243 -0
  432. data/test/plugin/test_in_udp.rb +268 -0
  433. data/test/plugin/test_in_unix.rb +181 -0
  434. data/test/plugin/test_input.rb +137 -0
  435. data/test/plugin/test_metadata.rb +89 -0
  436. data/test/plugin/test_metrics.rb +294 -0
  437. data/test/plugin/test_metrics_local.rb +96 -0
  438. data/test/plugin/test_multi_output.rb +204 -0
  439. data/test/plugin/test_out_copy.rb +308 -0
  440. data/test/plugin/test_out_exec.rb +312 -0
  441. data/test/plugin/test_out_exec_filter.rb +606 -0
  442. data/test/plugin/test_out_file.rb +1037 -0
  443. data/test/plugin/test_out_forward.rb +1358 -0
  444. data/test/plugin/test_out_http.rb +428 -0
  445. data/test/plugin/test_out_null.rb +105 -0
  446. data/test/plugin/test_out_relabel.rb +28 -0
  447. data/test/plugin/test_out_roundrobin.rb +146 -0
  448. data/test/plugin/test_out_secondary_file.rb +458 -0
  449. data/test/plugin/test_out_stdout.rb +205 -0
  450. data/test/plugin/test_out_stream.rb +103 -0
  451. data/test/plugin/test_output.rb +1065 -0
  452. data/test/plugin/test_output_as_buffered.rb +2024 -0
  453. data/test/plugin/test_output_as_buffered_backup.rb +363 -0
  454. data/test/plugin/test_output_as_buffered_compress.rb +165 -0
  455. data/test/plugin/test_output_as_buffered_overflow.rb +250 -0
  456. data/test/plugin/test_output_as_buffered_retries.rb +966 -0
  457. data/test/plugin/test_output_as_buffered_secondary.rb +882 -0
  458. data/test/plugin/test_output_as_standard.rb +374 -0
  459. data/test/plugin/test_owned_by.rb +35 -0
  460. data/test/plugin/test_parser.rb +399 -0
  461. data/test/plugin/test_parser_apache.rb +42 -0
  462. data/test/plugin/test_parser_apache2.rb +47 -0
  463. data/test/plugin/test_parser_apache_error.rb +45 -0
  464. data/test/plugin/test_parser_csv.rb +200 -0
  465. data/test/plugin/test_parser_json.rb +138 -0
  466. data/test/plugin/test_parser_labeled_tsv.rb +160 -0
  467. data/test/plugin/test_parser_multiline.rb +111 -0
  468. data/test/plugin/test_parser_nginx.rb +88 -0
  469. data/test/plugin/test_parser_none.rb +52 -0
  470. data/test/plugin/test_parser_regexp.rb +289 -0
  471. data/test/plugin/test_parser_syslog.rb +650 -0
  472. data/test/plugin/test_parser_tsv.rb +122 -0
  473. data/test/plugin/test_sd_file.rb +228 -0
  474. data/test/plugin/test_sd_srv.rb +230 -0
  475. data/test/plugin/test_storage.rb +167 -0
  476. data/test/plugin/test_storage_local.rb +335 -0
  477. data/test/plugin/test_string_util.rb +26 -0
  478. data/test/plugin_helper/data/cert/cert-key.pem +27 -0
  479. data/test/plugin_helper/data/cert/cert-with-CRLF.pem +19 -0
  480. data/test/plugin_helper/data/cert/cert-with-no-newline.pem +19 -0
  481. data/test/plugin_helper/data/cert/cert.pem +19 -0
  482. data/test/plugin_helper/data/cert/cert_chains/ca-cert-key.pem +27 -0
  483. data/test/plugin_helper/data/cert/cert_chains/ca-cert.pem +20 -0
  484. data/test/plugin_helper/data/cert/cert_chains/cert-key.pem +27 -0
  485. data/test/plugin_helper/data/cert/cert_chains/cert.pem +40 -0
  486. data/test/plugin_helper/data/cert/empty.pem +0 -0
  487. data/test/plugin_helper/data/cert/generate_cert.rb +125 -0
  488. data/test/plugin_helper/data/cert/with_ca/ca-cert-key-pass.pem +30 -0
  489. data/test/plugin_helper/data/cert/with_ca/ca-cert-key.pem +27 -0
  490. data/test/plugin_helper/data/cert/with_ca/ca-cert-pass.pem +20 -0
  491. data/test/plugin_helper/data/cert/with_ca/ca-cert.pem +20 -0
  492. data/test/plugin_helper/data/cert/with_ca/cert-key-pass.pem +30 -0
  493. data/test/plugin_helper/data/cert/with_ca/cert-key.pem +27 -0
  494. data/test/plugin_helper/data/cert/with_ca/cert-pass.pem +21 -0
  495. data/test/plugin_helper/data/cert/with_ca/cert.pem +21 -0
  496. data/test/plugin_helper/data/cert/without_ca/cert-key-pass.pem +30 -0
  497. data/test/plugin_helper/data/cert/without_ca/cert-key.pem +27 -0
  498. data/test/plugin_helper/data/cert/without_ca/cert-pass.pem +20 -0
  499. data/test/plugin_helper/data/cert/without_ca/cert.pem +20 -0
  500. data/test/plugin_helper/http_server/test_app.rb +65 -0
  501. data/test/plugin_helper/http_server/test_route.rb +32 -0
  502. data/test/plugin_helper/service_discovery/test_manager.rb +93 -0
  503. data/test/plugin_helper/service_discovery/test_round_robin_balancer.rb +21 -0
  504. data/test/plugin_helper/test_cert_option.rb +25 -0
  505. data/test/plugin_helper/test_child_process.rb +852 -0
  506. data/test/plugin_helper/test_compat_parameters.rb +358 -0
  507. data/test/plugin_helper/test_event_emitter.rb +80 -0
  508. data/test/plugin_helper/test_event_loop.rb +52 -0
  509. data/test/plugin_helper/test_extract.rb +194 -0
  510. data/test/plugin_helper/test_formatter.rb +255 -0
  511. data/test/plugin_helper/test_http_server_helper.rb +372 -0
  512. data/test/plugin_helper/test_inject.rb +561 -0
  513. data/test/plugin_helper/test_metrics.rb +137 -0
  514. data/test/plugin_helper/test_parser.rb +264 -0
  515. data/test/plugin_helper/test_record_accessor.rb +238 -0
  516. data/test/plugin_helper/test_retry_state.rb +1006 -0
  517. data/test/plugin_helper/test_server.rb +1841 -0
  518. data/test/plugin_helper/test_service_discovery.rb +165 -0
  519. data/test/plugin_helper/test_socket.rb +146 -0
  520. data/test/plugin_helper/test_storage.rb +542 -0
  521. data/test/plugin_helper/test_thread.rb +164 -0
  522. data/test/plugin_helper/test_timer.rb +130 -0
  523. data/test/scripts/exec_script.rb +32 -0
  524. data/test/scripts/fluent/plugin/formatter1/formatter_test1.rb +7 -0
  525. data/test/scripts/fluent/plugin/formatter2/formatter_test2.rb +7 -0
  526. data/test/scripts/fluent/plugin/formatter_known.rb +8 -0
  527. data/test/scripts/fluent/plugin/out_test.rb +81 -0
  528. data/test/scripts/fluent/plugin/out_test2.rb +80 -0
  529. data/test/scripts/fluent/plugin/parser_known.rb +4 -0
  530. data/test/test_capability.rb +74 -0
  531. data/test/test_clock.rb +164 -0
  532. data/test/test_config.rb +333 -0
  533. data/test/test_configdsl.rb +148 -0
  534. data/test/test_daemonizer.rb +91 -0
  535. data/test/test_engine.rb +203 -0
  536. data/test/test_event.rb +531 -0
  537. data/test/test_event_router.rb +348 -0
  538. data/test/test_event_time.rb +199 -0
  539. data/test/test_filter.rb +121 -0
  540. data/test/test_fluent_log_event_router.rb +99 -0
  541. data/test/test_formatter.rb +366 -0
  542. data/test/test_input.rb +31 -0
  543. data/test/test_log.rb +994 -0
  544. data/test/test_logger_initializer.rb +46 -0
  545. data/test/test_match.rb +148 -0
  546. data/test/test_mixin.rb +351 -0
  547. data/test/test_msgpack_factory.rb +18 -0
  548. data/test/test_oj_options.rb +55 -0
  549. data/test/test_output.rb +278 -0
  550. data/test/test_plugin.rb +251 -0
  551. data/test/test_plugin_classes.rb +370 -0
  552. data/test/test_plugin_helper.rb +81 -0
  553. data/test/test_plugin_id.rb +119 -0
  554. data/test/test_process.rb +14 -0
  555. data/test/test_root_agent.rb +951 -0
  556. data/test/test_static_config_analysis.rb +177 -0
  557. data/test/test_supervisor.rb +791 -0
  558. data/test/test_test_drivers.rb +136 -0
  559. data/test/test_time_formatter.rb +301 -0
  560. data/test/test_time_parser.rb +362 -0
  561. data/test/test_tls.rb +65 -0
  562. data/test/test_unique_id.rb +47 -0
  563. data/test/test_variable_store.rb +65 -0
  564. metadata +1191 -0
@@ -0,0 +1,791 @@
1
+ require_relative 'helper'
2
+ require 'fluent/event_router'
3
+ require 'fluent/system_config'
4
+ require 'fluent/supervisor'
5
+ require_relative 'test_plugin_classes'
6
+
7
+ require 'net/http'
8
+ require 'uri'
9
+ require 'fileutils'
10
+ require 'tempfile'
11
+
12
+ if Fluent.windows?
13
+ require 'win32/event'
14
+ end
15
+
16
+ class SupervisorTest < ::Test::Unit::TestCase
17
+ class DummyServer
18
+ include Fluent::ServerModule
19
+ attr_accessor :rpc_endpoint, :enable_get_dump
20
+ def config
21
+ {}
22
+ end
23
+ end
24
+
25
+ TMP_DIR = File.expand_path(File.dirname(__FILE__) + "/tmp/supervisor#{ENV['TEST_ENV_NUMBER']}")
26
+ TMP_ROOT_DIR = File.join(TMP_DIR, 'root')
27
+
28
+ def setup
29
+ FileUtils.rm_rf(TMP_DIR)
30
+ FileUtils.mkdir_p(TMP_DIR)
31
+ end
32
+
33
+ def write_config(path, data)
34
+ FileUtils.mkdir_p(File.dirname(path))
35
+ File.open(path, "w") {|f| f.write data }
36
+ end
37
+
38
+
39
+ def test_system_config
40
+ opts = Fluent::Supervisor.default_options
41
+ sv = Fluent::Supervisor.new(opts)
42
+ conf_data = <<-EOC
43
+ <system>
44
+ rpc_endpoint 127.0.0.1:24445
45
+ suppress_repeated_stacktrace true
46
+ suppress_config_dump true
47
+ without_source true
48
+ enable_get_dump true
49
+ process_name "process_name"
50
+ log_level info
51
+ root_dir #{TMP_ROOT_DIR}
52
+ <log>
53
+ format json
54
+ time_format %Y
55
+ </log>
56
+ <counter_server>
57
+ bind 127.0.0.1
58
+ port 24321
59
+ scope server1
60
+ backup_path /tmp/backup
61
+ </counter_server>
62
+ <counter_client>
63
+ host 127.0.0.1
64
+ port 24321
65
+ timeout 2
66
+ </counter_client>
67
+ </system>
68
+ EOC
69
+ conf = Fluent::Config.parse(conf_data, "(test)", "(test_dir)", true)
70
+ sys_conf = sv.__send__(:build_system_config, conf)
71
+
72
+ assert_equal '127.0.0.1:24445', sys_conf.rpc_endpoint
73
+ assert_equal true, sys_conf.suppress_repeated_stacktrace
74
+ assert_equal true, sys_conf.suppress_config_dump
75
+ assert_equal true, sys_conf.without_source
76
+ assert_equal true, sys_conf.enable_get_dump
77
+ assert_equal "process_name", sys_conf.process_name
78
+ assert_equal 2, sys_conf.log_level
79
+ assert_equal TMP_ROOT_DIR, sys_conf.root_dir
80
+ assert_equal :json, sys_conf.log.format
81
+ assert_equal '%Y', sys_conf.log.time_format
82
+ counter_server = sys_conf.counter_server
83
+ assert_equal '127.0.0.1', counter_server.bind
84
+ assert_equal 24321, counter_server.port
85
+ assert_equal 'server1', counter_server.scope
86
+ assert_equal '/tmp/backup', counter_server.backup_path
87
+ counter_client = sys_conf.counter_client
88
+ assert_equal '127.0.0.1', counter_client.host
89
+ assert_equal 24321, counter_client.port
90
+ assert_equal 2, counter_client.timeout
91
+ end
92
+
93
+ sub_test_case "yaml config" do
94
+ def parse_yaml(yaml)
95
+ context = Kernel.binding
96
+
97
+ config = nil
98
+ Tempfile.open do |file|
99
+ file.puts(yaml)
100
+ file.flush
101
+ s = Fluent::Config::YamlParser::Loader.new(context).load(Pathname.new(file))
102
+ config = Fluent::Config::YamlParser::Parser.new(s).build.to_element
103
+ end
104
+ config
105
+ end
106
+
107
+ def test_system_config
108
+ opts = Fluent::Supervisor.default_options
109
+ sv = Fluent::Supervisor.new(opts)
110
+ conf_data = <<-EOC
111
+ system:
112
+ rpc_endpoint: 127.0.0.1:24445
113
+ suppress_repeated_stacktrace: true
114
+ suppress_config_dump: true
115
+ without_source: true
116
+ enable_get_dump: true
117
+ process_name: "process_name"
118
+ log_level: info
119
+ root_dir: !fluent/s "#{TMP_ROOT_DIR}"
120
+ log:
121
+ format: json
122
+ time_format: "%Y"
123
+ counter_server:
124
+ bind: 127.0.0.1
125
+ port: 24321
126
+ scope: server1
127
+ backup_path: /tmp/backup
128
+ counter_client:
129
+ host: 127.0.0.1
130
+ port: 24321
131
+ timeout: 2
132
+ EOC
133
+ conf = parse_yaml(conf_data)
134
+ sys_conf = sv.__send__(:build_system_config, conf)
135
+
136
+ counter_client = sys_conf.counter_client
137
+ counter_server = sys_conf.counter_server
138
+ assert_equal(
139
+ [
140
+ '127.0.0.1:24445',
141
+ true,
142
+ true,
143
+ true,
144
+ true,
145
+ "process_name",
146
+ 2,
147
+ TMP_ROOT_DIR,
148
+ :json,
149
+ '%Y',
150
+ '127.0.0.1',
151
+ 24321,
152
+ 'server1',
153
+ '/tmp/backup',
154
+ '127.0.0.1',
155
+ 24321,
156
+ 2,
157
+ ],
158
+ [
159
+ sys_conf.rpc_endpoint,
160
+ sys_conf.suppress_repeated_stacktrace,
161
+ sys_conf.suppress_config_dump,
162
+ sys_conf.without_source,
163
+ sys_conf.enable_get_dump,
164
+ sys_conf.process_name,
165
+ sys_conf.log_level,
166
+ sys_conf.root_dir,
167
+ sys_conf.log.format,
168
+ sys_conf.log.time_format,
169
+ counter_server.bind,
170
+ counter_server.port,
171
+ counter_server.scope,
172
+ counter_server.backup_path,
173
+ counter_client.host,
174
+ counter_client.port,
175
+ counter_client.timeout,
176
+ ])
177
+ end
178
+ end
179
+
180
+ def test_main_process_signal_handlers
181
+ omit "Windows cannot handle signals" if Fluent.windows?
182
+
183
+ create_info_dummy_logger
184
+
185
+ opts = Fluent::Supervisor.default_options
186
+ sv = Fluent::Supervisor.new(opts)
187
+ sv.send(:install_main_process_signal_handlers)
188
+
189
+ begin
190
+ Process.kill :USR1, $$
191
+ rescue
192
+ end
193
+
194
+ sleep 1
195
+
196
+ info_msg = '[info]: force flushing buffered events' + "\n"
197
+ assert{ $log.out.logs.first.end_with?(info_msg) }
198
+ ensure
199
+ $log.out.reset if $log && $log.out && $log.out.respond_to?(:reset)
200
+ end
201
+
202
+ def test_main_process_command_handlers
203
+ omit "Only for Windows, alternative to UNIX signals" unless Fluent.windows?
204
+
205
+ create_info_dummy_logger
206
+
207
+ opts = Fluent::Supervisor.default_options
208
+ sv = Fluent::Supervisor.new(opts)
209
+ r, w = IO.pipe
210
+ $stdin = r
211
+ sv.send(:install_main_process_signal_handlers)
212
+
213
+ begin
214
+ w.write("GRACEFUL_RESTART\n")
215
+ w.flush
216
+ ensure
217
+ $stdin = STDIN
218
+ end
219
+
220
+ sleep 1
221
+
222
+ info_msg = '[info]: force flushing buffered events' + "\n"
223
+ assert{ $log.out.logs.first.end_with?(info_msg) }
224
+ ensure
225
+ $log.out.reset if $log && $log.out && $log.out.respond_to?(:reset)
226
+ end
227
+
228
+ def test_supervisor_signal_handler
229
+ omit "Windows cannot handle signals" if Fluent.windows?
230
+
231
+ create_debug_dummy_logger
232
+
233
+ server = DummyServer.new
234
+ server.install_supervisor_signal_handlers
235
+ begin
236
+ Process.kill :USR1, $$
237
+ rescue
238
+ end
239
+
240
+ sleep 1
241
+
242
+ debug_msg = '[debug]: fluentd supervisor process get SIGUSR1'
243
+ logs = $log.out.logs
244
+ assert{ logs.any?{|log| log.include?(debug_msg) } }
245
+ ensure
246
+ $log.out.reset if $log && $log.out && $log.out.respond_to?(:reset)
247
+ end
248
+
249
+ def test_windows_shutdown_event
250
+ omit "Only for Windows platform" unless Fluent.windows?
251
+
252
+ server = DummyServer.new
253
+ def server.config
254
+ {:signame => "TestFluentdEvent"}
255
+ end
256
+
257
+ mock(server).stop(true)
258
+ stub(Process).kill.times(0)
259
+
260
+ server.install_windows_event_handler
261
+ begin
262
+ sleep 0.1 # Wait for starting windows event thread
263
+ event = Win32::Event.open("TestFluentdEvent")
264
+ event.set
265
+ event.close
266
+ ensure
267
+ server.stop_windows_event_thread
268
+ end
269
+
270
+ debug_msg = '[debug]: Got Win32 event "TestFluentdEvent"'
271
+ logs = $log.out.logs
272
+ assert{ logs.any?{|log| log.include?(debug_msg) } }
273
+ ensure
274
+ $log.out.reset if $log && $log.out && $log.out.respond_to?(:reset)
275
+ end
276
+
277
+ def test_supervisor_event_handler
278
+ omit "Only for Windows, alternative to UNIX signals" unless Fluent.windows?
279
+
280
+ create_debug_dummy_logger
281
+
282
+ server = DummyServer.new
283
+ def server.config
284
+ {:signame => "TestFluentdEvent"}
285
+ end
286
+ server.install_windows_event_handler
287
+ begin
288
+ sleep 0.1 # Wait for starting windows event thread
289
+ event = Win32::Event.open("TestFluentdEvent_USR1")
290
+ event.set
291
+ event.close
292
+ ensure
293
+ server.stop_windows_event_thread
294
+ end
295
+
296
+ debug_msg = '[debug]: Got Win32 event "TestFluentdEvent_USR1"'
297
+ logs = $log.out.logs
298
+ assert{ logs.any?{|log| log.include?(debug_msg) } }
299
+ ensure
300
+ $log.out.reset if $log && $log.out && $log.out.respond_to?(:reset)
301
+ end
302
+
303
+ data("Normal", {raw_path: "C:\\Windows\\Temp\\sigdump.log", expected: "C:\\Windows\\Temp\\sigdump-#{$$}.log"})
304
+ data("UNIX style", {raw_path: "/Windows/Temp/sigdump.log", expected: "/Windows/Temp/sigdump-#{$$}.log"})
305
+ data("No extension", {raw_path: "C:\\Windows\\Temp\\sigdump", expected: "C:\\Windows\\Temp\\sigdump-#{$$}"})
306
+ data("Multi-extension", {raw_path: "C:\\Windows\\Temp\\sig.dump.bk", expected: "C:\\Windows\\Temp\\sig.dump-#{$$}.bk"})
307
+ def test_fluentsigdump_get_path_with_pid(data)
308
+ p data
309
+ path = Fluent::FluentSigdump.get_path_with_pid(data[:raw_path])
310
+ assert_equal(data[:expected], path)
311
+ end
312
+
313
+ def test_supervisor_event_dump_windows
314
+ omit "Only for Windows, alternative to UNIX signals" unless Fluent.windows?
315
+
316
+ server = DummyServer.new
317
+ def server.config
318
+ {:signame => "TestFluentdEvent"}
319
+ end
320
+ server.install_windows_event_handler
321
+
322
+ assert_rr do
323
+ # Have to use mock because `Sigdump.dump` seems to be somehow incompatible with RR.
324
+ # The `mock(server).restart(true) { nil }` line in `test_rpc_server_windows` cause the next error.
325
+ # Failure: test_supervisor_event_dump_windows(SupervisorTest):
326
+ # class()
327
+ # Called 0 times.
328
+ # Expected 1 times.
329
+ # .../Ruby26-x64/lib/ruby/gems/2.6.0/gems/sigdump-0.2.4/lib/sigdump.rb:74:in `block in dump_object_count'
330
+ # 73: ObjectSpace.each_object {|o|
331
+ # 74: c = o.class <-- HERE!
332
+ mock(Sigdump).dump(anything)
333
+
334
+ begin
335
+ sleep 0.1 # Wait for starting windows event thread
336
+ event = Win32::Event.open("TestFluentdEvent_CONT")
337
+ event.set
338
+ event.close
339
+ sleep 1.0 # Wait for dumping
340
+ ensure
341
+ server.stop_windows_event_thread
342
+ end
343
+ end
344
+ end
345
+
346
+ data(:ipv4 => ["0.0.0.0", "127.0.0.1", false],
347
+ :ipv6 => ["[::]", "[::1]", true],
348
+ :localhost_ipv4 => ["localhost", "127.0.0.1", false])
349
+ def test_rpc_server(data)
350
+ omit "Windows cannot handle signals" if Fluent.windows?
351
+
352
+ bindaddr, localhost, ipv6 = data
353
+ omit "IPv6 is not supported on this environment" if ipv6 && !ipv6_enabled?
354
+
355
+ create_info_dummy_logger
356
+
357
+ opts = Fluent::Supervisor.default_options
358
+ sv = Fluent::Supervisor.new(opts)
359
+ conf_data = <<-EOC
360
+ <system>
361
+ rpc_endpoint "#{bindaddr}:24447"
362
+ </system>
363
+ EOC
364
+ conf = Fluent::Config.parse(conf_data, "(test)", "(test_dir)", true)
365
+ sys_conf = sv.__send__(:build_system_config, conf)
366
+
367
+ server = DummyServer.new
368
+ server.rpc_endpoint = sys_conf.rpc_endpoint
369
+ server.enable_get_dump = sys_conf.enable_get_dump
370
+
371
+ server.run_rpc_server
372
+
373
+ sv.send(:install_main_process_signal_handlers)
374
+ response = Net::HTTP.get(URI.parse("http://#{localhost}:24447/api/plugins.flushBuffers"))
375
+ info_msg = '[info]: force flushing buffered events' + "\n"
376
+
377
+ server.stop_rpc_server
378
+
379
+ # In TravisCI with OSX(Xcode), it seems that can't use rpc server.
380
+ # This test will be passed in such environment.
381
+ pend unless $log.out.logs.first
382
+
383
+ assert_equal('{"ok":true}', response)
384
+ assert{ $log.out.logs.first.end_with?(info_msg) }
385
+ ensure
386
+ $log.out.reset if $log.out.is_a?(Fluent::Test::DummyLogDevice)
387
+ end
388
+
389
+ data(:no_port => ["127.0.0.1"],
390
+ :invalid_addr => ["*:24447"])
391
+ def test_invalid_rpc_endpoint(data)
392
+ endpoint = data[0]
393
+
394
+ opts = Fluent::Supervisor.default_options
395
+ sv = Fluent::Supervisor.new(opts)
396
+ conf_data = <<-EOC
397
+ <system>
398
+ rpc_endpoint "#{endpoint}"
399
+ </system>
400
+ EOC
401
+ conf = Fluent::Config.parse(conf_data, "(test)", "(test_dir)", true)
402
+ sys_conf = sv.__send__(:build_system_config, conf)
403
+
404
+ server = DummyServer.new
405
+ server.rpc_endpoint = sys_conf.rpc_endpoint
406
+
407
+ assert_raise(Fluent::ConfigError.new("Invalid rpc_endpoint: #{endpoint}")) do
408
+ server.run_rpc_server
409
+ end
410
+ end
411
+
412
+ data(:ipv4 => ["0.0.0.0", "127.0.0.1", false],
413
+ :ipv6 => ["[::]", "[::1]", true],
414
+ :localhost_ipv4 => ["localhost", "127.0.0.1", true])
415
+ def test_rpc_server_windows(data)
416
+ omit "Only for windows platform" unless Fluent.windows?
417
+
418
+ bindaddr, localhost, ipv6 = data
419
+ omit "IPv6 is not supported on this environment" if ipv6 && !ipv6_enabled?
420
+
421
+ create_info_dummy_logger
422
+
423
+ opts = Fluent::Supervisor.default_options
424
+ sv = Fluent::Supervisor.new(opts)
425
+ conf_data = <<-EOC
426
+ <system>
427
+ rpc_endpoint "#{bindaddr}:24447"
428
+ </system>
429
+ EOC
430
+ conf = Fluent::Config.parse(conf_data, "(test)", "(test_dir)", true)
431
+ sys_conf = sv.__send__(:build_system_config, conf)
432
+
433
+ server = DummyServer.new
434
+ def server.config
435
+ {
436
+ :signame => "TestFluentdEvent",
437
+ :worker_pid => 5963,
438
+ }
439
+ end
440
+ server.rpc_endpoint = sys_conf.rpc_endpoint
441
+
442
+ server.run_rpc_server
443
+
444
+ mock(server).restart(true) { nil }
445
+ response = Net::HTTP.get(URI.parse("http://#{localhost}:24447/api/plugins.flushBuffers"))
446
+
447
+ server.stop_rpc_server
448
+ assert_equal('{"ok":true}', response)
449
+ end
450
+
451
+ def test_load_config
452
+ tmp_dir = "#{TMP_DIR}/dir/test_load_config.conf"
453
+ conf_info_str = %[
454
+ <system>
455
+ log_level info
456
+ </system>
457
+ ]
458
+ conf_debug_str = %[
459
+ <system>
460
+ log_level debug
461
+ </system>
462
+ ]
463
+ now = Time.now
464
+ Timecop.freeze(now)
465
+
466
+ write_config tmp_dir, conf_info_str
467
+
468
+ params = {}
469
+ params['workers'] = 1
470
+ params['use_v1_config'] = true
471
+ params['log_path'] = 'test/tmp/supervisor/log'
472
+ params['suppress_repeated_stacktrace'] = true
473
+ params['log_level'] = Fluent::Log::LEVEL_INFO
474
+ params['conf_encoding'] = 'utf-8'
475
+ load_config_proc = Proc.new { Fluent::Supervisor.load_config(tmp_dir, params) }
476
+
477
+ # first call
478
+ se_config = load_config_proc.call
479
+ assert_equal Fluent::Log::LEVEL_INFO, se_config[:log_level]
480
+ assert_equal true, se_config[:suppress_repeated_stacktrace]
481
+ assert_equal 'spawn', se_config[:worker_type]
482
+ assert_equal 1, se_config[:workers]
483
+ assert_equal false, se_config[:log_stdin]
484
+ assert_equal false, se_config[:log_stdout]
485
+ assert_equal false, se_config[:log_stderr]
486
+ assert_equal true, se_config[:enable_heartbeat]
487
+ assert_equal false, se_config[:auto_heartbeat]
488
+ assert_equal false, se_config[:daemonize]
489
+ assert_nil se_config[:pid_path]
490
+
491
+ # second call immediately(reuse config)
492
+ se_config = load_config_proc.call
493
+ pre_config_mtime = se_config[:windows_daemon_cmdline][5]['pre_config_mtime']
494
+ pre_loadtime = se_config[:windows_daemon_cmdline][5]['pre_loadtime']
495
+ assert_nil pre_config_mtime
496
+ assert_nil pre_loadtime
497
+
498
+ Timecop.freeze(now + 5)
499
+
500
+ # third call after 5 seconds(don't reuse config)
501
+ se_config = load_config_proc.call
502
+ pre_config_mtime = se_config[:windows_daemon_cmdline][5]['pre_config_mtime']
503
+ pre_loadtime = se_config[:windows_daemon_cmdline][5]['pre_loadtime']
504
+ assert_not_nil pre_config_mtime
505
+ assert_not_nil pre_loadtime
506
+
507
+ # forth call immediately(reuse config)
508
+ se_config = load_config_proc.call
509
+ # test that pre_config_mtime and pre_loadtime are not changed from previous one because reused pre_config
510
+ assert_equal pre_config_mtime, se_config[:windows_daemon_cmdline][5]['pre_config_mtime']
511
+ assert_equal pre_loadtime, se_config[:windows_daemon_cmdline][5]['pre_loadtime']
512
+
513
+ write_config tmp_dir, conf_debug_str
514
+
515
+ # fifth call after changed conf file(don't reuse config)
516
+ se_config = load_config_proc.call
517
+ assert_equal Fluent::Log::LEVEL_INFO, se_config[:log_level]
518
+ ensure
519
+ Timecop.return
520
+ end
521
+
522
+ def test_load_config_for_logger
523
+ tmp_dir = "#{TMP_DIR}/dir/test_load_config_log.conf"
524
+ conf_info_str = %[
525
+ <system>
526
+ <log>
527
+ format json
528
+ time_format %FT%T.%L%z
529
+ </log>
530
+ </system>
531
+ ]
532
+ write_config tmp_dir, conf_info_str
533
+ params = {
534
+ 'use_v1_config' => true,
535
+ 'conf_encoding' => 'utf8',
536
+ 'log_level' => Fluent::Log::LEVEL_INFO,
537
+ 'log_path' => 'test/tmp/supervisor/log',
538
+
539
+ 'workers' => 1,
540
+ 'log_format' => :json,
541
+ 'log_time_format' => '%FT%T.%L%z',
542
+ }
543
+
544
+ r = Fluent::Supervisor.load_config(tmp_dir, params)
545
+ assert_equal :json, r[:logger].format
546
+ assert_equal '%FT%T.%L%z', r[:logger].time_format
547
+ end
548
+
549
+ def test_load_config_for_daemonize
550
+ tmp_dir = "#{TMP_DIR}/dir/test_load_config.conf"
551
+ conf_info_str = %[
552
+ <system>
553
+ log_level info
554
+ </system>
555
+ ]
556
+ conf_debug_str = %[
557
+ <system>
558
+ log_level debug
559
+ </system>
560
+ ]
561
+
562
+ now = Time.now
563
+ Timecop.freeze(now)
564
+
565
+ write_config tmp_dir, conf_info_str
566
+
567
+ params = {}
568
+ params['workers'] = 1
569
+ params['use_v1_config'] = true
570
+ params['log_path'] = 'test/tmp/supervisor/log'
571
+ params['suppress_repeated_stacktrace'] = true
572
+ params['log_level'] = Fluent::Log::LEVEL_INFO
573
+ params['daemonize'] = './fluentd.pid'
574
+ params['conf_encoding'] = 'utf-8'
575
+ load_config_proc = Proc.new { Fluent::Supervisor.load_config(tmp_dir, params) }
576
+
577
+ # first call
578
+ se_config = load_config_proc.call
579
+ assert_equal Fluent::Log::LEVEL_INFO, se_config[:log_level]
580
+ assert_equal true, se_config[:suppress_repeated_stacktrace]
581
+ assert_equal 'spawn', se_config[:worker_type]
582
+ assert_equal 1, se_config[:workers]
583
+ assert_equal false, se_config[:log_stdin]
584
+ assert_equal false, se_config[:log_stdout]
585
+ assert_equal false, se_config[:log_stderr]
586
+ assert_equal true, se_config[:enable_heartbeat]
587
+ assert_equal false, se_config[:auto_heartbeat]
588
+ assert_equal true, se_config[:daemonize]
589
+ assert_equal './fluentd.pid', se_config[:pid_path]
590
+
591
+ # second call immediately(reuse config)
592
+ se_config = load_config_proc.call
593
+ pre_config_mtime = se_config[:windows_daemon_cmdline][5]['pre_config_mtime']
594
+ pre_loadtime = se_config[:windows_daemon_cmdline][5]['pre_loadtime']
595
+ assert_nil pre_config_mtime
596
+ assert_nil pre_loadtime
597
+
598
+ Timecop.freeze(now + 5)
599
+
600
+ # third call after 6 seconds(don't reuse config)
601
+ se_config = load_config_proc.call
602
+ pre_config_mtime = se_config[:windows_daemon_cmdline][5]['pre_config_mtime']
603
+ pre_loadtime = se_config[:windows_daemon_cmdline][5]['pre_loadtime']
604
+ assert_not_nil pre_config_mtime
605
+ assert_not_nil pre_loadtime
606
+
607
+ # forth call immediately(reuse config)
608
+ se_config = load_config_proc.call
609
+ # test that pre_config_mtime and pre_loadtime are not changed from previous one because reused pre_config
610
+ assert_equal pre_config_mtime, se_config[:windows_daemon_cmdline][5]['pre_config_mtime']
611
+ assert_equal pre_loadtime, se_config[:windows_daemon_cmdline][5]['pre_loadtime']
612
+
613
+ write_config tmp_dir, conf_debug_str
614
+
615
+ # fifth call after changed conf file(don't reuse config)
616
+ se_config = load_config_proc.call
617
+ assert_equal Fluent::Log::LEVEL_INFO, se_config[:log_level]
618
+ ensure
619
+ Timecop.return
620
+ end
621
+
622
+ def test_logger
623
+ opts = Fluent::Supervisor.default_options
624
+ sv = Fluent::Supervisor.new(opts)
625
+ log = sv.instance_variable_get(:@log)
626
+ log.init(:standalone, 0)
627
+ logger = $log.instance_variable_get(:@logger)
628
+
629
+ assert_equal Fluent::Log::LEVEL_INFO, $log.level
630
+
631
+ # test that DamonLogger#level= overwrites Fluent.log#level
632
+ logger.level = 'debug'
633
+ assert_equal Fluent::Log::LEVEL_DEBUG, $log.level
634
+
635
+ assert_equal 5, logger.instance_variable_get(:@rotate_age)
636
+ assert_equal 1048576, logger.instance_variable_get(:@rotate_size)
637
+ end
638
+
639
+ data(
640
+ daily_age: 'daily',
641
+ weekly_age: 'weekly',
642
+ monthly_age: 'monthly',
643
+ integer_age: 2,
644
+ )
645
+ def test_logger_with_rotate_age_and_rotate_size(rotate_age)
646
+ opts = Fluent::Supervisor.default_options.merge(
647
+ log_path: "#{TMP_DIR}/test", log_rotate_age: rotate_age, log_rotate_size: 10
648
+ )
649
+ sv = Fluent::Supervisor.new(opts)
650
+ log = sv.instance_variable_get(:@log)
651
+ log.init(:standalone, 0)
652
+
653
+ assert_equal Fluent::LogDeviceIO, $log.out.class
654
+ assert_equal rotate_age, $log.out.instance_variable_get(:@shift_age)
655
+ assert_equal 10, $log.out.instance_variable_get(:@shift_size)
656
+ end
657
+
658
+ sub_test_case "system log rotation" do
659
+ def parse_text(text)
660
+ basepath = File.expand_path(File.dirname(__FILE__) + '/../../')
661
+ Fluent::Config.parse(text, '(test)', basepath, true).elements.find { |e| e.name == 'system' }
662
+ end
663
+
664
+ def test_override_default_log_rotate
665
+ Tempfile.open do |file|
666
+ config = parse_text(<<-EOS)
667
+ <system>
668
+ <log>
669
+ rotate_age 3
670
+ rotate_size 300
671
+ </log>
672
+ </system>
673
+ EOS
674
+ file.puts(config)
675
+ file.flush
676
+ opts = Fluent::Supervisor.default_options.merge(
677
+ log_path: "#{TMP_DIR}/test.log", config_path: file.path
678
+ )
679
+ sv = Fluent::Supervisor.new(opts)
680
+
681
+ log = sv.instance_variable_get(:@log)
682
+ log.init(:standalone, 0)
683
+ logger = $log.instance_variable_get(:@logger)
684
+
685
+ assert_equal([3, 300],
686
+ [logger.instance_variable_get(:@rotate_age),
687
+ logger.instance_variable_get(:@rotate_size)])
688
+ end
689
+ end
690
+
691
+ def test_override_default_log_rotate_with_yaml_config
692
+ Tempfile.open do |file|
693
+ config = <<-EOS
694
+ system:
695
+ log:
696
+ rotate_age: 3
697
+ rotate_size: 300
698
+ EOS
699
+ file.puts(config)
700
+ file.flush
701
+ opts = Fluent::Supervisor.default_options.merge(
702
+ log_path: "#{TMP_DIR}/test.log", config_path: file.path, config_file_type: :yaml,
703
+ )
704
+ sv = Fluent::Supervisor.new(opts)
705
+
706
+ log = sv.instance_variable_get(:@log)
707
+ log.init(:standalone, 0)
708
+ logger = $log.instance_variable_get(:@logger)
709
+
710
+ assert_equal([3, 300],
711
+ [logger.instance_variable_get(:@rotate_age),
712
+ logger.instance_variable_get(:@rotate_size)])
713
+ end
714
+ end
715
+ end
716
+
717
+ def test_inline_config
718
+ omit 'this feature is deprecated. see https://github.com/fluent/fluentd/issues/2711'
719
+
720
+ opts = Fluent::Supervisor.default_options
721
+ opts[:inline_config] = '-'
722
+ sv = Fluent::Supervisor.new(opts)
723
+ assert_equal '-', sv.instance_variable_get(:@inline_config)
724
+
725
+ inline_config = '<match *>\n@type stdout\n</match>'
726
+ stub(STDIN).read { inline_config }
727
+ stub(Fluent::Config).build # to skip
728
+ stub(sv).build_system_config { Fluent::SystemConfig.new } # to skip
729
+
730
+ sv.configure
731
+ assert_equal inline_config, sv.instance_variable_get(:@inline_config)
732
+ end
733
+
734
+ def test_log_level_affects
735
+ opts = Fluent::Supervisor.default_options
736
+ sv = Fluent::Supervisor.new(opts)
737
+
738
+ c = Fluent::Config::Element.new('system', '', { 'log_level' => 'error' }, [])
739
+ stub(Fluent::Config).build { config_element('ROOT', '', {}, [c]) }
740
+
741
+ sv.configure
742
+ assert_equal Fluent::Log::LEVEL_ERROR, $log.level
743
+ end
744
+
745
+ def test_enable_shared_socket
746
+ server = DummyServer.new
747
+ begin
748
+ ENV.delete('SERVERENGINE_SOCKETMANAGER_PATH')
749
+ server.before_run
750
+ sleep 0.1 if Fluent.windows? # Wait for starting windows event thread
751
+ assert_not_nil(ENV['SERVERENGINE_SOCKETMANAGER_PATH'])
752
+ ensure
753
+ server.after_run
754
+ ENV.delete('SERVERENGINE_SOCKETMANAGER_PATH')
755
+ end
756
+ end
757
+
758
+ def test_disable_shared_socket
759
+ server = DummyServer.new
760
+ def server.config
761
+ {
762
+ :disable_shared_socket => true,
763
+ }
764
+ end
765
+ begin
766
+ ENV.delete('SERVERENGINE_SOCKETMANAGER_PATH')
767
+ server.before_run
768
+ sleep 0.1 if Fluent.windows? # Wait for starting windows event thread
769
+ assert_nil(ENV['SERVERENGINE_SOCKETMANAGER_PATH'])
770
+ ensure
771
+ server.after_run
772
+ ENV.delete('SERVERENGINE_SOCKETMANAGER_PATH')
773
+ end
774
+ end
775
+
776
+ def create_debug_dummy_logger
777
+ dl_opts = {}
778
+ dl_opts[:log_level] = ServerEngine::DaemonLogger::DEBUG
779
+ logdev = Fluent::Test::DummyLogDevice.new
780
+ logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
781
+ $log = Fluent::Log.new(logger)
782
+ end
783
+
784
+ def create_info_dummy_logger
785
+ dl_opts = {}
786
+ dl_opts[:log_level] = ServerEngine::DaemonLogger::INFO
787
+ logdev = Fluent::Test::DummyLogDevice.new
788
+ logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
789
+ $log = Fluent::Log.new(logger)
790
+ end
791
+ end