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,38 @@
1
+ require_relative '../helper'
2
+ require 'fluent/test/driver/formatter'
3
+ require 'fluent/plugin/formatter_single_value'
4
+
5
+ class SingleValueFormatterTest < ::Test::Unit::TestCase
6
+ def create_driver(conf = "")
7
+ Fluent::Test::Driver::Formatter.new(Fluent::Plugin::SingleValueFormatter).configure(conf)
8
+ end
9
+
10
+ def test_config_params
11
+ d = create_driver
12
+ assert_equal "message", d.instance.message_key
13
+ end
14
+
15
+ def test_config_params_message_key
16
+ d = create_driver('message_key' => 'foobar')
17
+ assert_equal "foobar", d.instance.message_key
18
+ end
19
+
20
+ def test_format
21
+ d = create_driver
22
+ formatted = d.instance.format('tag', event_time, {'message' => 'awesome'})
23
+ assert_equal("awesome\n", formatted)
24
+ end
25
+
26
+ def test_format_without_newline
27
+ d = create_driver('add_newline' => 'false')
28
+ formatted = d.instance.format('tag', event_time, {'message' => 'awesome'})
29
+ assert_equal("awesome", formatted)
30
+ end
31
+
32
+ def test_format_with_message_key
33
+ d = create_driver('message_key' => 'foobar')
34
+ formatted = d.instance.format('tag', event_time, {'foobar' => 'foo'})
35
+
36
+ assert_equal("foo\n", formatted)
37
+ end
38
+ end
@@ -0,0 +1,68 @@
1
+ require_relative '../helper'
2
+ require 'fluent/test/driver/formatter'
3
+ require 'fluent/plugin/formatter_tsv'
4
+
5
+ class TSVFormatterTest < ::Test::Unit::TestCase
6
+ def setup
7
+ @time = event_time
8
+ end
9
+
10
+ def create_driver(conf = "")
11
+ Fluent::Test::Driver::Formatter.new(Fluent::Plugin::TSVFormatter).configure(conf)
12
+ end
13
+
14
+ def tag
15
+ "tag"
16
+ end
17
+
18
+ def record
19
+ {'message' => 'awesome', 'greeting' => 'hello'}
20
+ end
21
+
22
+ def test_config_params
23
+ d = create_driver(
24
+ 'keys' => 'message,greeting',
25
+ )
26
+ assert_equal ["message", "greeting"], d.instance.keys
27
+ assert_equal "\t", d.instance.delimiter
28
+ assert_equal true, d.instance.add_newline
29
+
30
+ d = create_driver(
31
+ 'keys' => 'message,greeting',
32
+ 'delimiter' => ',',
33
+ 'add_newline' => false,
34
+ )
35
+ assert_equal ["message", "greeting"], d.instance.keys
36
+ assert_equal ",", d.instance.delimiter
37
+ assert_equal false, d.instance.add_newline
38
+ end
39
+
40
+ def test_format
41
+ d = create_driver(
42
+ 'keys' => 'message,greeting',
43
+ )
44
+ formatted = d.instance.format(tag, @time, record)
45
+
46
+ assert_equal("awesome\thello\n", formatted)
47
+ end
48
+
49
+ def test_format_without_newline
50
+ d = create_driver(
51
+ 'keys' => 'message,greeting',
52
+ 'add_newline' => false,
53
+ )
54
+ formatted = d.instance.format(tag, @time, record)
55
+
56
+ assert_equal("awesome\thello", formatted)
57
+ end
58
+
59
+ def test_format_with_customized_delimiters
60
+ d = create_driver(
61
+ 'keys' => 'message,greeting',
62
+ 'delimiter' => ',',
63
+ )
64
+ formatted = d.instance.format(tag, @time, record)
65
+
66
+ assert_equal("awesome,hello\n", formatted)
67
+ end
68
+ end
@@ -1,4 +1,6 @@
1
1
  require_relative '../helper'
2
+ require 'fluent/test/driver/input'
3
+ require 'fluent/plugin/in_debug_agent'
2
4
  require 'fileutils'
3
5
 
4
6
  class DebugAgentInputTest < Test::Unit::TestCase
