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
@@ -3,15 +3,22 @@ require 'fluent/config/configure_proxy'
3
3
 
4
4
  module Fluent::Config
5
5
  class TestConfigureProxy < ::Test::Unit::TestCase
6
+ setup do
7
+ @type_lookup = ->(type) { Fluent::Configurable.lookup_type(type) }
8
+ end
9
+
6
10
  sub_test_case 'to generate a instance' do
7
11
  sub_test_case '#initialize' do
8
12
  test 'has default values' do
9
- proxy = Fluent::Config::ConfigureProxy.new('section')
13
+ proxy = Fluent::Config::ConfigureProxy.new('section', type_lookup: @type_lookup)
10
14
  assert_equal(:section, proxy.name)
11
15
 
12
- proxy = Fluent::Config::ConfigureProxy.new(:section)
16
+ proxy = Fluent::Config::ConfigureProxy.new(:section, type_lookup: @type_lookup)
13
17
  assert_equal(:section, proxy.name)
14
- assert_equal(:section, proxy.param_name)
18
+ assert_nil(proxy.param_name)
19
+ assert_equal(:section, proxy.variable_name)
20
+ assert_false(proxy.root?)
21
+ assert_nil(proxy.init)
15
22
  assert_nil(proxy.required)
16
23
  assert_false(proxy.required?)
17
24
  assert_nil(proxy.multi)
@@ -19,85 +26,347 @@ module Fluent::Config
19
26
  end
20
27
 
21
28
  test 'can specify param_name/required/multi with optional arguments' do
22
- proxy = Fluent::Config::ConfigureProxy.new(:section, param_name: 'sections', required: false, multi: true)
29
+ proxy = Fluent::Config::ConfigureProxy.new(:section, param_name: 'sections', init: true, required: false, multi: true, type_lookup: @type_lookup)
23
30
  assert_equal(:section, proxy.name)
24
31
  assert_equal(:sections, proxy.param_name)
32
+ assert_equal(:sections, proxy.variable_name)
25
33
  assert_false(proxy.required)
26
34
  assert_false(proxy.required?)
27
35
  assert_true(proxy.multi)
28
36
  assert_true(proxy.multi?)
29
37
 
30
- proxy = Fluent::Config::ConfigureProxy.new(:section, param_name: :sections, required: true, multi: false)
38
+ proxy = Fluent::Config::ConfigureProxy.new(:section, param_name: :sections, init: false, required: true, multi: false, type_lookup: @type_lookup)
31
39
  assert_equal(:section, proxy.name)
32
40
  assert_equal(:sections, proxy.param_name)
41
+ assert_equal(:sections, proxy.variable_name)
33
42
  assert_true(proxy.required)
34
43
  assert_true(proxy.required?)
35
44
  assert_false(proxy.multi)
36
45
  assert_false(proxy.multi?)
37
46
  end
47
+ test 'raise error if both of init and required are true' do
48
+ assert_raise RuntimeError.new("init and required are exclusive") do
49
+ Fluent::Config::ConfigureProxy.new(:section, init: true, required: true, type_lookup: @type_lookup)
50
+ end
51
+ end
38
52
  end
39
53
 
40
54
  sub_test_case '#merge' do
41
55
  test 'generate a new instance which values are overwritten by the argument object' do
42
- proxy = p1 = Fluent::Config::ConfigureProxy.new(:section)
56
+ proxy = p1 = Fluent::Config::ConfigureProxy.new(:section, type_lookup: @type_lookup)
43
57
  assert_equal(:section, proxy.name)
44
- assert_equal(:section, proxy.param_name)
58
+ assert_nil(proxy.param_name)
59
+ assert_equal(:section, proxy.variable_name)
60
+ assert_nil(proxy.init)
45
61
  assert_nil(proxy.required)
46
62
  assert_false(proxy.required?)
47
63
  assert_nil(proxy.multi)
48
64
  assert_true(proxy.multi?)
65
+ assert_nil(proxy.configured_in_section)
49
66
 
50
- p2 = Fluent::Config::ConfigureProxy.new(:section, param_name: :sections, required: true, multi: false)
67
+ p2 = Fluent::Config::ConfigureProxy.new(:section, init: false, required: true, multi: false, type_lookup: @type_lookup)
51
68
  proxy = p1.merge(p2)
