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
@@ -1,16 +1,19 @@
1
1
  require_relative '../helper'
2
2
  require 'timecop'
3
+ require 'fluent/test/driver/filter'
3
4
  require 'fluent/plugin/filter_record_transformer'
5
+ require 'flexmock/test_unit'
4
6
 
5
7
  class RecordTransformerFilterTest < Test::Unit::TestCase
6
8
  include Fluent
9
+ include FlexMock::TestCase
7
10
 
8
11
  setup do
9
12
  Test.setup
10
13
  @hostname = Socket.gethostname.chomp
11
14
  @tag = 'test.tag'
12
15
  @tag_parts = @tag.split('.')
13
- @time = Time.utc(1,2,3,4,5,2010,nil,nil,nil,nil)
16
+ @time = event_time('2010-05-04 03:02:01 UTC')
14
17
  Timecop.freeze(@time)
15
18
  end
16
19
 
@@ -19,7 +22,7 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
19
22
  end
20
23
 
21
24
  def create_driver(conf = '')
22
- Test::FilterTestDriver.new(RecordTransformerFilter, @tag).configure(conf, true)
25
+ Fluent::Test::Driver::Filter.new(Fluent::Plugin::RecordTransformerFilter).configure(conf)
23
26
  end
24
27
 
25
28
  sub_test_case 'configure' do
@@ -37,13 +40,14 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
37
40
  end
38
41
 
39
42
  sub_test_case "test options" do
40
- def emit(config, msgs = [''])
43
+ def filter(config, msgs = [''])
41
44
  d = create_driver(config)
42
45
  d.run {
43
46
  msgs.each { |msg|
44
- d.emit({'foo' => 'bar', 'message' => msg}, @time)
47
+ d.feed(@tag, @time, {'foo' => 'bar', 'message' => msg, 'nest' => {'k1' => 'v1', 'k2' => 'v2'}})
45
48
  }
46
- }.filtered
49
+ }
50
+ d.filtered
47
51
  end
48
52
 
49
53
  CONFIG = %[
@@ -51,43 +55,52 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
51
55
  hostname ${hostname}
52
56
  tag ${tag}
53
57
  time ${time}
54
- message ${hostname} ${tag_parts[-1]} ${message}
58
+ message ${hostname} ${tag_parts[-1]} ${record["message"]}
55
59
  </record>
56
60
  ]
57
61
 
58
62
  test 'typical usage' do
59
63
  msgs = ['1', '2']
60
- es = emit(CONFIG, msgs)
61
- es.each_with_index do |(t, r), i|
64
+ filtered = filter(CONFIG, msgs)
65
+ filtered.each_with_index do |(_t, r), i|
62
66
  assert_equal('bar', r['foo'])
63
67
  assert_equal(@hostname, r['hostname'])
64
68
  assert_equal(@tag, r['tag'])
65
- assert_equal(@time.to_s, r['time'])
69
+ assert_equal(Time.at(@time).localtime.to_s, r['time'])
66
70
  assert_equal("#{@hostname} #{@tag_parts[-1]} #{msgs[i]}", r['message'])
71
+ assert_equal({'k1' => 'v1', 'k2' => 'v2'}, r['nest'])
67
72
  end
68
73
  end
69
74
 
70
75
  test 'remove_keys' do
71
76
  config = CONFIG + %[remove_keys foo,message]
72
- es = emit(config)
73
- es.each_with_index do |(t, r), i|
77
+ filtered = filter(config)
78
+ filtered.each_with_index do |(_t, r), i|
74
79
  assert_not_include(r, 'foo')
75
80
  assert_equal(@hostname, r['hostname'])
76
81
  assert_equal(@tag, r['tag'])
77
- assert_equal(@time.to_s, r['time'])
82
+ assert_equal(Time.at(@time).localtime.to_s, r['time'])
78
83
  assert_not_include(r, 'message')
79
84
  end
80
85
  end
81
86
 
87
+ test 'remove_keys with nested key' do
88
+ config = CONFIG + %[remove_keys $.nest.k1]
89
+ filtered = filter(config)
90
+ filtered.each_with_index do |(_t, r), i|
91
+ assert_not_include(r['nest'], 'k1')
92
+ end
93
+ end
94
+
82
95
  test 'renew_record' do