@@ -11,7 +13,7 @@ class DebugAgentInputTest < Test::Unit::TestCase
11
13
  TMP_DIR = File.expand_path(File.dirname(__FILE__) + "/../tmp/in_debug_agent")
12
14
 
13
15
  def create_driver(conf = '')
14
- Fluent::Test::InputTestDriver.new(Fluent::DebugAgentInput).configure(conf)
16
+ Fluent::Test::Driver::Input.new(Fluent::Plugin::DebugAgentInput).configure(conf)
15
17
  end
16
18
 
17
19
  def test_unix_path_writable
@@ -23,4 +25,25 @@ class DebugAgentInputTest < Test::Unit::TestCase
23
25
  create_driver %[unix_path #{TMP_DIR}/does_not_exist/test_path]
24
26
  end
25
27
  end
28
+
29
+ def test_multi_worker_environment_with_port
30
+ Fluent::SystemConfig.overwrite_system_config('workers' => 4) do
31
+ d = Fluent::Test::Driver::Input.new(Fluent::Plugin::DebugAgentInput)
32
+ d.instance.instance_eval { @_fluentd_worker_id = 2 }
33
+ d.configure('port 24230')
34
+
35
+ assert_true d.instance.multi_workers_ready?
36
+ assert_equal(24232, d.instance.instance_variable_get(:@port))
37
+ end
38
+ end
39
+
40
+ def test_multi_worker_environment_with_unix_path
41
+ Fluent::SystemConfig.overwrite_system_config('workers' => 4) do
42
+ d = Fluent::Test::Driver::Input.new(Fluent::Plugin::DebugAgentInput)
43
+ d.instance.instance_eval { @_fluentd_worker_id = 2 }
44
+ d.configure("unix_path #{TMP_DIR}/test_path")
45
+
46
+ assert_false d.instance.multi_workers_ready?
47
+ end
48
+ end
26
49
  end
@@ -1,5 +1,7 @@
1
1
  require_relative '../helper'
2
- require 'fluent/test'
2
+ require 'fluent/test/driver/input'
3
+ require 'fluent/plugin/in_dummy'
4
+ require 'fileutils'
3
5
 
4
6
  class DummyTest < Test::Unit::TestCase
5
7
  def setup
@@ -7,13 +9,13 @@ class DummyTest < Test::Unit::TestCase
7
9
  end
8
10
 
9
11
  def create_driver(conf)
10
- Fluent::Test::InputTestDriver.new(Fluent::DummyInput).configure(conf)
12
+ Fluent::Test::Driver::Input.new(Fluent::Plugin::DummyInput).configure(conf)
11
13
  end
12
14
 
13
15
  sub_test_case 'configure' do
14
16
  test 'required parameters' do
15
17
  assert_raise_message("'tag' parameter is required") do
16
- create_driver('')
18
+ Fluent::Plugin::DummyInput.new.configure(config_element('ROOT',''))
17
19
  end
18
20
  end
19
21
 
@@ -42,10 +44,6 @@ class DummyTest < Test::Unit::TestCase
42
44
  assert_equal 10, d.instance.rate
43
45
  end
44
46
 
45
- def json_error_messages_regexp
46
- /JSON::ParserError|got incomplete JSON|0th element of dummy, foo, is not a hash/
47
- end
48
-
49
47
  test 'dummy' do
50
48
  # hash is okay
51
49
  d = create_driver(config + %[dummy {"foo":"bar"}])
@@ -55,7 +53,7 @@ class DummyTest < Test::Unit::TestCase
55
53
  d = create_driver(config + %[dummy [{"foo":"bar"}]])
56
54
  assert_equal [{"foo"=>"bar"}], d.instance.dummy
57
55
 
58
- assert_raise_message(json_error_messages_regexp) do
56
+ assert_raise_message(/JSON::ParserError|got incomplete JSON/) do
59
57
  create_driver(config + %[dummy "foo"])
60
58
  end
61
59
 
@@ -74,26 +72,121 @@ class DummyTest < Test::Unit::TestCase
74
72
 
75
73
  test 'simple' do
76
74
  d = create_driver(config)
77
- d.run {
78
- # d.run sleeps 0.5 sec
79
- }
80
- emits = d.emits
81
- emits.each do |tag, time, record|
75
+ d.run(timeout: 0.5)
76
+
77
+ d.events.each do |tag, time, record|
82
78
  assert_equal("dummy", tag)
83
79
  assert_equal({"foo"=>"bar"}, record)
80
+ assert(time.is_a?(Fluent::EventTime))
84
81
  end
85
82
  end
86
83
 
87
84
  test 'with auto_increment_key' do
88
85
  d = create_driver(config + %[auto_increment_key id])
89
- d.run {
90
- # d.run sleeps 0.5 sec
91
- }
92
- emits = d.emits
93
- emits.each_with_index do |(tag, time, record), i|
86
+ d.run(timeout: 0.5)
87
+
88
+ d.events.each_with_index do |(tag, _time, record), i|
94
89
  assert_equal("dummy", tag)
95
90
  assert_equal({"foo"=>"bar", "id"=>i}, record)
96
91
  end
97
92
  end
98
93
  end
94
+
95
+ TEST_PLUGIN_STORAGE_PATH = File.join( File.dirname(File.dirname(__FILE__)), 'tmp', 'in_dummy', 'store' )
96
+ FileUtils.mkdir_p TEST_PLUGIN_STORAGE_PATH
97
+
98
+ sub_test_case "doesn't suspend internal counters in default" do
99
+ config1 = {
100
+ 'tag' => 'dummy',
101
+ 'rate' => '2',
102
+ 'dummy' => '[{"x": 1, "y": "1"}, {"x": 2, "y": "2"}, {"x": 3, "y": "3"}]',
103
+ 'auto_increment_key' => 'id',
104
+ 'suspend' => false,
105
+ }
106
+ conf1 = config_element('ROOT', '', config1, [])
107
+ test "value of auto increment key is not suspended after stop-and-start" do
108
+ assert !File.exist?(File.join(TEST_PLUGIN_STORAGE_PATH, 'json', 'test-01.json'))
109
+
110
+ d1 = create_driver(conf1)
111
+ d1.run(timeout: 0.5) do
112
+ d1.instance.emit(4)
113
+ end
114
+
115
+ events = d1.events.sort{|a,b| a[2]['id'] <=> b[2]['id'] }
116
+
117
+ first_id1 = events.first[2]['id']
118
+ assert_equal 0, first_id1
119
+
120
+ last_id1 = events.last[2]['id']
121
+ assert { last_id1 > 0 }
122
+
123
+ assert !File.exist?(File.join(TEST_PLUGIN_STORAGE_PATH, 'json', 'test-01.json'))
124
+
125
+ d2 = create_driver(conf1)
126
+ d2.run(timeout: 0.5) do
127
+ d2.instance.emit(4)
128
+ end
129
+
130
+ events = d2.events.sort{|a,b| a[2]['id'] <=> b[2]['id'] }
131
+
132
+ first_id2 = events.first[2]['id']
133
+ assert_equal 0, first_id2
134
+
135
+ assert !File.exist?(File.join(TEST_PLUGIN_STORAGE_PATH, 'json', 'test-01.json'))
136
+ end
137
+ end
138
+
139
+ sub_test_case "suspend internal counters if suspend is true" do
140
+ setup do
141
+ FileUtils.rm_rf(TEST_PLUGIN_STORAGE_PATH)
142
+ FileUtils.mkdir_p(File.join(TEST_PLUGIN_STORAGE_PATH, 'json'))
143
+ FileUtils.chmod_R(0755, File.join(TEST_PLUGIN_STORAGE_PATH, 'json'))
144
+ end
145
+
146
+ config2 = {
147
+ '@id' => 'test-02',
148
+ 'tag' => 'dummy',
149
+ 'rate' => '2',
150
+ 'dummy' => '[{"x": 1, "y": "1"}, {"x": 2, "y": "2"}, {"x": 3, "y": "3"}]',
151
+ 'auto_increment_key' => 'id',
152
+ 'suspend' => true,
153
+ }
154
+ conf2 = config_element('ROOT', '', config2, [
155
+ config_element(
156
+ 'storage', '',
157
+ {'@type' => 'local',
158
+ '@id' => 'test-02',
159
+ 'path' => File.join(TEST_PLUGIN_STORAGE_PATH,
160
+ 'json', 'test-02.json'),
161
+ 'persistent' => true,
162
+ })
163
+ ])
164
+ test "value of auto increment key is suspended after stop-and-start" do
165
+ assert !File.exist?(File.join(TEST_PLUGIN_STORAGE_PATH, 'json', 'test-02.json'))
166
+
167
+ d1 = create_driver(conf2)
168
+ d1.run(timeout: 0.5) do
169
+ d1.instance.emit(4)
170
+ end
171
+
172
+ first_id1 = d1.events.first[2]['id']
173
+ assert_equal 0, first_id1
174
+
175
+ last_id1 = d1.events.last[2]['id']
176
+ assert { last_id1 > 0 }
177
+
178
+ assert File.exist?(File.join(TEST_PLUGIN_STORAGE_PATH, 'json', 'test-02.json'))
179
+
180
+ d2 = create_driver(conf2)
181
+ d2.run(timeout: 0.5) do
182
+ d2.instance.emit(4)
183
+ end
184
+ d2.events
185
+
186
+ first_id2 = d2.events.first[2]['id']
187
+ assert_equal last_id1 + 1, first_id2
188
+
189
+ assert File.exist?(File.join(TEST_PLUGIN_STORAGE_PATH, 'json', 'test-02.json'))
190
+ end
191
+ end
99
192
  end
@@ -1,156 +1,243 @@
1
1
  require_relative '../helper'
2
- require 'fluent/test'
3
- require 'net/http'
2
+ require 'fluent/test/driver/input'
3
+ require 'fluent/plugin/in_exec'
4
+ require 'timecop'
4
5
 
5
6
  class ExecInputTest < Test::Unit::TestCase
7
+ SCRIPT_PATH = File.expand_path(File.join(File.dirname(__FILE__), '..', 'scripts', 'exec_script.rb'))
8
+ TEST_TIME = "2011-01-02 13:14:15"
9
+ TEST_UNIX_TIME = Time.parse(TEST_TIME)
10
+
6
11
  def setup
7
12
  Fluent::Test.setup
8
- @test_time = Time.parse("2011-01-02 13:14:15").to_i
9
- @script = File.expand_path(File.join(File.dirname(__FILE__), '..', 'scripts', 'exec_script.rb'))
10
- end
13
+ @test_time = event_time()
14
+ end
15
+
16
+ def create_driver(conf)
17
+ Fluent::Test::Driver::Input.new(Fluent::Plugin::ExecInput).configure(conf)
18
+ end
19
+
20
+ DEFAULT_CONFIG_ONLY_WITH_KEYS = %[
21
+ command ruby #{SCRIPT_PATH} "#{TEST_TIME}" 0
22
+ run_interval 1s
23
+ tag "my.test.data"
24
+ <parse>
25
+ keys ["k1", "k2", "k3"]
26
+ </parse>
27
+ ]
28
+
29
+ TSV_CONFIG = %[
30
+ command ruby #{SCRIPT_PATH} "#{TEST_TIME}" 0
31
+ run_interval 1s
32
+ <parse>
33
+ @type tsv
34
+ keys time, tag, k1
35
+ </parse>
36
+ <extract>
37
+ tag_key tag
38
+ time_key time
39
+ time_type string
40
+ time_format %Y-%m-%d %H:%M:%S
41
+ </extract>
42
+ ]
43
+
44
+ JSON_CONFIG = %[
45
+ command ruby #{SCRIPT_PATH} #{TEST_UNIX_TIME.to_i} 1
46
+ run_interval 1s
47
+ <parse>
48
+ @type json
49
+ </parse>
50
+ <extract>
51
+ tag_key tag
52
+ time_key time
53
+ time_type unixtime
54
+ </extract>
55
+ ]
56
+
57
+ MSGPACK_CONFIG = %[
58
+ command ruby #{SCRIPT_PATH} #{TEST_UNIX_TIME.to_i} 2
59
+ run_interval 1s
60
+ <parse>
61
+ @type msgpack
62
+ </parse>
63
+ <extract>
64
+ tag_key tagger
65
+ time_key datetime
66
+ time_type unixtime
67
+ </extract>
68
+ ]
69
+
70
+ # here document for not de-quoting backslashes
71
+ REGEXP_CONFIG = %[
72
+ command ruby #{SCRIPT_PATH} "#{TEST_TIME}" 3
73
+ run_interval 1s
74
+ tag regex_tag
75
+ ] + <<'EOC'
76
+ <parse>
77
+ @type regexp
78
+ expression "(?<time>[^\\]]*) (?<message>[^ ]*)"
79
+ time_key time
80
+ time_type string
81
+ time_format %Y-%m-%d %H:%M:%S
82
+ </parse>
83
+ EOC
84
+
85
+ sub_test_case 'with configuration with sections' do
86
+ test 'configure with default tsv format without extract' do
87
+ d = create_driver DEFAULT_CONFIG_ONLY_WITH_KEYS
88
+ assert{ d.instance.parser.is_a? Fluent::Plugin::TSVParser }
89
+ assert_equal "my.test.data", d.instance.tag
90
+ assert_equal ["k1", "k2", "k3"], d.instance.parser.keys
91
+ end
92
+
93
+ test 'configure raises error if both of tag and extract.tag_key are missing' do
94
+ assert_raise Fluent::ConfigError.new("'tag' or 'tag_key' option is required on exec input") do
95
+ create_driver %[
96
+ command ruby -e 'puts "yay"'
97
+ <parse>
98
+ keys y1
99
+ </parse>
100
+ ]
101
+ end
102
+ end
103
+
104
+ test 'configure for tsv' do
105
+ d = create_driver TSV_CONFIG
106
+ assert{ d.instance.parser.is_a? Fluent::Plugin::TSVParser }
107
+ assert_equal ["time", "tag", "k1"], d.instance.parser.keys
108
+ assert_equal "tag", d.instance.extract_config.tag_key
109
+ assert_equal "time", d.instance.extract_config.time_key
110
+ assert_equal :string, d.instance.extract_config.time_type
111
+ assert_equal "%Y-%m-%d %H:%M:%S", d.instance.extract_config.time_format
112
+ end
113
+
114
+ test 'configure for json' do
115
+ d = create_driver JSON_CONFIG
116
+ assert{ d.instance.parser.is_a? Fluent::Plugin::JSONParser }
117
+ assert_equal "tag", d.instance.extract_config.tag_key
118
+ assert_equal "time", d.instance.extract_config.time_key
119
+ assert_equal :unixtime, d.instance.extract_config.time_type
120
+ end
121
+
122
+ test 'configure for msgpack' do
123
+ d = create_driver MSGPACK_CONFIG
124
+ assert{ d.instance.parser.is_a? Fluent::Plugin::MessagePackParser }
125
+ assert_equal "tagger", d.instance.extract_config.tag_key
126
+ assert_equal "datetime", d.instance.extract_config.time_key
127
+ assert_equal :unixtime, d.instance.extract_config.time_type
128
+ end
11
129
 
12
- def create_driver(conf = tsv_config)
13
- Fluent::Test::InputTestDriver.new(Fluent::ExecInput).configure(conf)
130
+ test 'configure for regexp' do
131
+ d = create_driver REGEXP_CONFIG
132
+ assert{ d.instance.parser.is_a? Fluent::Plugin::RegexpParser }
133
+ assert_equal "regex_tag", d.instance.tag
134
+ expression = /(?<time>[^\]]*) (?<message>[^ ]*)/
135
+ assert_equal expression, d.instance.parser.expression
136
+ assert_nil d.instance.extract_config
137
+ end
14
138
  end