52
69
  assert_equal(:section, proxy.name)
53
- assert_equal(:sections, proxy.param_name)
70
+ assert_nil(proxy.param_name)
71
+ assert_equal(:section, proxy.variable_name)
72
+ assert_false(proxy.init)
73
+ assert_false(proxy.init?)
54
74
  assert_true(proxy.required)
55
75
  assert_true(proxy.required?)
56
76
  assert_false(proxy.multi)
57
77
  assert_false(proxy.multi?)
78
+ assert_nil(proxy.configured_in_section)
58
79
  end
59
80
 
60
81
  test 'does not overwrite with argument object without any specifications of required/multi' do
61
- p1 = Fluent::Config::ConfigureProxy.new(:section1)
62
- p2 = Fluent::Config::ConfigureProxy.new(:section2, param_name: :sections, required: true, multi: false)
63
- p3 = Fluent::Config::ConfigureProxy.new(:section3)
82
+ p1 = Fluent::Config::ConfigureProxy.new(:section1, param_name: :sections, type_lookup: @type_lookup)
83
+ p1.configured_in_section = :subsection
84
+ p2 = Fluent::Config::ConfigureProxy.new(:section2, init: false, required: true, multi: false, type_lookup: @type_lookup)
85
+ p3 = Fluent::Config::ConfigureProxy.new(:section3, type_lookup: @type_lookup)
64
86
  proxy = p1.merge(p2).merge(p3)
65
- assert_equal(:section3, proxy.name)
66
- assert_equal(:section3, proxy.param_name)
87
+ assert_equal(:section1, proxy.name)
88
+ assert_equal(:sections, proxy.param_name)
89
+ assert_equal(:sections, proxy.variable_name)
90
+ assert_false(proxy.init)
91
+ assert_false(proxy.init?)
67
92
  assert_true(proxy.required)
68
93
  assert_true(proxy.required?)
69
94
  assert_false(proxy.multi)
70
95
  assert_false(proxy.multi?)
96
+ assert_equal :subsection, proxy.configured_in_section
97
+ end
98
+
99
+ test "does overwrite name of proxy for root sections which are used for plugins" do
100
+ # latest plugin class shows actual plugin implementation
101
+ p1 = Fluent::Config::ConfigureProxy.new('Fluent::Plugin::MyP1'.to_sym, root: true, required: true, multi: false, type_lookup: @type_lookup)
102
+ p1.config_param :key1, :integer
103
+
104
+ p2 = Fluent::Config::ConfigureProxy.new('Fluent::Plugin::MyP2'.to_sym, root: true, required: true, multi: false, type_lookup: @type_lookup)
105
+ p2.config_param :key2, :string, default: "value2"
106
+
107
+ merged = p1.merge(p2)
108
+
109
+ assert_equal 'Fluent::Plugin::MyP2'.to_sym, merged.name
110
+ assert_true merged.root?
111
+ end
112
+ end
113
+
114
+ sub_test_case '#overwrite_defaults' do
115
+ test 'overwrites only defaults with others defaults' do
116
+ type_lookup = ->(type) { Fluent::Configurable.lookup_type(type) }
117
+ p1 = Fluent::Config::ConfigureProxy.new(:mychild, type_lookup: type_lookup)
118
+ p1.configured_in_section = :child
119
+ p1.config_param(:k1a, :string)
120
+ p1.config_param(:k1b, :string)
121
+ p1.config_param(:k2a, :integer, default: 0)
122
+ p1.config_param(:k2b, :integer, default: 0)
123
+ p1.config_section(:sub1) do
124
+ config_param :k3, :time, default: 30
125
+ end
126
+
127
+ p0 = Fluent::Config::ConfigureProxy.new(:myparent, type_lookup: type_lookup)
128
+ p0.config_section(:child) do
129
+ config_set_default :k1a, "v1a"
130
+ config_param :k1b, :string, default: "v1b"
131
+ config_set_default :k2a, 21
132
+ config_param :k2b, :integer, default: 22
133
+ config_section :sub1 do
134
+ config_set_default :k3, 60
135
+ end
136
+ end
137
+
138
+ p1.overwrite_defaults(p0.sections[:child])
139
+
140
+ assert_equal "v1a", p1.defaults[:k1a]
141
+ assert_equal "v1b", p1.defaults[:k1b]
142
+ assert_equal 21, p1.defaults[:k2a]
143
+ assert_equal 22, p1.defaults[:k2b]
144
+ assert_equal 60, p1.sections[:sub1].defaults[:k3]
145
+ end
146
+ end
147
+
148
+ sub_test_case '#configured_in' do
149
+ test 'sets a section name which have configuration parameters of target plugin in owners configuration' do
150
+ proxy = Fluent::Config::ConfigureProxy.new(:section, type_lookup: @type_lookup)
151
+ proxy.configured_in(:mysection)
152
+ assert_equal :mysection, proxy.configured_in_section
153
+ end
154
+
155
+ test 'do not permit to be called twice' do
156
+ proxy = Fluent::Config::ConfigureProxy.new(:section, type_lookup: @type_lookup)
157
+ proxy.configured_in(:mysection)
158
+ assert_raise(ArgumentError) { proxy.configured_in(:myothersection) }
71
159
  end
