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,559 @@
1
+ require_relative '../helper'
2
+ require 'fluent/counter/client'
3
+ require 'fluent/counter/store'
4
+ require 'fluent/counter/server'
5
+ require 'flexmock/test_unit'
6
+ require 'timecop'
7
+
8
+ class CounterClientTest < ::Test::Unit::TestCase
9
+ TEST_ADDR = '127.0.0.1'
10
+ TEST_PORT = '8277'
11
+
12
+ setup do
13
+ # timecop isn't compatible with EventTime
14
+ t = Time.parse('2016-09-22 16:59:59 +0900')
15
+ Timecop.freeze(t)
16
+ @now = Fluent::EventTime.now
17
+
18
+ @options = {
19
+ addr: TEST_ADDR,
20
+ port: TEST_PORT,
21
+ log: $log,
22
+ }
23
+
24
+ @server_name = 'server1'
25
+ @scope = "worker1\tplugin1"
26
+ @loop = Coolio::Loop.new
27
+ @server = Fluent::Counter::Server.new(@server_name, @options).start
28
+ @client = Fluent::Counter::Client.new(@loop, @options).start
29
+ end
30
+
31
+ teardown do
32
+ Timecop.return
33
+ @server.stop
34
+ @client.stop
35
+ end
36
+
37
+ test 'Callable API' do
38
+ [:establish, :init, :delete, :inc, :reset, :get].each do |m|
39
+ assert_true @client.respond_to?(m)
40
+ end
41
+ end
42
+
43
+ sub_test_case 'on_message' do
44
+ setup do
45
+ @future = flexmock('future')
46
+ @client.instance_variable_set(:@responses, { 1 => @future })
47
+ end
48
+
49
+ test 'call a set method to a corresponding object' do
50
+ @future.should_receive(:set).once.with(Hash)
51
+ @client.send(:on_message, { 'id' => 1 })
52
+ end
53
+
54
+ test "output a warning log when passed id doesn't exist" do
55
+ data = { 'id' => 2 }
56
+ mock($log).warn("Receiving missing id data: #{data}")
57
+ @client.send(:on_message, data)
58
+ end
59
+ end
60
+
61
+ def extract_value_from_server(server, scope, name)
62
+ store = server.instance_variable_get(:@store).instance_variable_get(:@storage).instance_variable_get(:@store)
63
+ key = Fluent::Counter::Store.gen_key(scope, name)
64
+ store[key]
65
+ end
66
+
67
+ def travel(sec)
68
+ # Since Timecop.travel() causes test failures on Windows/AppVeyor by inducing
69
+ # rounding errors to Time.now, we need to use Timecop.freeze() instead.
70
+ Timecop.freeze(Time.now + sec)
71
+ end
72
+
73
+ sub_test_case 'establish' do
74
+ test 'establish a scope' do
75
+ @client.establish(@scope)
76
+ assert_equal "#{@server_name}\t#{@scope}", @client.instance_variable_get(:@scope)
77
+ end
78
+
79
+ data(
80
+ empty: '',
81
+ invalid_string: '_scope',
82
+ invalid_string2: 'Scope'
83
+ )
84
+ test 'raise an error when passed scope is invalid' do |scope|
85
+ assert_raise do
86
+ @client.establish(scope)
87
+ end
88
+ end
89
+ end
90
+
91
+ sub_test_case 'init' do
92
+ setup do
93
+ @client.instance_variable_set(:@scope, @scope)
94
+ end
95
+
96
+ data(
97
+ numeric_type: [
98
+ { name: 'key', reset_interval: 20, type: 'numeric' }, 0
99
+ ],
100
+ float_type: [
101
+ { name: 'key', reset_interval: 20, type: 'float' }, 0.0
102
+ ],
103
+ integer_type: [
104
+ { name: 'key', reset_interval: 20, type: 'integer' }, 0
105
+ ]
106
+ )
107
+ test 'create a value' do |(param, initial_value)|
108
+ assert_nil extract_value_from_server(@server, @scope, param[:name])
109
+
110
+ response = @client.init(param).get
111
+ data = response.data.first
112
+
113
+ assert_nil response.errors
114
+ assert_equal param[:name], data['name']
115
+ assert_equal param[:reset_interval], data['reset_interval']
116
+ assert_equal param[:type], data['type']
117
+ assert_equal initial_value, data['current']
118
+ assert_equal initial_value, data['total']
119
+
120
+ v = extract_value_from_server(@server, @scope, param[:name])
121
+ assert_equal param[:name], v['name']
122
+ assert_equal param[:reset_interval], v['reset_interval']
123
+ assert_equal param[:type], v['type']
124
+ assert_equal initial_value, v['total']
125
+ assert_equal initial_value, v['current']
126
+ end
127
+
128
+ test 'raise an error when @scope is nil' do
129
+ @client.instance_variable_set(:@scope, nil)
130
+ assert_raise 'Call `establish` method to get a `scope` before calling this method' do
131
+ @client.init(name: 'key1', reset_interval: 10).get
132
+ end
133
+ end
134
+
135
+ data(
136
+ already_exist_key: [
137
+ { name: 'key1', reset_interval: 10 },
138
+ { 'code' => 'invalid_params', 'message' => "worker1\tplugin1\tkey1 already exists in counter" }
139
+ ],
140
+ missing_name: [
141
+ { reset_interval: 10 },
142
+ { 'code' => 'invalid_params', 'message' => '`name` is required' },
143
+ ],
144
+ missing_reset_interval: [
145
+ { name: 'key' },
146
+ { 'code' => 'invalid_params', 'message' => '`reset_interval` is required' },
147
+ ],
148
+ invalid_name: [
149
+ { name: '\tkey' },
150
+ { 'code' => 'invalid_params', 'message' => '`name` is the invalid format' }
151
+ ]
152
+ )
153
+ test 'return an error object' do |(param, expected_error)|
154
+ @client.init(:name => 'key1', :reset_interval => 10).get
155
+ response = @client.init(param).get
156
+ errors = response.errors.first
157
+
158
+ assert_empty response.data
159
+ assert_equal expected_error, errors
160
+
161
+ assert_raise {
162
+ @client.init(param).wait
163
+ }
164
+ end
165
+
166
+ test 'return an existing value when passed key already exists and ignore option is true' do
167
+ res1 = @client.init(name: 'key1', reset_interval: 10).get
168
+ res2 = nil
169
+ assert_nothing_raised do
170
+ res2 = @client.init({ name: 'key1', reset_interval: 10 }, options: { ignore: true }).get
171
+ end
172
+ assert_equal res1.data, res2.data
173
+ end
174
+
175
+ test 'return an error object and data object' do
176
+ param = { name: 'key1', reset_interval: 10 }
177
+ param2 = { name: 'key2', reset_interval: 10 }
178
+ @client.init(param).get
179
+
180
+ response = @client.init([param2, param]).get
181
+ data = response.data.first
182
+ error = response.errors.first
183
+
184
+ assert_equal param2[:name], data['name']
185
+ assert_equal param2[:reset_interval], data['reset_interval']
186
+
187
+ assert_equal 'invalid_params', error['code']
188
+ assert_equal "#{@scope}\t#{param[:name]} already exists in counter", error['message']
189
+ end
190
+
191
+ test 'return a future object when async call' do
192
+ param = { name: 'key', reset_interval: 10 }
193
+ r = @client.init(param)
194
+ assert_true r.is_a?(Fluent::Counter::Future)
195
+ assert_nil r.errors
196
+ end
197
+ end
198
+
199
+ sub_test_case 'delete' do
200
+ setup do
201
+ @client.instance_variable_set(:@scope, @scope)
202
+ @name = 'key'
203
+ @key = Fluent::Counter::Store.gen_key(@scope, @name)
204
+
205
+ @init_obj = { name: @name, reset_interval: 20, type: 'numeric' }
206
+ @client.init(@init_obj).get
207
+ end
208
+
209
+ test 'delete a value' do
210
+ assert extract_value_from_server(@server, @scope, @name)
211
+
212
+ response = @client.delete(@name).get
213
+ v = response.data.first
214
+
215
+ assert_nil response.errors
216
+ assert_equal @init_obj[:name], v['name']
217
+ assert_equal @init_obj[:type], v['type']
218
+ assert_equal @init_obj[:reset_interval], v['reset_interval']
219
+
220
+ assert_nil extract_value_from_server(@server, @scope, @name)
221
+ end
222
+
223
+ test 'raise an error when @scope is nil' do
224
+ @client.instance_variable_set(:@scope, nil)
225
+ assert_raise 'Call `establish` method to get a `scope` before calling this method' do
226
+ @client.delete(@name).get
227
+ end
228
+ end
229
+
230
+ data(
231
+ key_not_found: [
232
+ 'key2',
233
+ { 'code' => 'unknown_key', 'message' => "`worker1\tplugin1\tkey2` doesn't exist in counter" }
234
+ ],
235
+ invalid_key: [
236
+ '\tkey',
237
+ { 'code' => 'invalid_params', 'message' => '`key` is the invalid format' }
238
+ ]
239
+ )
240
+ test 'return an error object' do |(param, expected_error)|
241
+ response = @client.delete(param).get
242
+ errors = response.errors.first
243
+
244
+ assert_empty response.data
245
+ assert_equal expected_error, errors
246
+ end
247
+
248
+ test 'return an error object and data object' do
249
+ unknown_name = 'key2'
250
+
251
+ response = @client.delete(@name, unknown_name).get
252
+ data = response.data.first
253
+ error = response.errors.first
254
+
255
+ assert_equal @name, data['name']
256
+ assert_equal @init_obj[:reset_interval], data['reset_interval']
257
+
258
+ assert_equal 'unknown_key', error['code']
259
+ assert_equal "`#{@scope}\t#{unknown_name}` doesn't exist in counter", error['message']
260
+
261
+ assert_nil extract_value_from_server(@server, @scope, @name)
262
+ end
263
+
264
+ test 'return a future object when async call' do
265
+ r = @client.delete(@name)
266
+ assert_true r.is_a?(Fluent::Counter::Future)
267
+ assert_nil r.errors
268
+ end
269
+ end
270
+
271
+ sub_test_case 'inc' do
272
+ setup do
273
+ @client.instance_variable_set(:@scope, @scope)
274
+ @name = 'key'
275
+ @key = Fluent::Counter::Store.gen_key(@scope, @name)
276
+
277
+ @init_obj = { name: @name, reset_interval: 20, type: 'numeric' }
278
+ @client.init(@init_obj).get
279
+ end
280
+
281
+ test 'increment a value' do
282
+ v = extract_value_from_server(@server, @scope, @name)
283
+ assert_equal 0, v['total']
284
+ assert_equal 0, v['current']
285
+
286
+ travel(1)
287
+ inc_obj = { name: @name, value: 10 }
288
+ @client.inc(inc_obj).get
289
+
290
+ v = extract_value_from_server(@server, @scope, @name)
291
+ assert_equal inc_obj[:value], v['total']
292
+ assert_equal inc_obj[:value], v['current']
293
+ assert_equal (@now + 1), Fluent::EventTime.new(*v['last_modified_at'])
294
+ end
295
+
296
+ test 'create and increment a value when force option is true' do
297
+ name = 'new_key'
298
+ param = { name: name, value: 11, reset_interval: 1 }
299
+
300
+ assert_nil extract_value_from_server(@server, @scope, name)
301
+
302
+ @client.inc(param, options: { force: true }).get
303
+
304
+ v = extract_value_from_server(@server, @scope, name)
305
+ assert v
306
+ assert_equal param[:name], v['name']
307
+ assert_equal 1, v['reset_interval']
308
+ assert_equal param[:value], v['current']
309
+ assert_equal param[:value], v['total']
310
+ end
311
+
312
+ test 'raise an error when @scope is nil' do
313
+ @client.instance_variable_set(:@scope, nil)
314
+ assert_raise 'Call `establish` method to get a `scope` before calling this method' do
315
+ @client.inc(name: 'name', value: 1).get
316
+ end
317
+ end
318
+
319
+ data(
320
+ not_exist_key: [
321
+ { name: 'key2', value: 10 },
322
+ { 'code' => 'unknown_key', 'message' => "`worker1\tplugin1\tkey2` doesn't exist in counter" }
323
+ ],
324
+ missing_name: [
325
+ { value: 10 },
326
+ { 'code' => 'invalid_params', 'message' => '`name` is required' },
327
+ ],
328
+ missing_value: [
329
+ { name: 'key' },
330
+ { 'code' => 'invalid_params', 'message' => '`value` is required' },
331
+ ],
332
+ invalid_name: [
333
+ { name: '\tkey' },
334
+ { 'code' => 'invalid_params', 'message' => '`name` is the invalid format' }
335
+ ]
336
+ )
337
+ test 'return an error object' do |(param, expected_error)|
338
+ response = @client.inc(param).get
339
+ errors = response.errors.first
340
+ assert_empty response.data
341
+ assert_equal expected_error, errors
342
+ end
343
+
344
+ test 'return an error object and data object' do
345
+ parmas = [
346
+ { name: @name, value: 10 },
347
+ { name: 'unknown_key', value: 9 },
348
+ ]
349
+ response = @client.inc(parmas).get
350
+
351
+ data = response.data.first
352
+ error = response.errors.first
353
+
354
+ assert_equal @name, data['name']
355
+ assert_equal 10, data['current']
356
+ assert_equal 10, data['total']
357
+
358
+ assert_equal 'unknown_key', error['code']
359
+ assert_equal "`#{@scope}\tunknown_key` doesn't exist in counter", error['message']
360
+ end
361
+
362
+ test 'return a future object when async call' do
363
+ param = { name: 'key', value: 10 }
364
+ r = @client.inc(param)
365
+ assert_true r.is_a?(Fluent::Counter::Future)
366
+ assert_nil r.errors
367
+ end
368
+ end
369
+
370
+ sub_test_case 'get' do
371
+ setup do
372
+ @client.instance_variable_set(:@scope, @scope)
373
+ @name = 'key'
374
+
375
+ @init_obj = { name: @name, reset_interval: 20, type: 'numeric' }
376
+ @client.init(@init_obj).get
377
+ end
378
+
379
+ test 'get a value' do
380
+ v1 = extract_value_from_server(@server, @scope, @name)
381
+ v2 = @client.get(@name).data.first
382
+
383
+ assert_equal v1['name'], v2['name']
384
+ assert_equal v1['current'], v2['current']
385
+ assert_equal v1['total'], v2['total']
386
+ assert_equal v1['type'], v2['type']
387
+ end
388
+
389
+ test 'raise an error when @scope is nil' do
390
+ @client.instance_variable_set(:@scope, nil)
391
+ assert_raise 'Call `establish` method to get a `scope` before calling this method' do
392
+ @client.get(@name).get
393
+ end
394
+ end
395
+
396
+ data(
397
+ key_not_found: [
398
+ 'key2',
399
+ { 'code' => 'unknown_key', 'message' => "`worker1\tplugin1\tkey2` doesn't exist in counter" }
400
+ ],
401
+ invalid_key: [
402
+ '\tkey',
403
+ { 'code' => 'invalid_params', 'message' => '`key` is the invalid format' }
404
+ ]
405
+ )
406
+ test 'return an error object' do |(param, expected_error)|
407
+ response = @client.get(param).get
408
+ errors = response.errors.first
409
+ assert_empty response.data
410
+ assert_equal expected_error, errors
411
+ end
412
+
413
+ test 'return an error object and data object' do
414
+ unknown_name = 'key2'
415
+
416
+ response = @client.get(@name, unknown_name).get
417
+ data = response.data.first
418
+ error = response.errors.first
419
+
420
+ assert_equal @name, data['name']
421
+ assert_equal @init_obj[:reset_interval], data['reset_interval']
422
+
423
+ assert_equal 'unknown_key', error['code']
424
+ assert_equal "`#{@scope}\t#{unknown_name}` doesn't exist in counter", error['message']
425
+ end
426
+
427
+ test 'return a future object when async call' do
428
+ r = @client.get(@name)
429
+ assert_true r.is_a?(Fluent::Counter::Future)
430
+ assert_nil r.errors
431
+ end
432
+ end
433
+
434
+ sub_test_case 'reset' do
435
+ setup do
436
+ @client.instance_variable_set(:@scope, @scope)
437
+ @name = 'key'
438
+ @key = Fluent::Counter::Store.gen_key(@scope, @name)
439
+
440
+ @init_obj = { name: @name, reset_interval: 5, type: 'numeric' }
441
+ @client.init(@init_obj).get
442
+ @inc_obj = { name: @name, value: 10 }
443
+ @client.inc(@inc_obj).get
444
+ end
445
+
446
+ test 'reset a value after `reset_interval` passed' do
447
+ v1 = extract_value_from_server(@server, @scope, @name)
448
+ assert_equal @inc_obj[:value], v1['total']
449
+ assert_equal @inc_obj[:value], v1['current']
450
+ assert_equal @now, Fluent::EventTime.new(*v1['last_reset_at'])
451
+
452
+ travel_sec = 6 # greater than reset_interval
453
+ travel(travel_sec)
454
+
455
+ v2 = @client.reset(@name).get
456
+ data = v2.data.first
457
+
458
+ c = data['counter_data']
459
+
460
+ assert_equal travel_sec, data['elapsed_time']
461
+ assert_true data['success']
462
+
463
+ assert_equal @inc_obj[:value], c['current']
464
+ assert_equal @inc_obj[:value], c['total']
465
+ assert_equal @now, c['last_reset_at']
466
+
467
+ v1 = extract_value_from_server(@server, @scope, @name)
468
+ assert_equal 0, v1['current']
469
+ assert_equal @inc_obj[:value], v1['total']
470
+ assert_equal (@now + travel_sec), Fluent::EventTime.new(*v1['last_reset_at'])
471
+ assert_equal (@now + travel_sec), Fluent::EventTime.new(*v1['last_modified_at'])
472
+ end
473
+
474
+ test 'areturn a value object before `reset_interval` passed' do
475
+ v1 = extract_value_from_server(@server, @scope, @name)
476
+ assert_equal @inc_obj[:value], v1['total']
477
+ assert_equal @inc_obj[:value], v1['current']
478
+ assert_equal @now, Fluent::EventTime.new(*v1['last_reset_at'])
479
+
480
+ travel_sec = 4 # less than reset_interval
481
+ travel(travel_sec)
482
+
483
+ v2 = @client.reset(@name).get
484
+ data = v2.data.first
485
+
486
+ c = data['counter_data']
487
+
488
+ assert_equal travel_sec, data['elapsed_time']
489
+ assert_equal false, data['success']
490
+
491
+ assert_equal @inc_obj[:value], c['current']
492
+ assert_equal @inc_obj[:value], c['total']
493
+ assert_equal @now, c['last_reset_at']
494
+
495
+ v1 = extract_value_from_server(@server, @scope, @name)
496
+ assert_equal @inc_obj[:value], v1['current']
497
+ assert_equal @inc_obj[:value], v1['total']
498
+ assert_equal @now, Fluent::EventTime.new(*v1['last_reset_at'])
499
+ end
500
+
501
+ test 'raise an error when @scope is nil' do
502
+ @client.instance_variable_set(:@scope, nil)
503
+ assert_raise 'Call `establish` method to get a `scope` before calling this method' do
504
+ @client.reset(@name).get
505
+ end
506
+ end
507
+
508
+ data(
509
+ key_not_found: [
510
+ 'key2',
511
+ { 'code' => 'unknown_key', 'message' => "`worker1\tplugin1\tkey2` doesn't exist in counter" }
512
+ ],
513
+ invalid_key: [
514
+ '\tkey',
515
+ { 'code' => 'invalid_params', 'message' => '`key` is the invalid format' }
516
+ ]
517
+ )
518
+ test 'return an error object' do |(param, expected_error)|
519
+ response = @client.reset(param).get
520
+ errors = response.errors.first
521
+ assert_empty response.data
522
+ assert_equal expected_error, errors
523
+ end
524
+
525
+ test 'return an error object and data object' do
526
+ unknown_name = 'key2'
527
+
528
+ travel_sec = 6 # greater than reset_interval
529
+ travel(travel_sec)
530
+
531
+ response = @client.reset(@name, unknown_name).get
532
+ data = response.data.first
533
+ error = response.errors.first
534
+ counter = data['counter_data']
535
+
536
+ assert_true data['success']
537
+ assert_equal travel_sec, data['elapsed_time']
538
+ assert_equal @name, counter['name']
539
+ assert_equal @init_obj[:reset_interval], counter['reset_interval']
540
+ assert_equal @inc_obj[:value], counter['total']
541
+ assert_equal @inc_obj[:value], counter['current']
542
+
543
+ assert_equal 'unknown_key', error['code']
544
+ assert_equal "`#{@scope}\t#{unknown_name}` doesn't exist in counter", error['message']
545
+
546
+ v1 = extract_value_from_server(@server, @scope, @name)
547
+ assert_equal 0, v1['current']
548
+ assert_equal @inc_obj[:value], v1['total']
549
+ assert_equal (@now + travel_sec), Fluent::EventTime.new(*v1['last_reset_at'])
550
+ assert_equal (@now + travel_sec), Fluent::EventTime.new(*v1['last_modified_at'])
551
+ end
552
+
553
+ test 'return a future object when async call' do
554
+ r = @client.reset(@name)
555
+ assert_true r.is_a?(Fluent::Counter::Future)
556
+ assert_nil r.errors
557
+ end
558
+ end
559
+ end
@@ -0,0 +1,44 @@
1
+ require_relative '../helper'
2
+ require 'fluent/counter/error'
3
+
4
+ class CounterErrorTest < ::Test::Unit::TestCase
5
+ setup do
6
+ @message = 'error message'
7
+ end
8
+
9
+ test 'invalid_params' do
10
+ error = Fluent::Counter::InvalidParams.new(@message)
11
+ expected = { 'code' => 'invalid_params', 'message' => @message }
12
+ assert_equal expected, error.to_hash
13
+ end
14
+
15
+ test 'unknown_key' do
16
+ error = Fluent::Counter::UnknownKey.new(@message)
17
+ expected = { 'code' => 'unknown_key', 'message' => @message }
18
+ assert_equal expected, error.to_hash
19
+ end
20
+
21
+ test 'parse_error' do
22
+ error = Fluent::Counter::ParseError.new(@message)
23
+ expected = { 'code' => 'parse_error', 'message' => @message }
24
+ assert_equal expected, error.to_hash
25
+ end
26
+
27
+ test 'method_not_found' do
28
+ error = Fluent::Counter::MethodNotFound.new(@message)
29
+ expected = { 'code' => 'method_not_found', 'message' => @message }
30
+ assert_equal expected, error.to_hash
31
+ end
32
+
33
+ test 'invalid_request' do
34
+ error = Fluent::Counter::InvalidRequest.new(@message)
35
+ expected = { 'code' => 'invalid_request', 'message' => @message }
36
+ assert_equal expected, error.to_hash
37
+ end
38
+
39
+ test 'internal_server_error' do
40
+ error = Fluent::Counter::InternalServerError.new(@message)
41
+ expected = { 'code' => 'internal_server_error', 'message' => @message }
42
+ assert_equal expected, error.to_hash
43
+ end
44
+ end