15
139
 
16
- def tsv_config
17
- %[
18
- command ruby #{@script} "2011-01-02 13:14:15" 0
140
+ TSV_CONFIG_COMPAT = %[
141
+ command ruby #{SCRIPT_PATH} "#{TEST_TIME}" 0
19
142
  keys time,tag,k1
20
143
  time_key time
21
144
  tag_key tag
22
145
  time_format %Y-%m-%d %H:%M:%S
23
146
  run_interval 1s
24
- ]
25
- end
147
+ ]
26
148
 
27
- def json_config
28
- %[
29
- command ruby #{@script} #{@test_time} 1
149
+ JSON_CONFIG_COMPAT = %[
150
+ command ruby #{SCRIPT_PATH} #{TEST_UNIX_TIME.to_i} 1
30
151
  format json
31
152
  tag_key tag
32
153
  time_key time
33
154
  run_interval 1s
34
- ]
35
- end
155
+ ]
36
156
 
37
- def msgpack_config
38
- %[
39
- command ruby #{@script} #{@test_time} 2
157
+ MSGPACK_CONFIG_COMPAT = %[
158
+ command ruby #{SCRIPT_PATH} #{TEST_UNIX_TIME.to_i} 2
40
159
  format msgpack
41
160
  tag_key tagger
42
161
  time_key datetime
43
162
  run_interval 1s
44
- ]
45
- end
163
+ ]
46
164
 