72
160
  end
73
161
 
74
162
  sub_test_case '#config_param / #config_set_default / #config_argument' do
163
+ setup do
164
+ @proxy = Fluent::Config::ConfigureProxy.new(:section, type_lookup: @type_lookup)
165
+ end
166
+
167
+ test 'handles configuration parameters without type as string' do
168
+ @proxy.config_argument(:label)
169
+ @proxy.config_param(:name)
170
+ assert_equal :label, @proxy.argument[0]
171
+ assert_equal :string, @proxy.argument[2][:type]
172
+ assert_equal :string, @proxy.params[:name][1][:type]
173
+ end
174
+
175
+ data(
176
+ default: [:default, nil],
177
+ alias: [:alias, :alias_name_in_config],
178
+ secret: [:secret, true],
179
+ skip_accessor: [:skip_accessor, true],
180
+ deprecated: [:deprecated, 'it is deprecated'],
181
+ obsoleted: [:obsoleted, 'it is obsoleted'],
182
+ desc: [:desc, "description"],
183
+ )
184
+ test 'always allow options for all types' do |(option, value)|
185
+ opt = {option => value}
186
+ assert_nothing_raised{ @proxy.config_argument(:param0, **opt) }
187
+ assert_nothing_raised{ @proxy.config_param(:p1, :string, **opt) }
188
+ assert_nothing_raised{ @proxy.config_param(:p2, :enum, list: [:a, :b, :c], **opt) }
189
+ assert_nothing_raised{ @proxy.config_param(:p3, :integer, **opt) }
190
+ assert_nothing_raised{ @proxy.config_param(:p4, :float, **opt) }
191
+ assert_nothing_raised{ @proxy.config_param(:p5, :size, **opt) }
192
+ assert_nothing_raised{ @proxy.config_param(:p6, :bool, **opt) }
193
+ assert_nothing_raised{ @proxy.config_param(:p7, :time, **opt) }
194
+ assert_nothing_raised{ @proxy.config_param(:p8, :hash, **opt) }
195
+ assert_nothing_raised{ @proxy.config_param(:p9, :array, **opt) }
196
+ assert_nothing_raised{ @proxy.config_param(:pa, :regexp, **opt) }
197
+ end
198
+
199
+ data(string: :string, integer: :integer, float: :float, size: :size, bool: :bool, time: :time, hash: :hash, array: :array, regexp: :regexp)
200
+ test 'deny list for non-enum types' do |type|
201
+ assert_raise ArgumentError.new(":list is valid only for :enum type, but #{type}: arg") do
202
+ @proxy.config_argument(:arg, type, list: [:a, :b])
203
+ end
204
+ assert_raise ArgumentError.new(":list is valid only for :enum type, but #{type}: p1") do
205
+ @proxy.config_param(:p1, type, list: [:a, :b])
206
+ end
207
+ end
208
+
209
+ data(string: :string, integer: :integer, float: :float, size: :size, bool: :bool, time: :time, regexp: :regexp)
210
+ test 'deny value_type for non-hash/array types' do |type|
211
+ assert_raise ArgumentError.new(":value_type is valid only for :hash and :array, but #{type}: arg") do
212
+ @proxy.config_argument(:arg, type, value_type: :string)
213
+ end
214
+ assert_raise ArgumentError.new(":value_type is valid only for :hash and :array, but #{type}: p1") do
215
+ @proxy.config_param(:p1, type, value_type: :integer)
216
+ end
217
+ end
218
+
219
+ data(string: :string, integer: :integer, float: :float, size: :size, bool: :bool, time: :time, array: :array, regexp: :regexp)
220
+ test 'deny symbolize_keys for non-hash types' do |type|
221
+ assert_raise ArgumentError.new(":symbolize_keys is valid only for :hash, but #{type}: arg") do
222
+ @proxy.config_argument(:arg, type, symbolize_keys: true)
223
+ end
224
+ assert_raise ArgumentError.new(":symbolize_keys is valid only for :hash, but #{type}: p1") do
225
+ @proxy.config_param(:p1, type, symbolize_keys: true)
226
+ end
227
+ end
228
+
229
+ data(string: :string, integer: :integer, float: :float, size: :size, bool: :bool, time: :time, hash: :hash, array: :array)
230
+ test 'deny unknown options' do |type|
231
+ assert_raise ArgumentError.new("unknown option 'required' for configuration parameter: arg") do
232
+ @proxy.config_argument(:arg, type, required: true)
233
+ end
234
+ assert_raise ArgumentError.new("unknown option 'param_name' for configuration parameter: p1") do
235
+ @proxy.config_argument(:p1, type, param_name: :yay)
236
+ end
237
+ end
238
+
239
+ test 'desc gets string' do
240
+ assert_nothing_raised do
241
+ @proxy.config_param(:name, :string, desc: "it is description")
242
+ end
243
+ assert_raise ArgumentError.new("name1: desc must be a String, but Symbol") do
244
+ @proxy.config_param(:name1, :string, desc: :yaaaaaaaay)
245
+ end
246
+ end
247
+
248
+ test 'alias gets symbol' do
249
+ assert_nothing_raised do
250
+ @proxy.config_param(:name, :string, alias: :label)
251
+ end
252
+ assert_raise ArgumentError.new("name1: alias must be a Symbol, but String") do
253
+ @proxy.config_param(:name1, :string, alias: 'label1')
254
+ end
255
+ end
256
+
257
+ test 'secret gets true/false' do
258
+ assert_nothing_raised do
259
+ @proxy.config_param(:name1, :string, secret: false)
260
+ end
261
+ assert_nothing_raised do
262
+ @proxy.config_param(:name2, :string, secret: true)
263
+ end
264
+ assert_raise ArgumentError.new("name3: secret must be true or false, but String") do
265
+ @proxy.config_param(:name3, :string, secret: 'yes')
266
+ end
267
+ assert_raise ArgumentError.new("name4: secret must be true or false, but NilClass") do
268
+ @proxy.config_param(:name4, :string, secret: nil)
269
+ end
270
+ end
271
+
272
+ test 'symbolize_keys gets true/false' do
273
+ assert_nothing_raised do
274
+ @proxy.config_param(:data1, :hash, symbolize_keys: false)
275
+ end
276
+ assert_nothing_raised do
277
+ @proxy.config_param(:data2, :hash, symbolize_keys: true)
278
+ end
279
+ assert_raise ArgumentError.new("data3: symbolize_keys must be true or false, but NilClass") do
280
+ @proxy.config_param(:data3, :hash, symbolize_keys: nil)
281
+ end
282
+ end
283
+
284
+ test 'value_type gets symbol' do
285
+ assert_nothing_raised do
286
+ @proxy.config_param(:data1, :array, value_type: :integer)
287
+ end
288
+ assert_raise ArgumentError.new("data2: value_type must be a Symbol, but Class") do
289
+ @proxy.config_param(:data2, :array, value_type: Integer)
290
+ end
291
+ end
292
+
293
+ test 'list gets an array of symbols' do
294
+ assert_nothing_raised do
295
+ @proxy.config_param(:proto1, :enum, list: [:a, :b])
296
+ end
297
+ assert_raise ArgumentError.new("proto2: enum parameter requires :list of Symbols") do
298
+ @proxy.config_param(:proto2, :enum, list: nil)
299
+ end
300
+ assert_raise ArgumentError.new("proto3: enum parameter requires :list of Symbols") do
301
+ @proxy.config_param(:proto3, :enum, list: ['a', 'b'])
302
+ end
303
+ assert_raise ArgumentError.new("proto4: enum parameter requires :list of Symbols") do
304
+ @proxy.config_param(:proto4, :enum, list: [])
305
+ end
306
+ end
307
+
308
+ test 'deprecated gets string' do
309
+ assert_nothing_raised do
310
+ @proxy.config_param(:name1, :string, deprecated: "use name2 instead")
311
+ end
312
+ assert_raise ArgumentError.new("name2: deprecated must be a String, but TrueClass") do
313
+ @proxy.config_param(:name2, :string, deprecated: true)
314
+ end
315
+ end
316
+
317
+ test 'obsoleted gets string' do
318
+ assert_nothing_raised do
319
+ @proxy.config_param(:name1, :string, obsoleted: "use name2 instead")
320
+ end
321
+ assert_raise ArgumentError.new("name2: obsoleted must be a String, but TrueClass") do
322
+ @proxy.config_param(:name2, :string, obsoleted: true)
323
+ end
324
+ end
325
+
326
+ test 'skip_accessor gets true/false' do
327
+ assert_nothing_raised do
328
+ @proxy.config_param(:format1, :string, skip_accessor: false)
329
+ end
330
+ assert_nothing_raised do
331
+ @proxy.config_param(:format2, :string, skip_accessor: true)
332
+ end
333
+ assert_raise ArgumentError.new("format2: skip_accessor must be true or false, but String") do
334
+ @proxy.config_param(:format2, :string, skip_accessor: 'yes')
335
+ end
336
+ end
337
+
338
+ test 'list is required for :enum' do
339
+ assert_nothing_raised do
340
+ @proxy.config_param(:proto1, :enum, list: [:a, :b])
341
+ end
342
+ assert_raise ArgumentError.new("proto1: enum parameter requires :list of Symbols") do
343
+ @proxy.config_param(:proto1, :enum, default: :a)
344
+ end
345
+ end
346
+
75
347
  test 'does not permit config_set_default for param w/ :default option' do
