fluentd 0.12.40 → 1.6.2

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 (428) hide show
  1. checksums.yaml +5 -5
  2. data/.github/ISSUE_TEMPLATE/bug_report.md +39 -0
  3. data/.github/ISSUE_TEMPLATE/feature_request.md +23 -0
  4. data/.github/ISSUE_TEMPLATE.md +17 -0
  5. data/.github/PULL_REQUEST_TEMPLATE.md +13 -0
  6. data/.gitignore +5 -0
  7. data/.gitlab/cicd-template.yaml +10 -0
  8. data/.gitlab-ci.yml +147 -0
  9. data/.travis.yml +56 -20
  10. data/ADOPTERS.md +5 -0
  11. data/CHANGELOG.md +1369 -0
  12. data/CONTRIBUTING.md +16 -5
  13. data/GOVERNANCE.md +55 -0
  14. data/Gemfile +5 -0
  15. data/GithubWorkflow.md +78 -0
  16. data/LICENSE +202 -0
  17. data/MAINTAINERS.md +7 -0
  18. data/README.md +23 -11
  19. data/Rakefile +48 -2
  20. data/Vagrantfile +17 -0
  21. data/appveyor.yml +37 -0
  22. data/bin/fluent-binlog-reader +7 -0
  23. data/bin/fluent-ca-generate +6 -0
  24. data/bin/fluent-plugin-config-format +5 -0
  25. data/bin/fluent-plugin-generate +5 -0
  26. data/bin/fluentd +3 -0
  27. data/code-of-conduct.md +3 -0
  28. data/example/copy_roundrobin.conf +39 -0
  29. data/example/counter.conf +18 -0
  30. data/example/in_dummy_blocks.conf +17 -0
  31. data/example/in_dummy_with_compression.conf +23 -0
  32. data/example/in_forward.conf +7 -0
  33. data/example/in_forward_client.conf +37 -0
  34. data/example/in_forward_shared_key.conf +15 -0
  35. data/example/in_forward_tls.conf +14 -0
  36. data/example/in_forward_users.conf +24 -0
  37. data/example/in_forward_workers.conf +21 -0
  38. data/example/in_http.conf +3 -1
  39. data/example/in_out_forward.conf +17 -0
  40. data/example/logevents.conf +25 -0
  41. data/example/multi_filters.conf +61 -0
  42. data/example/out_exec_filter.conf +42 -0
  43. data/example/out_forward.conf +13 -13
  44. data/example/out_forward_buf_file.conf +23 -0
  45. data/example/out_forward_client.conf +109 -0
  46. data/example/out_forward_heartbeat_none.conf +16 -0
  47. data/example/out_forward_shared_key.conf +36 -0
  48. data/example/out_forward_tls.conf +18 -0
  49. data/example/out_forward_users.conf +65 -0
  50. data/example/out_null.conf +36 -0
  51. data/example/secondary_file.conf +42 -0
  52. data/example/suppress_config_dump.conf +7 -0
  53. data/example/worker_section.conf +36 -0
  54. data/fluent.conf +29 -0
  55. data/fluentd.gemspec +21 -11
  56. data/lib/fluent/agent.rb +67 -90
  57. data/lib/fluent/clock.rb +62 -0
  58. data/lib/fluent/command/binlog_reader.rb +244 -0
  59. data/lib/fluent/command/ca_generate.rb +181 -0
  60. data/lib/fluent/command/cat.rb +42 -18
  61. data/lib/fluent/command/debug.rb +12 -10
  62. data/lib/fluent/command/fluentd.rb +153 -5
  63. data/lib/fluent/command/plugin_config_formatter.rb +292 -0
  64. data/lib/fluent/command/plugin_generator.rb +324 -0
  65. data/lib/fluent/compat/call_super_mixin.rb +67 -0
  66. data/lib/fluent/compat/detach_process_mixin.rb +33 -0
  67. data/lib/fluent/compat/exec_util.rb +129 -0
  68. data/lib/fluent/compat/file_util.rb +54 -0
  69. data/lib/fluent/compat/filter.rb +68 -0
  70. data/lib/fluent/compat/formatter.rb +111 -0
  71. data/lib/fluent/compat/formatter_utils.rb +85 -0
  72. data/lib/fluent/compat/handle_tag_and_time_mixin.rb +62 -0
  73. data/lib/fluent/compat/handle_tag_name_mixin.rb +53 -0
  74. data/lib/fluent/compat/input.rb +49 -0
  75. data/lib/fluent/compat/output.rb +718 -0
  76. data/lib/fluent/compat/output_chain.rb +60 -0
  77. data/lib/fluent/compat/parser.rb +310 -0
  78. data/lib/fluent/compat/parser_utils.rb +40 -0
  79. data/lib/fluent/compat/propagate_default.rb +62 -0
  80. data/lib/fluent/compat/record_filter_mixin.rb +34 -0
  81. data/lib/fluent/compat/set_tag_key_mixin.rb +50 -0
  82. data/lib/fluent/compat/set_time_key_mixin.rb +69 -0
  83. data/lib/fluent/compat/socket_util.rb +165 -0
  84. data/lib/fluent/compat/string_util.rb +34 -0
  85. data/lib/fluent/compat/structured_format_mixin.rb +26 -0
  86. data/lib/fluent/compat/type_converter.rb +90 -0
  87. data/lib/fluent/config/configure_proxy.rb +210 -62
  88. data/lib/fluent/config/dsl.rb +12 -5
  89. data/lib/fluent/config/element.rb +107 -9
  90. data/lib/fluent/config/literal_parser.rb +9 -3
  91. data/lib/fluent/config/parser.rb +4 -4
  92. data/lib/fluent/config/section.rb +51 -14
  93. data/lib/fluent/config/types.rb +28 -13
  94. data/lib/fluent/config/v1_parser.rb +3 -5
  95. data/lib/fluent/config.rb +23 -20
  96. data/lib/fluent/configurable.rb +79 -21
  97. data/lib/fluent/counter/base_socket.rb +46 -0
  98. data/lib/fluent/counter/client.rb +297 -0
  99. data/lib/fluent/counter/error.rb +86 -0
  100. data/lib/fluent/counter/mutex_hash.rb +163 -0
  101. data/lib/fluent/counter/server.rb +273 -0
  102. data/lib/fluent/counter/store.rb +205 -0
  103. data/lib/fluent/counter/validator.rb +145 -0
  104. data/lib/fluent/counter.rb +23 -0
  105. data/lib/fluent/daemon.rb +15 -0
  106. data/lib/fluent/engine.rb +102 -65
  107. data/lib/fluent/env.rb +7 -3
  108. data/lib/fluent/error.rb +30 -0
  109. data/lib/fluent/event.rb +197 -21
  110. data/lib/fluent/event_router.rb +93 -10
  111. data/lib/fluent/filter.rb +2 -50
  112. data/lib/fluent/formatter.rb +4 -293
  113. data/lib/fluent/input.rb +2 -32
  114. data/lib/fluent/label.rb +10 -2
  115. data/lib/fluent/load.rb +3 -3
  116. data/lib/fluent/log.rb +348 -81
  117. data/lib/fluent/match.rb +37 -36
  118. data/lib/fluent/mixin.rb +12 -176
  119. data/lib/fluent/msgpack_factory.rb +62 -0
  120. data/lib/fluent/output.rb +10 -612
  121. data/lib/fluent/output_chain.rb +23 -0
  122. data/lib/fluent/parser.rb +4 -800
  123. data/lib/fluent/plugin/bare_output.rb +63 -0
  124. data/lib/fluent/plugin/base.rb +192 -0
  125. data/lib/fluent/plugin/buf_file.rb +128 -174
  126. data/lib/fluent/plugin/buf_memory.rb +9 -92
  127. data/lib/fluent/plugin/buffer/chunk.rb +221 -0
  128. data/lib/fluent/plugin/buffer/file_chunk.rb +383 -0
  129. data/lib/fluent/plugin/buffer/memory_chunk.rb +90 -0
  130. data/lib/fluent/plugin/buffer.rb +779 -0
  131. data/lib/fluent/plugin/compressable.rb +92 -0
  132. data/lib/fluent/plugin/exec_util.rb +3 -108
  133. data/lib/fluent/plugin/file_util.rb +4 -34
  134. data/lib/fluent/plugin/file_wrapper.rb +120 -0
  135. data/lib/fluent/plugin/filter.rb +93 -0
  136. data/lib/fluent/plugin/filter_grep.rb +117 -34
  137. data/lib/fluent/plugin/filter_parser.rb +85 -62
  138. data/lib/fluent/plugin/filter_record_transformer.rb +27 -39
  139. data/lib/fluent/plugin/filter_stdout.rb +15 -12
  140. data/lib/fluent/plugin/formatter.rb +50 -0
  141. data/lib/fluent/plugin/formatter_csv.rb +52 -0
  142. data/lib/fluent/plugin/formatter_hash.rb +33 -0
  143. data/lib/fluent/plugin/formatter_json.rb +55 -0
  144. data/lib/fluent/plugin/formatter_ltsv.rb +42 -0
  145. data/lib/fluent/plugin/formatter_msgpack.rb +33 -0
  146. data/lib/fluent/plugin/formatter_out_file.rb +51 -0
  147. data/lib/fluent/plugin/formatter_single_value.rb +34 -0
  148. data/lib/fluent/plugin/formatter_stdout.rb +76 -0
  149. data/lib/fluent/plugin/formatter_tsv.rb +38 -0
  150. data/lib/fluent/plugin/in_debug_agent.rb +17 -6
  151. data/lib/fluent/plugin/in_dummy.rb +47 -20
  152. data/lib/fluent/plugin/in_exec.rb +55 -123
  153. data/lib/fluent/plugin/in_forward.rb +299 -216
  154. data/lib/fluent/plugin/in_gc_stat.rb +14 -36
  155. data/lib/fluent/plugin/in_http.rb +204 -91
  156. data/lib/fluent/plugin/in_monitor_agent.rb +186 -258
  157. data/lib/fluent/plugin/in_object_space.rb +13 -41
  158. data/lib/fluent/plugin/in_syslog.rb +112 -134
  159. data/lib/fluent/plugin/in_tail.rb +408 -745
  160. data/lib/fluent/plugin/in_tcp.rb +66 -9
  161. data/lib/fluent/plugin/in_udp.rb +60 -11
  162. data/lib/fluent/plugin/{in_stream.rb → in_unix.rb} +8 -4
  163. data/lib/fluent/plugin/input.rb +37 -0
  164. data/lib/fluent/plugin/multi_output.rb +158 -0
  165. data/lib/fluent/plugin/out_copy.rb +23 -35
  166. data/lib/fluent/plugin/out_exec.rb +67 -70
  167. data/lib/fluent/plugin/out_exec_filter.rb +204 -271
  168. data/lib/fluent/plugin/out_file.rb +267 -73
  169. data/lib/fluent/plugin/out_forward.rb +854 -325
  170. data/lib/fluent/plugin/out_null.rb +42 -9
  171. data/lib/fluent/plugin/out_relabel.rb +9 -5
  172. data/lib/fluent/plugin/out_roundrobin.rb +18 -37
  173. data/lib/fluent/plugin/out_secondary_file.rb +133 -0
  174. data/lib/fluent/plugin/out_stdout.rb +43 -10
  175. data/lib/fluent/plugin/out_stream.rb +7 -2
  176. data/lib/fluent/plugin/output.rb +1498 -0
  177. data/lib/fluent/plugin/owned_by_mixin.rb +42 -0
  178. data/lib/fluent/plugin/parser.rb +191 -0
  179. data/lib/fluent/plugin/parser_apache.rb +28 -0
  180. data/lib/fluent/plugin/parser_apache2.rb +88 -0
  181. data/lib/fluent/plugin/parser_apache_error.rb +26 -0
  182. data/lib/fluent/plugin/parser_csv.rb +39 -0
  183. data/lib/fluent/plugin/parser_json.rb +94 -0
  184. data/lib/fluent/plugin/parser_ltsv.rb +49 -0
  185. data/lib/fluent/plugin/parser_msgpack.rb +50 -0
  186. data/lib/fluent/plugin/parser_multiline.rb +106 -0
  187. data/lib/fluent/plugin/parser_nginx.rb +28 -0
  188. data/lib/fluent/plugin/parser_none.rb +36 -0
  189. data/lib/fluent/plugin/parser_regexp.rb +68 -0
  190. data/lib/fluent/plugin/parser_syslog.rb +142 -0
  191. data/lib/fluent/plugin/parser_tsv.rb +42 -0
  192. data/lib/fluent/plugin/socket_util.rb +3 -143
  193. data/lib/fluent/plugin/storage.rb +84 -0
  194. data/lib/fluent/plugin/storage_local.rb +164 -0
  195. data/lib/fluent/plugin/string_util.rb +3 -15
  196. data/lib/fluent/plugin.rb +122 -121
  197. data/lib/fluent/plugin_helper/cert_option.rb +178 -0
  198. data/lib/fluent/plugin_helper/child_process.rb +364 -0
  199. data/lib/fluent/plugin_helper/compat_parameters.rb +333 -0
  200. data/lib/fluent/plugin_helper/counter.rb +51 -0
  201. data/lib/fluent/plugin_helper/event_emitter.rb +93 -0
  202. data/lib/fluent/plugin_helper/event_loop.rb +170 -0
  203. data/lib/fluent/plugin_helper/extract.rb +104 -0
  204. data/lib/fluent/plugin_helper/formatter.rb +147 -0
  205. data/lib/fluent/plugin_helper/http_server/app.rb +79 -0
  206. data/lib/fluent/plugin_helper/http_server/compat/server.rb +81 -0
  207. data/lib/fluent/plugin_helper/http_server/compat/webrick_handler.rb +58 -0
  208. data/lib/fluent/plugin_helper/http_server/methods.rb +35 -0
  209. data/lib/fluent/plugin_helper/http_server/request.rb +42 -0
  210. data/lib/fluent/plugin_helper/http_server/router.rb +54 -0
  211. data/lib/fluent/plugin_helper/http_server/server.rb +87 -0
  212. data/lib/fluent/plugin_helper/http_server.rb +76 -0
  213. data/lib/fluent/plugin_helper/inject.rb +151 -0
  214. data/lib/fluent/plugin_helper/parser.rb +147 -0
  215. data/lib/fluent/plugin_helper/record_accessor.rb +210 -0
  216. data/lib/fluent/plugin_helper/retry_state.rb +205 -0
  217. data/lib/fluent/plugin_helper/server.rb +807 -0
  218. data/lib/fluent/plugin_helper/socket.rb +250 -0
  219. data/lib/fluent/plugin_helper/socket_option.rb +80 -0
  220. data/lib/fluent/plugin_helper/storage.rb +349 -0
  221. data/lib/fluent/plugin_helper/thread.rb +179 -0
  222. data/lib/fluent/plugin_helper/timer.rb +92 -0
  223. data/lib/fluent/plugin_helper.rb +73 -0
  224. data/lib/fluent/plugin_id.rb +80 -0
  225. data/lib/fluent/process.rb +3 -489
  226. data/lib/fluent/registry.rb +52 -10
  227. data/lib/fluent/root_agent.rb +204 -42
  228. data/lib/fluent/supervisor.rb +597 -359
  229. data/lib/fluent/system_config.rb +131 -42
  230. data/lib/fluent/test/base.rb +6 -54
  231. data/lib/fluent/test/driver/base.rb +224 -0
  232. data/lib/fluent/test/driver/base_owned.rb +70 -0
  233. data/lib/fluent/test/driver/base_owner.rb +135 -0
  234. data/lib/fluent/test/driver/event_feeder.rb +98 -0
  235. data/lib/fluent/test/driver/filter.rb +57 -0
  236. data/lib/fluent/test/driver/formatter.rb +30 -0
  237. data/lib/fluent/test/driver/input.rb +31 -0
  238. data/lib/fluent/test/driver/multi_output.rb +53 -0
  239. data/lib/fluent/test/driver/output.rb +102 -0
  240. data/lib/fluent/test/driver/parser.rb +30 -0
  241. data/lib/fluent/test/driver/test_event_router.rb +45 -0
  242. data/lib/fluent/test/filter_test.rb +0 -1
  243. data/lib/fluent/test/formatter_test.rb +4 -1
  244. data/lib/fluent/test/helpers.rb +58 -10
  245. data/lib/fluent/test/input_test.rb +27 -19
  246. data/lib/fluent/test/log.rb +79 -0
  247. data/lib/fluent/test/output_test.rb +28 -39
  248. data/lib/fluent/test/parser_test.rb +3 -1
  249. data/lib/fluent/test/startup_shutdown.rb +46 -0
  250. data/lib/fluent/test.rb +33 -1
  251. data/lib/fluent/time.rb +450 -1
  252. data/lib/fluent/timezone.rb +27 -3
  253. data/lib/fluent/{status.rb → unique_id.rb} +15 -24
  254. data/lib/fluent/version.rb +1 -1
  255. data/lib/fluent/winsvc.rb +85 -0
  256. data/templates/new_gem/Gemfile +3 -0
  257. data/templates/new_gem/README.md.erb +43 -0
  258. data/templates/new_gem/Rakefile +13 -0
  259. data/templates/new_gem/fluent-plugin.gemspec.erb +27 -0
  260. data/templates/new_gem/lib/fluent/plugin/filter.rb.erb +14 -0
  261. data/templates/new_gem/lib/fluent/plugin/formatter.rb.erb +14 -0
  262. data/templates/new_gem/lib/fluent/plugin/input.rb.erb +11 -0
  263. data/templates/new_gem/lib/fluent/plugin/output.rb.erb +11 -0
  264. data/templates/new_gem/lib/fluent/plugin/parser.rb.erb +15 -0
  265. data/templates/new_gem/test/helper.rb.erb +8 -0
  266. data/templates/new_gem/test/plugin/test_filter.rb.erb +18 -0
  267. data/templates/new_gem/test/plugin/test_formatter.rb.erb +18 -0
  268. data/templates/new_gem/test/plugin/test_input.rb.erb +18 -0
  269. data/templates/new_gem/test/plugin/test_output.rb.erb +18 -0
  270. data/templates/new_gem/test/plugin/test_parser.rb.erb +18 -0
  271. data/templates/plugin_config_formatter/param.md-compact.erb +25 -0
  272. data/templates/plugin_config_formatter/param.md.erb +34 -0
  273. data/templates/plugin_config_formatter/section.md.erb +12 -0
  274. data/test/command/test_binlog_reader.rb +346 -0
  275. data/test/command/test_ca_generate.rb +70 -0
  276. data/test/command/test_fluentd.rb +901 -0
  277. data/test/command/test_plugin_config_formatter.rb +276 -0
  278. data/test/command/test_plugin_generator.rb +92 -0
  279. data/test/compat/test_calls_super.rb +166 -0
  280. data/test/compat/test_parser.rb +92 -0
  281. data/test/config/test_config_parser.rb +126 -2
  282. data/test/config/test_configurable.rb +946 -187
  283. data/test/config/test_configure_proxy.rb +424 -74
  284. data/test/config/test_dsl.rb +11 -11
  285. data/test/config/test_element.rb +500 -0
  286. data/test/config/test_literal_parser.rb +8 -0
  287. data/test/config/test_plugin_configuration.rb +56 -0
  288. data/test/config/test_section.rb +79 -7
  289. data/test/config/test_system_config.rb +122 -35
  290. data/test/config/test_types.rb +38 -0
  291. data/test/counter/test_client.rb +559 -0
  292. data/test/counter/test_error.rb +44 -0
  293. data/test/counter/test_mutex_hash.rb +179 -0
  294. data/test/counter/test_server.rb +589 -0
  295. data/test/counter/test_store.rb +258 -0
  296. data/test/counter/test_validator.rb +137 -0
  297. data/test/helper.rb +89 -6
  298. data/test/helpers/fuzzy_assert.rb +89 -0
  299. data/test/plugin/test_bare_output.rb +118 -0
  300. data/test/plugin/test_base.rb +115 -0
  301. data/test/plugin/test_buf_file.rb +823 -460
  302. data/test/plugin/test_buf_memory.rb +32 -194
  303. data/test/plugin/test_buffer.rb +1233 -0
  304. data/test/plugin/test_buffer_chunk.rb +198 -0
  305. data/test/plugin/test_buffer_file_chunk.rb +844 -0
  306. data/test/plugin/test_buffer_memory_chunk.rb +338 -0
  307. data/test/plugin/test_compressable.rb +84 -0
  308. data/test/plugin/test_filter.rb +357 -0
  309. data/test/plugin/test_filter_grep.rb +540 -29
  310. data/test/plugin/test_filter_parser.rb +439 -452
  311. data/test/plugin/test_filter_record_transformer.rb +123 -166
  312. data/test/plugin/test_filter_stdout.rb +160 -72
  313. data/test/plugin/test_formatter_csv.rb +111 -0
  314. data/test/plugin/test_formatter_hash.rb +35 -0
  315. data/test/plugin/test_formatter_json.rb +51 -0
  316. data/test/plugin/test_formatter_ltsv.rb +62 -0
  317. data/test/plugin/test_formatter_msgpack.rb +28 -0
  318. data/test/plugin/test_formatter_out_file.rb +95 -0
  319. data/test/plugin/test_formatter_single_value.rb +38 -0
  320. data/test/plugin/test_formatter_tsv.rb +68 -0
  321. data/test/plugin/test_in_debug_agent.rb +24 -1
  322. data/test/plugin/test_in_dummy.rb +111 -18
  323. data/test/plugin/test_in_exec.rb +200 -113
  324. data/test/plugin/test_in_forward.rb +990 -387
  325. data/test/plugin/test_in_gc_stat.rb +10 -8
  326. data/test/plugin/test_in_http.rb +600 -224
  327. data/test/plugin/test_in_monitor_agent.rb +690 -0
  328. data/test/plugin/test_in_object_space.rb +24 -8
  329. data/test/plugin/test_in_syslog.rb +154 -215
  330. data/test/plugin/test_in_tail.rb +1006 -707
  331. data/test/plugin/test_in_tcp.rb +125 -48
  332. data/test/plugin/test_in_udp.rb +204 -63
  333. data/test/plugin/{test_in_stream.rb → test_in_unix.rb} +14 -13
  334. data/test/plugin/test_input.rb +126 -0
  335. data/test/plugin/test_metadata.rb +89 -0
  336. data/test/plugin/test_multi_output.rb +180 -0
  337. data/test/plugin/test_out_copy.rb +117 -112
  338. data/test/plugin/test_out_exec.rb +258 -53
  339. data/test/plugin/test_out_exec_filter.rb +538 -115
  340. data/test/plugin/test_out_file.rb +865 -178
  341. data/test/plugin/test_out_forward.rb +998 -210
  342. data/test/plugin/test_out_null.rb +105 -0
  343. data/test/plugin/test_out_relabel.rb +28 -0
  344. data/test/plugin/test_out_roundrobin.rb +36 -29
  345. data/test/plugin/test_out_secondary_file.rb +458 -0
  346. data/test/plugin/test_out_stdout.rb +135 -37
  347. data/test/plugin/test_out_stream.rb +18 -0
  348. data/test/plugin/test_output.rb +984 -0
  349. data/test/plugin/test_output_as_buffered.rb +2021 -0
  350. data/test/plugin/test_output_as_buffered_backup.rb +312 -0
  351. data/test/plugin/test_output_as_buffered_compress.rb +165 -0
  352. data/test/plugin/test_output_as_buffered_overflow.rb +250 -0
  353. data/test/plugin/test_output_as_buffered_retries.rb +911 -0
  354. data/test/plugin/test_output_as_buffered_secondary.rb +874 -0
  355. data/test/plugin/test_output_as_standard.rb +374 -0
  356. data/test/plugin/test_owned_by.rb +35 -0
  357. data/test/plugin/test_parser.rb +359 -0
  358. data/test/plugin/test_parser_apache.rb +42 -0
  359. data/test/plugin/test_parser_apache2.rb +47 -0
  360. data/test/plugin/test_parser_apache_error.rb +45 -0
  361. data/test/plugin/test_parser_csv.rb +103 -0
  362. data/test/plugin/test_parser_json.rb +138 -0
  363. data/test/plugin/test_parser_labeled_tsv.rb +145 -0
  364. data/test/plugin/test_parser_multiline.rb +100 -0
  365. data/test/plugin/test_parser_nginx.rb +88 -0
  366. data/test/plugin/test_parser_none.rb +52 -0
  367. data/test/plugin/test_parser_regexp.rb +289 -0
  368. data/test/plugin/test_parser_syslog.rb +441 -0
  369. data/test/plugin/test_parser_tsv.rb +122 -0
  370. data/test/plugin/test_storage.rb +167 -0
  371. data/test/plugin/test_storage_local.rb +335 -0
  372. data/test/plugin_helper/data/cert/cert-key.pem +27 -0
  373. data/test/plugin_helper/data/cert/cert-with-no-newline.pem +19 -0
  374. data/test/plugin_helper/data/cert/cert.pem +19 -0
  375. data/test/plugin_helper/http_server/test_app.rb +65 -0
  376. data/test/plugin_helper/http_server/test_route.rb +32 -0
  377. data/test/plugin_helper/test_cert_option.rb +16 -0
  378. data/test/plugin_helper/test_child_process.rb +794 -0
  379. data/test/plugin_helper/test_compat_parameters.rb +353 -0
  380. data/test/plugin_helper/test_event_emitter.rb +51 -0
  381. data/test/plugin_helper/test_event_loop.rb +52 -0
  382. data/test/plugin_helper/test_extract.rb +194 -0
  383. data/test/plugin_helper/test_formatter.rb +255 -0
  384. data/test/plugin_helper/test_http_server_helper.rb +205 -0
  385. data/test/plugin_helper/test_inject.rb +519 -0
  386. data/test/plugin_helper/test_parser.rb +264 -0
  387. data/test/plugin_helper/test_record_accessor.rb +197 -0
  388. data/test/plugin_helper/test_retry_state.rb +442 -0
  389. data/test/plugin_helper/test_server.rb +1714 -0
  390. data/test/plugin_helper/test_storage.rb +542 -0
  391. data/test/plugin_helper/test_thread.rb +164 -0
  392. data/test/plugin_helper/test_timer.rb +132 -0
  393. data/test/scripts/exec_script.rb +0 -6
  394. data/test/scripts/fluent/plugin/formatter1/formatter_test1.rb +7 -0
  395. data/test/scripts/fluent/plugin/formatter2/formatter_test2.rb +7 -0
  396. data/test/scripts/fluent/plugin/out_test.rb +23 -15
  397. data/test/scripts/fluent/plugin/out_test2.rb +80 -0
  398. data/test/test_clock.rb +164 -0
  399. data/test/test_config.rb +16 -7
  400. data/test/test_configdsl.rb +2 -2
  401. data/test/test_event.rb +360 -13
  402. data/test/test_event_router.rb +108 -11
  403. data/test/test_event_time.rb +199 -0
  404. data/test/test_filter.rb +48 -6
  405. data/test/test_formatter.rb +11 -391
  406. data/test/test_input.rb +1 -1
  407. data/test/test_log.rb +591 -31
  408. data/test/test_mixin.rb +1 -1
  409. data/test/test_output.rb +121 -185
  410. data/test/test_plugin.rb +251 -0
  411. data/test/test_plugin_classes.rb +177 -10
  412. data/test/test_plugin_helper.rb +81 -0
  413. data/test/test_plugin_id.rb +101 -0
  414. data/test/test_process.rb +8 -42
  415. data/test/test_root_agent.rb +766 -21
  416. data/test/test_supervisor.rb +481 -0
  417. data/test/test_test_drivers.rb +135 -0
  418. data/test/test_time_formatter.rb +282 -0
  419. data/test/test_time_parser.rb +231 -0
  420. data/test/test_unique_id.rb +47 -0
  421. metadata +454 -60
  422. data/COPYING +0 -14
  423. data/ChangeLog +0 -666
  424. data/lib/fluent/buffer.rb +0 -365
  425. data/lib/fluent/plugin/in_status.rb +0 -76
  426. data/test/plugin/test_in_status.rb +0 -38
  427. data/test/test_buffer.rb +0 -624
  428. data/test/test_parser.rb +0 -1305
