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,441 @@
1
+ require_relative '../helper'
2
+ require 'fluent/test/driver/parser'
3
+ require 'fluent/plugin/parser'
4
+
5
+ class SyslogParserTest < ::Test::Unit::TestCase
6
+ def setup
7
+ Fluent::Test.setup
8
+ @parser = Fluent::Test::Driver::Parser.new(Fluent::Plugin::SyslogParser)
9
+ @expected = {
10
+ 'host' => '192.168.0.1',
11
+ 'ident' => 'fluentd',
12
+ 'pid' => '11111',
13
+ 'message' => '[error] Syslog test'
14
+ }
15
+ end
16
+
17
+ def test_parse
18
+ @parser.configure({})
19
+ @parser.instance.parse('Feb 28 12:00:00 192.168.0.1 fluentd[11111]: [error] Syslog test') { |time, record|
20
+ assert_equal(event_time('Feb 28 12:00:00', format: '%b %d %H:%M:%S'), time)
21
+ assert_equal(@expected, record)
22
+ }
23
+ assert_equal(Fluent::Plugin::SyslogParser::REGEXP, @parser.instance.patterns['format'])
24
+ assert_equal("%b %d %H:%M:%S", @parser.instance.patterns['time_format'])
25
+ end
26
+
27
+ def test_parse_with_time_format
28
+ @parser.configure('time_format' => '%b %d %M:%S:%H')
29
+ @parser.instance.parse('Feb 28 00:00:12 192.168.0.1 fluentd[11111]: [error] Syslog test') { |time, record|
30
+ assert_equal(event_time('Feb 28 12:00:00', format: '%b %d %H:%M:%S'), time)
31
+ assert_equal(@expected, record)
32
+ }
33
+ assert_equal('%b %d %M:%S:%H', @parser.instance.patterns['time_format'])
34
+ end
35
+
36
+ def test_parse_with_priority
37
+ @parser.configure('with_priority' => true)
38
+ @parser.instance.parse('<6>Feb 28 12:00:00 192.168.0.1 fluentd[11111]: [error] Syslog test') { |time, record|
39
+ assert_equal(event_time('Feb 28 12:00:00', format: '%b %d %H:%M:%S'), time)
40
+ assert_equal(@expected.merge('pri' => 6), record)
41
+ }
42
+ assert_equal(Fluent::Plugin::SyslogParser::REGEXP_WITH_PRI, @parser.instance.patterns['format'])
43
+ assert_equal("%b %d %H:%M:%S", @parser.instance.patterns['time_format'])
44
+ end
45
+
46
+ def test_parse_without_colon
47
+ @parser.configure({})
48
+ @parser.instance.parse('Feb 28 12:00:00 192.168.0.1 fluentd[11111] [error] Syslog test') { |time, record|
49
+ assert_equal(event_time('Feb 28 12:00:00', format: '%b %d %H:%M:%S'), time)
50
+ assert_equal(@expected, record)
51
+ }
52
+ assert_equal(Fluent::Plugin::SyslogParser::REGEXP, @parser.instance.patterns['format'])
53
+ assert_equal("%b %d %H:%M:%S", @parser.instance.patterns['time_format'])
54
+ end
55
+
56
+ def test_parse_with_keep_time_key
57
+ @parser.configure(
58
+ 'time_format' => '%b %d %M:%S:%H',
59
+ 'keep_time_key'=>'true',
60
+ )
61
+ text = 'Feb 28 00:00:12 192.168.0.1 fluentd[11111]: [error] Syslog test'
62
+ @parser.instance.parse(text) do |time, record|
63
+ assert_equal "Feb 28 00:00:12", record['time']
64
+ end
65
+ end
66
+
67
+ def test_parse_various_characters_for_tag
68
+ ident = '~!@#$%^&*()_+=-`]{};"\'/?\\,.<>'
69
+ @parser.configure({})
70
+ @parser.instance.parse("Feb 28 12:00:00 192.168.0.1 #{ident}[11111]: [error] Syslog test") { |time, record|
71
+ assert_equal(event_time('Feb 28 12:00:00', format: '%b %d %H:%M:%S'), time)
72
+ assert_equal(@expected.merge('ident' => ident), record)
73
+ }
74
+ end
75
+
76
+ def test_parse_various_characters_for_tag_with_priority
77
+ ident = '~!@#$%^&*()_+=-`]{};"\'/?\\,.<>'
78
+ @parser.configure('with_priority' => true)
79
+ @parser.instance.parse("<6>Feb 28 12:00:00 192.168.0.1 #{ident}[11111]: [error] Syslog test") { |time, record|
80
+ assert_equal(event_time('Feb 28 12:00:00', format: '%b %d %H:%M:%S'), time)
81
+ assert_equal(@expected.merge('pri' => 6, 'ident' => ident), record)
82
+ }
83
+ end
84
+
85
+ class TestRFC5424Regexp < self
86
+ def test_parse_with_rfc5424_message
87
+ @parser.configure(
88
+ 'time_format' => '%Y-%m-%dT%H:%M:%S.%L%z',
89
+ 'message_format' => 'rfc5424',
90
+ 'with_priority' => true,
91
+ )
92
+ text = '<16>1 2017-02-06T13:14:15.003Z 192.168.0.1 fluentd - - - Hi, from Fluentd!'
93
+ @parser.instance.parse(text) do |time, record|
94
+ assert_equal(event_time("2017-02-06T13:14:15.003Z", format: '%Y-%m-%dT%H:%M:%S.%L%z'), time)
95
+ assert_equal "-", record["pid"]
96
+ assert_equal "-", record["msgid"]
97
+ assert_equal "-", record["extradata"]
98
+ assert_equal "Hi, from Fluentd!", record["message"]
99
+ end
100
+ assert_equal(Fluent::Plugin::SyslogParser::REGEXP_RFC5424_WITH_PRI,
101
+ @parser.instance.patterns['format'])
102
+ end
103
+
104
+ def test_parse_with_rfc5424_message_and_without_priority
105
+ @parser.configure(
106
+ 'time_format' => '%Y-%m-%dT%H:%M:%S.%L%z',
107
+ 'message_format' => 'rfc5424',
108
+ )
109
+ text = '2017-02-06T13:14:15.003Z 192.168.0.1 fluentd - - - Hi, from Fluentd!'
110
+ @parser.instance.parse(text) do |time, record|
111
+ assert_equal(event_time("2017-02-06T13:14:15.003Z", format: '%Y-%m-%dT%H:%M:%S.%L%z'), time)
112
+ assert_equal "-", record["pid"]
113
+ assert_equal "-", record["msgid"]
114
+ assert_equal "-", record["extradata"]
115
+ assert_equal "Hi, from Fluentd!", record["message"]
116
+ end
117
+ assert_equal(Fluent::Plugin::SyslogParser::REGEXP_RFC5424,
118
+ @parser.instance.patterns['format'])
119
+ end
120
+
121
+ def test_parse_with_rfc5424_empty_message_and_without_priority
122
+ @parser.configure(
123
+ 'time_format' => '%Y-%m-%dT%H:%M:%S.%L%z',
124
+ 'message_format' => 'rfc5424',
125
+ )
126
+ text = '2017-02-06T13:14:15.003Z 192.168.0.1 fluentd - - -'
127
+ @parser.instance.parse(text) do |time, record|
128
+ assert_equal(event_time("2017-02-06T13:14:15.003Z", format: '%Y-%m-%dT%H:%M:%S.%L%z'), time)
129
+ assert_equal "-", record["pid"]
130
+ assert_equal "-", record["msgid"]
131
+ assert_equal "-", record["extradata"]
132
+ assert_nil record["message"]
133
+ end
134
+ assert_equal(Fluent::Plugin::SyslogParser::REGEXP_RFC5424,
135
+ @parser.instance.patterns['format'])
136
+ end
137
+
138
+ def test_parse_with_rfc5424_message_without_time_format
139
+ @parser.configure(
140
+ 'message_format' => 'rfc5424',
141
+ 'with_priority' => true,
142
+ )
143
+ text = '<16>1 2017-02-06T13:14:15.003Z 192.168.0.1 fluentd - - - Hi, from Fluentd!'
144
+ @parser.instance.parse(text) do |time, record|
145
+ assert_equal(event_time("2017-02-06T13:14:15.003Z", format: '%Y-%m-%dT%H:%M:%S.%L%z'), time)
146
+ assert_equal "-", record["pid"]
147
+ assert_equal "-", record["msgid"]
148
+ assert_equal "-", record["extradata"]
149
+ assert_equal "Hi, from Fluentd!", record["message"]
150
+ end
151
+ end
152
+
153
+ def test_parse_with_rfc5424_message_with_priority_and_pid
154
+ @parser.configure(
155
+ 'message_format' => 'rfc5424',
156
+ 'with_priority' => true,
157
+ )
158
+ text = '<28>1 2018-09-26T15:54:26.620412+09:00 machine minissdpd 1298 - - peer 192.168.0.5:50123 is not from a LAN'
159
+ @parser.instance.parse(text) do |time, record|
160
+ assert_equal(event_time("2018-09-26T15:54:26.620412+0900", format: '%Y-%m-%dT%H:%M:%S.%L%z'), time)
161
+ assert_equal "1298", record["pid"]
162
+ assert_equal "-", record["msgid"]
163
+ assert_equal "-", record["extradata"]
164
+ assert_equal " peer 192.168.0.5:50123 is not from a LAN", record["message"]
165
+ end
166
+ end
167
+
168
+ def test_parse_with_rfc5424_structured_message
169
+ @parser.configure(
170
+ 'time_format' => '%Y-%m-%dT%H:%M:%S.%L%z',
171
+ 'message_format' => 'rfc5424',
172
+ 'with_priority' => true,
173
+ )
174
+ text = '<16>1 2017-02-06T13:14:15.003Z 192.168.0.1 fluentd 11111 ID24224 [exampleSDID@20224 iut="3" eventSource="Application" eventID="11211"] Hi, from Fluentd!'
175
+ @parser.instance.parse(text) do |time, record|
176
+ assert_equal(event_time("2017-02-06T13:14:15.003Z", format: '%Y-%m-%dT%H:%M:%S.%L%z'), time)
177
+ assert_equal "11111", record["pid"]
178
+ assert_equal "ID24224", record["msgid"]
179
+ assert_equal "[exampleSDID@20224 iut=\"3\" eventSource=\"Application\" eventID=\"11211\"]",
180
+ record["extradata"]
181
+ assert_equal "Hi, from Fluentd!", record["message"]
182
+ end
183
+ end
184
+
185
+ def test_parse_with_rfc5424_multiple_structured_message
186
+ @parser.configure(
187
+ 'time_format' => '%Y-%m-%dT%H:%M:%S.%L%z',
188
+ 'message_format' => 'rfc5424',
189
+ 'with_priority' => true,
190
+ )
191
+ text = '<16>1 2017-02-06T13:14:15.003Z 192.168.0.1 fluentd 11111 ID24224 [exampleSDID@20224 iut="3" eventSource="Application" eventID="11211"][exampleSDID@20224 class="high"] Hi, from Fluentd!'
192
+ @parser.instance.parse(text) do |time, record|
193
+ assert_equal(event_time("2017-02-06T13:14:15.003Z", format: '%Y-%m-%dT%H:%M:%S.%L%z'), time)
194
+ assert_equal "11111", record["pid"]
195
+ assert_equal "ID24224", record["msgid"]
196
+ assert_equal "[exampleSDID@20224 iut=\"3\" eventSource=\"Application\" eventID=\"11211\"][exampleSDID@20224 class=\"high\"]",
197
+ record["extradata"]
198
+ assert_equal "Hi, from Fluentd!", record["message"]
199
+ end
200
+ end
201
+
202
+ def test_parse_with_rfc5424_message_includes_right_bracket
203
+ @parser.configure(
204
+ 'time_format' => '%Y-%m-%dT%H:%M:%S.%L%z',
205
+ 'message_format' => 'rfc5424',
206
+ 'with_priority' => true,
207
+ )
208
+ text = '<16>1 2017-02-06T13:14:15.003Z 192.168.0.1 fluentd 11111 ID24224 [exampleSDID@20224 iut="3" eventSource="Application" eventID="11211"] Hi, from Fluentd]!'
209
+ @parser.instance.parse(text) do |time, record|
210
+ assert_equal(event_time("2017-02-06T13:14:15.003Z", format: '%Y-%m-%dT%H:%M:%S.%L%z'), time)
211
+ assert_equal "11111", record["pid"]
212
+ assert_equal "ID24224", record["msgid"]
213
+ assert_equal "[exampleSDID@20224 iut=\"3\" eventSource=\"Application\" eventID=\"11211\"]",
214
+ record["extradata"]
215
+ assert_equal "Hi, from Fluentd]!", record["message"]
216
+ end
217
+ end
218
+
219
+ def test_parse_with_rfc5424_empty_message
220
+ @parser.configure(
221
+ 'time_format' => '%Y-%m-%dT%H:%M:%S.%L%z',
222
+ 'message_format' => 'rfc5424',
223
+ 'with_priority' => true,
224
+ )
225
+ text = '<16>1 2017-02-06T13:14:15.003Z 192.168.0.1 fluentd 11111 ID24224 [exampleSDID@20224 iut="3" eventSource="Application" eventID="11211"]'
226
+ @parser.instance.parse(text) do |time, record|
227
+ assert_equal(event_time("2017-02-06T13:14:15.003Z", format: '%Y-%m-%dT%H:%M:%S.%L%z'), time)
228
+ assert_equal "11111", record["pid"]
229
+ assert_equal "ID24224", record["msgid"]
230
+ assert_equal "[exampleSDID@20224 iut=\"3\" eventSource=\"Application\" eventID=\"11211\"]",
231
+ record["extradata"]
232
+ assert_nil record["message"]
233
+ end
234
+ end
235
+
236
+ def test_parse_with_rfc5424_message_without_subseconds
237
+ @parser.configure(
238
+ 'message_format' => 'rfc5424',
239
+ 'with_priority' => true,
240
+ )
241
+ text = '<16>1 2017-02-06T13:14:15Z 192.168.0.1 fluentd - - - Hi, from Fluentd!'
242
+ @parser.instance.parse(text) do |time, record|
243
+ assert_equal(event_time("2017-02-06T13:14:15Z", format: '%Y-%m-%dT%H:%M:%S%z'), time)
244
+ assert_equal "-", record["pid"]
245
+ assert_equal "-", record["msgid"]
246
+ assert_equal "-", record["extradata"]
247
+ assert_equal "Hi, from Fluentd!", record["message"]
248
+ end
249
+ end
250
+
251
+ def test_parse_with_rfc5424_message_both_timestamp
252
+ @parser.configure(
253
+ 'message_format' => 'rfc5424',
254
+ 'with_priority' => true,
255
+ )
256
+ text = '<16>1 2017-02-06T13:14:15Z 192.168.0.1 fluentd - - - Hi, from Fluentd!'
257
+ @parser.instance.parse(text) do |time, record|
258
+ assert_equal(event_time("2017-02-06T13:14:15Z", format: '%Y-%m-%dT%H:%M:%S%z'), time)
259
+ assert_equal "-", record["pid"]
260
+ assert_equal "-", record["msgid"]
261
+ assert_equal "-", record["extradata"]
262
+ assert_equal "Hi, from Fluentd!", record["message"]
263
+ end
264
+ text = '<16>1 2017-02-06T13:14:15.003Z 192.168.0.1 fluentd - - - Hi, from Fluentd with subseconds!'
265
+ @parser.instance.parse(text) do |time, record|
266
+ assert_equal(event_time("2017-02-06T13:14:15.003Z", format: '%Y-%m-%dT%H:%M:%S.%L%z'), time)
267
+ assert_equal "-", record["pid"]
268
+ assert_equal "-", record["msgid"]
269
+ assert_equal "-", record["extradata"]
270
+ assert_equal "Hi, from Fluentd with subseconds!", record["message"]
271
+ end
272
+ end
273
+ end
274
+
275
+ class TestAutoRegexp < self
276
+ def test_auto_with_legacy_syslog_message
277
+ @parser.configure(
278
+ 'time_format' => '%b %d %M:%S:%H',
279
+ 'message_format' => 'auto',
280
+ )
281
+ text = 'Feb 28 00:00:12 192.168.0.1 fluentd[11111]: [error] Syslog test'
282
+ @parser.instance.parse(text) do |time, record|
283
+ assert_equal(event_time("Feb 28 00:00:12", format: '%b %d %M:%S:%H'), time)
284
+ assert_equal(@expected, record)
285
+ end
286
+ assert_equal(Fluent::Plugin::SyslogParser::REGEXP, @parser.instance.patterns['format'])
287
+ end
288
+
289
+ def test_auto_with_legacy_syslog_priority_message
290
+ @parser.configure(
291
+ 'time_format' => '%b %d %M:%S:%H',
292
+ 'with_priority' => true,
293
+ 'message_format' => 'auto',
294
+ )
295
+ text = '<6>Feb 28 12:00:00 192.168.0.1 fluentd[11111]: [error] Syslog test'
296
+ @parser.instance.parse(text) do |time, record|
297
+ assert_equal(event_time("Feb 28 12:00:00", format: '%b %d %M:%S:%H'), time)
298
+ assert_equal(@expected.merge('pri' => 6), record)
299
+ end
300
+ assert_equal(Fluent::Plugin::SyslogParser::REGEXP_WITH_PRI, @parser.instance.patterns['format'])
301
+ end
302
+
303
+ def test_parse_with_rfc5424_message
304
+ @parser.configure(
305
+ 'time_format' => '%Y-%m-%dT%H:%M:%S.%L%z',
306
+ 'message_format' => 'auto',
307
+ 'with_priority' => true,
308
+ )
309
+ text = '<16>1 2017-02-06T13:14:15.003Z 192.168.0.1 fluentd - - - Hi, from Fluentd!'
310
+ @parser.instance.parse(text) do |time, record|
311
+ assert_equal(event_time("2017-02-06T13:14:15.003Z", format: '%Y-%m-%dT%H:%M:%S.%L%z'), time)
312
+ assert_equal "-", record["pid"]
313
+ assert_equal "-", record["msgid"]
314
+ assert_equal "-", record["extradata"]
315
+ assert_equal "Hi, from Fluentd!", record["message"]
316
+ end
317
+ assert_equal(Fluent::Plugin::SyslogParser::REGEXP_RFC5424_WITH_PRI,
318
+ @parser.instance.patterns['format'])
319
+ end
320
+
321
+ def test_parse_with_rfc5424_structured_message
322
+ @parser.configure(
323
+ 'time_format' => '%Y-%m-%dT%H:%M:%S.%L%z',
324
+ 'message_format' => 'auto',
325
+ 'with_priority' => true,
326
+ )
327
+ text = '<16>1 2017-02-06T13:14:15.003Z 192.168.0.1 fluentd 11111 ID24224 [exampleSDID@20224 iut="3" eventSource="Application" eventID="11211"] Hi, from Fluentd!'
328
+ @parser.instance.parse(text) do |time, record|
329
+ assert_equal(event_time("2017-02-06T13:14:15.003Z", format: '%Y-%m-%dT%H:%M:%S.%L%z'), time)
330
+ assert_equal "11111", record["pid"]
331
+ assert_equal "ID24224", record["msgid"]
332
+ assert_equal "[exampleSDID@20224 iut=\"3\" eventSource=\"Application\" eventID=\"11211\"]",
333
+ record["extradata"]
334
+ assert_equal "Hi, from Fluentd!", record["message"]
335
+ end
336
+ assert_equal(Fluent::Plugin::SyslogParser::REGEXP_RFC5424_WITH_PRI,
337
+ @parser.instance.patterns['format'])
338
+ end
339
+
340
+ def test_parse_with_both_message_type
341
+ @parser.configure(
342
+ 'time_format' => '%b %d %M:%S:%H',
343
+ 'rfc5424_time_format' => '%Y-%m-%dT%H:%M:%S.%L%z',
344
+ 'message_format' => 'auto',
345
+ 'with_priority' => true,
346
+ )
347
+ text = '<1>Feb 28 12:00:00 192.168.0.1 fluentd[11111]: [error] Syslog test'
348
+ @parser.instance.parse(text) do |time, record|
349
+ assert_equal(event_time("Feb 28 12:00:00", format: '%b %d %M:%S:%H'), time)
350
+ assert_equal(@expected.merge('pri' => 1), record)
351
+ end
352
+ assert_equal(Fluent::Plugin::SyslogParser::REGEXP_WITH_PRI, @parser.instance.patterns['format'])
353
+
354
+ text = '<16>1 2017-02-06T13:14:15.003Z 192.168.0.1 fluentd 11111 ID24224 [exampleSDID@20224 iut="3" eventSource="Application" eventID="11211"] Hi, from Fluentd!'
355
+ @parser.instance.parse(text) do |time, record|
356
+ assert_equal(event_time("2017-02-06T13:14:15.003Z", format: '%Y-%m-%dT%H:%M:%S.%L%z'), time)
357
+ assert_equal "11111", record["pid"]
358
+ assert_equal "ID24224", record["msgid"]
359
+ assert_equal "[exampleSDID@20224 iut=\"3\" eventSource=\"Application\" eventID=\"11211\"]",
360
+ record["extradata"]
361
+ assert_equal "Hi, from Fluentd!", record["message"]
362
+ end
363
+ assert_equal(Fluent::Plugin::SyslogParser::REGEXP_RFC5424_WITH_PRI,
364
+ @parser.instance.patterns['format'])
365
+
366
+ text = '<1>Feb 28 12:00:02 192.168.0.1 fluentd[11111]: [error] Syslog test'
367
+ @parser.instance.parse(text) do |time, record|
368
+ assert_equal(event_time("Feb 28 12:00:02", format: '%b %d %M:%S:%H'), time)
369
+ assert_equal(@expected.merge('pri' => 1), record)
370
+ end
371
+ assert_equal(Fluent::Plugin::SyslogParser::REGEXP_WITH_PRI, @parser.instance.patterns['format'])
372
+
373
+ text = '<16>1 2017-02-06T13:14:15.003Z 192.168.0.1 fluentd - - - Hi, from Fluentd!'
374
+ @parser.instance.parse(text) do |time, record|
375
+ assert_equal(event_time("2017-02-06T13:14:15.003Z", format: '%Y-%m-%dT%H:%M:%S.%L%z'), time)
376
+ assert_equal "-", record["pid"]
377
+ assert_equal "-", record["msgid"]
378
+ assert_equal "-", record["extradata"]
379
+ assert_equal "Hi, from Fluentd!", record["message"]
380
+ end
381
+ assert_equal(Fluent::Plugin::SyslogParser::REGEXP_RFC5424_WITH_PRI,
382
+ @parser.instance.patterns['format'])
383
+ end
384
+
385
+ def test_parse_with_both_message_type_and_priority
386
+ @parser.configure(
387
+ 'time_format' => '%b %d %M:%S:%H',
388
+ 'rfc5424_time_format' => '%Y-%m-%dT%H:%M:%S.%L%z',
389
+ 'with_priority' => true,
390
+ 'message_format' => 'auto',
391
+ )
392
+ text = '<6>Feb 28 12:00:00 192.168.0.1 fluentd[11111]: [error] Syslog test'
393
+ @parser.instance.parse(text) do |time, record|
394
+ assert_equal(event_time("Feb 28 12:00:00", format: '%b %d %M:%S:%H'), time)
395
+ assert_equal(@expected.merge('pri' => 6), record)
396
+ end
397
+ assert_equal(Fluent::Plugin::SyslogParser::REGEXP_WITH_PRI, @parser.instance.patterns['format'])
398
+
399
+ text = '<16>1 2017-02-06T13:14:15.003Z 192.168.0.1 fluentd 11111 ID24224 [exampleSDID@20224 iut="3" eventSource="Application" eventID="11211"] Hi, from Fluentd!'
400
+ @parser.instance.parse(text) do |time, record|
401
+ assert_equal(event_time("2017-02-06T13:14:15.003Z", format: '%Y-%m-%dT%H:%M:%S.%L%z'), time)
402
+ assert_equal "11111", record["pid"]
403
+ assert_equal "ID24224", record["msgid"]
404
+ assert_equal "[exampleSDID@20224 iut=\"3\" eventSource=\"Application\" eventID=\"11211\"]",
405
+ record["extradata"]
406
+ assert_equal "Hi, from Fluentd!", record["message"]
407
+ end
408
+ assert_equal(Fluent::Plugin::SyslogParser::REGEXP_RFC5424_WITH_PRI,
409
+ @parser.instance.patterns['format'])
410
+
411
+ text = '<16>Feb 28 12:00:02 192.168.0.1 fluentd[11111]: [error] Syslog test'
412
+ @parser.instance.parse(text) do |time, record|
413
+ assert_equal(event_time("Feb 28 12:00:02", format: '%b %d %M:%S:%H'), time)
414
+ assert_equal(@expected.merge('pri' => 16), record)
415
+ end
416
+ assert_equal(Fluent::Plugin::SyslogParser::REGEXP_WITH_PRI, @parser.instance.patterns['format'])
417
+
418
+ text = '<16>1 2017-02-06T13:14:15.003Z 192.168.0.1 fluentd - - - Hi, from Fluentd!'
419
+ @parser.instance.parse(text) do |time, record|
420
+ assert_equal(event_time("2017-02-06T13:14:15.003Z", format: '%Y-%m-%dT%H:%M:%S.%L%z'), time)
421
+ assert_equal "-", record["pid"]
422
+ assert_equal "-", record["msgid"]
423
+ assert_equal "-", record["extradata"]
424
+ assert_equal "Hi, from Fluentd!", record["message"]
425
+ end
426
+ assert_equal(Fluent::Plugin::SyslogParser::REGEXP_RFC5424_WITH_PRI,
427
+ @parser.instance.patterns['format'])
428
+
429
+ text = '<16>1 2017-02-06T13:14:15Z 192.168.0.1 fluentd - - - Hi, from Fluentd without subseconds!'
430
+ @parser.instance.parse(text) do |time, record|
431
+ assert_equal(event_time("2017-02-06T13:14:15Z", format: '%Y-%m-%dT%H:%M:%S%z'), time)
432
+ assert_equal "-", record["pid"]
433
+ assert_equal "-", record["msgid"]
434
+ assert_equal "-", record["extradata"]
435
+ assert_equal "Hi, from Fluentd without subseconds!", record["message"]
436
+ end
437
+ assert_equal(Fluent::Plugin::SyslogParser::REGEXP_RFC5424_WITH_PRI,
438
+ @parser.instance.patterns['format'])
439
+ end
440
+ end
441
+ end
@@ -0,0 +1,122 @@
1
+ require_relative '../helper'
2
+ require 'fluent/test/driver/parser'
3
+ require 'fluent/plugin/parser_tsv'
4
+
5
+ class TSVParserTest < ::Test::Unit::TestCase
6
+ def setup
7
+ Fluent::Test.setup
8
+ end
9
+
10
+ def create_driver(conf={})
11
+ Fluent::Test::Driver::Parser.new(Fluent::TextParser::TSVParser).configure(conf)
12
+ end
13
+
14
+ data('array param' => '["a","b"]', 'string param' => 'a,b')
15
+ def test_config_params(param)
16
+ d = create_driver(
17
+ 'keys' => param,
18
+ )
19
+
20
+ assert_equal "\t", d.instance.delimiter
21
+
22
+ d = create_driver(
23
+ 'keys' => param,
24
+ 'delimiter' => ',',
25
+ )
26
+
27
+ assert_equal ['a', 'b'], d.instance.keys
28
+ assert_equal ",", d.instance.delimiter
29
+ end
30
+
31
+ data('array param' => '["time","a","b"]', 'string param' => 'time,a,b')
32
+ def test_parse(param)
33
+ d = create_driver('keys' => param, 'time_key' => 'time')
34
+ d.instance.parse("2013/02/28 12:00:00\t192.168.0.1\t111") { |time, record|
35
+ assert_equal(event_time('2013/02/28 12:00:00', format: '%Y/%m/%d %H:%M:%S'), time)
36
+ assert_equal({
37
+ 'a' => '192.168.0.1',
38
+ 'b' => '111',
39
+ }, record)
40
+ }
41
+ end
42
+
43
+ def test_parse_with_time
44
+ time_at_start = Time.now.to_i
45
+
46
+ d = create_driver('keys' => 'a,b')
47
+ d.instance.parse("192.168.0.1\t111") { |time, record|
48
+ assert time && time >= time_at_start, "parser puts current time without time input"
49
+ assert_equal({
50
+ 'a' => '192.168.0.1',
51
+ 'b' => '111',
52
+ }, record)
53
+ }
54
+
55
+ d = Fluent::Test::Driver::Parser.new(Fluent::Plugin::TSVParser)
56
+ d.configure('keys' => 'a,b', 'time_key' => 'time', 'estimate_current_event' => 'no')
57
+ d.instance.parse("192.168.0.1\t111") { |time, record|
58
+ assert_equal({
59
+ 'a' => '192.168.0.1',
60
+ 'b' => '111',
61
+ }, record)
62
+ assert_nil time, "parser returns nil w/o time and if configured so"
63
+ }
64
+ end
65
+
66
+ data(
67
+ 'left blank column' => ["\t@\t@", {"1" => "","2" => "@","3" => "@"}],
68
+ 'center blank column' => ["@\t\t@", {"1" => "@","2" => "","3" => "@"}],
69
+ 'right blank column' => ["@\t@\t", {"1" => "@","2" => "@","3" => ""}],
70
+ '2 right blank columns' => ["@\t\t", {"1" => "@","2" => "","3" => ""}],
71
+ 'left blank columns' => ["\t\t@", {"1" => "","2" => "","3" => "@"}],
72
+ 'all blank columns' => ["\t\t", {"1" => "","2" => "","3" => ""}])
73
+ def test_black_column(data)
74
+ line, expected = data
75
+
76
+ d = create_driver('keys' => '1,2,3')
77
+ d.instance.parse(line) { |time, record|
78
+ assert_equal(expected, record)
79
+ }
80
+ end
81
+
82
+ def test_parse_with_keep_time_key
83
+ d = create_driver(
84
+ 'keys'=>'time',
85
+ 'time_key'=>'time',
86
+ 'time_format'=>"%d/%b/%Y:%H:%M:%S %z",
87
+ 'keep_time_key'=>'true',
88
+ )
89
+ text = '28/Feb/2013:12:00:00 +0900'
90
+ d.instance.parse(text) do |time, record|
91
+ assert_equal text, record['time']
92
+ end
93
+ end
94
+
95
+ data('array param' => '["a","b","c","d","e","f"]', 'string param' => 'a,b,c,d,e,f')
96
+ def test_parse_with_null_value_pattern(param)
97
+ d = create_driver(
98
+ 'keys'=>param,
99
+ 'null_value_pattern'=>'^(-|null|NULL)$'
100
+ )
101
+ d.instance.parse("-\tnull\tNULL\t\t--\tnuLL") do |time, record|
102
+ assert_nil record['a']
103
+ assert_nil record['b']
104
+ assert_nil record['c']
105
+ assert_equal record['d'], ''
106
+ assert_equal record['e'], '--'
107
+ assert_equal record['f'], 'nuLL'
108
+ end
109
+ end
110
+
111
+ data('array param' => '["a","b"]', 'string param' => 'a,b')
112
+ def test_parse_with_null_empty_string(param)
113
+ d = create_driver(
114
+ 'keys'=>param,
115
+ 'null_empty_string'=>true
116
+ )
117
+ d.instance.parse("\t ") do |time, record|
118
+ assert_nil record['a']
119
+ assert_equal record['b'], ' '
120
+ end
121
+ end
122
+ end