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,14 +1,16 @@
1
1
  require_relative '../helper'
2
+ require 'fluent/test/driver/filter'
2
3
  require 'fluent/plugin/filter_stdout'
3
4
  require 'timecop'
4
5
  require 'flexmock/test_unit'
5
6
 
6
7
  class StdoutFilterTest < Test::Unit::TestCase
7
- include Fluent
8
8
  include FlexMock::TestCase
9
9
 
10
10
  def setup
11
11
  Fluent::Test.setup
12
+ @old_tz = ENV["TZ"]
13
+ ENV["TZ"] = "UTC"
12
14
  Timecop.freeze
13
15
  end
14
16
 
@@ -16,99 +18,185 @@ class StdoutFilterTest < Test::Unit::TestCase
16
18
  super # FlexMock::TestCase requires this
17
19
  # http://flexmock.rubyforge.org/FlexMock/TestCase.html
18
20
  Timecop.return
21
+ ENV["TZ"] = @old_tz
19
22
  end
20
23
 
21
- CONFIG = %[
22
- ]
24
+ CONFIG = config_element('ROOT')
23
25
 
24
26
  def create_driver(conf = CONFIG)
25
- Test::FilterTestDriver.new(StdoutFilter, 'filter.test').configure(conf)
27
+ Fluent::Test::Driver::Filter.new(Fluent::Plugin::StdoutFilter).configure(conf)
26
28
  end
27
29
 
28
- def emit(d, msg, time)
30
+ def filter(d, time, record)
29
31
  d.run {
30
- d.emit(msg, time)
31
- }.filtered_as_array[0][2]
32
+ d.feed("filter.test", time, record)
33
+ }
34
+ d.filtered_records
32
35
  end
33
36
 
34
37
  def test_through_record
35
38
  d = create_driver
36
- time = Time.now
37
- filtered = emit(d, {'test' => 'test'}, time)
38
- assert_equal({'test' => 'test'}, filtered)
39
+ filtered = filter(d, event_time, {'test' => 'test'})
40
+ assert_equal([{'test' => 'test'}], filtered)
39
41
  end
40
42
 
41
- def test_configure_default
42
- d = create_driver
43
- assert_equal 'json', d.instance.formatter.output_type
44
- end
45
-
46
- def test_configure_output_type
47
- d = create_driver(CONFIG + "\noutput_type json")
48
- assert_equal 'json', d.instance.formatter.output_type
49
-
50
- d = create_driver(CONFIG + "\noutput_type hash")
51
- assert_equal 'hash', d.instance.formatter.output_type
52
-
53
- d = create_driver(CONFIG + "\noutput_type ltsv")
54
- assert_equal 'ltsv', d.instance.formatter.output_type
55
-
56
- assert_raise(Fluent::ConfigError) do
57
- d = create_driver(CONFIG + "\noutput_type foo")
43
+ sub_test_case "flat style parameters" do
44
+ sub_test_case "configure" do
45
+ def test_configure_default
46
+ d = create_driver
47
+ d.run {}
48
+ assert_equal 'json', d.instance.formatter.output_type
49
+ end
50
+
51
+ data(json: "json",
52
+ hash: "hash",
53
+ ltsv: "ltsv")
54
+ def test_output_type(data)
55
+ d = create_driver(CONFIG + config_element("", "", { "output_type" => data }))
56
+ d.run {}
57
+ assert_equal data, d.instance.formatter.output_type
58
+ end
59
+
60
+ def test_invalid_output_type
61
+ assert_raise(Fluent::ConfigError) do
62
+ d = create_driver(CONFIG + config_element("", "", { "output_type" => "foo" }))
63
+ d.run {}
64
+ end
65
+ end
58
66
  end
59
- end
60
67
 
61
- def test_output_type_json
62
- d = create_driver(CONFIG + "\noutput_type json")
63
- time = Time.now
64
- out = capture_log(d) { emit(d, {'test' => 'test'}, time) }
65
- assert_equal "#{time.localtime} filter.test: {\"test\":\"test\"}\n", out
68
+ def test_output_type_json
69
+ d = create_driver(CONFIG + config_element("", "", { "output_type" => "json" }))
70
+ etime = event_time("2016-10-07 21:09:31.012345678 UTC")
71
+ out = capture_log(d) { filter(d, etime, {'test' => 'test'}) }
72
+ assert_equal "2016-10-07 21:09:31.012345678 +0000 filter.test: {\"test\":\"test\"}\n", out
66
73
 