76
- proxy = Fluent::Config::ConfigureProxy.new(:section)
77
- proxy.config_param(:name, :string, default: "name1")
78
- assert_raise(ArgumentError) { proxy.config_set_default(:name, "name2") }
348
+ @proxy.config_param(:name, :string, default: "name1")
349
+ assert_raise(ArgumentError) { @proxy.config_set_default(:name, "name2") }
79
350
  end
80
351
 
81
352
  test 'does not permit default value specification twice' do
82
- proxy = Fluent::Config::ConfigureProxy.new(:section)
83
- proxy.config_param(:name, :string)
84
- proxy.config_set_default(:name, "name1")
85
- assert_raise(ArgumentError) { proxy.config_set_default(:name, "name2") }
353
+ @proxy.config_param(:name, :string)
354
+ @proxy.config_set_default(:name, "name1")
355
+ assert_raise(ArgumentError) { @proxy.config_set_default(:name, "name2") }
86
356
  end
87
357
 
88
358
  test 'does not permit default value specification twice, even on config_argument' do
89
- proxy = Fluent::Config::ConfigureProxy.new(:section)
90
- proxy.config_param(:name, :string)
91
- proxy.config_set_default(:name, "name1")
359
+ @proxy.config_param(:name, :string)
360
+ @proxy.config_set_default(:name, "name1")
92
361
 