83
96
  config = CONFIG + %[renew_record true]
84
97
  msgs = ['1', '2']
85
- es = emit(config, msgs)
86
- es.each_with_index do |(t, r), i|
98
+ filtered = filter(config, msgs)
99
+ filtered.each_with_index do |(_t, r), i|
87
100
  assert_not_include(r, 'foo')
88
101
  assert_equal(@hostname, r['hostname'])
89
102
  assert_equal(@tag, r['tag'])
90
- assert_equal(@time.to_s, r['time'])
103
+ assert_equal(Time.at(@time).localtime.to_s, r['time'])
91
104
  assert_equal("#{@hostname} #{@tag_parts[-1]} #{msgs[i]}", r['message'])
92
105
  end
93
106
  end
@@ -95,11 +108,12 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
95
108
  test 'renew_time_key' do
96
109
  config = %[renew_time_key message]
97
110
  times = [ Time.local(2,2,3,4,5,2010,nil,nil,nil,nil), Time.local(3,2,3,4,5,2010,nil,nil,nil,nil) ]
98
- msgs = times.map{|t| t.to_i.to_s }
99
- es = emit(config, msgs)
100
- es.each_with_index do |(time, record), i|
111
+ msgs = times.map{|t| t.to_f.to_s }
112
+ filtered = filter(config, msgs)
113
+ filtered.each_with_index do |(time, _record), i|
101
114
  assert_equal(times[i].to_i, time)
102
- assert_true(record.has_key?('message'))
115
+ assert(time.is_a?(Fluent::EventTime))
116
+ assert_true(_record.has_key?('message'))
103
117
  end
104
118
  end
105
119
 
@@ -114,9 +128,10 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
114
128
  ]
115
129
  times = [Time.local(2, 2, 3, 4, 5, 2010, nil, nil, nil, nil), Time.local(3, 2, 3, 4, 5, 2010, nil, nil, nil, nil)]
116
130
  msgs = times.map { |t| t.to_f.to_s }
117
- filtered = emit(config, msgs)
131
+ filtered = filter(config, msgs)
118
132
  filtered.each_with_index do |(time, _record), i|
119
133
  assert_equal(times[i].to_i, time)
134
+ assert(time.is_a?(Fluent::EventTime))
120
135
  assert_false(_record.has_key?('event_time_key'))
121
136
  end
122
137
  end
@@ -124,8 +139,8 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
124
139
  test 'keep_keys' do
125
140
  config = %[renew_record true\nkeep_keys foo,message]
126
141
  msgs = ['1', '2']
127
- es = emit(config, msgs)
128
- es.each_with_index do |(t, r), i|
142
+ filtered = filter(config, msgs)
143
+ filtered.each_with_index do |(_t, r), i|
129
144
  assert_equal('bar', r['foo'])
130
145
  assert_equal(msgs[i], r['message'])
131
146
  end
@@ -134,8 +149,8 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
134
149
  test 'keep_keys that are not present in the original record should not be included in the result record' do
135
150
  config = %[renew_record true\nkeep_keys foo, bar, baz, message]
136
151
  msgs = ['1', '2', nil]
137
- es = emit(config, msgs)
138
- es.each_with_index do |(t, r), i|
152
+ filtered = filter(config, msgs)
153
+ filtered.each_with_index do |(_t, r), i|
139
154
  assert_equal('bar', r['foo'])
140
155
  assert_equal(msgs[i], r['message'])
141
156
  assert_equal(false, r.has_key?('bar'))
@@ -147,13 +162,13 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
147
162
  config = %[
148
163
  enable_ruby yes
149
164
  <record>
150
- message ${hostname} ${tag_parts.last} ${URI.encode(message)}
165
+ message ${hostname} ${tag_parts.last} ${"'" + record["message"] + "'"}
151
166
  </record>
152
167
  ]
153
168
  msgs = ['1', '2']
154
- es = emit(config, msgs)
155
- es.each_with_index do |(t, r), i|
156
- assert_equal("#{@hostname} #{@tag_parts[-1]} #{msgs[i]}", r['message'])
169
+ filtered = filter(config, msgs)
170
+ filtered.each_with_index do |(_t, r), i|
171
+ assert_equal("#{@hostname} #{@tag_parts[-1]} '#{msgs[i]}'", r['message'])
157
172
  end