67
- # NOTE: Float::NAN is not jsonable
68
- d = create_driver(CONFIG + "\noutput_type json")
69
- flexmock(d.instance.router).should_receive(:emit_error_event)
70
- emit(d, {'test' => Float::NAN}, time)
71
- end
74
+ # NOTE: Float::NAN is not jsonable
75
+ d = create_driver(CONFIG + config_element("", "", { "output_type" => "json" }))
76
+ flexmock(d.instance.router).should_receive(:emit_error_event)
77
+ filter(d, etime, {'test' => Float::NAN})
78
+ end
72
79
 
73
- def test_output_type_hash
74
- d = create_driver(CONFIG + "\noutput_type hash")
75
- time = Time.now
76
- out = capture_log(d) { emit(d, {'test' => 'test'}, time) }
77
- assert_equal "#{time.localtime} filter.test: {\"test\"=>\"test\"}\n", out
80
+ def test_output_type_hash
81
+ d = create_driver(CONFIG + config_element("", "", { "output_type" => "hash" }))
82
+ etime = event_time("2016-10-07 21:09:31.012345678 UTC")
83
+ out = capture_log(d) { filter(d, etime, {'test' => 'test'}) }
84
+ assert_equal "2016-10-07 21:09:31.012345678 +0000 filter.test: {\"test\"=>\"test\"}\n", out
78
85
 
79
- # NOTE: Float::NAN is not jsonable, but hash string can output it.
80
- d = create_driver(CONFIG + "\noutput_type hash")
81
- out = capture_log(d) { emit(d, {'test' => Float::NAN}, time) }
82
- assert_equal "#{time.localtime} filter.test: {\"test\"=>NaN}\n", out
83
- end
86
+ # NOTE: Float::NAN is not jsonable, but hash string can output it.
87
+ d = create_driver(CONFIG + config_element("", "", { "output_type" => "hash" }))
88
+ out = capture_log(d) { filter(d, etime, {'test' => Float::NAN}) }
89
+ assert_equal "2016-10-07 21:09:31.012345678 +0000 filter.test: {\"test\"=>NaN}\n", out
90
+ end
84
91
 
85
- # Use include_time_key to output the message's time
86
- def test_include_time_key
87
- d = create_driver(CONFIG + "\noutput_type json\ninclude_time_key true\nutc")
88
- time = Time.now
89
- message_time = Time.parse("2011-01-02 13:14:15 UTC").to_i
90
- out = capture_log(d) { emit(d, {'test' => 'test'}, message_time) }
91
- assert_equal "#{time.localtime} filter.test: {\"test\":\"test\",\"time\":\"2011-01-02T13:14:15Z\"}\n", out
92
- end
92
+ # Use include_time_key to output the message's time
93
+ def test_include_time_key
94
+ config = config_element("", "", {
95
+ "output_type" => "json",
96
+ "include_time_key" => true,
97
+ "localtime" => false
98
+ })
99
+ d = create_driver(config)
100
+ etime = event_time("2016-10-07 21:09:31.012345678 UTC")
101
+ out = capture_log(d) { filter(d, etime, {'test' => 'test'}) }
102
+ assert_equal "2016-10-07 21:09:31.012345678 +0000 filter.test: {\"test\":\"test\",\"time\":\"2016-10-07T21:09:31Z\"}\n", out
103
+ end
93
104
 
94
- # out_stdout formatter itself can also be replaced
95
- def test_format_json
96
- d = create_driver(CONFIG + "\nformat json")
97
- time = Time.now
98
- out = capture_log(d) { emit(d, {'test' => 'test'}, time) }
99
- assert_equal "{\"test\":\"test\"}\n", out
105
+ # out_stdout formatter itself can also be replaced
106
+ def test_format_json
107
+ d = create_driver(CONFIG + config_element("", "", { "format" => "json" }))
108
+ out = capture_log(d) { filter(d, event_time, {'test' => 'test'}) }
109
+ assert_equal "{\"test\":\"test\"}\n", out
110
+ end
100
111
  end
101
112
 