93
- proxy.config_argument(:name)
94
- assert_raise(ArgumentError) { proxy.config_argument(:name, default: "name2") }
362
+ @proxy.config_argument(:name)
363
+ assert_raise(ArgumentError) { @proxy.config_argument(:name, default: "name2") }
95
364
  end
96
365
  end
97
366
 
98
367
  sub_test_case '#config_set_desc' do
99
368
  setup do
100
- @proxy = Fluent::Config::ConfigureProxy.new(:section)
369
+ @proxy = Fluent::Config::ConfigureProxy.new(:section, type_lookup: @type_lookup)
101
370
  end
102
371
 
103
372
  test 'does not permit description specification twice w/ :desc option' do
@@ -114,7 +383,7 @@ module Fluent::Config
114
383
 
115
384
  sub_test_case '#desc' do
116
385
  setup do
117
- @proxy = Fluent::Config::ConfigureProxy.new(:section)
386
+ @proxy = Fluent::Config::ConfigureProxy.new(:section, type_lookup: @type_lookup)
118
387
  end
119
388
 
120
389
  test 'permit to specify description twice' do
@@ -132,45 +401,91 @@ module Fluent::Config
132
401
  end
133
402
  end
134
403
 
135
- sub_test_case '#dump' do
404
+ sub_test_case '#dump_config_definition' do
136
405
  setup do
