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,282 @@
1
+ require_relative 'helper'
2
+ require 'fluent/test'
3
+ require 'fluent/time'
4
+
5
+ class TimeFormatterTest < ::Test::Unit::TestCase
6
+ def setup
7
+ @time = Time.new(2014, 9, 27, 0, 0, 0, 0).to_i
8
+ @fmt = "%Y%m%d %H%M%z" # YYYYMMDD HHMM[+-]HHMM
9
+ end
10
+
11
+ def format(format, localtime, timezone)
12
+ formatter = Fluent::TimeFormatter.new(format, localtime, timezone)
13
+ formatter.format(@time)
14
+ end
15
+
16
+ def test_default_utc_nil
17
+ assert_equal("2014-09-27T00:00:00Z", format(nil, false, nil))
18
+ end
19
+
20
+ def test_default_utc_pHH_MM
21
+ assert_equal("2014-09-27T01:30:00+01:30", format(nil, false, "+01:30"))
22
+ end
23
+
24
+ def test_default_utc_nHH_MM
25
+ assert_equal("2014-09-26T22:30:00-01:30", format(nil, false, "-01:30"))
26
+ end
27
+
28
+ def test_default_utc_pHHMM
29
+ assert_equal("2014-09-27T02:30:00+02:30", format(nil, false, "+0230"))
30
+ end
31
+
32
+ def test_default_utc_nHHMM
33
+ assert_equal("2014-09-26T21:30:00-02:30", format(nil, false, "-0230"))
34
+ end
35
+
36
+ def test_default_utc_pHH
37
+ assert_equal("2014-09-27T03:00:00+03:00", format(nil, false, "+03"))
38
+ end
39
+
40
+ def test_default_utc_nHH
41
+ assert_equal("2014-09-26T21:00:00-03:00", format(nil, false, "-03"))
42
+ end
43
+
44
+ def test_default_utc_timezone_1
45
+ # Asia/Tokyo (+09:00) does not have daylight saving time.
46
+ assert_equal("2014-09-27T09:00:00+09:00", format(nil, false, "Asia/Tokyo"))
47
+ end
48
+
49
+ def test_default_utc_timezone_2
50
+ # Pacific/Honolulu (-10:00) does not have daylight saving time.
51
+ assert_equal("2014-09-26T14:00:00-10:00", format(nil, false, "Pacific/Honolulu"))
52
+ end
53
+
54
+ def test_default_utc_timezone_3
55
+ # America/Argentina/Buenos_Aires (-03:00) does not have daylight saving time.
56
+ assert_equal("2014-09-26T21:00:00-03:00", format(nil, false, "America/Argentina/Buenos_Aires"))
57
+ end
58
+
59
+ def test_default_utc_timezone_4
60
+ # Europe/Paris has daylight saving time. Its UTC offset is +01:00 and its
61
+ # UTC offset in DST is +02:00. In September, Europe/Paris is in DST.
62
+ assert_equal("2014-09-27T02:00:00+02:00", format(nil, false, "Europe/Paris"))
63
+ end
64
+
65
+ def test_default_utc_timezone_5
66
+ # Europe/Paris has daylight saving time. Its UTC offset is +01:00 and its
67
+ # UTC offset in DST is +02:00. In January, Europe/Paris is not in DST.
68
+ @time = Time.new(2014, 1, 24, 0, 0, 0, 0).to_i
69
+ assert_equal("2014-01-24T01:00:00+01:00", format(nil, false, "Europe/Paris"))
70
+ end
71
+
72
+ def test_default_utc_invalid
73
+ assert_equal("2014-09-27T00:00:00Z", format(nil, false, "Invalid"))
74
+ end
75
+
76
+ def test_default_localtime_nil_1
77
+ with_timezone("UTC-04") do
78
+ assert_equal("2014-09-27T04:00:00+04:00", format(nil, true, nil))
79
+ end
80
+ end
81
+
82
+ def test_default_localtime_nil_2
83
+ with_timezone("UTC+05") do
84
+ assert_equal("2014-09-26T19:00:00-05:00", format(nil, true, nil))
85
+ end
86
+ end
87
+
88
+ def test_default_localtime_timezone
89
+ # 'timezone' takes precedence over 'localtime'.
90
+ with_timezone("UTC-06") do
91
+ assert_equal("2014-09-27T07:00:00+07:00", format(nil, true, "+07"))
92
+ end
93
+ end
94
+
95
+ def test_specific_utc_nil
96
+ assert_equal("20140927 0000+0000", format(@fmt, false, nil))
97
+ end
98
+
99
+ def test_specific_utc_pHH_MM
100
+ assert_equal("20140927 0830+0830", format(@fmt, false, "+08:30"))
101
+ end
102
+
103
+ def test_specific_utc_nHH_MM
104
+ assert_equal("20140926 1430-0930", format(@fmt, false, "-09:30"))
105
+ end
106
+
107
+ def test_specific_utc_pHHMM
108
+ assert_equal("20140927 1030+1030", format(@fmt, false, "+1030"))
109
+ end
110
+
111
+ def test_specific_utc_nHHMM
112
+ assert_equal("20140926 1230-1130", format(@fmt, false, "-1130"))
113
+ end
114
+
115
+ def test_specific_utc_pHH
116
+ assert_equal("20140927 1200+1200", format(@fmt, false, "+12"))
117
+ end
118
+
119
+ def test_specific_utc_nHH
120
+ assert_equal("20140926 1100-1300", format(@fmt, false, "-13"))
121
+ end
122
+
123
+ def test_specific_utc_timezone_1
124
+ # Europe/Moscow (+04:00) does not have daylight saving time.
125
+ assert_equal("20140927 0400+0400", format(@fmt, false, "Europe/Moscow"))
126
+ end
127
+
128
+ def test_specific_utc_timezone_2
129
+ # Pacific/Galapagos (-06:00) does not have daylight saving time.
130
+ assert_equal("20140926 1800-0600", format(@fmt, false, "Pacific/Galapagos"))
131
+ end
132
+
133
+ def test_specific_utc_timezone_3
134
+ # America/Argentina/Buenos_Aires (-03:00) does not have daylight saving time.
135
+ assert_equal("20140926 2100-0300", format(@fmt, false, "America/Argentina/Buenos_Aires"))
136
+ end
137
+
138
+ def test_specific_utc_timezone_4
139
+ # America/Los_Angeles has daylight saving time. Its UTC offset is -08:00 and its
140
+ # UTC offset in DST is -07:00. In September, America/Los_Angeles is in DST.
141
+ assert_equal("20140926 1700-0700", format(@fmt, false, "America/Los_Angeles"))
142
+ end
143
+
144
+ def test_specific_utc_timezone_5
145
+ # America/Los_Angeles has daylight saving time. Its UTC offset is -08:00 and its
146
+ # UTC offset in DST is -07:00. In January, America/Los_Angeles is not in DST.
147
+ @time = Time.new(2014, 1, 24, 0, 0, 0, 0).to_i
148
+ assert_equal("20140123 1600-0800", format(@fmt, false, "America/Los_Angeles"))
149
+ end
150
+
151
+ def test_specific_utc_invalid
152
+ assert_equal("20140927 0000+0000", format(@fmt, false, "Invalid"))
153
+ end
154
+
155
+ def test_specific_localtime_nil_1
156
+ with_timezone("UTC-07") do
157
+ assert_equal("20140927 0700+0700", format(@fmt, true, nil))
158
+ end
159
+ end
160
+
161
+ def test_specific_localtime_nil_2
162
+ with_timezone("UTC+08") do
163
+ assert_equal("20140926 1600-0800", format(@fmt, true, nil))
164
+ end
165
+ end
166
+
167
+ def test_specific_localtime_timezone
168
+ # 'timezone' takes precedence over 'localtime'.
169
+ with_timezone("UTC-09") do
170
+ assert_equal("20140926 1400-1000", format(@fmt, true, "-10"))
171
+ end
172
+ end
173
+
174
+ def test_format_with_subsec
175
+ time = Fluent::EventTime.new(@time)
176
+ formatter = Fluent::TimeFormatter.new("%Y%m%d %H%M.%N", false, nil)
177
+ assert_equal("20140927 0000.000000000", formatter.format(time))
178
+ end
179
+
180
+ sub_test_case 'TimeMixin::Formatter' do
181
+ class DummyForTimeFormatter
182
+ include Fluent::Configurable
183
+ include Fluent::TimeMixin::Formatter
184
+ end
185
+
186
+ test 'provides configuration parameters for TimeFormatter with default values for localtime' do
187
+ str = with_timezone("UTC+07") do
188
+ i = DummyForTimeFormatter.new
189
+ i.configure(config_element('format'))
190
+
191
+ assert_nil i.time_format
192
+ assert_true i.localtime
193
+ assert_false i.utc
194
+ assert_nil i.timezone
195
+
196
+ fmt = i.time_formatter_create
197
+ fmt.format(event_time("2016-09-02 18:42:31.012345678 UTC", format: '%Y-%m-%d %H:%M:%S.%N %z'))
198
+ end
199
+ assert_equal "2016-09-02T11:42:31-07:00", str
200
+ end
201
+
202
+ test 'provides configuration parameters for TimeFormatter, configurable for any time format' do
203
+ str = with_timezone("UTC+07") do
204
+ i = DummyForTimeFormatter.new
205
+ i.configure(config_element('format', '', {'time_format' => '%Y-%m-%d %H:%M:%S.%N %z'}))
206
+
207
+ fmt = i.time_formatter_create
208
+ fmt.format(event_time("2016-09-02 18:42:31.012345678 UTC", format: '%Y-%m-%d %H:%M:%S.%N %z'))
209
+ end
210
+ assert_equal "2016-09-02 11:42:31.012345678 -0700", str
211
+ end
212
+
213
+ test 'provides configuration parameters for TimeFormatter, configurable for UTC' do
214
+ str = with_timezone("UTC+07") do
215
+ i = DummyForTimeFormatter.new
216
+ i.configure(config_element('format', '', {'time_format' => '%Y-%m-%d %H:%M:%S.%N %z', 'utc' => 'true'}))
217
+
218
+ fmt = i.time_formatter_create
219
+ fmt.format(event_time("2016-09-02 18:42:31.012345678 UTC", format: '%Y-%m-%d %H:%M:%S.%N %z'))
220
+ end
221
+ assert_equal "2016-09-02 18:42:31.012345678 +0000", str
222
+ end
223
+
224
+ test 'provides configuration parameters for TimeFormatter, configurable for any timezone' do
225
+ str = with_timezone("UTC+07") do
226
+ i = DummyForTimeFormatter.new
227
+ i.configure(config_element('format', '', {'time_format' => '%Y-%m-%d %H:%M:%S.%N %z', 'timezone' => '+0900'}))
228
+
229
+ fmt = i.time_formatter_create
230
+ fmt.format(event_time("2016-09-02 18:42:31.012345678 UTC", format: '%Y-%m-%d %H:%M:%S.%N %z'))
231
+ end
232
+ assert_equal "2016-09-03 03:42:31.012345678 +0900", str
233
+ end
234
+
235
+ test '#time_formatter_create returns TimeFormatter with specified time format and timezone' do
236
+ str = with_timezone("UTC+07") do
237
+ i = DummyForTimeFormatter.new
238
+ i.configure(config_element('format', '', {'time_format' => '%Y-%m-%d %H:%M:%S.%N %z', 'timezone' => '+0900'}))
239
+
240
+ fmt = i.time_formatter_create(format: '%m/%d/%Y %H-%M-%S %N', timezone: '+0000')
241
+ fmt.format(event_time("2016-09-02 18:42:31.012345678 UTC", format: '%Y-%m-%d %H:%M:%S.%N %z'))
242
+ end
243
+ assert_equal "09/02/2016 18-42-31 012345678", str
244
+ end
245
+
246
+ test '#time_formatter_create returns TimeFormatter with localtime besides any configuration parameters' do
247
+ str = with_timezone("UTC+07") do
248
+ i = DummyForTimeFormatter.new
249
+ i.configure(config_element('format', '', {'time_format' => '%Y-%m-%d %H:%M:%S.%N %z', 'utc' => 'true'}))
250
+
251
+ fmt = i.time_formatter_create(format: '%m/%d/%Y %H-%M-%S %N', force_localtime: true)
252
+ fmt.format(event_time("2016-09-02 18:42:31.012345678 UTC", format: '%Y-%m-%d %H:%M:%S.%N %z'))
253
+ end
254
+ assert_equal "09/02/2016 11-42-31 012345678", str
255
+
256
+ str = with_timezone("UTC+07") do
257
+ i = DummyForTimeFormatter.new
258
+ i.configure(config_element('format', '', {'time_format' => '%Y-%m-%d %H:%M:%S.%N %z', 'timezone' => '+0900'}))
259
+
260
+ fmt = i.time_formatter_create(format: '%m/%d/%Y %H-%M-%S %N', force_localtime: true)
261
+ fmt.format(event_time("2016-09-02 18:42:31.012345678 UTC", format: '%Y-%m-%d %H:%M:%S.%N %z'))
262
+ end
263
+ assert_equal "09/02/2016 11-42-31 012345678", str
264
+ end
265
+ end
266
+
267
+ test '#time_formatter_create returns NumericTimeFormatter to format time as unixtime when time_type unixtime specified' do
268
+ i = DummyForTimeFormatter.new
269
+ i.configure(config_element('format', '', {'time_type' => 'unixtime'}))
270
+ fmt = i.time_formatter_create
271
+ time = event_time("2016-10-03 20:08:30.123456789 +0100", format: '%Y-%m-%d %H:%M:%S.%N %z')
272
+ assert_equal "#{time.sec}", fmt.format(time)
273
+ end
274
+
275
+ test '#time_formatter_create returns NumericTimeFormatter to format time as float when time_type float specified' do
276
+ i = DummyForTimeFormatter.new
277
+ i.configure(config_element('format', '', {'time_type' => 'float'}))
278
+ fmt = i.time_formatter_create
279
+ time = event_time("2016-10-03 20:08:30.123456789 +0100", format: '%Y-%m-%d %H:%M:%S.%N %z')
280
+ assert_equal "#{time.sec}.#{time.nsec}", fmt.format(time)
281
+ end
282
+ end
@@ -0,0 +1,231 @@
1
+ require_relative 'helper'
2
+ require 'fluent/test'
3
+ require 'fluent/time'
4
+
5
+ class TimeParserTest < ::Test::Unit::TestCase
6
+ def setup
7
+ Fluent::Test.setup
8
+ end
9
+
10
+ def test_call_with_parse
11
+ parser = Fluent::TimeParser.new
12
+
13
+ assert(parser.parse('2013-09-18 12:00:00 +0900').is_a?(Fluent::EventTime))
14
+
15
+ time = event_time('2013-09-18 12:00:00 +0900')
16
+ assert_equal(time, parser.parse('2013-09-18 12:00:00 +0900'))
17
+ end
18
+
19
+ def test_parse_with_strptime
20
+ parser = Fluent::TimeParser.new('%d/%b/%Y:%H:%M:%S %z')
21
+
22
+ assert(parser.parse('28/Feb/2013:12:00:00 +0900').is_a?(Fluent::EventTime))
23
+
24
+ time = event_time('28/Feb/2013:12:00:00 +0900', format: '%d/%b/%Y:%H:%M:%S %z')
25
+ assert_equal(time, parser.parse('28/Feb/2013:12:00:00 +0900'))
26
+ end
27
+
28
+ def test_parse_nsec_with_strptime
29
+ parser = Fluent::TimeParser.new('%d/%b/%Y:%H:%M:%S:%N %z')
30
+
31
+ assert(parser.parse('28/Feb/2013:12:00:00:123456789 +0900').is_a?(Fluent::EventTime))
32
+
33
+ time = event_time('28/Feb/2013:12:00:00:123456789 +0900', format: '%d/%b/%Y:%H:%M:%S:%N %z')
34
+ assert_equal_event_time(time, parser.parse('28/Feb/2013:12:00:00:123456789 +0900'))
35
+ end
36
+
37
+ def test_parse_iso8601
38
+ parser = Fluent::TimeParser.new('%iso8601')
39
+
40
+ assert(parser.parse('2017-01-01T12:00:00+09:00').is_a?(Fluent::EventTime))
41
+
42
+ time = event_time('2017-01-01T12:00:00+09:00')
43
+ assert_equal(time, parser.parse('2017-01-01T12:00:00+09:00'))
44
+
45
+ time_with_msec = event_time('2017-01-01T12:00:00.123+09:00')
46
+ assert_equal(time_with_msec, parser.parse('2017-01-01T12:00:00.123+09:00'))
47
+ end
48
+
49
+ def test_parse_with_invalid_argument
50
+ parser = Fluent::TimeParser.new
51
+
52
+ [[], {}, nil, true, 10000, //, ->{}, '', :symbol].each { |v|
53
+ assert_raise Fluent::TimeParser::TimeParseError do
54
+ parser.parse(v)
55
+ end
56
+ }
57
+ end
58
+
59
+ def test_parse_time_in_localtime
60
+ time = with_timezone("UTC+02") do
61
+ parser = Fluent::TimeParser.new("%Y-%m-%d %H:%M:%S.%N", true)
62
+ parser.parse("2016-09-02 18:42:31.123456789")
63
+ end
64
+ assert_equal_event_time(time, event_time("2016-09-02 18:42:31.123456789 -02:00", format: '%Y-%m-%d %H:%M:%S.%N %z'))
65
+ end
66
+
67
+ def test_parse_time_in_utc
68
+ time = with_timezone("UTC-09") do
69
+ parser = Fluent::TimeParser.new("%Y-%m-%d %H:%M:%S.%N", false)
70
+ parser.parse("2016-09-02 18:42:31.123456789")
71
+ end
72
+ assert_equal_event_time(time, event_time("2016-09-02 18:42:31.123456789 UTC", format: '%Y-%m-%d %H:%M:%S.%N %z'))
73
+ end
74
+
75
+ def test_parse_string_with_expected_timezone
76
+ time = with_timezone("UTC-09") do
77
+ parser = Fluent::TimeParser.new("%Y-%m-%d %H:%M:%S.%N", nil, "-07:00")
78
+ parser.parse("2016-09-02 18:42:31.123456789")
79
+ end
80
+ assert_equal_event_time(time, event_time("2016-09-02 18:42:31.123456789 -07:00", format: '%Y-%m-%d %H:%M:%S.%N %z'))
81
+ end
82
+
83
+ def test_parse_time_with_expected_timezone_name
84
+ time = with_timezone("UTC-09") do
85
+ parser = Fluent::TimeParser.new("%Y-%m-%d %H:%M:%S.%N", nil, "Europe/Zurich")
86
+ parser.parse("2016-12-02 18:42:31.123456789")
87
+ end
88
+ assert_equal_event_time(time, event_time("2016-12-02 18:42:31.123456789 +01:00", format: '%Y-%m-%d %H:%M:%S.%N %z'))
89
+ end
90
+
91
+ sub_test_case 'TimeMixin::Parser' do
92
+ class DummyForTimeParser
93
+ include Fluent::Configurable
94
+ include Fluent::TimeMixin::Parser
95
+ end
96
+
97
+ test 'provides configuration parameters for TimeParser with default values for localtime' do
98
+ time = with_timezone("UTC+07") do
99
+ i = DummyForTimeParser.new
100
+ i.configure(config_element('parse'))
101
+
102
+ assert_nil i.time_format
103
+ assert_true i.localtime
104
+ assert_false i.utc
105
+ assert_nil i.timezone
106
+
107
+ parser = i.time_parser_create
108
+ # time_format unspecified
109
+ # localtime
110
+ parser.parse("2016-09-02 18:42:31.012345678")
111
+ end
112
+ assert_equal_event_time(event_time("2016-09-02 18:42:31.012345678 -07:00", format: '%Y-%m-%d %H:%M:%S.%N %z'), time)
113
+ end
114
+
115
+ test 'provides configuration parameters for TimeParser, configurable for any time format' do
116
+ time = with_timezone("UTC+07") do
117
+ i = DummyForTimeParser.new
118
+ i.configure(config_element('parse', '', {'time_format' => '%m/%d/%Y %H-%M-%S %N'}))
119
+ parser = i.time_parser_create
120
+ # time_format specified
121
+ # localtime
122
+ parser.parse("09/02/2016 18-42-31 012345678")
123
+ end
124
+ assert_equal_event_time(event_time("2016-09-02 18:42:31.012345678 -07:00", format: '%Y-%m-%d %H:%M:%S.%N %z'), time)
125
+ end
126
+
127
+ test 'provides configuration parameters for TimeParser, configurable for UTC by localtime=false' do
128
+ time = with_timezone("UTC+07") do
129
+ i = DummyForTimeParser.new
130
+ i.configure(config_element('parse', '', {'time_format' => '%m/%d/%Y %H-%M-%S %N', 'localtime' => 'false'}))
131
+ parser = i.time_parser_create
132
+ # time_format specified
133
+ # utc
134
+ parser.parse("09/02/2016 18-42-31 012345678")
135
+ end
136
+ assert_equal_event_time(event_time("2016-09-02 18:42:31.012345678 UTC", format: '%Y-%m-%d %H:%M:%S.%N %z'), time)
137
+ end
138
+
139
+ test 'provides configuration parameters for TimeParser, configurable for UTC by utc=true' do
140
+ time = with_timezone("UTC+07") do
141
+ i = DummyForTimeParser.new
142
+ i.configure(config_element('parse', '', {'time_format' => '%m/%d/%Y %H-%M-%S %N', 'utc' => 'true'}))
143
+ parser = i.time_parser_create
144
+ # time_format specified
145
+ # utc
146
+ parser.parse("09/02/2016 18-42-31 012345678")
147
+ end
148
+ assert_equal_event_time(event_time("2016-09-02 18:42:31.012345678 UTC", format: '%Y-%m-%d %H:%M:%S.%N %z'), time)
149
+ end
150
+
151
+ test 'provides configuration parameters for TimeParser, configurable for any timezone' do
152
+ time = with_timezone("UTC+07") do
153
+ i = DummyForTimeParser.new
154
+ i.configure(config_element('parse', '', {'time_format' => '%m/%d/%Y %H-%M-%S %N', 'timezone' => '-01:00'}))
155
+ parser = i.time_parser_create
156
+ # time_format specified
157
+ # -01:00
158
+ parser.parse("09/02/2016 18-42-31 012345678")
159
+ end
160
+ assert_equal_event_time(event_time("2016-09-02 18:42:31.012345678 -01:00", format: '%Y-%m-%d %H:%M:%S.%N %z'), time)
161
+ end
162
+
163
+ test 'specifying timezone without time format raises configuration error' do
164
+ assert_raise Fluent::ConfigError.new("specifying timezone requires time format") do
165
+ i = DummyForTimeParser.new
166
+ i.configure(config_element('parse', '', {'utc' => 'true'}))
167
+ i.time_parser_create
168
+ end
169
+ assert_raise Fluent::ConfigError.new("specifying timezone requires time format") do
170
+ i = DummyForTimeParser.new
171
+ i.configure(config_element('parse', '', {'localtime' => 'false'}))
172
+ i.time_parser_create
173
+ end
174
+ assert_raise Fluent::ConfigError.new("specifying timezone requires time format") do
175
+ i = DummyForTimeParser.new
176
+ i.configure(config_element('parse', '', {'timezone' => '-0700'}))
177
+ i.time_parser_create
178
+ end
179
+ end
180
+
181
+ test '#time_parser_create returns TimeParser with specified time format and timezone' do
182
+ time = with_timezone("UTC-09") do
183
+ i = DummyForTimeParser.new
184
+ i.configure(config_element('parse', '', {'time_format' => '%m/%d/%Y %H-%M-%S %N'}))
185
+ assert_equal '%m/%d/%Y %H-%M-%S %N', i.time_format
186
+ assert_true i.localtime
187
+ parser = i.time_parser_create(format: '%Y-%m-%d %H:%M:%S.%N %z')
188
+ parser.parse("2016-09-05 17:59:38.987654321 -03:00")
189
+ end
190
+ assert_equal_event_time(event_time("2016-09-05 17:59:38.987654321 -03:00", format: '%Y-%m-%d %H:%M:%S.%N %z'), time)
191
+ end
192
+
193
+ test '#time_parser_create returns TimeParser with localtime when specified it forcedly besides any configuration parameters' do
194
+ time = with_timezone("UTC-09") do
195
+ i = DummyForTimeParser.new
196
+ i.configure(config_element('parse', '', {'time_format' => '%m/%d/%Y %H-%M-%S', 'utc' => 'true'}))
197
+ assert_equal '%m/%d/%Y %H-%M-%S', i.time_format
198
+ assert_true i.utc
199
+ parser = i.time_parser_create(format: '%Y-%m-%d %H:%M:%S.%N', force_localtime: true)
200
+ parser.parse("2016-09-05 17:59:38.987654321")
201
+ end
202
+ assert_equal_event_time(event_time("2016-09-05 17:59:38.987654321 +09:00", format: '%Y-%m-%d %H:%M:%S.%N %z'), time)
203
+
204
+ time = with_timezone("UTC-09") do
205
+ i = DummyForTimeParser.new
206
+ i.configure(config_element('parse', '', {'time_format' => '%m/%d/%Y %H-%M-%S', 'timezone' => '+0000'}))
207
+ assert_equal '%m/%d/%Y %H-%M-%S', i.time_format
208
+ assert_equal '+0000', i.timezone
209
+ parser = i.time_parser_create(format: '%Y-%m-%d %H:%M:%S.%N', force_localtime: true)
210
+ parser.parse("2016-09-05 17:59:38.987654321")
211
+ end
212
+ assert_equal_event_time(event_time("2016-09-05 17:59:38.987654321 +09:00", format: '%Y-%m-%d %H:%M:%S.%N %z'), time)
213
+ end
214
+
215
+ test '#time_parser_create returns NumericTimeParser to parse time as unixtime when time_type unixtime specified' do
216
+ i = DummyForTimeParser.new
217
+ i.configure(config_element('parse', '', {'time_type' => 'unixtime'}))
218
+ parser = i.time_parser_create
219
+ time = event_time("2016-10-03 20:08:30.123456789 +0100", format: '%Y-%m-%d %H:%M:%S.%N %z')
220
+ assert_equal_event_time(Fluent::EventTime.new(time.to_i), parser.parse("#{time.sec}"))
221
+ end
222
+
223
+ test '#time_parser_create returns NumericTimeParser to parse time as float when time_type float specified' do
224
+ i = DummyForTimeParser.new
225
+ i.configure(config_element('parse', '', {'time_type' => 'float'}))
226
+ parser = i.time_parser_create
227
+ time = event_time("2016-10-03 20:08:30.123456789 +0100", format: '%Y-%m-%d %H:%M:%S.%N %z')
228
+ assert_equal_event_time(time, parser.parse("#{time.sec}.#{time.nsec}"))
229
+ end
230
+ end
231
+ end
@@ -0,0 +1,47 @@
1
+ require_relative 'helper'
2
+ require 'fluent/plugin/base'
3
+ require 'fluent/unique_id'
4
+
5
+ module UniqueIdTestEnv
6
+ class Dummy < Fluent::Plugin::Base
7
+ include Fluent::UniqueId::Mixin
8
+ end
9
+ end
10
+
11
+ class UniqueIdTest < Test::Unit::TestCase
12
+ sub_test_case 'module used directly' do
13
+ test '.generate generates 128bit length unique id (16bytes)' do
14
+ assert_equal 16, Fluent::UniqueId.generate.bytesize
15
+ ary = []
16
+ 100_000.times do
17
+ ary << Fluent::UniqueId.generate
18
+ end
19
+ assert_equal 100_000, ary.uniq.size
20
+ end
21
+
22
+ test '.hex dumps 16bytes id into 32 chars' do
23
+ assert_equal 32, Fluent::UniqueId.hex(Fluent::UniqueId.generate).size
24
+ assert(Fluent::UniqueId.hex(Fluent::UniqueId.generate) =~ /^[0-9a-z]{32}$/)
25
+ end
26
+ end
27
+
28
+ sub_test_case 'mixin' do
29
+ setup do
30
+ @i = UniqueIdTestEnv::Dummy.new
31
+ end
32
+
33
+ test '#generate_unique_id generates 128bit length id (16bytes)' do
34
+ assert_equal 16, @i.generate_unique_id.bytesize
35
+ ary = []
36
+ 100_000.times do
37
+ ary << @i.generate_unique_id
38
+ end
39
+ assert_equal 100_000, ary.uniq.size
40
+ end
41
+
42
+ test '#dump_unique_id_hex dumps 16bytes id into 32 chars' do
43
+ assert_equal 32, @i.dump_unique_id_hex(@i.generate_unique_id).size
44
+ assert(@i.dump_unique_id_hex(@i.generate_unique_id) =~ /^[0-9a-z]{32}$/)
45
+ end
46
+ end
47
+ end