47
- def regexp_config
48
- %[
49
- command ruby #{@script} "2011-01-02 13:14:15" 3
165
+ REGEXP_CONFIG_COMPAT = %[
166
+ command ruby #{SCRIPT_PATH} "#{TEST_TIME}" 3
50
167
  format /(?<time>[^\\\]]*) (?<message>[^ ]*)/
51
168
  tag regex_tag
52
169
  run_interval 1s
53
- ]
54
- end
55
-
56
- def invalid_json_config
57
- # For counting command execution, redirect stderr to file
58
- %[
59
- command ruby #{@script} #{@test_time} 4
60
- format json
61
- tag_key tag
62
- time_key time
63
- run_interval 0.5
64
- ]
65
- end
66
-
67
- def test_configure
68
- d = create_driver
69
- assert_equal 'tsv', d.instance.format
70
- assert_equal ["time","tag","k1"], d.instance.keys
71
- assert_equal "tag", d.instance.tag_key
72
- assert_equal "time", d.instance.time_key
73
- assert_equal "%Y-%m-%d %H:%M:%S", d.instance.time_format
74
- end
75
-
76
- def test_configure_with_json
77
- d = create_driver json_config
78
- assert_equal 'json', d.instance.format
79
- assert_equal [], d.instance.keys
80
- end
81
-
82
- def test_configure_with_msgpack
83
- d = create_driver msgpack_config
84
- assert_equal 'msgpack', d.instance.format
85
- assert_equal [], d.instance.keys
86
- end
87
-
88
- def test_configure_with_regexp
89
- d = create_driver regexp_config
90
- assert_equal '/(?<time>[^\]]*) (?<message>[^ ]*)/', d.instance.format
91
- assert_equal 'regex_tag', d.instance.tag
92
- end
93
-
94
- # TODO: Merge following tests into one case with parameters
95
-
96
- def test_emit
97
- d = create_driver
98
-
99
- d.run do
100
- sleep 2
170
+ ]
171
+
172
+ sub_test_case 'with traditional configuration' do
173
+ test 'configure' do
174
+ d = create_driver TSV_CONFIG_COMPAT
175
+ assert{ d.instance.parser.is_a? Fluent::Plugin::TSVParser }
176
+ assert_equal ["time","tag","k1"], d.instance.parser.keys
177
+ assert_equal "tag", d.instance.extract_config.tag_key
178
+ assert_equal "time", d.instance.extract_config.time_key
179
+ assert_equal "%Y-%m-%d %H:%M:%S", d.instance.extract_config.time_format
101
180
  end