102
- private
113
+ sub_test_case "with <format> sub section" do
114
+ sub_test_case "configure" do
115
+ def test_default
116
+ conf = config_element
117
+ conf.elements << config_element("format", "", { "@type" => "stdout"})
118
+ d = create_driver(conf)
119
+ d.run {}
120
+ assert_equal("json", d.instance.formatter.output_type)
121
+ end
122
+
123
+ data(json: "json",
124
+ hash: "hash",
125
+ ltsv: "ltsv")
126
+ def test_output_type(data)
127
+ conf = config_element
128
+ conf.elements << config_element("format", "", { "@type" => "stdout", "output_type" => data })
129
+ d = create_driver(conf)
130
+ d.run {}
131
+ assert_equal(data, d.instance.formatter.output_type)
132
+ end
133
+
134
+ def test_invalid_output_type
135
+ conf = config_element
136
+ conf.elements << config_element("format", "", { "@type" => "stdout", "output_type" => "foo" })
137
+ assert_raise(Fluent::ConfigError) do
138
+ d = create_driver(conf)
139
+ d.run {}
140
+ end
141
+ end
142
+ end
103
143
 
104
- # Capture the log output of the block given
105
- def capture_log(d, &block)
106
- tmp = d.instance.log.out
107
- d.instance.log.out = StringIO.new
108
- yield
109
- return d.instance.log.out.string
110
- ensure
111
- d.instance.log.out = tmp
144
+ sub_test_case "output_type" do
145
+ def test_json
146
+ conf = config_element
147
+ conf.elements << config_element("format", "", { "@type" => "stdout", "output_type" => "json" })
148
+ d = create_driver(conf)
149
+ etime = event_time("2016-10-07 21:09:31.012345678 UTC")
150
+ out = capture_log(d) { filter(d, etime, {'test' => 'test'}) }
151
+ assert_equal "2016-10-07 21:09:31.012345678 +0000 filter.test: {\"test\":\"test\"}\n", out
152
+ end
153
+
154
+ def test_json_nan
155
+ # NOTE: Float::NAN is not jsonable
156
+ conf = config_element
157
+ conf.elements << config_element("format", "", { "@type" => "stdout", "output_type" => "json" })
158
+ d = create_driver(conf)
159
+ etime = event_time("2016-10-07 21:09:31.012345678 UTC")
160
+ flexmock(d.instance.router).should_receive(:emit_error_event)
161
+ filter(d, etime, {'test' => Float::NAN})
162
+ end
163
+
164
+ def test_hash
165
+ conf = config_element
166
+ conf.elements << config_element("format", "", { "@type" => "stdout", "output_type" => "hash" })
167
+ d = create_driver(conf)
168
+ etime = event_time("2016-10-07 21:09:31.012345678 UTC")
169
+ out = capture_log(d) { filter(d, etime, {'test' => 'test'}) }
170
+ assert_equal "2016-10-07 21:09:31.012345678 +0000 filter.test: {\"test\"=>\"test\"}\n", out
171
+ end
172
+
173
+ def test_hash_nan
174
+ # NOTE: Float::NAN is not jsonable, but hash string can output it.
175
+ conf = config_element
176
+ conf.elements << config_element("format", "", { "@type" => "stdout", "output_type" => "hash" })
177
+ d = create_driver(conf)
178
+ etime = event_time("2016-10-07 21:09:31.012345678 UTC")
179
+ out = capture_log(d) { filter(d, etime, {'test' => Float::NAN}) }
180
+ assert_equal "2016-10-07 21:09:31.012345678 +0000 filter.test: {\"test\"=>NaN}\n", out
181
+ end
182
+
183
+ # Use include_time_key to output the message's time
184
+ def test_include_time_key
185
+ conf = config_element
186
+ conf.elements << config_element("format", "", {
187
+ "@type" => "stdout",
188
+ "output_type" => "json"
189
+ })
190
+ conf.elements << config_element("inject", "", {
191
+ "time_key" => "time",
192
+ "time_type" => "string",
193
+ "localtime" => false
194
+ })
195
+ d = create_driver(conf)
196
+ etime = event_time("2016-10-07 21:09:31.012345678 UTC")
197
+ out = capture_log(d) { filter(d, etime, {'test' => 'test'}) }
198
+ assert_equal "2016-10-07 21:09:31.012345678 +0000 filter.test: {\"test\":\"test\",\"time\":\"2016-10-07T21:09:31Z\"}\n", out
199
+ end
200
+ end
112
201
  end
113
202
  end