158
173
  end
159
174
 
@@ -164,8 +179,8 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
164
179
  </record>
165
180
  %]
166
181
  msgs = ['1', '2']
167
- es = emit(config, msgs)
168
- es.each_with_index do |(t, r), i|
182
+ filtered = filter(config, msgs)
183
+ filtered.each_with_index do |(_t, r), i|
169
184
  assert_equal({"k1"=>100, "k2"=>"foobar"}, r['hash_field'])
170
185
  end
171
186
  end
@@ -177,8 +192,8 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
177
192
  </record>
178
193
  %]
179
194
  msgs = ['1', '2']
180
- es = emit(config, msgs)
181
- es.each_with_index do |(t, r), i|
195
+ filtered = filter(config, msgs)
196
+ filtered.each_with_index do |(_t, r), i|
182
197
  assert_equal([1,2,3], r['array_field'])
183
198
  end
184
199
  end
@@ -190,36 +205,39 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
190
205
  </record>
191
206
  %]
192
207
  msgs = ['1', '2']
193
- es = emit(config, msgs)
194
- es.each_with_index do |(t, r), i|
208
+ filtered = filter(config, msgs)
209
+ filtered.each_with_index do |(_t, r), i|
195
210
  assert_equal({"hello"=>[1,2,3], "world"=>{"foo"=>"bar"}}, r['mixed_field'])
196
211
  end
197
212
  end
198
213
  end
199
214
 
200
215
  sub_test_case 'test placeholders' do
201
- def emit(config, msgs = [''])
216
+ def filter(config, msgs = [''])
202
217
  d = create_driver(config)
203
218
  yield d if block_given?
204
219
  d.run {
205
- msgs.each do |msg|
206
- record = {'eventType0' => 'bar', 'message' => msg}
207
- record = record.merge(msg) if msg.is_a?(Hash)
208
- d.emit(record, @time)
220
+ records = msgs.map do |msg|
221
+ next msg if msg.is_a?(Hash)
222
+ { 'eventType0' => 'bar', 'message' => msg }
209
223
  end
210
- }.filtered
224
+ records.each do |record|
225
+ d.feed(@tag, @time, record)
226
+ end
227
+ }
228
+ d.filtered
211
229
  end
212
230
 
213
231
  %w[yes no].each do |enable_ruby|
214
- test "hostname with enble_ruby #{enable_ruby}" do
232
+ test "hostname with enable_ruby #{enable_ruby}" do
215
233
  config = %[
216
234
  enable_ruby #{enable_ruby}
217
235
  <record>
218
236
  message ${hostname}
219
237
  </record>
220
238
  ]
221
- es = emit(config)
222
- es.each do |t, r|
239
+ filtered = filter(config)
240
+ filtered.each do |t, r|
223
241
  assert_equal(@hostname, r['message'])
224
242
  end
225
243
  end
@@ -231,8 +249,8 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
231
249
  message ${tag}
232
250
  </record>
233
251
  ]
234
- es = emit(config)
235
- es.each do |t, r|
252
+ filtered = filter(config)
253
+ filtered.each do |t, r|
236
254
  assert_equal(@tag, r['message'])
237
255
  end
238
256
  end
@@ -245,8 +263,8 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
245
263
  </record>
246
264
  ]
247
265
  expected = "#{@tag.split('.').first} #{@tag.split('.').last}"
248
- es = emit(config)
249
- es.each do |t, r|
266
+ filtered = filter(config)
267
+ filtered.each do |t, r|
250
268
  assert_equal(expected, r['message'])
251
269
  end
252
270
  end
@@ -260,8 +278,8 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
260
278
  ]
261
279
  @tag = 'prefix.test.tag.suffix'
262
280
  expected = "prefix.test prefix.test.tag tag.suffix test.tag.suffix"
263
- es = emit(config)
264
- es.each do |t, r|
281
+ filtered = filter(config)
282
+ filtered.each do |t, r|
265
283
  assert_equal(expected, r['message'])
266
284
  end
267
285
  end
@@ -273,9 +291,13 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
273
291
  message ${time}
274
292
  </record>