102
181
 
103
- emits = d.emits
104
- assert_equal true, emits.length > 0
105
- assert_equal ["tag1", @test_time, {"k1"=>"ok"}], emits[0]
106
- end
107
-
108
- def test_emit_json
109
- d = create_driver json_config
110
-
111
- d.run do
112
- sleep 2
182
+ test 'configure_with_json' do
183
+ d = create_driver JSON_CONFIG_COMPAT
184
+ assert{ d.instance.parser.is_a? Fluent::Plugin::JSONParser }
113
185
  end
114
186
 
115
- emits = d.emits
116
- assert_equal true, emits.length > 0
117
- assert_equal ["tag1", @test_time, {"k1"=>"ok"}], emits[0]
118
- end
119
-
120
- def test_emit_msgpack
121
- d = create_driver msgpack_config
122
-
123
- d.run do
124
- sleep 2
187
+ test 'configure_with_msgpack' do
188
+ d = create_driver MSGPACK_CONFIG_COMPAT
189
+ assert{ d.instance.parser.is_a? Fluent::Plugin::MessagePackParser }
125
190
  end
126
191
 
127
- emits = d.emits
128
- assert_equal true, emits.length > 0
129
- assert_equal ["tag1", @test_time, {"k1"=>"ok"}], emits[0]
192
+ test 'configure_with_regexp' do
193
+ d = create_driver REGEXP_CONFIG_COMPAT
194
+ assert{ d.instance.parser.is_a? Fluent::Plugin::RegexpParser }
195
+ assert_equal(/(?<time>[^\]]*) (?<message>[^ ]*)/, d.instance.parser.expression)
196
+ assert_equal('regex_tag', d.instance.tag)
197
+ end
130
198
  end