114
-
@@ -0,0 +1,111 @@
1
+ require_relative '../helper'
2
+ require 'fluent/test/driver/formatter'
3
+ require 'fluent/plugin/formatter_csv'
4
+
5
+ class CsvFormatterTest < ::Test::Unit::TestCase
6
+
7
+ def setup
8
+ @time = event_time
9
+ end
10
+
11
+ CONF = %[
12
+ fields a,b,c
13
+ ]
14
+
15
+ def create_driver(conf = CONF)
16
+ Fluent::Test::Driver::Formatter.new(Fluent::Plugin::CsvFormatter).configure(conf)
17
+ end
18
+
19
+ def tag
20
+ "tag"
21
+ end
22
+
23
+ def test_config_params
24
+ d = create_driver
25
+ assert_equal(',', d.instance.delimiter)
26
+ assert_equal(true, d.instance.force_quotes)
27
+ assert_equal(['a', 'b', 'c'], d.instance.fields)
28
+ end
29
+
30
+ data('empty array' => [],
31
+ 'array including empty string' => ['', ''])
32
+ def test_empty_fields(param)
33
+ assert_raise Fluent::ConfigError do
34
+ create_driver('fields' => param)
35
+ end
36
+ end
37
+
38
+ data(
39
+ 'tab_char' => ["\t", '\t'],
40
+ 'tab_string' => ["\t", 'TAB'],
41
+ 'pipe' => ['|', '|'])
42
+ def test_config_params_with_customized_delimiters(data)
43
+ expected, target = data
44
+ d = create_driver("delimiter" => target, 'fields' => 'a,b,c')
45
+ assert_equal expected, d.instance.delimiter
46
+ end
47
+
48
+ def test_format
49
+ d = create_driver("fields" => "message,message2")
50
+ formatted = d.instance.format(tag, @time, {
51
+ 'message' => 'awesome',
52
+ 'message2' => 'awesome2'
53
+ })
54
+ assert_equal("\"awesome\",\"awesome2\"\n", formatted)
55
+ end
56
+
57
+ def test_format_without_newline
58
+ d = create_driver("fields" => "message,message2", "add_newline" => false)
59
+ formatted = d.instance.format(tag, @time, {
60
+ 'message' => 'awesome',
61
+ 'message2' => 'awesome2'
62
+ })
63
+ assert_equal("\"awesome\",\"awesome2\"", formatted)
64
+ end
65
+
66
+ def test_format_with_customized_delimiters
67
+ d = create_driver("fields" => "message,message2",
68
+ "delimiter" => "\t")
69
+ formatted = d.instance.format(tag, @time, {
70
+ 'message' => 'awesome',
71
+ 'message2' => 'awesome2'
72
+ })
73
+ assert_equal("\"awesome\"\t\"awesome2\"\n", formatted)
74
+ end
75
+
76
+ def test_format_with_non_quote
77
+ d = create_driver("fields" => "message,message2",
78
+ "force_quotes" => false)
79
+ formatted = d.instance.format(tag, @time, {
80
+ 'message' => 'awesome',
81
+ 'message2' => 'awesome2'
82
+ })
83
+ assert_equal("awesome,awesome2\n", formatted)
84
+ end
85
+
86
+ data(
87
+ 'nil' => {
88
+ 'message' => 'awesome',
89
+ 'message2' => nil,
90
+ 'message3' => 'awesome3'
91
+ },
92
+ 'blank' => {
93
+ 'message' => 'awesome',
94
+ 'message2' => '',
95
+ 'message3' => 'awesome3'
96
+ })
97
+ def test_format_with_empty_fields(data)
98
+ d = create_driver("fields" => "message,message2,message3")
99
+ formatted = d.instance.format(tag, @time, data)
100
+ assert_equal("\"awesome\",\"\",\"awesome3\"\n", formatted)
101
+ end
102
+
103
+ data(
104
+ 'normally' => 'one,two,three',
105
+ 'white_space' => 'one , two , three',
106
+ 'blank' => 'one,,two,three')
107
+ def test_config_params_with_fields(data)
108
+ d = create_driver('fields' => data)
109
+ assert_equal %w(one two three), d.instance.fields
110
+ end
111
+ end
@@ -0,0 +1,35 @@
1
+ require_relative '../helper'
2
+ require 'fluent/test/driver/formatter'
3
+ require 'fluent/plugin/formatter_hash'
4
+
5
+ class HashFormatterTest < ::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::HashFormatter).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_format
23
+ d = create_driver({})
24
+ formatted = d.instance.format(tag, @time, record)
25
+
26
+ assert_equal(%Q!{"message"=>"awesome", "greeting"=>"hello"}\n!, formatted.encode(Encoding::UTF_8))
27
+ end
28
+
29
+ def test_format_without_newline
30
+ d = create_driver('add_newline' => false)
31
+ formatted = d.instance.format(tag, @time, record)
32
+
33
+ assert_equal(%Q!{"message"=>"awesome", "greeting"=>"hello"}!, formatted.encode(Encoding::UTF_8))
34
+ end
35
+ end
@@ -0,0 +1,51 @@
1
+ require_relative '../helper'
2
+ require 'json'
3
+ require 'fluent/test/driver/formatter'
4
+ require 'fluent/plugin/formatter_json'
5
+
6
+ class JsonFormatterTest < ::Test::Unit::TestCase
7
+
8
+ def setup
9
+ @time = event_time
10
+ end
11
+
12
+ def create_driver(conf = "")
13
+ Fluent::Test::Driver::Formatter.new(Fluent::Plugin::JSONFormatter).configure(conf)
14
+ end
15
+
16
+ def tag
17
+ "tag"
18
+ end
19
+
20
+ def record
21
+ {'message' => 'awesome'}
22
+ end
23
+
24
+ def symbolic_record
25
+ {:message => :awesome}
26
+ end
27
+
28
+ data('oj' => 'oj', 'yajl' => 'yajl')
29
+ def test_format(data)
30
+ d = create_driver('json_parser' => data)
31
+ formatted = d.instance.format(tag, @time, record)
32
+
33
+ assert_equal("#{JSON.generate(record)}\n", formatted)
34
+ end
35
+
36
+ data('oj' => 'oj', 'yajl' => 'yajl')
37
+ def test_format_without_nl(data)
38
+ d = create_driver('json_parser' => data, 'add_newline' => false)
39
+ formatted = d.instance.format(tag, @time, record)
40
+
41
+ assert_equal(JSON.generate(record), formatted)
42
+ end
43
+
44
+ data('oj' => 'oj', 'yajl' => 'yajl')
45
+ def test_format_with_symbolic_record(data)
46
+ d = create_driver('json_parser' => data)
47
+ formatted = d.instance.format(tag, @time, symbolic_record)
48
+
49
+ assert_equal("#{JSON.generate(record)}\n", formatted)
50
+ end
51
+ end
@@ -0,0 +1,62 @@
1
+ require_relative '../helper'
2
+ require 'fluent/test/driver/formatter'
3
+ require 'fluent/plugin/formatter_ltsv'
4
+
5
+ class LabeledTSVFormatterTest < ::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::LabeledTSVFormatter).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
+ assert_equal "\t", d.instance.delimiter
25
+ assert_equal ":", d.instance.label_delimiter
26
+ assert_equal true, d.instance.add_newline
27
+
28
+ d = create_driver(
29
+ 'delimiter' => ',',
30
+ 'label_delimiter' => '=',
31
+ 'add_newline' => false,
32
+ )
33
+
34
+ assert_equal ",", d.instance.delimiter
35
+ assert_equal "=", d.instance.label_delimiter
36
+ assert_equal false, d.instance.add_newline
37
+ end
38
+
39
+ def test_format
40
+ d = create_driver({})
41
+ formatted = d.instance.format(tag, @time, record)
42
+
43
+ assert_equal("message:awesome\tgreeting:hello\n", formatted)
44
+ end
45
+
46
+ def test_format_without_newline
47
+ d = create_driver('add_newline' => false)
48
+ formatted = d.instance.format(tag, @time, record)
49
+
50
+ assert_equal("message:awesome\tgreeting:hello", formatted)
51
+ end
52
+
53
+ def test_format_with_customized_delimiters
54
+ d = create_driver(
55
+ 'delimiter' => ',',
56
+ 'label_delimiter' => '=',
57
+ )
58
+ formatted = d.instance.format(tag, @time, record)
59
+
60
+ assert_equal("message=awesome,greeting=hello\n", formatted)
61
+ end
62
+ end
@@ -0,0 +1,28 @@
1
+ require_relative '../helper'
2
+ require 'fluent/test/driver/formatter'
3
+ require 'fluent/plugin/formatter_msgpack'
4
+
5
+ class MessagePackFormatterTest < ::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::MessagePackFormatter).configure(conf)
12
+ end
13
+
14
+ def tag
15
+ "tag"
16
+ end
17
+
18
+ def record
19
+ {'message' => 'awesome'}
20
+ end
21
+
22
+ def test_format
23
+ d = create_driver({})
24
+ formatted = d.instance.format(tag, @time, record)
25
+
26
+ assert_equal(record.to_msgpack, formatted)
27
+ end
28
+ end
@@ -0,0 +1,95 @@
1
+ require_relative '../helper'
2
+ require 'fluent/test/driver/formatter'
3
+ require 'fluent/plugin/formatter_out_file'
4
+
5
+ class OutFileFormatterTest < ::Test::Unit::TestCase
6
+ def setup
7
+ @time = event_time
8
+ end
9
+
10
+ def create_driver(conf = {})
11
+ d = Fluent::Test::Driver::Formatter.new(Fluent::Plugin::OutFileFormatter)
12
+ case conf
13
+ when Fluent::Config::Element
14
+ d.configure(conf)
15
+ when Hash
16
+ d.configure({'utc' => true}.merge(conf))
17
+ else
18
+ d.configure(conf)
19
+ end
20
+ end
21
+
22
+ def tag
23
+ "tag"
24
+ end
25
+
26
+ def record
27
+ {'message' => 'awesome'}
28
+ end
29
+
30
+ data('both true' => 'true', 'both false' => 'false')
31
+ def test_configured_with_both_of_utc_and_localtime(value)
32
+ assert_raise(Fluent::ConfigError.new("both of utc and localtime are specified, use only one of them")) do
33
+ create_driver({'utc' => value, 'localtime' => value})
34
+ end
35
+ end
36
+
37
+ time_i = Time.parse("2016-07-26 21:08:30 -0700").to_i
38
+ data(
39
+ 'configured for localtime by localtime' => ['localtime', 'true', time_i, "2016-07-26T21:08:30-07:00"],
40
+ 'configured for localtime by utc' => ['utc', 'false', time_i, "2016-07-26T21:08:30-07:00"],
41
+ 'configured for utc by localtime' => ['localtime', 'false', time_i, "2016-07-27T04:08:30Z"],
42
+ 'configured for utc by utc' => ['utc', 'true', time_i, "2016-07-27T04:08:30Z"],
43
+ )
44
+ def test_configured_with_utc_or_localtime(data)
45
+ key, value, time_i, expected = data
46
+ time = Time.at(time_i)
47
+ begin
48
+ oldtz, ENV['TZ'] = ENV['TZ'], "UTC+07"
49
+ d = create_driver(config_element('ROOT', '', {key => value}))
50
+ tag = 'test'
51
+ assert_equal "#{expected}\t#{tag}\t#{Yajl.dump(record)}\n", d.instance.format(tag, time, record)
52
+ ensure
53
+ ENV['TZ'] = oldtz
54
+ end
55
+ end
56
+
57
+ def test_format
58
+ d = create_driver({})
59
+ formatted = d.instance.format(tag, @time, record)
60
+
61
+ assert_equal("#{time2str(@time)}\t#{tag}\t#{Yajl.dump(record)}\n", formatted)
62
+ end
63
+
64
+ def test_format_without_time
65
+ d = create_driver('output_time' => 'false')
66
+ formatted = d.instance.format(tag, @time, record)
67
+
68
+ assert_equal("#{tag}\t#{Yajl.dump(record)}\n", formatted)
69
+ end
70
+
71
+ def test_format_without_tag
72
+ d = create_driver('output_tag' => 'false')
73
+ formatted = d.instance.format(tag, @time, record)
74
+
75
+ assert_equal("#{time2str(@time)}\t#{Yajl.dump(record)}\n", formatted)
76
+ end
77
+
78
+ def test_format_without_time_and_tag
79
+ d = create_driver('output_tag' => 'false', 'output_time' => 'false')
80
+ formatted = d.instance.format('tag', @time, record)
81
+
82
+ assert_equal("#{Yajl.dump(record)}\n", formatted)
83
+ end
84
+
85
+ def test_format_without_time_and_tag_against_string_literal_configure
86
+ d = create_driver(%[
87
+ utc true
88
+ output_tag false
89
+ output_time false
90
+ ])
91
+ formatted = d.instance.format('tag', @time, record)
92
+
93
+ assert_equal("#{Yajl.dump(record)}\n", formatted)
94
+ end
95
+ end