275
293
  ]
276
- es = emit(config)
277
- es.each do |t, r|
278
- assert_equal(@time.to_s, r['message'])
294
+ filtered = filter(config)
295
+ filtered.each do |t, r|
296
+ if enable_ruby == "yes"
297
+ assert_equal(Time.at(@time).localtime, r['message'])
298
+ else
299
+ assert_equal(Time.at(@time).localtime.to_s, r['message'])
300
+ end
279
301
  end
280
302
  end
281
303
 
@@ -284,13 +306,13 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
284
306
  enable_ruby #{enable_ruby}
285
307
  remove_keys eventType0
286
308
  <record>
287
- message bar ${message}
288
- eventtype ${eventType0}
309
+ message bar ${record["message"]}
310
+ eventtype ${record["eventType0"]}
289
311
  </record>
290
312
  ]
291
313
  msgs = ['1', '2']
292
- es = emit(config, msgs)
293
- es.each_with_index do |(t, r), i|
314
+ filtered = filter(config, msgs)
315
+ filtered.each_with_index do |(_t, r), i|
294
316
  assert_not_include(r, 'eventType0')
295
317
  assert_equal("bar", r['eventtype'])
296
318
  assert_equal("bar #{msgs[i]}", r['message'])
@@ -306,7 +328,7 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
306
328
  </record>
307
329
  ]
308
330
  records = [{'tag' => 'tag', 'time' => 'time'}]
309
- filtered = emit(config, records)
331
+ filtered = filter(config, records)
310
332
  filtered.each_with_index do |(_t, r), i|
311
333
  assert_not_equal('tag', r['new_tag'])
312
334
  assert_equal(@tag, r['new_tag'])
@@ -326,8 +348,8 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
326
348
  </record>
327
349
  ]
328
350
  msgs = ['1', '2']
329
- es = emit(config, msgs)
330
- es.each_with_index do |(t, r), i|
351
+ filtered = filter(config, msgs)
352
+ filtered.each_with_index do |(_t, r), i|
331
353
  assert_equal({"hostname" => @hostname, "tag" => @tag, "#{@tag}" => 100}, r['hash_field'])
332
354
  end
333
355
  end
@@ -340,8 +362,8 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
340
362
  </record>
341
363
  ]
342
364
  msgs = ['1', '2']
343
- es = emit(config, msgs)
344
- es.each_with_index do |(t, r), i|
365
+ filtered = filter(config, msgs)
366
+ filtered.each_with_index do |(_t, r), i|
345
367
  assert_equal([@hostname, @tag], r['array_field'])
346
368
  end
347
369
  end
@@ -354,8 +376,8 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
354
376
  </record>
355
377
  ]
356
378
  msgs = ['1', '2']
357
- es = emit(config, msgs)
358
- es.each_with_index do |(t, r), i|
379
+ filtered = filter(config, msgs)
380
+ filtered.each_with_index do |(_t, r), i|
359
381
  assert_equal([{"tag" => @tag}], r['mixed_field'])
360
382
  end
361
383
  end
@@ -370,8 +392,8 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
370
392
  </record>
371
393
  ]
372
394
  msgs = ['1', '2']
373
- es = emit(config, msgs)
374
- es.each_with_index do |(t, r), i|
395
+ filtered = filter(config, msgs)
396
+ filtered.each_with_index do |(_t, r), i|
375
397
  assert_equal({@hostname=>'hostname',"foo.#{@tag}"=>'tag'}, r)
376
398
  end
377
399
  end
@@ -381,11 +403,11 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
381
403
  auto_typecast false
382
404
  enable_ruby #{enable_ruby}
383
405
  <record>
384
- single ${source}
385
- multiple ${source}${source}
386
- with_prefix prefix-${source}
387
- with_suffix ${source}-suffix
388
- with_quote source[""]
406
+ single ${record["source"]}
407
+ multiple ${record["source"]}${record["source"]}
408
+ with_prefix prefix-${record["source"]}
409
+ with_suffix ${record["source"]}-suffix
410
+ with_quote record["source"][""]
389
411
  </record>
390
412
  ]