137
- @proxy = Fluent::Config::ConfigureProxy.new(:section)
406
+ @proxy = Fluent::Config::ConfigureProxy.new(:section, type_lookup: @type_lookup)
138
407
  end
139
408
 
140
409
  test 'empty proxy' do
141
- assert_equal("", @proxy.dump)
410
+ assert_equal({}, @proxy.dump_config_definition)
142
411
  end
143
412
 
144
413
  test 'plain proxy w/o default value' do
145
414
  @proxy.config_param(:name, :string)
146
- assert_equal(<<CONFIG, @proxy.dump)
147
- name: string: <nil>
148
- CONFIG
415
+ expected = {
416
+ name: { type: :string, required: true }
417
+ }
418
+ assert_equal(expected, @proxy.dump_config_definition)
149
419
  end
150
420
 
151
421
  test 'plain proxy w/ default value' do
152
422
  @proxy.config_param(:name, :string, default: "name1")
153
- assert_equal(<<CONFIG, @proxy.dump)
154
- name: string: <"name1">
155
- CONFIG
423
+ expected = {
424
+ name: { type: :string, default: "name1", required: false }
425
+ }
426
+ assert_equal(expected, @proxy.dump_config_definition)
156
427
  end
157
428
 
158
429
  test 'plain proxy w/ default value using config_set_default' do
159
430
  @proxy.config_param(:name, :string)
160
431
  @proxy.config_set_default(:name, "name1")
161
- assert_equal(<<CONFIG, @proxy.dump)
162
- name: string: <"name1">
163
- CONFIG
432
+ expected = {
433
+ name: { type: :string, default: "name1", required: false }
434
+ }
435
+ assert_equal(expected, @proxy.dump_config_definition)
436
+ end
437
+
438
+ test 'plain proxy w/ argument' do
439
+ @proxy.instance_eval do
440
+ config_argument(:argname, :string)
441
+ config_param(:name, :string, default: "name1")
442
+ end
443
+ expected = {
444
+ argname: { type: :string, required: true, argument: true },
445
+ name: { type: :string, default: "name1", required: false }
446
+ }
447
+ assert_equal(expected, @proxy.dump_config_definition)
448
+ end
449
+
450
+ test 'plain proxy w/ argument default value' do
451
+ @proxy.instance_eval do
452
+ config_argument(:argname, :string, default: "value")
453
+ config_param(:name, :string, default: "name1")
454
+ end
455
+ expected = {
456
+ argname: { type: :string, default: "value", required: false, argument: true },
457
+ name: { type: :string, default: "name1", required: false }
458
+ }
459
+ assert_equal(expected, @proxy.dump_config_definition)
460
+ end
461
+
462
+ test 'plain proxy w/ argument overwriting default value' do
463
+ @proxy.instance_eval do
464
+ config_argument(:argname, :string)
465
+ config_param(:name, :string, default: "name1")
466
+ config_set_default(:argname, "value1")
467
+ end
468
+ expected = {
469
+ argname: { type: :string, default: "value1", required: false, argument: true },
470
+ name: { type: :string, default: "name1", required: false }
471
+ }
472
+ assert_equal(expected, @proxy.dump_config_definition)
164
473
  end
165
474
 
166
475
  test 'single sub proxy' do
167
476
  @proxy.config_section(:sub) do
168
477
  config_param(:name, :string, default: "name1")
169
478
  end
170
- assert_equal(<<CONFIG, @proxy.dump)
171
- sub
172
- name: string: <"name1">
173
- CONFIG
479
+ expected = {
480
+ sub: {
481
+ alias: nil,
482
+ multi: true,
483
+ required: false,
484
+ section: true,
485
+ name: { type: :string, default: "name1", required: false }
486
+ }
487
+ }
488
+ assert_equal(expected, @proxy.dump_config_definition)
174
489
  end
175
490
 
176
491
  test 'nested sub proxy' do
@@ -182,30 +497,43 @@ CONFIG
182
497
  config_param(:name4, :string, default: "name4")
183
498
  end
184
499
  end
