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,481 @@
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
+
11
+ class SupervisorTest < ::Test::Unit::TestCase
12
+ class DummyServer
13
+ include Fluent::ServerModule
14
+ attr_accessor :rpc_endpoint, :enable_get_dump
15
+ def config
16
+ {}
17
+ end
18
+ end
19
+
20
+ TMP_DIR = File.expand_path(File.dirname(__FILE__) + "/tmp/supervisor#{ENV['TEST_ENV_NUMBER']}")
21
+ TMP_ROOT_DIR = File.join(TMP_DIR, 'root')
22
+
23
+ def setup
24
+ FileUtils.rm_rf(TMP_DIR)
25
+ FileUtils.mkdir_p(TMP_DIR)
26
+ end
27
+
28
+ def write_config(path, data)
29
+ FileUtils.mkdir_p(File.dirname(path))
30
+ File.open(path, "w") {|f| f.write data }
31
+ end
32
+
33
+ def test_initialize
34
+ opts = Fluent::Supervisor.default_options
35
+ sv = Fluent::Supervisor.new(opts)
36
+ opts.each { |k, v|
37
+ assert_equal v, sv.instance_variable_get("@#{k}")
38
+ }
39
+ end
40
+
41
+ def test_read_config
42
+ create_info_dummy_logger
43
+
44
+ tmp_dir = "#{TMP_DIR}/dir/test_read_config.conf"
45
+ conf_str = %[
46
+ <source>
47
+ @type forward
48
+ @id forward_input
49
+ </source>
50
+ <match debug.**>
51
+ @type stdout
52
+ @id stdout_output
53
+ </match>
54
+ ]
55
+ write_config tmp_dir, conf_str
56
+ opts = Fluent::Supervisor.default_options
57
+ sv = Fluent::Supervisor.new(opts)
58
+
59
+ use_v1_config = {}
60
+ use_v1_config['use_v1_config'] = true
61
+
62
+ sv.instance_variable_set(:@config_path, tmp_dir)
63
+ sv.instance_variable_set(:@use_v1_config, use_v1_config)
64
+ sv.send(:read_config)
65
+
66
+ conf = sv.instance_variable_get(:@conf)
67
+
68
+ elem = conf.elements.find { |e| e.name == 'source' }
69
+ assert_equal "forward", elem['@type']
70
+ assert_equal "forward_input", elem['@id']
71
+
72
+ elem = conf.elements.find { |e| e.name == 'match' }
73
+ assert_equal "debug.**", elem.arg
74
+ assert_equal "stdout", elem['@type']
75
+ assert_equal "stdout_output", elem['@id']
76
+
77
+ $log.out.reset
78
+ end
79
+
80
+ def test_read_config_with_multibyte_string
81
+ tmp_path = "#{TMP_DIR}/dir/test_multibyte_config.conf"
82
+ conf_str = %[
83
+ <source>
84
+ @type forward
85
+ @id forward_input
86
+ @label @INPUT
87
+ </source>
88
+ <label @INPUT>
89
+ <filter>
90
+ @type record_transformer
91
+ <record>
92
+ message こんにちは. ${record["name"]} has made a order of ${record["item"]} just now.
93
+ </record>
94
+ </filter>
95
+ <match>
96
+ @type stdout
97
+ </match>
98
+ </label>
99
+ ]
100
+ FileUtils.mkdir_p(File.dirname(tmp_path))
101
+ File.open(tmp_path, "w:utf-8") {|file| file.write(conf_str) }
102
+
103
+ opts = Fluent::Supervisor.default_options
104
+ sv = Fluent::Supervisor.new(opts)
105
+
106
+ use_v1_config = {}
107
+ use_v1_config['use_v1_config'] = true
108
+
109
+ sv.instance_variable_set(:@config_path, tmp_path)
110
+ sv.instance_variable_set(:@use_v1_config, use_v1_config)
111
+ sv.send(:read_config)
112
+
113
+ conf = sv.instance_variable_get(:@conf)
114
+ label = conf.elements.detect {|e| e.name == "label" }
115
+ filter = label.elements.detect {|e| e.name == "filter" }
116
+ record_transformer = filter.elements.detect {|e| e.name = "record_transformer" }
117
+ assert_equal(Encoding::UTF_8, record_transformer["message"].encoding)
118
+ end
119
+
120
+ def test_system_config
121
+ opts = Fluent::Supervisor.default_options
122
+ sv = Fluent::Supervisor.new(opts)
123
+ conf_data = <<-EOC
124
+ <system>
125
+ rpc_endpoint 127.0.0.1:24445
126
+ suppress_repeated_stacktrace true
127
+ suppress_config_dump true
128
+ without_source true
129
+ enable_get_dump true
130
+ process_name "process_name"
131
+ log_level info
132
+ root_dir #{TMP_ROOT_DIR}
133
+ <log>
134
+ format json
135
+ time_format %Y
136
+ </log>
137
+ <counter_server>
138
+ bind 127.0.0.1
139
+ port 24321
140
+ scope server1
141
+ backup_path /tmp/backup
142
+ </counter_server>
143
+ <counter_client>
144
+ host 127.0.0.1
145
+ port 24321
146
+ timeout 2
147
+ </counter_client>
148
+ </system>
149
+ EOC
150
+ conf = Fluent::Config.parse(conf_data, "(test)", "(test_dir)", true)
151
+ sv.instance_variable_set(:@conf, conf)
152
+ sv.send(:set_system_config)
153
+ sys_conf = sv.instance_variable_get(:@system_config)
154
+
155
+ assert_equal '127.0.0.1:24445', sys_conf.rpc_endpoint
156
+ assert_equal true, sys_conf.suppress_repeated_stacktrace
157
+ assert_equal true, sys_conf.suppress_config_dump
158
+ assert_equal true, sys_conf.without_source
159
+ assert_equal true, sys_conf.enable_get_dump
160
+ assert_equal "process_name", sys_conf.process_name
161
+ assert_equal 2, sys_conf.log_level
162
+ assert_equal TMP_ROOT_DIR, sys_conf.root_dir
163
+ assert_equal :json, sys_conf.log.format
164
+ assert_equal '%Y', sys_conf.log.time_format
165
+ counter_server = sys_conf.counter_server
166
+ assert_equal '127.0.0.1', counter_server.bind
167
+ assert_equal 24321, counter_server.port
168
+ assert_equal 'server1', counter_server.scope
169
+ assert_equal '/tmp/backup', counter_server.backup_path
170
+ counter_client = sys_conf.counter_client
171
+ assert_equal '127.0.0.1', counter_client.host
172
+ assert_equal 24321, counter_client.port
173
+ assert_equal 2, counter_client.timeout
174
+ end
175
+
176
+ def test_main_process_signal_handlers
177
+ omit "Windows cannot handle signals" if Fluent.windows?
178
+
179
+ create_info_dummy_logger
180
+
181
+ opts = Fluent::Supervisor.default_options
182
+ sv = Fluent::Supervisor.new(opts)
183
+ sv.send(:install_main_process_signal_handlers)
184
+
185
+ begin
186
+ Process.kill :USR1, $$
187
+ rescue
188
+ end
189
+
190
+ sleep 1
191
+
192
+ info_msg = '[info]: force flushing buffered events' + "\n"
193
+ assert{ $log.out.logs.first.end_with?(info_msg) }
194
+ ensure
195
+ $log.out.reset if $log && $log.out && $log.out.respond_to?(:reset)
196
+ end
197
+
198
+ def test_supervisor_signal_handler
199
+ omit "Windows cannot handle signals" if Fluent.windows?
200
+
201
+ create_debug_dummy_logger
202
+
203
+ server = DummyServer.new
204
+ server.install_supervisor_signal_handlers
205
+ begin
206
+ Process.kill :USR1, $$
207
+ rescue
208
+ end
209
+
210
+ sleep 1
211
+
212
+ debug_msg = '[debug]: fluentd supervisor process get SIGUSR1'
213
+ logs = $log.out.logs
214
+ assert{ logs.any?{|log| log.include?(debug_msg) } }
215
+ ensure
216
+ $log.out.reset if $log && $log.out && $log.out.respond_to?(:reset)
217
+ end
218
+
219
+ def test_rpc_server
220
+ omit "Windows cannot handle signals" if Fluent.windows?
221
+
222
+ create_info_dummy_logger
223
+
224
+ opts = Fluent::Supervisor.default_options
225
+ sv = Fluent::Supervisor.new(opts)
226
+ conf_data = <<-EOC
227
+ <system>
228
+ rpc_endpoint 0.0.0.0:24447
229
+ </system>
230
+ EOC
231
+ conf = Fluent::Config.parse(conf_data, "(test)", "(test_dir)", true)
232
+ sv.instance_variable_set(:@conf, conf)
233
+ sv.send(:set_system_config)
234
+ sys_conf = sv.instance_variable_get(:@system_config)
235
+
236
+ server = DummyServer.new
237
+ server.rpc_endpoint = sys_conf.rpc_endpoint
238
+ server.enable_get_dump = sys_conf.enable_get_dump
239
+
240
+ server.run_rpc_server
241
+
242
+ sv.send(:install_main_process_signal_handlers)
243
+ Net::HTTP.get URI.parse('http://0.0.0.0:24447/api/plugins.flushBuffers')
244
+ info_msg = '[info]: force flushing buffered events' + "\n"
245
+
246
+ server.stop_rpc_server
247
+
248
+ # In TravisCI with OSX(Xcode), it seems that can't use rpc server.
249
+ # This test will be passed in such environment.
250
+ pend unless $log.out.logs.first
251
+
252
+ assert{ $log.out.logs.first.end_with?(info_msg) }
253
+ ensure
254
+ $log.out.reset
255
+ end
256
+
257
+ def test_load_config
258
+ tmp_dir = "#{TMP_DIR}/dir/test_load_config.conf"
259
+ conf_info_str = %[
260
+ <system>
261
+ log_level info
262
+ </system>
263
+ ]
264
+ conf_debug_str = %[
265
+ <system>
266
+ log_level debug
267
+ </system>
268
+ ]
269
+ write_config tmp_dir, conf_info_str
270
+
271
+ params = {}
272
+ params['workers'] = 1
273
+ params['use_v1_config'] = true
274
+ params['log_path'] = 'test/tmp/supervisor/log'
275
+ params['suppress_repeated_stacktrace'] = true
276
+ params['log_level'] = Fluent::Log::LEVEL_INFO
277
+ params['conf_encoding'] = 'utf-8'
278
+ load_config_proc = Proc.new { Fluent::Supervisor.load_config(tmp_dir, params) }
279
+
280
+ # first call
281
+ se_config = load_config_proc.call
282
+ assert_equal Fluent::Log::LEVEL_INFO, se_config[:log_level]
283
+ assert_equal true, se_config[:suppress_repeated_stacktrace]
284
+ assert_equal 'spawn', se_config[:worker_type]
285
+ assert_equal 1, se_config[:workers]
286
+ assert_equal false, se_config[:log_stdin]
287
+ assert_equal false, se_config[:log_stdout]
288
+ assert_equal false, se_config[:log_stderr]
289
+ assert_equal true, se_config[:enable_heartbeat]
290
+ assert_equal false, se_config[:auto_heartbeat]
291
+ assert_equal false, se_config[:daemonize]
292
+ assert_nil se_config[:pid_path]
293
+
294
+ # second call immediately(reuse config)
295
+ se_config = load_config_proc.call
296
+ pre_config_mtime = se_config[:windows_daemon_cmdline][5]['pre_config_mtime']
297
+ pre_loadtime = se_config[:windows_daemon_cmdline][5]['pre_loadtime']
298
+ assert_nil pre_config_mtime
299
+ assert_nil pre_loadtime
300
+
301
+ sleep 5
302
+
303
+ # third call after 5 seconds(don't reuse config)
304
+ se_config = load_config_proc.call
305
+ pre_config_mtime = se_config[:windows_daemon_cmdline][5]['pre_config_mtime']
306
+ pre_loadtime = se_config[:windows_daemon_cmdline][5]['pre_loadtime']
307
+ assert_not_nil pre_config_mtime
308
+ assert_not_nil pre_loadtime
309
+
310
+ # forth call immediately(reuse config)
311
+ se_config = load_config_proc.call
312
+ # test that pre_config_mtime and pre_loadtime are not changed from previous one because reused pre_config
313
+ assert_equal pre_config_mtime, se_config[:windows_daemon_cmdline][5]['pre_config_mtime']
314
+ assert_equal pre_loadtime, se_config[:windows_daemon_cmdline][5]['pre_loadtime']
315
+
316
+ write_config tmp_dir, conf_debug_str
317
+
318
+ # fifth call after changed conf file(don't reuse config)
319
+ se_config = load_config_proc.call
320
+ assert_equal Fluent::Log::LEVEL_INFO, se_config[:log_level]
321
+ end
322
+
323
+ def test_load_config_for_daemonize
324
+ tmp_dir = "#{TMP_DIR}/dir/test_load_config.conf"
325
+ conf_info_str = %[
326
+ <system>
327
+ log_level info
328
+ </system>
329
+ ]
330
+ conf_debug_str = %[
331
+ <system>
332
+ log_level debug
333
+ </system>
334
+ ]
335
+ write_config tmp_dir, conf_info_str
336
+
337
+ params = {}
338
+ params['workers'] = 1
339
+ params['use_v1_config'] = true
340
+ params['log_path'] = 'test/tmp/supervisor/log'
341
+ params['suppress_repeated_stacktrace'] = true
342
+ params['log_level'] = Fluent::Log::LEVEL_INFO
343
+ params['daemonize'] = './fluentd.pid'
344
+ params['conf_encoding'] = 'utf-8'
345
+ load_config_proc = Proc.new { Fluent::Supervisor.load_config(tmp_dir, params) }
346
+
347
+ # first call
348
+ se_config = load_config_proc.call
349
+ assert_equal Fluent::Log::LEVEL_INFO, se_config[:log_level]
350
+ assert_equal true, se_config[:suppress_repeated_stacktrace]
351
+ assert_equal 'spawn', se_config[:worker_type]
352
+ assert_equal 1, se_config[:workers]
353
+ assert_equal false, se_config[:log_stdin]
354
+ assert_equal false, se_config[:log_stdout]
355
+ assert_equal false, se_config[:log_stderr]
356
+ assert_equal true, se_config[:enable_heartbeat]
357
+ assert_equal false, se_config[:auto_heartbeat]
358
+ assert_equal true, se_config[:daemonize]
359
+ assert_equal './fluentd.pid', se_config[:pid_path]
360
+
361
+ # second call immediately(reuse config)
362
+ se_config = load_config_proc.call
363
+ pre_config_mtime = se_config[:windows_daemon_cmdline][5]['pre_config_mtime']
364
+ pre_loadtime = se_config[:windows_daemon_cmdline][5]['pre_loadtime']
365
+ assert_nil pre_config_mtime
366
+ assert_nil pre_loadtime
367
+
368
+ sleep 5
369
+
370
+ # third call after 5 seconds(don't reuse config)
371
+ se_config = load_config_proc.call
372
+ pre_config_mtime = se_config[:windows_daemon_cmdline][5]['pre_config_mtime']
373
+ pre_loadtime = se_config[:windows_daemon_cmdline][5]['pre_loadtime']
374
+ assert_not_nil pre_config_mtime
375
+ assert_not_nil pre_loadtime
376
+
377
+ # forth call immediately(reuse config)
378
+ se_config = load_config_proc.call
379
+ # test that pre_config_mtime and pre_loadtime are not changed from previous one because reused pre_config
380
+ assert_equal pre_config_mtime, se_config[:windows_daemon_cmdline][5]['pre_config_mtime']
381
+ assert_equal pre_loadtime, se_config[:windows_daemon_cmdline][5]['pre_loadtime']
382
+
383
+ write_config tmp_dir, conf_debug_str
384
+
385
+ # fifth call after changed conf file(don't reuse config)
386
+ se_config = load_config_proc.call
387
+ assert_equal Fluent::Log::LEVEL_INFO, se_config[:log_level]
388
+ end
389
+
390
+ def test_load_config_with_multibyte_string
391
+ tmp_path = "#{TMP_DIR}/dir/test_multibyte_config.conf"
392
+ conf_str = %[
393
+ <source>
394
+ @type forward
395
+ @id forward_input
396
+ @label @INPUT
397
+ </source>
398
+ <label @INPUT>
399
+ <filter>
400
+ @type record_transformer
401
+ <record>
402
+ message こんにちは. ${record["name"]} has made a order of ${record["item"]} just now.
403
+ </record>
404
+ </filter>
405
+ <match>
406
+ @type stdout
407
+ </match>
408
+ </label>
409
+ ]
410
+ FileUtils.mkdir_p(File.dirname(tmp_path))
411
+ File.open(tmp_path, "w:utf-8") {|file| file.write(conf_str) }
412
+
413
+ params = {}
414
+ params['workers'] = 1
415
+ params['use_v1_config'] = true
416
+ params['log_path'] = 'test/tmp/supervisor/log'
417
+ params['suppress_repeated_stacktrace'] = true
418
+ params['log_level'] = Fluent::Log::LEVEL_INFO
419
+ params['conf_encoding'] = 'utf-8'
420
+ load_config_proc = Proc.new { Fluent::Supervisor.load_config(tmp_path, params) }
421
+
422
+ se_config = load_config_proc.call
423
+ conf = se_config[:fluentd_conf]
424
+ label = conf.elements.detect {|e| e.name == "label" }
425
+ filter = label.elements.detect {|e| e.name == "filter" }
426
+ record_transformer = filter.elements.detect {|e| e.name = "record_transformer" }
427
+ assert_equal(Encoding::UTF_8, record_transformer["message"].encoding)
428
+ end
429
+
430
+ def test_logger
431
+ opts = Fluent::Supervisor.default_options
432
+ sv = Fluent::Supervisor.new(opts)
433
+ log = sv.instance_variable_get(:@log)
434
+ log.init(:standalone, 0)
435
+ logger = $log.instance_variable_get(:@logger)
436
+
437
+ assert_equal Fluent::Log::LEVEL_INFO, $log.level
438
+
439
+ # test that DamonLogger#level= overwrites Fluent.log#level
440
+ logger.level = 'debug'
441
+ assert_equal Fluent::Log::LEVEL_DEBUG, $log.level
442
+
443
+ assert_equal 5, logger.instance_variable_get(:@rotate_age)
444
+ assert_equal 1048576, logger.instance_variable_get(:@rotate_size)
445
+ end
446
+
447
+ data(
448
+ daily_age: 'daily',
449
+ weekly_age: 'weekly',
450
+ monthly_age: 'monthly',
451
+ integer_age: 2,
452
+ )
453
+ def test_logger_with_rotate_age_and_rotate_size(rotate_age)
454
+ opts = Fluent::Supervisor.default_options.merge(
455
+ log_path: "#{TMP_DIR}/test", log_rotate_age: rotate_age, log_rotate_size: 10
456
+ )
457
+ sv = Fluent::Supervisor.new(opts)
458
+ log = sv.instance_variable_get(:@log)
459
+ log.init(:standalone, 0)
460
+
461
+ assert_equal Fluent::LogDeviceIO, $log.out.class
462
+ assert_equal rotate_age, $log.out.instance_variable_get(:@shift_age)
463
+ assert_equal 10, $log.out.instance_variable_get(:@shift_size)
464
+ end
465
+
466
+ def create_debug_dummy_logger
467
+ dl_opts = {}
468
+ dl_opts[:log_level] = ServerEngine::DaemonLogger::DEBUG
469
+ logdev = Fluent::Test::DummyLogDevice.new
470
+ logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
471
+ $log = Fluent::Log.new(logger)
472
+ end
473
+
474
+ def create_info_dummy_logger
475
+ dl_opts = {}
476
+ dl_opts[:log_level] = ServerEngine::DaemonLogger::INFO
477
+ logdev = Fluent::Test::DummyLogDevice.new
478
+ logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
479
+ $log = Fluent::Log.new(logger)
480
+ end
481
+ end
@@ -0,0 +1,135 @@
1
+ require_relative 'helper'
2
+ require 'fluent/plugin/input'
3
+ require 'fluent/test/driver/input'
4
+ require 'fluent/plugin/output'
5
+ require 'fluent/test/driver/output'
6
+ require 'fluent/plugin/filter'
7
+ require 'fluent/test/driver/filter'
8
+ require 'fluent/plugin/multi_output'
9
+ require 'fluent/test/driver/multi_output'
10
+ require 'fluent/plugin/parser'
11
+ require 'fluent/test/driver/parser'
12
+ require 'fluent/plugin/formatter'
13
+ require 'fluent/test/driver/formatter'
14
+
15
+ require 'timecop'
16
+
17
+ class TestDriverTest < ::Test::Unit::TestCase
18
+ def setup
19
+ Fluent::Test.setup
20
+ end
21
+
22
+ sub_test_case 'plugin test driver' do
23
+ data(
24
+ 'input plugin test driver' => [Fluent::Test::Driver::Input, Fluent::Plugin::Input],
25
+ 'multi_output plugin test driver' => [Fluent::Test::Driver::MultiOutput, Fluent::Plugin::MultiOutput],
26
+ 'parser plugin test driver' => [Fluent::Test::Driver::Parser, Fluent::Plugin::Parser],
27
+ 'formatter plugin test driver' => [Fluent::Test::Driver::Formatter, Fluent::Plugin::Formatter],
28
+ )
29
+ test 'returns the block value as the return value of #run' do |args|
30
+ driver_class, plugin_class = args
31
+ d = driver_class.new(Class.new(plugin_class))
32
+ v = d.run do
33
+ x = 1 + 2
34
+ y = 2 + 4
35
+ 3 || x || y
36
+ end
37
+ assert_equal 3, v
38
+ end
39
+
40
+ data(
41
+ 'input plugin test driver' => [Fluent::Test::Driver::Input, Fluent::Plugin::Input],
42
+ 'multi_output plugin test driver' => [Fluent::Test::Driver::MultiOutput, Fluent::Plugin::MultiOutput],
43
+ 'parser plugin test driver' => [Fluent::Test::Driver::Parser, Fluent::Plugin::Parser],
44
+ 'formatter plugin test driver' => [Fluent::Test::Driver::Formatter, Fluent::Plugin::Formatter],
45
+ )
46
+ test 'raises error for hard timeout' do |args|
47
+ driver_class, plugin_class = args
48
+ d = driver_class.new(Class.new(plugin_class))
49
+ assert_raise Fluent::Test::Driver::TestTimedOut do
50
+ d.run(timeout: 1) do
51
+ sleep 5
52
+ end
53
+ end
54
+ end
55
+
56
+ data(
57
+ 'input plugin test driver' => [Fluent::Test::Driver::Input, Fluent::Plugin::Input],
58
+ 'multi_output plugin test driver' => [Fluent::Test::Driver::MultiOutput, Fluent::Plugin::MultiOutput],
59
+ 'parser plugin test driver' => [Fluent::Test::Driver::Parser, Fluent::Plugin::Parser],
60
+ 'formatter plugin test driver' => [Fluent::Test::Driver::Formatter, Fluent::Plugin::Formatter],
61
+ )
62
+ test 'can stop with soft timeout for blocks never stops, even with Timecop' do |args|
63
+ Timecop.freeze(Time.parse("2016-11-04 18:49:00"))
64
+ begin
65
+ driver_class, plugin_class = args
66
+ d = driver_class.new(Class.new(plugin_class))
67
+ assert_nothing_raised do
68
+ before = Process.clock_gettime(Process::CLOCK_MONOTONIC)
69
+ d.end_if{ false }
70
+ d.run(timeout: 5) do
71
+ sleep 0.1 until d.stop?
72
+ end
73
+ after = Process.clock_gettime(Process::CLOCK_MONOTONIC)
74
+ assert{ after >= before + 1.0 }
75
+ end
76
+ ensure
77
+ Timecop.return
78
+ end
79
+ end
80
+
81
+ test 'raise errors raised in threads' do
82
+ d = Fluent::Test::Driver::Input.new(Fluent::Plugin::Input) do
83
+ helpers :thread
84
+ def start
85
+ super
86
+ thread_create(:input_thread_for_test_driver_test) do
87
+ sleep 0.5
88
+ raise "yaaaaaaaaaay!"
89
+ end
90
+ end
91
+ end
92
+ assert_raise RuntimeError.new("yaaaaaaaaaay!") do
93
+ d.end_if{ false }
94
+ d.run(timeout: 3) do
95
+ sleep 0.1 until d.stop?
96
+ end
97
+ end
98
+ end
99
+ end
100
+
101
+ sub_test_case 'output plugin test driver' do
102
+ test 'returns the block value as the return value of #run' do
103
+ d = Fluent::Test::Driver::Output.new(Fluent::Plugin::Output) do
104
+ def prefer_buffered_processing
105
+ false
106
+ end
107
+ def process(tag, es)
108
+ # drop
109
+ end
110
+ end
111
+ v = d.run do
112
+ x = 1 + 2
113
+ y = 2 + 4
114
+ 3 || x || y
115
+ end
116
+ assert_equal 3, v
117
+ end
118
+ end
119
+
120
+ sub_test_case 'filter plugin test driver' do
121
+ test 'returns the block value as the return value of #run' do
122
+ d = Fluent::Test::Driver::Filter.new(Fluent::Plugin::Filter) do
123
+ def filter(tag, time, record)
124
+ record
125
+ end
126
+ end
127
+ v = d.run do
128
+ x = 1 + 2
129
+ y = 2 + 4
130
+ 3 || x || y
131
+ end
132
+ assert_equal 3, v
133
+ end
134
+ end
135
+ end