391
413
  msgs = [
@@ -400,31 +422,31 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
400
422
  multiple: "stringstring",
401
423
  with_prefix: "prefix-string",
402
424
  with_suffix: "string-suffix",
403
- with_quote: %Q{source[""]} },
425
+ with_quote: %Q{record["source"][""]} },
404
426
  { single: 123.to_s,
405
427
  multiple: "#{123.to_s}#{123.to_s}",
406
428
  with_prefix: "prefix-#{123.to_s}",
407
429
  with_suffix: "#{123.to_s}-suffix",
408
- with_quote: %Q{source[""]} },
430
+ with_quote: %Q{record["source"][""]} },
409
431
  { single: [1, 2].to_s,
410
432
  multiple: "#{[1, 2].to_s}#{[1, 2].to_s}",
411
433
  with_prefix: "prefix-#{[1, 2].to_s}",
412
434
  with_suffix: "#{[1, 2].to_s}-suffix",
413
- with_quote: %Q{source[""]} },
435
+ with_quote: %Q{record["source"][""]} },
414
436
  { single: {a:1, b:2}.to_s,
415
437
  multiple: "#{{a:1, b:2}.to_s}#{{a:1, b:2}.to_s}",
416
438
  with_prefix: "prefix-#{{a:1, b:2}.to_s}",
417
439
  with_suffix: "#{{a:1, b:2}.to_s}-suffix",
418
- with_quote: %Q{source[""]} },
440
+ with_quote: %Q{record["source"][""]} },
419
441
  { single: nil.to_s,
420
442
  multiple: "#{nil.to_s}#{nil.to_s}",
421
443
  with_prefix: "prefix-#{nil.to_s}",
422
444
  with_suffix: "#{nil.to_s}-suffix",
423
- with_quote: %Q{source[""]} },
445
+ with_quote: %Q{record["source"][""]} },
424
446
  ]
425
447
  actual_results = []
426
- es = emit(config, msgs)
427
- es.each_with_index do |(t, r), i|
448
+ filtered = filter(config, msgs)
449
+ filtered.each_with_index do |(_t, r), i|
428
450
  actual_results << {
429
451
  single: r["single"],
430
452
  multiple: r["multiple"],
@@ -441,10 +463,10 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
441
463
  auto_typecast yes
442
464
  enable_ruby #{enable_ruby}
443
465
  <record>
444
- single ${source}
445
- multiple ${source}${source}
446
- with_prefix prefix-${source}
447
- with_suffix ${source}-suffix
466
+ single ${record["source"]}
467
+ multiple ${record["source"]}${record["source"]}
468
+ with_prefix prefix-${record["source"]}
469
+ with_suffix ${record["source"]}-suffix
448
470
  </record>
449
471
  ]
450
472
  msgs = [
@@ -477,8 +499,8 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
477
499
  with_suffix: "#{nil.to_s}-suffix" },
478
500
  ]
479
501
  actual_results = []