131
199
 
132
- def test_emit_regexp
133
- d = create_driver regexp_config
134
-
135
- d.run do
136
- sleep 2
200
+ sub_test_case 'with default configuration' do
201
+ setup do
202
+ @current_event_time = event_time('2016-10-31 20:01:30.123 -0700')
203
+ Timecop.freeze(Time.at(@current_event_time))
137
204
  end
138
205
 
139
- emits = d.emits
140
- assert_equal true, emits.length > 0
141
- assert_equal ["regex_tag", @test_time, {"message"=>"hello"}], emits[0]
142
- assert_equal @test_time, emits[0][1]
143
- end
206
+ teardown do
207
+ Timecop.return
208
+ end
144
209
 
145
- def test_emit_with_invalid_script
146
- d = create_driver invalid_json_config
210
+ test 'emits events with current timestamp if time key is not specified' do
211
+ d = create_driver DEFAULT_CONFIG_ONLY_WITH_KEYS
212
+ d.run(expect_records: 2, timeout: 10)
147
213
 
148
- d.run do
149
- sleep 2
214
+ assert{ d.events.length > 0 }
215
+ d.events.each do |event|
216
+ assert_equal ["my.test.data", @current_event_time, {"k1"=>"2011-01-02 13:14:15", "k2"=>"tag1", "k3"=>"ok"}], event
217
+ end
150
218
  end