@@ -0,0 +1,255 @@
1
+ require_relative '../helper'
2
+ require 'fluent/plugin_helper/formatter'
3
+ require 'fluent/plugin/base'
4
+
5
+ class FormatterHelperTest < Test::Unit::TestCase
6
+ class ExampleFormatter < Fluent::Plugin::Formatter
7
+ Fluent::Plugin.register_formatter('example', self)
8
+ def format(tag, time, record)
9
+ "#{tag},#{time.to_i},#{record.keys.sort.join(',')}" # hey, you miss values! :P
10
+ end
11
+ end
12
+ class Example2Formatter < Fluent::Plugin::Formatter
13
+ Fluent::Plugin.register_formatter('example2', self)
14
+ def format(tag, time, record)
15
+ "#{tag},#{time.to_i},#{record.values.sort.join(',')}" # key...
16
+ end
17
+ end
18
+ class Dummy < Fluent::Plugin::TestBase
19
+ helpers :formatter
20
+ config_section :format do
21
+ config_set_default :@type, 'example'
22
+ end
23
+ end
24
+
25
+ class Dummy2 < Fluent::Plugin::TestBase
26
+ helpers :formatter
27
+ config_section :format do
28
+ config_set_default :@type, 'example2'
29
+ end
30
+ end
31
+
32
+ setup do
33
+ @d = nil
34
+ end
35
+
36
+ teardown do
37
+ if @d
38
+ @d.stop unless @d.stopped?
39
+ @d.shutdown unless @d.shutdown?
40
+ @d.close unless @d.closed?
41
+ @d.terminate unless @d.terminated?
42
+ end
43
+ end
44
+
45
+ test 'can be initialized without any formatters at first' do
46
+ d = Dummy.new
47
+ assert_equal 0, d._formatters.size
48
+ end
49
+
50
+ test 'can override default configuration parameters, but not overwrite whole definition' do
51
+ d = Dummy.new
52
+ assert_equal [], d.formatter_configs
53
+
54
+ d = Dummy2.new
55
+ d.configure(config_element('ROOT', '', {}, [config_element('format', '', {}, [])]))
56
+ assert_raise NoMethodError do
57
+ d.format
58
+ end
59
+ assert_equal 1, d.formatter_configs.size
60
+ assert_equal 'example2', d.formatter_configs.first[:@type]
61
+ end
62
+
63
+ test 'creates instance of type specified by conf, or default_type if @type is missing in conf' do
64
+ d = Dummy2.new
65
+ d.configure(config_element())
66
+ i = d.formatter_create(conf: config_element('format', '', {'@type' => 'example'}), default_type: 'example2')
67
+ assert{ i.is_a?(ExampleFormatter) }
68
+
69
+ d = Dummy2.new
70
+ d.configure(config_element())
71
+ i = d.formatter_create(conf: nil, default_type: 'example2')
72
+ assert{ i.is_a?(Example2Formatter) }
73
+ end
74
+
75
+ test 'raises config error if config section is specified, but @type is not specified' do
76
+ d = Dummy2.new
77
+ d.configure(config_element())
78
+ assert_raise Fluent::ConfigError.new("@type is required in <format>") do
79
+ d.formatter_create(conf: config_element('format', '', {}), default_type: 'example2')
80
+ end
81
+ end
82
+
83
+ test 'can be configured with default type without format sections' do
84
+ d = Dummy.new
85
+ assert_nothing_raised do
86
+ d.configure(config_element())
87
+ end
88
+ assert_equal 1, d._formatters.size
89
+ end
90
+
91
+ test 'can be configured with a format section' do
92
+ d = Dummy.new
93
+ conf = config_element('ROOT', '', {}, [
94
+ config_element('format', '', {'@type' => 'example'})
95
+ ])
96
+ assert_nothing_raised do
97
+ d.configure(conf)
98
+ end
99
+ assert_equal 1, d._formatters.size
100
+ assert{ d._formatters.values.all?{ |formatter| !formatter.started? } }
101
+ end
102
+
103
+ test 'can be configured with 2 or more format sections with different usages with each other' do
104
+ d = Dummy.new
105
+ conf = config_element('ROOT', '', {}, [
106
+ config_element('format', 'default', {'@type' => 'example'}),
107
+ config_element('format', 'extra', {'@type' => 'example2'}),
108
+ ])
109
+ assert_nothing_raised do
110
+ d.configure(conf)
111
+ end
112
+ assert_equal 2, d._formatters.size
113
+ assert{ d._formatters.values.all?{ |formatter| !formatter.started? } }
114
+ end
115
+
116
+ test 'cannot be configured with 2 format sections with same usage' do
117
+ d = Dummy.new
118
+ conf = config_element('ROOT', '', {}, [
119
+ config_element('format', 'default', {'@type' => 'example'}),
120
+ config_element('format', 'extra', {'@type' => 'example2'}),
121
+ config_element('format', 'extra', {'@type' => 'example2'}),
122
+ ])
123
+ assert_raises Fluent::ConfigError do
124
+ d.configure(conf)
125
+ end
126
+ end
127
+
128
+ test 'creates a format plugin instance which is already configured without usage' do
129
+ @d = d = Dummy.new
130
+ conf = config_element('ROOT', '', {}, [
131
+ config_element('format', '', {'@type' => 'example'})
132
+ ])
133
+ d.configure(conf)
134
+ d.start
135
+
136
+ formatter = d.formatter_create
137
+ assert{ formatter.is_a? ExampleFormatter }
138
+ assert formatter.started?
139
+ end
140
+
141
+ test 'creates a formatter plugin instance which is already configured with usage' do
142
+ @d = d = Dummy.new
143
+ conf = config_element('ROOT', '', {}, [
144
+ config_element('format', 'mydata', {'@type' => 'example'})
145
+ ])
146
+ d.configure(conf)
147
+ d.start
148
+
149
+ formatter = d.formatter_create(usage: 'mydata')
150
+ assert{ formatter.is_a? ExampleFormatter }
151
+ assert formatter.started?
152
+ end
153
+
154
+ test 'creates a formatter plugin without configurations' do
155
+ @d = d = Dummy.new
156
+ d.configure(config_element())
157
+ d.start
158
+
159
+ formatter = d.formatter_create(usage: 'mydata', type: 'example', conf: config_element('format', 'mydata'))
160
+ assert{ formatter.is_a? ExampleFormatter }
161
+ assert formatter.started?
162
+ end
163
+
164
+ test 'creates 2 or more formatter plugin instances' do
165
+ @d = d = Dummy.new
166
+ conf = config_element('ROOT', '', {}, [
167
+ config_element('format', 'mydata', {'@type' => 'example'}),
168
+ config_element('format', 'secret', {'@type' => 'example2'})
169
+ ])
170
+ d.configure(conf)
171
+ d.start
172
+
173
+ p1 = d.formatter_create(usage: 'mydata')
174
+ p2 = d.formatter_create(usage: 'secret')
175
+ assert{ p1.is_a? ExampleFormatter }
176
+ assert p1.started?
177
+ assert{ p2.is_a? Example2Formatter }
178
+ assert p2.started?
179
+ end
180
+
181
+ test 'calls lifecycle methods for all plugin instances via owner plugin' do
182
+ @d = d = Dummy.new
183
+ conf = config_element('ROOT', '', {}, [ config_element('format', '', {'@type' => 'example'}), config_element('format', 'e2', {'@type' => 'example'}) ])
184
+ d.configure(conf)
185
+ d.start
186
+
187
+ i1 = d.formatter_create(usage: '')
188
+ i2 = d.formatter_create(usage: 'e2')
189
+ i3 = d.formatter_create(usage: 'e3', type: 'example2')
190
+
191
+ assert i1.started?
192
+ assert i2.started?
193
+ assert i3.started?
194
+
195
+ assert !i1.stopped?
196
+ assert !i2.stopped?
197
+ assert !i3.stopped?
198
+
199
+ d.stop
200
+
201
+ assert i1.stopped?
202
+ assert i2.stopped?
203
+ assert i3.stopped?
204
+
205
+ assert !i1.before_shutdown?
206
+ assert !i2.before_shutdown?
207
+ assert !i3.before_shutdown?
208
+
209
+ d.before_shutdown
210
+
211
+ assert i1.before_shutdown?
212
+ assert i2.before_shutdown?
213
+ assert i3.before_shutdown?
214
+
215
+ assert !i1.shutdown?
216
+ assert !i2.shutdown?
217
+ assert !i3.shutdown?
218
+
219
+ d.shutdown
220
+
221
+ assert i1.shutdown?
222
+ assert i2.shutdown?
223
+ assert i3.shutdown?
224
+
225
+ assert !i1.after_shutdown?
226
+ assert !i2.after_shutdown?
227
+ assert !i3.after_shutdown?
228
+
229
+ d.after_shutdown
230
+
231
+ assert i1.after_shutdown?
232
+ assert i2.after_shutdown?
233
+ assert i3.after_shutdown?
234
+
235
+ assert !i1.closed?
236
+ assert !i2.closed?
237
+ assert !i3.closed?
238
+
239
+ d.close
240
+
241
+ assert i1.closed?
242
+ assert i2.closed?
243
+ assert i3.closed?
244
+
245
+ assert !i1.terminated?
246
+ assert !i2.terminated?
247
+ assert !i3.terminated?
248
+
249
+ d.terminate
250
+
251
+ assert i1.terminated?
252
+ assert i2.terminated?
253
+ assert i3.terminated?
254
+ end
255
+ end
@@ -0,0 +1,205 @@
1
+ require_relative '../helper'
2
+ require 'flexmock/test_unit'
3
+ require 'fluent/plugin_helper/http_server'
4
+ require 'fluent/plugin/output'
5
+ require 'fluent/event'
6
+ require 'net/http'
7
+ require 'uri'
8
+
9
+ class HtttpHelperTest < Test::Unit::TestCase
10
+ PORT = unused_port
11
+ NULL_LOGGER = Logger.new(nil)
12
+
13
+ class Dummy < Fluent::Plugin::TestBase
14
+ helpers :http_server
15
+ end
16
+
17
+ def on_driver
18
+ Fluent::Test.setup
19
+ driver = Dummy.new
20
+ driver.start
21
+ driver.after_start
22
+
23
+ yield(driver)
24
+ ensure
25
+ unless driver.stopped?
26
+ driver.stop rescue nil
27
+ end
28
+
29
+ unless driver.before_shutdown?
30
+ driver.before_shutdown rescue nil
31
+ end
32
+
33
+ unless driver.shutdown?
34
+ driver.shutdown rescue nil
35
+ end
36
+
37
+ unless driver.after_shutdown?
38
+ driver.after_shutdown rescue nil
39
+ end
40
+
41
+ unless driver.closed?
42
+ driver.close rescue nil
43
+ end
44
+
45
+ unless driver.terminated?
46
+ driver.terminated rescue nil
47
+ end
48
+ end
49
+
50
+ %w[get head].each do |n|
51
+ define_method(n) do |uri, header = {}|
52
+ url = URI.parse(uri)
53
+ headers = { 'Content-Type' => 'application/x-www-form-urlencoded/' }.merge(header)
54
+ req = Net::HTTP.const_get(n.capitalize).new(url, headers)
55
+ Net::HTTP.start(url.host, url.port) do |http|
56
+ http.request(req)
57
+ end
58
+ end
59
+ end
60
+
61
+ %w[post put patch delete options trace].each do |n|
62
+ define_method(n) do |uri, body = '', header = {}|
63
+ url = URI.parse(uri)
64
+ headers = { 'Content-Type' => 'application/x-www-form-urlencoded/' }.merge(header)
65
+ req = Net::HTTP.const_get(n.capitalize).new(url, headers)
66
+ req.body = body
67
+ Net::HTTP.start(url.host, url.port) do |http|
68
+ http.request(req)
69
+ end
70
+ end
71
+ end
72
+
73
+ sub_test_case 'Create a HTTP server' do
74
+ test 'monunt given path' do
75
+ on_driver do |driver|
76
+ driver.create_http_server(:http_server_helper_test, addr: '127.0.0.1', port: PORT, logger: NULL_LOGGER) do |s|
77
+ s.get('/example/hello') { [200, { 'Content-Type' => 'text/plain' }, 'hello get'] }
78
+ s.post('/example/hello') { [200, { 'Content-Type' => 'text/plain' }, 'hello post'] }
79
+ s.head('/example/hello') { [200, { 'Content-Type' => 'text/plain' }, 'hello head'] }
80
+ s.put('/example/hello') { [200, { 'Content-Type' => 'text/plain' }, 'hello put'] }
81
+ s.patch('/example/hello') { [200, { 'Content-Type' => 'text/plain' }, 'hello patch'] }
82
+ s.delete('/example/hello') { [200, { 'Content-Type' => 'text/plain' }, 'hello delete'] }
83
+ s.trace('/example/hello') { [200, { 'Content-Type' => 'text/plain' }, 'hello trace'] }
84
+ s.options('/example/hello') { [200, { 'Content-Type' => 'text/plain' }, 'hello options'] }
85
+ end
86
+
87
+ resp = head("http://127.0.0.1:#{PORT}/example/hello")
88
+ assert_equal('200', resp.code)
89
+ assert_equal(nil, resp.body)
90
+ assert_equal('text/plain', resp['Content-Type'])
91
+
92
+ %w[get put post put delete trace].each do |n|
93
+ resp = send(n, "http://127.0.0.1:#{PORT}/example/hello")
94
+ assert_equal('200', resp.code)
95
+ assert_equal("hello #{n}", resp.body)
96
+ assert_equal('text/plain', resp['Content-Type'])
97
+ end
98
+
99
+ # TODO: remove when fluentd drop ruby 2.1
100
+ if Gem::Version.create(RUBY_VERSION) >= Gem::Version.create('2.2.0')
101
+ resp = options("http://127.0.0.1:#{PORT}/example/hello")
102
+ assert_equal('200', resp.code)
103
+ assert_equal("hello options", resp.body)
104
+ assert_equal('text/plain', resp['Content-Type'])
105
+ end
106
+ end
107
+ end
108
+
109
+ test 'when path does not start with `/` or ends with `/`' do
110
+ on_driver do |driver|
111
+ driver.create_http_server(:http_server_helper_test, addr: '127.0.0.1', port: PORT, logger: NULL_LOGGER) do |s|
112
+ s.get('example/hello') { [200, { 'Content-Type' => 'text/plain' }, 'hello get'] }
113
+ s.get('/example/hello2/') { [200, { 'Content-Type' => 'text/plain' }, 'hello get'] }
114
+ end
115
+
116
+ resp = get("http://127.0.0.1:#{PORT}/example/hello")
117
+ assert_equal('404', resp.code)
118
+
119
+ resp = get("http://127.0.0.1:#{PORT}/example/hello2")
120
+ assert_equal('200', resp.code)
121
+ end
122
+ end
123
+
124
+ test 'when error raised' do
125
+ on_driver do |driver|
126
+ driver.create_http_server(:http_server_helper_test, addr: '127.0.0.1', port: PORT, logger: NULL_LOGGER) do |s|
127
+ s.get('/example/hello') { raise 'error!' }
128
+ end
129
+
130
+ resp = get("http://127.0.0.1:#{PORT}/example/hello")
131
+ assert_equal('500', resp.code)
132
+ end
133
+ end
134
+
135
+ test 'when path is not found' do
136
+ on_driver do |driver|
137
+ driver.create_http_server(:http_server_helper_test, addr: '127.0.0.1', port: PORT, logger: NULL_LOGGER) do |s|
138
+ s.get('/example/hello') { [200, { 'Content-Type' => 'text/plain' }, 'hello get'] }
139
+ end
140
+
141
+ resp = get("http://127.0.0.1:#{PORT}/example/hello/not_found")
142
+ assert_equal('404', resp.code)
143
+ end
144
+ end
145
+
146
+ test 'params and body' do
147
+ on_driver do |driver|
148
+ driver.create_http_server(:http_server_helper_test, addr: '127.0.0.1', port: PORT, logger: NULL_LOGGER) do |s|
149
+ s.get('/example/hello') do |req|
150
+ assert_equal(req.query_string, nil)
151
+ assert_equal(req.body, nil)
152
+ [200, { 'Content-Type' => 'text/plain' }, 'hello get']
153
+ end
154
+
155
+ s.post('/example/hello') do |req|
156
+ assert_equal(req.query_string, nil)
157
+ assert_equal(req.body, 'this is body')
158
+ [200, { 'Content-Type' => 'text/plain' }, 'hello post']
159
+ end
160
+
161
+ s.get('/example/hello/params') do |req|
162
+ assert_equal(req.query_string, 'test=true')
163
+ assert_equal(req.body, nil)
164
+ [200, { 'Content-Type' => 'text/plain' }, 'hello get']
165
+ end
166
+
167
+ s.post('/example/hello/params') do |req|
168
+ assert_equal(req.query_string, 'test=true')
169
+ assert_equal(req.body, 'this is body')
170
+ [200, { 'Content-Type' => 'text/plain' }, 'hello post']
171
+ end
172
+ end
173
+
174
+ resp = get("http://127.0.0.1:#{PORT}/example/hello")
175
+ assert_equal('200', resp.code)
176
+
177
+ resp = post("http://127.0.0.1:#{PORT}/example/hello", 'this is body')
178
+ assert_equal('200', resp.code)
179
+
180
+ resp = get("http://127.0.0.1:#{PORT}/example/hello/params?test=true")
181
+ assert_equal('200', resp.code)
182
+
183
+ resp = post("http://127.0.0.1:#{PORT}/example/hello/params?test=true", 'this is body')
184
+ assert_equal('200', resp.code)
185
+ end
186
+ end
187
+
188
+ test 'must be called #start and #stop' do
189
+ on_driver do |driver|
190
+ server = flexmock('Server') do |watcher|
191
+ watcher.should_receive(:start).once.and_return do |que|
192
+ que.push(:start)
193
+ end
194
+ watcher.should_receive(:stop).once
195
+ end
196
+
197
+ stub(Fluent::PluginHelper::HttpServer::Server).new(anything) { server }
198
+ driver.create_http_server(:http_server_helper_test, addr: '127.0.0.1', port: PORT, logger: NULL_LOGGER) do
199
+ # nothing
200
+ end
201
+ driver.stop
202
+ end
203
+ end
204
+ end
205
+ end