185
- assert_equal(<<CONFIG, @proxy.dump)
186
- sub
187
- name1: string: <"name1">
188
- name2: string: <"name2">
189
- sub2
190
- name3: string: <"name3">
191
- name4: string: <"name4">
192
- CONFIG
500
+ expected = {
501
+ sub: {
502
+ alias: nil,
503
+ multi: true,
504
+ required: false,
505
+ section: true,
506
+ name1: { type: :string, default: "name1", required: false },
507
+ name2: { type: :string, default: "name2", required: false },
508
+ sub2: {
509
+ alias: nil,
510
+ multi: true,
511
+ required: false,
512
+ section: true,
513
+ name3: { type: :string, default: "name3", required: false },
514
+ name4: { type: :string, default: "name4", required: false },
515
+ }
516
+ }
517
+ }
518
+ assert_equal(expected, @proxy.dump_config_definition)
193
519
  end
194
520
 
195
521
  sub_test_case 'w/ description' do
196
522
  test 'single proxy' do
197
523
  @proxy.config_param(:name, :string, desc: "description for name")
198
- assert_equal(<<CONFIG, @proxy.dump)
199
- name: string: <nil> # description for name
200
- CONFIG
524
+ expected = {
525
+ name: { type: :string, desc: "description for name", required: true }
526
+ }
527
+ assert_equal(expected, @proxy.dump_config_definition)
201
528
  end
202
529
 
203
530
  test 'single proxy using config_set_desc' do
204
531
  @proxy.config_param(:name, :string)
205
532
  @proxy.config_set_desc(:name, "description for name")
206
- assert_equal(<<CONFIG, @proxy.dump)
207
- name: string: <nil> # description for name
208
- CONFIG
533
+ expected = {
534
+ name: { type: :string, desc: "description for name", required: true }
535
+ }
536
+ assert_equal(expected, @proxy.dump_config_definition)
209
537
  end
210
538
 
211
539
  test 'sub proxy' do
@@ -217,14 +545,25 @@ CONFIG
217
545
  config_param(:name4, :string, default: "name4", desc: "desc4")
218
546
  end
219
547
  end
220
- assert_equal(<<CONFIG, @proxy.dump)
221
- sub
222
- name1: string: <"name1"> # desc1
223
- name2: string: <"name2"> # desc2
224
- sub2
225
- name3: string: <"name3">
226
- name4: string: <"name4"> # desc4
227
- CONFIG
548
+ expected = {
549
+ sub: {
550
+ alias: nil,
551
+ multi: true,
552
+ required: false,
553
+ section: true,
554
+ name1: { type: :string, default: "name1", desc: "desc1", required: false },
555
+ name2: { type: :string, default: "name2", desc: "desc2", required: false },
556
+ sub2: {
557
+ alias: nil,
558
+ multi: true,
559
+ required: false,
560
+ section: true,
561
+ name3: { type: :string, default: "name3", required: false },
562
+ name4: { type: :string, default: "name4", desc: "desc4", required: false },
563
+ }
564
+ }
565
+ }
566
+ assert_equal(expected, @proxy.dump_config_definition)
228
567
  end
229
568
 
230
569
  test 'sub proxy w/ desc method' do
@@ -238,14 +577,25 @@ CONFIG
238
577
  config_param(:name4, :string, default: "name4")
239
578
  end
240
579
  end
241
- assert_equal(<<CONFIG, @proxy.dump)
242
- sub
243
- name1: string: <"name1"> # desc1
244
- name2: string: <"name2"> # desc2
245
- sub2
246
- name3: string: <"name3">
247
- name4: string: <"name4"> # desc4
248
- CONFIG
580
+ expected = {
581
+ sub: {
582
+ alias: nil,
583
+ multi: true,
584
+ required: false,
585
+ section: true,
586
+ name1: { type: :string, default: "name1", desc: "desc1", required: false },
587
+ name2: { type: :string, default: "name2", desc: "desc2", required: false },
588
+ sub2: {
589
+ alias: nil,
590
+ multi: true,
591
+ required: false,
592
+ section: true,
593
+ name3: { type: :string, default: "name3", required: false },
594
+ name4: { type: :string, default: "name4", desc: "desc4", required: false },
595
+ }
596
+ }
597
+ }
598
+ assert_equal(expected, @proxy.dump_config_definition)
249
599
  end
250
600
  end
251
601
  end