219
+ end
151
220
 
152
- assert_equal true, d.emits.empty?
153
- logs = d.instance.log.logs
154
- assert_equal true, logs.count { |line| line =~ /exec failed to run or shutdown child process/ }.between?(1, 4)
221
+ data(
222
+ 'default' => [TSV_CONFIG, "tag1", event_time("2011-01-02 13:14:15"), {"k1"=>"ok"}],
223
+ 'json' => [JSON_CONFIG, "tag1", event_time("2011-01-02 13:14:15"), {"k1"=>"ok"}],
224
+ 'msgpack' => [MSGPACK_CONFIG, "tag1", event_time("2011-01-02 13:14:15"), {"k1"=>"ok"}],
225
+ 'regexp' => [REGEXP_CONFIG, "regex_tag", event_time("2011-01-02 13:14:15"), {"message"=>"hello"}],
226
+ 'default_c' => [TSV_CONFIG_COMPAT, "tag1", event_time("2011-01-02 13:14:15"), {"k1"=>"ok"}],
227
+ 'json_c' => [JSON_CONFIG_COMPAT, "tag1", event_time("2011-01-02 13:14:15"), {"k1"=>"ok"}],
228
+ 'msgpack_c' => [MSGPACK_CONFIG_COMPAT, "tag1", event_time("2011-01-02 13:14:15"), {"k1"=>"ok"}],
229
+ 'regexp_c' => [REGEXP_CONFIG_COMPAT, "regex_tag", event_time("2011-01-02 13:14:15"), {"message"=>"hello"}],
230
+ )
231
+ test 'emit with formats' do |data|
232
+ config, tag, time, record = data
233
+ d = create_driver(config)
234
+
235
+ d.run(expect_emits: 2, timeout: 10)
236
+
237
+ assert{ d.events.length > 0 }
238
+ d.events.each_with_index {|event, i|
239
+ assert_equal_event_time(time, event[1])
240
+ assert_equal [tag, time, record], event
241
+ }
155
242
  end
156
243
  end