480
- es = emit(config, msgs)
481
- es.each_with_index do |(t, r), i|
502
+ filtered = filter(config, msgs)
503
+ filtered.each_with_index do |(_t, r), i|
482
504
  actual_results << {
483
505
  single: r["single"],
484
506
  multiple: r["multiple"],
@@ -488,27 +510,6 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
488
510
  end
489
511
  assert_equal(expected_results, actual_results)
490
512
  end
491
-
492
- test %Q[record["key"] with enable_ruby #{enable_ruby}] do
493
- config = %[
494
- enable_ruby #{enable_ruby}
495
- auto_typecast yes
496
- <record>
497
- _timestamp ${record["@timestamp"]}
498
- _foo_bar ${record["foo.bar"]}
499
- </record>
500
- ]
501
- d = create_driver(config)
502
- record = {
503
- "foo.bar" => "foo.bar",
504
- "@timestamp" => 10,
505
- }
506
- es = d.run { d.emit(record, @time) }.filtered
507
- es.each do |t, r|
508
- assert { r['_timestamp'] == record['@timestamp'] }
509
- assert { r['_foo_bar'] == record['foo.bar'] }
510
- end
511
- end
512
513
  end
513
514
 
514
515
  test 'unknown placeholder (enable_ruby no)' do
@@ -518,37 +519,23 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
518
519
  message ${unknown}
519
520
  </record>
520
521
  ]
521
- emit(config) { |d|
522
+ filter(config) { |d|
522
523
  mock(d.instance.log).warn("unknown placeholder `${unknown}` found")
523
524
  }
524
525
  end
525
526
 
526
- test 'failed to expand (enable_ruby yes)' do
527
- config = %[
528
- enable_ruby yes
529
- <record>
530
- message ${unknown['bar']}
531
- </record>
532
- ]
533
- es = emit(config) { |d|
534
- mock(d.instance.log).warn("failed to expand `%Q[\#{unknown['bar']}]`", anything)
535
- }
536
- es.each do |t, r|
537
- assert_nil(r['message'])
538
- end
539
- end
540
-
541
527
  test 'expand fields starting with @ (enable_ruby no)' do
542
528
  config = %[
543
529
  enable_ruby no
544
530
  <record>
545
- foo ${@timestamp}
531
+ foo ${record["@timestamp"]}
546
532
  </record>
547
533
  ]
548
534
  d = create_driver(config)
549
535
  message = {"@timestamp" => "foo"}
550
- es = d.run { d.emit(message, @time) }.filtered
551
- es.each do |t, r|
536
+ d.run { d.feed(@tag, @time, message) }
537
+ filtered = d.filtered
538
+ filtered.each do |t, r|
552
539
  assert_equal(message["@timestamp"], r['foo'])
553
540
  end
554
541
  end
@@ -564,57 +551,27 @@ class RecordTransformerFilterTest < Test::Unit::TestCase
564
551
  ]
565
552
  d = create_driver(config)
566
553
  message = {"@timestamp" => "foo"}
567
- es = d.run { d.emit(message, @time) }.filtered
568
- es.each do |t, r|
554
+ d.run { d.feed(@tag, @time, message) }
555
+ filtered = d.filtered
556
+ filtered.each do |t, r|
569
557
  assert_equal([message["@timestamp"]], r['foo'])
570
558
  end
571
559
  end
560
+ end # test placeholders
572
561
 
573
- test 'expand fields starting with @ (enable_ruby yes)' do
574
- config = %[
562
+ sub_test_case 'test error record' do
563
+ test 'invalid record for placeholders' do
564
+ d = create_driver(%[
575
565
  enable_ruby yes
576
566
  <record>
577
- foo ${__send__("@timestamp")}
567
+ foo ${record["unknown"]["key"]}
578
568
  </record>
579
- ]
580
- d = create_driver(config)
581
- message = {"@timestamp" => "foo"}
582
- es = d.run { d.emit(message, @time) }.filtered
583
- es.each do |t, r|
584
- assert_equal(message["@timestamp"], r['foo'])
569
+ ])
570
+ flexmock(d.instance.router).should_receive(:emit_error_event).
571
+ with(String, Fluent::EventTime, Hash, RuntimeError).once
572
+ d.run do
573
+ d.feed(@tag, Fluent::EventTime.now, {'key' => 'value'})
585
574
  end
586
575
  end
587
- end # test placeholders
588
-
589
- test "compatibility test (enable_ruby yes)" do
590
- config = %[
591
- enable_ruby yes
592
- auto_typecast yes
593
- <record>
594
- _message prefix-${message}-suffix
595
- _time ${Time.at(time)}
596
- _number ${number == '-' ? 0 : number}
597
- _match ${/0x[0-9a-f]+/.match(hex)[0]}
598
- _timestamp ${__send__("@timestamp")}
599
- _foo_bar ${__send__('foo.bar')}
600
- </record>
601
- ]
602
- d = create_driver(config)
603
- record = {
604
- "number" => "-",
605
- "hex" => "0x10",
606
- "foo.bar" => "foo.bar",
607
- "@timestamp" => 10,
608
- "message" => "10",
609
- }
610
- es = d.run { d.emit(record, @time) }.filtered
611
- es.each do |t, r|
612
- assert { r['_message'] == "prefix-#{record['message']}-suffix" }
613
- assert { r['_time'] == Time.at(@time) }
614
- assert { r['_number'] == 0 }
615
- assert { r['_match'] == record['hex'] }
616
- assert { r['_timestamp'] == record['@timestamp'] }
617
- assert { r['_foo_bar'] == record['foo.bar'] }
618
- end
619
576
  end
620
577
  end