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
data/test/test_log.rb CHANGED
@@ -1,16 +1,25 @@
1
1
  require_relative 'helper'
2
+ require 'fluent/test/driver/input'
2
3
  require 'fluent/engine'
3
4
  require 'fluent/log'
5
+ require 'timecop'
6
+ require 'logger'
4
7
 
5
8
  class LogTest < Test::Unit::TestCase
9
+ TMP_DIR = File.expand_path(File.dirname(__FILE__) + "/tmp/log/#{ENV['TEST_ENV_NUMBER']}")
10
+
6
11
  def setup
12
+ FileUtils.rm_rf(TMP_DIR)
13
+ FileUtils.mkdir_p(TMP_DIR)
7
14
  @log_device = Fluent::Test::DummyLogDevice.new
8
- @timestamp = Time.parse("2016-04-21 11:58:41 +0900")
15
+ @timestamp = Time.parse("2016-04-21 02:58:41 +0000")
9
16
  @timestamp_str = @timestamp.strftime("%Y-%m-%d %H:%M:%S %z")
10
- stub(Time).now { @timestamp }
17
+ Timecop.freeze(@timestamp)
11
18
  end
12
19
 
13
20
  def teardown
21
+ @log_device.reset
22
+ Timecop.return
14
23
  Thread.current[:last_repeated_stacktrace] = nil
15
24
  end
16
25
 
@@ -25,7 +34,43 @@ class LogTest < Test::Unit::TestCase
25
34
  )
26
35
  def test_output(data)
27
36
  log_level, start = data
28
- log = Fluent::Log.new(@log_device, log_level)
37
+ logdev = @log_device
38
+ logger = ServerEngine::DaemonLogger.new(logdev)
39
+ log = Fluent::Log.new(logger)
40
+ log.level = log_level
41
+ log.trace "trace log"
42
+ log.debug "debug log"
43
+ log.info "info log"
44
+ log.warn "warn log"
45
+ log.error "error log"
46
+ log.fatal "fatal log"
47
+ expected = [
48
+ "#{@timestamp_str} [trace]: trace log\n",
49
+ "#{@timestamp_str} [debug]: debug log\n",
50
+ "#{@timestamp_str} [info]: info log\n",
51
+ "#{@timestamp_str} [warn]: warn log\n",
52
+ "#{@timestamp_str} [error]: error log\n",
53
+ "#{@timestamp_str} [fatal]: fatal log\n"
54
+ ][start..-1]
55
+ assert_equal(expected, log.out.logs)
56
+ end
57
+
58
+ data(
59
+ trace: [ServerEngine::DaemonLogger::TRACE, 0],
60
+ debug: [ServerEngine::DaemonLogger::DEBUG, 1],
61
+ info: [ServerEngine::DaemonLogger::INFO, 2],
62
+ warn: [ServerEngine::DaemonLogger::WARN, 3],
63
+ error: [ServerEngine::DaemonLogger::ERROR, 4],
64
+ fatal: [ServerEngine::DaemonLogger::FATAL, 5],
65
+ )
66
+ def test_output_with_serverengine_loglevel(data)
67
+ log_level, start = data
68
+
69
+ dl_opts = {}
70
+ dl_opts[:log_level] = log_level
71
+ logdev = @log_device
72
+ logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
73
+ log = Fluent::Log.new(logger)
29
74
  log.trace "trace log"
30
75
  log.debug "debug log"
31
76
  log.info "info log"
@@ -53,7 +98,44 @@ class LogTest < Test::Unit::TestCase
53
98
  )
54
99
  def test_output_with_block(data)
55
100
  log_level, start = data
56
- log = Fluent::Log.new(@log_device, log_level)
101
+
102
+ logdev = @log_device
103
+ logger = ServerEngine::DaemonLogger.new(logdev)
104
+ log = Fluent::Log.new(logger)
105
+ log.level = log_level
106
+ log.trace { "trace log" }
107
+ log.debug { "debug log" }
108
+ log.info { "info log" }
109
+ log.warn { "warn log" }
110
+ log.error { "error log" }
111
+ log.fatal { "fatal log" }
112
+ expected = [
113
+ "#{@timestamp_str} [trace]: trace log\n",
114
+ "#{@timestamp_str} [debug]: debug log\n",
115
+ "#{@timestamp_str} [info]: info log\n",
116
+ "#{@timestamp_str} [warn]: warn log\n",
117
+ "#{@timestamp_str} [error]: error log\n",
118
+ "#{@timestamp_str} [fatal]: fatal log\n"
119
+ ][start..-1]
120
+ assert_equal(expected, log.out.logs)
121
+ end
122
+
123
+ data(
124
+ trace: [ServerEngine::DaemonLogger::TRACE, 0],
125
+ debug: [ServerEngine::DaemonLogger::DEBUG, 1],
126
+ info: [ServerEngine::DaemonLogger::INFO, 2],
127
+ warn: [ServerEngine::DaemonLogger::WARN, 3],
128
+ error: [ServerEngine::DaemonLogger::ERROR, 4],
129
+ fatal: [ServerEngine::DaemonLogger::FATAL, 5],
130
+ )
131
+ def test_output_with_block_with_serverengine_loglevel(data)
132
+ log_level, start = data
133
+
134
+ dl_opts = {}
135
+ dl_opts[:log_level] = log_level
136
+ logdev = @log_device
137
+ logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
138
+ log = Fluent::Log.new(logger)
57
139
  log.trace { "trace log" }
58
140
  log.debug { "debug log" }
59
141
  log.info { "info log" }
@@ -81,7 +163,42 @@ class LogTest < Test::Unit::TestCase
81
163
  )
82
164
  def test_execute_block(data)
83
165
  log_level, expected = data
84
- log = Fluent::Log.new(@log_device, log_level)
166
+ logdev = @log_device
167
+ logger = ServerEngine::DaemonLogger.new(logdev)
168
+ log = Fluent::Log.new(logger)
169
+ log.level = log_level
170
+ block_called = {
171
+ trace: false,
172
+ debug: false,
173
+ info: false,
174
+ warn: false,
175
+ error: false,
176
+ fatal: false,
177
+ }
178
+ log.trace { block_called[:trace] = true }
179
+ log.debug { block_called[:debug] = true }
180
+ log.info { block_called[:info] = true }
181
+ log.warn { block_called[:warn] = true }
182
+ log.error { block_called[:error] = true }
183
+ log.fatal { block_called[:fatal] = true }
184
+ assert_equal(expected, block_called)
185
+ end
186
+
187
+ data(
188
+ trace: [ServerEngine::DaemonLogger::TRACE, { trace: true, debug: true, info: true, warn: true, error: true, fatal: true }],
189
+ debug: [ServerEngine::DaemonLogger::DEBUG, { trace: false, debug: true, info: true, warn: true, error: true, fatal: true }],
190
+ info: [ServerEngine::DaemonLogger::INFO, { trace: false, debug: false, info: true, warn: true, error: true, fatal: true }],
191
+ warn: [ServerEngine::DaemonLogger::WARN, { trace: false, debug: false, info: false, warn: true, error: true, fatal: true }],
192
+ error: [ServerEngine::DaemonLogger::ERROR, { trace: false, debug: false, info: false, warn: false, error: true, fatal: true }],
193
+ fatal: [ServerEngine::DaemonLogger::FATAL, { trace: false, debug: false, info: false, warn: false, error: false, fatal: true }],
194
+ )
195
+ def test_execute_block_with_serverengine_loglevel(data)
196
+ log_level, expected = data
197
+ dl_opts = {}
198
+ dl_opts[:log_level] = log_level
199
+ logdev = @log_device
200
+ logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
201
+ log = Fluent::Log.new(logger)
85
202
  block_called = {
86
203
  trace: false,
87
204
  debug: false,
@@ -110,7 +227,55 @@ class LogTest < Test::Unit::TestCase
110
227
  def test_backtrace(data)
111
228
  log_level, start = data
112
229
  backtrace = ["line 1", "line 2", "line 3"]
113
- log = Fluent::Log.new(@log_device, log_level)
230
+ logdev = @log_device
231
+ logger = ServerEngine::DaemonLogger.new(logdev)
232
+ log = Fluent::Log.new(logger)
233
+ log.level = log_level
234
+ log.trace_backtrace(backtrace)
235
+ log.debug_backtrace(backtrace)
236
+ log.info_backtrace(backtrace)
237
+ log.warn_backtrace(backtrace)
238
+ log.error_backtrace(backtrace)
239
+ log.fatal_backtrace(backtrace)
240
+ expected = [
241
+ " #{@timestamp_str} [trace]: line 1\n",
242
+ " #{@timestamp_str} [trace]: line 2\n",
243
+ " #{@timestamp_str} [trace]: line 3\n",
244
+ " #{@timestamp_str} [debug]: line 1\n",
245
+ " #{@timestamp_str} [debug]: line 2\n",
246
+ " #{@timestamp_str} [debug]: line 3\n",
247
+ " #{@timestamp_str} [info]: line 1\n",
248
+ " #{@timestamp_str} [info]: line 2\n",
249
+ " #{@timestamp_str} [info]: line 3\n",
250
+ " #{@timestamp_str} [warn]: line 1\n",
251
+ " #{@timestamp_str} [warn]: line 2\n",
252
+ " #{@timestamp_str} [warn]: line 3\n",
253
+ " #{@timestamp_str} [error]: line 1\n",
254
+ " #{@timestamp_str} [error]: line 2\n",
255
+ " #{@timestamp_str} [error]: line 3\n",
256
+ " #{@timestamp_str} [fatal]: line 1\n",
257
+ " #{@timestamp_str} [fatal]: line 2\n",
258
+ " #{@timestamp_str} [fatal]: line 3\n"
259
+ ][start..-1]
260
+ assert_equal(expected, log.out.logs)
261
+ end
262
+
263
+ data(
264
+ trace: [ServerEngine::DaemonLogger::TRACE, 0],
265
+ debug: [ServerEngine::DaemonLogger::DEBUG, 3],
266
+ info: [ServerEngine::DaemonLogger::INFO, 6],
267
+ warn: [ServerEngine::DaemonLogger::WARN, 9],
268
+ error: [ServerEngine::DaemonLogger::ERROR, 12],
269
+ fatal: [ServerEngine::DaemonLogger::FATAL, 15],
270
+ )
271
+ def test_backtrace_with_serverengine_loglevel(data)
272
+ log_level, start = data
273
+ backtrace = ["line 1", "line 2", "line 3"]
274
+ dl_opts = {}
275
+ dl_opts[:log_level] = log_level
276
+ logdev = @log_device
277
+ logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
278
+ log = Fluent::Log.new(logger)
114
279
  log.trace_backtrace(backtrace)
115
280
  log.debug_backtrace(backtrace)
116
281
  log.info_backtrace(backtrace)
@@ -144,7 +309,13 @@ class LogTest < Test::Unit::TestCase
144
309
  sub_test_case "suppress repeated backtrace" do
145
310
  def test_same_log_level
146
311
  backtrace = ["line 1", "line 2", "line 3"]
147
- log = Fluent::Log.new(@log_device, Fluent::Log::LEVEL_TRACE, suppress_repeated_stacktrace: true)
312
+ dl_opts = {}
313
+ dl_opts[:log_level] = ServerEngine::DaemonLogger::TRACE
314
+ logdev = @log_device
315
+ logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
316
+ opts = {}
317
+ opts[:suppress_repeated_stacktrace] = true
318
+ log = Fluent::Log.new(logger, opts)
148
319
  log.trace_backtrace(backtrace)
149
320
  log.trace_backtrace(backtrace)
150
321
  log.trace_backtrace(backtrace + ["line 4"])
@@ -169,7 +340,13 @@ class LogTest < Test::Unit::TestCase
169
340
 
170
341
  def test_different_log_level
171
342
  backtrace = ["line 1", "line 2", "line 3"]
172
- log = Fluent::Log.new(@log_device, Fluent::Log::LEVEL_TRACE, suppress_repeated_stacktrace: true)
343
+ dl_opts = {}
344
+ dl_opts[:log_level] = ServerEngine::DaemonLogger::TRACE
345
+ logdev = @log_device
346
+ logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
347
+ opts = {}
348
+ opts[:suppress_repeated_stacktrace] = true
349
+ log = Fluent::Log.new(logger, opts)
173
350
  log.trace_backtrace(backtrace)
174
351
  log.debug_backtrace(backtrace)
175
352
  log.info_backtrace(backtrace)
@@ -191,37 +368,191 @@ class LogTest < Test::Unit::TestCase
191
368
  end
192
369
 
193
370
  def test_dup
194
- log1 = Fluent::Log.new(@log_device, Fluent::Log::LEVEL_TRACE)
371
+ dl_opts = {}
372
+ dl_opts[:log_level] = ServerEngine::DaemonLogger::TRACE
373
+ logdev = @log_device
374
+ logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
375
+ log1 = Fluent::Log.new(logger)
195
376
  log2 = log1.dup
196
377
  log1.level = Fluent::Log::LEVEL_DEBUG
197
- original_tag = log1.tag
198
- log1.tag = "changed"
199
378
  assert_equal(Fluent::Log::LEVEL_DEBUG, log1.level)
200
379
  assert_equal(Fluent::Log::LEVEL_TRACE, log2.level)
201
- assert_equal("changed", log1.tag)
202
- assert_equal(original_tag, log2.tag)
380
+ end
381
+
382
+ def test_format_json
383
+ logdev = @log_device
384
+ logger = ServerEngine::DaemonLogger.new(logdev)
385
+ log = Fluent::Log.new(logger)
386
+ log.format = :json
387
+ log.level = Fluent::Log::LEVEL_TRACE
388
+ log.trace "trace log"
389
+ log.debug "debug log"
390
+ log.info "info log"
391
+ log.warn "warn log"
392
+ log.error "error log"
393
+ log.fatal "fatal log"
394
+ expected = [
395
+ "#{@timestamp_str} [trace]: trace log\n",
396
+ "#{@timestamp_str} [debug]: debug log\n",
397
+ "#{@timestamp_str} [info]: info log\n",
398
+ "#{@timestamp_str} [warn]: warn log\n",
399
+ "#{@timestamp_str} [error]: error log\n",
400
+ "#{@timestamp_str} [fatal]: fatal log\n"
401
+ ]
402
+ assert_equal(expected, log.out.logs.map { |l|
403
+ r = JSON.parse(l)
404
+ "#{r['time']} [#{r['level']}]: #{r['message']}\n"
405
+ })
406
+ end
407
+
408
+ def test_time_format
409
+ logdev = @log_device
410
+ logger = ServerEngine::DaemonLogger.new(logdev)
411
+ log = Fluent::Log.new(logger)
412
+ log.time_format = "%Y"
413
+ log.level = Fluent::Log::LEVEL_TRACE
414
+ log.trace "trace log"
415
+ log.debug "debug log"
416
+ log.info "info log"
417
+ log.warn "warn log"
418
+ log.error "error log"
419
+ log.fatal "fatal log"
420
+ timestamp_str = @timestamp.strftime("%Y")
421
+ expected = [
422
+ "#{timestamp_str} [trace]: trace log\n",
423
+ "#{timestamp_str} [debug]: debug log\n",
424
+ "#{timestamp_str} [info]: info log\n",
425
+ "#{timestamp_str} [warn]: warn log\n",
426
+ "#{timestamp_str} [error]: error log\n",
427
+ "#{timestamp_str} [fatal]: fatal log\n"
428
+ ]
429
+ assert_equal(expected, log.out.logs)
203
430
  end
204
431
 
205
432
  def test_disable_events
206
- log = Fluent::Log.new(@log_device, Fluent::Log::LEVEL_TRACE)
433
+ dl_opts = {}
434
+ dl_opts[:log_level] = ServerEngine::DaemonLogger::TRACE
435
+ logdev = @log_device
436
+ logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
437
+ log = Fluent::Log.new(logger)
438
+ log.enable_event(true)
207
439
  engine = log.instance_variable_get("@engine")
208
440
  mock(engine).push_log_event(anything, anything, anything).once
209
441
  log.trace "trace log"
210
442
  log.disable_events(Thread.current)
211
443
  log.trace "trace log"
212
444
  end
445
+
446
+ def test_level_reload
447
+ dl_opts = {}
448
+ dl_opts[:log_level] = ServerEngine::DaemonLogger::TRACE
449
+ logdev = @log_device
450
+ logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
451
+ log = Fluent::Log.new(logger)
452
+ assert_equal(ServerEngine::DaemonLogger::TRACE, logger.level)
453
+ assert_equal(Fluent::Log::LEVEL_TRACE, log.level)
454
+ # change daemon logger side level
455
+ logger.level = ServerEngine::DaemonLogger::DEBUG
456
+ assert_equal(ServerEngine::DaemonLogger::DEBUG, logger.level)
457
+ # check fluentd log side level is also changed
458
+ assert_equal(Fluent::Log::LEVEL_DEBUG, log.level)
459
+ end
460
+
461
+ DAY_SEC = 60 * 60 * 24
462
+ data(
463
+ rotate_daily_age: ['daily', 100000, DAY_SEC + 1],
464
+ rotate_weekly_age: ['weekly', 100000, DAY_SEC * 7 + 1],
465
+ rotate_monthly_age: ['monthly', 100000, DAY_SEC * 31 + 1],
466
+ rotate_size: [1, 100, 0, '0'],
467
+ )
468
+ def test_log_with_logdevio(expected)
469
+ with_timezone('utc') do
470
+ @timestamp = Time.parse("2016-04-21 00:00:00 +0000")
471
+ @timestamp_str = @timestamp.strftime("%Y-%m-%d %H:%M:%S %z")
472
+ Timecop.freeze(@timestamp)
473
+
474
+ rotate_age, rotate_size, travel_term = expected
475
+ path = "#{TMP_DIR}/log-dev-io-#{rotate_size}-#{rotate_age}"
476
+
477
+ logdev = Fluent::LogDeviceIO.new(path, shift_age: rotate_age, shift_size: rotate_size)
478
+ logger = ServerEngine::DaemonLogger.new(logdev)
479
+ log = Fluent::Log.new(logger)
480
+
481
+ msg = 'a' * 101
482
+ log.info msg
483
+ assert_match msg, File.read(path)
484
+
485
+ Timecop.freeze(@timestamp + travel_term)
486
+
487
+ msg2 = 'b' * 101
488
+ log.info msg2
489
+ c = File.read(path)
490
+
491
+ assert_match msg2, c
492
+ assert_not_equal msg, c
493
+ end
494
+ end
495
+
496
+ def test_log_rotates_specified_size_with_logdevio
497
+ with_timezone('utc') do
498
+ rotate_age = 2
499
+ rotate_size = 100
500
+ path = "#{TMP_DIR}/log-dev-io-#{rotate_size}-#{rotate_age}"
501
+ path0 = path + '.0'
502
+ path1 = path + '.1'
503
+
504
+ logdev = Fluent::LogDeviceIO.new(path, shift_age: rotate_age, shift_size: rotate_size)
505
+ logger = ServerEngine::DaemonLogger.new(logdev)
506
+ log = Fluent::Log.new(logger)
507
+
508
+ msg = 'a' * 101
509
+ log.info msg
510
+ assert_match msg, File.read(path)
511
+ assert_true File.exist?(path)
512
+ assert_true !File.exist?(path0)
513
+ assert_true !File.exist?(path1)
514
+
515
+ # create log.0
516
+ msg2 = 'b' * 101
517
+ log.info msg2
518
+ c = File.read(path)
519
+ c0 = File.read(path0)
520
+ assert_match msg2, c
521
+ assert_match msg, c0
522
+ assert_true File.exist?(path)
523
+ assert_true File.exist?(path0)
524
+ assert_true !File.exist?(path1)
525
+
526
+ # rotate
527
+ msg3 = 'c' * 101
528
+ log.info msg3
529
+ c = File.read(path)
530
+ c0 = File.read(path0)
531
+ assert_match msg3, c
532
+ assert_match msg2, c0
533
+ assert_true File.exist?(path)
534
+ assert_true File.exist?(path0)
535
+ assert_true !File.exist?(path1)
536
+ end
537
+ end
213
538
  end
214
539
 
215
540
  class PluginLoggerTest < Test::Unit::TestCase
216
541
  def setup
217
542
  @log_device = Fluent::Test::DummyLogDevice.new
218
- @timestamp = Time.parse("2016-04-21 11:58:41 +0900")
543
+ @timestamp = Time.parse("2016-04-21 02:58:41 +0000")
219
544
  @timestamp_str = @timestamp.strftime("%Y-%m-%d %H:%M:%S %z")
220
- stub(Time).now { @timestamp }
221
- @logger = Fluent::Log.new(@log_device, Fluent::Log::LEVEL_TRACE)
545
+ Timecop.freeze(@timestamp)
546
+ dl_opts = {}
547
+ dl_opts[:log_level] = ServerEngine::DaemonLogger::TRACE
548
+ logdev = @log_device
549
+ logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
550
+ @logger = Fluent::Log.new(logger)
222
551
  end
223
552
 
224
553
  def teardown
554
+ @log_device.reset
555
+ Timecop.return
225
556
  Thread.current[:last_repeated_stacktrace] = nil
226
557
  end
227
558
 
@@ -252,6 +583,146 @@ class PluginLoggerTest < Test::Unit::TestCase
252
583
  assert_equal(true, @logger.enable_color?)
253
584
  end
254
585
 
586
+ def test_log_type_in_default
587
+ mock(@logger).caller_line(:default, Time.now, 1, Fluent::Log::LEVEL_TRACE).once
588
+ mock(@logger).caller_line(:default, Time.now, 1, Fluent::Log::LEVEL_DEBUG).once
589
+ mock(@logger).caller_line(:default, Time.now, 1, Fluent::Log::LEVEL_INFO).once
590
+ mock(@logger).caller_line(:default, Time.now, 1, Fluent::Log::LEVEL_WARN).once
591
+ mock(@logger).caller_line(:default, Time.now, 1, Fluent::Log::LEVEL_ERROR).once
592
+ mock(@logger).caller_line(:default, Time.now, 1, Fluent::Log::LEVEL_FATAL).once
593
+
594
+ @logger.trace "trace log 1"
595
+ @logger.debug "debug log 2"
596
+ @logger.info "info log 3"
597
+ @logger.warn "warn log 4"
598
+ @logger.error "error log 5"
599
+ @logger.fatal "fatal log 6"
600
+ end
601
+
602
+ def test_log_types
603
+ mock(@logger).caller_line(:default, Time.now, 1, Fluent::Log::LEVEL_TRACE).once
604
+ mock(@logger).caller_line(:supervisor, Time.now, 1, Fluent::Log::LEVEL_DEBUG).once
605
+ mock(@logger).caller_line(:worker0, Time.now, 1, Fluent::Log::LEVEL_INFO).once
606
+ mock(@logger).caller_line(:default, Time.now, 1, Fluent::Log::LEVEL_WARN).once
607
+ mock(@logger).caller_line(:supervisor, Time.now, 1, Fluent::Log::LEVEL_ERROR).once
608
+ mock(@logger).caller_line(:worker0, Time.now, 1, Fluent::Log::LEVEL_FATAL).once
609
+
610
+ @logger.trace :default, "trace log 1"
611
+ @logger.debug :supervisor, "debug log 2"
612
+ @logger.info :worker0, "info log 3"
613
+ @logger.warn :default, "warn log 4"
614
+ @logger.error :supervisor, "error log 5"
615
+ @logger.fatal :worker0, "fatal log 6"
616
+ end
617
+
618
+ sub_test_case "supervisor process type" do
619
+ setup do
620
+ dl_opts = {}
621
+ dl_opts[:log_level] = ServerEngine::DaemonLogger::TRACE
622
+ logdev = @log_device
623
+ logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
624
+ @logger = Fluent::Log.new(logger, process_type: :supervisor)
625
+ end
626
+
627
+ test 'default type logs are shown w/o worker id' do
628
+ @logger.info "yaaay"
629
+ @logger.info :default, "booo"
630
+ assert{ @log_device.logs.include?("#{@timestamp_str} [info]: yaaay\n") }
631
+ assert{ @log_device.logs.include?("#{@timestamp_str} [info]: booo\n") }
632
+ end
633
+
634
+ test 'supervisor type logs are shown w/o worker id' do
635
+ @logger.info :supervisor, "yaaay"
636
+ assert{ @log_device.logs.include?("#{@timestamp_str} [info]: yaaay\n") }
637
+ end
638
+
639
+ test 'worker0 type logs are not shown' do
640
+ @logger.info :worker0, "yaaay"
641
+ assert{ !@log_device.logs.include?("#{@timestamp_str} [info]: yaaay\n") }
642
+ end
643
+ end
644
+
645
+ sub_test_case "worker0 process type" do
646
+ setup do
647
+ dl_opts = {}
648
+ dl_opts[:log_level] = ServerEngine::DaemonLogger::TRACE
649
+ logdev = @log_device
650
+ logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
651
+ @logger = Fluent::Log.new(logger, process_type: :worker0, worker_id: 10)
652
+ end
653
+
654
+ test 'default type logs are shown w/ worker id' do
655
+ @logger.info "yaaay"
656
+ @logger.info :default, "booo"
657
+ assert{ @log_device.logs.include?("#{@timestamp_str} [info]: #10 yaaay\n") }
658
+ assert{ @log_device.logs.include?("#{@timestamp_str} [info]: #10 booo\n") }
659
+ end
660
+
661
+ test 'supervisor type logs are not shown' do
662
+ @logger.info :supervisor, "yaaay"
663
+ assert{ !@log_device.logs.include?("#{@timestamp_str} [info]: yaaay\n") }
664
+ end
665
+
666
+ test 'worker0 type logs are shown w/o worker id' do
667
+ @logger.info :worker0, "yaaay"
668
+ assert{ @log_device.logs.include?("#{@timestamp_str} [info]: yaaay\n") }
669
+ end
670
+ end
671
+
672
+ sub_test_case "workers process type" do
673
+ setup do
674
+ dl_opts = {}
675
+ dl_opts[:log_level] = ServerEngine::DaemonLogger::TRACE
676
+ logdev = @log_device
677
+ logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
678
+ @logger = Fluent::Log.new(logger, process_type: :workers, worker_id: 7)
679
+ end
680
+
681
+ test 'default type logs are shown w/ worker id' do
682
+ @logger.info "yaaay"
683
+ @logger.info :default, "booo"
684
+ assert{ @log_device.logs.include?("#{@timestamp_str} [info]: #7 yaaay\n") }
685
+ assert{ @log_device.logs.include?("#{@timestamp_str} [info]: #7 booo\n") }
686
+ end
687
+
688
+ test 'supervisor type logs are not shown' do
689
+ @logger.info :supervisor, "yaaay"
690
+ assert{ !@log_device.logs.include?("#{@timestamp_str} [info]: yaaay\n") }
691
+ end
692
+
693
+ test 'worker0 type logs are not shown' do
694
+ @logger.info :worker0, "yaaay"
695
+ assert{ !@log_device.logs.include?("#{@timestamp_str} [info]: yaaay\n") }
696
+ end
697
+ end
698
+
699
+ sub_test_case "standalone process type" do
700
+ setup do
701
+ dl_opts = {}
702
+ dl_opts[:log_level] = ServerEngine::DaemonLogger::TRACE
703
+ logdev = @log_device
704
+ logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
705
+ @logger = Fluent::Log.new(logger, process_type: :standalone, worker_id: 0)
706
+ end
707
+
708
+ test 'default type logs are shown w/o worker id' do
709
+ @logger.info "yaaay"
710
+ @logger.info :default, "booo"
711
+ assert{ @log_device.logs.include?("#{@timestamp_str} [info]: yaaay\n") }
712
+ assert{ @log_device.logs.include?("#{@timestamp_str} [info]: booo\n") }
713
+ end
714
+
715
+ test 'supervisor type logs are shown w/o worker id' do
716
+ @logger.info :supervisor, "yaaay"
717
+ assert{ @log_device.logs.include?("#{@timestamp_str} [info]: yaaay\n") }
718
+ end
719
+
720
+ test 'worker0 type logs are shown w/o worker id' do
721
+ @logger.info :worker0, "yaaay"
722
+ assert{ @log_device.logs.include?("#{@timestamp_str} [info]: yaaay\n") }
723
+ end
724
+ end
725
+
255
726
  sub_test_case "delegators" do
256
727
  def setup
257
728
  super
@@ -273,18 +744,6 @@ class PluginLoggerTest < Test::Unit::TestCase
273
744
  @log.disable_events(Thread.current)
274
745
  end
275
746
 
276
- def test_tag
277
- assert_equal(@log.tag, @logger.tag)
278
- @log.tag = "dummy"
279
- assert_equal(@log.tag, @logger.tag)
280
- end
281
-
282
- def test_time_format
283
- assert_equal(@log.time_format, @logger.time_format)
284
- @log.time_format = "time_format"
285
- assert_equal(@log.time_format, @logger.time_format)
286
- end
287
-
288
747
  def test_event
289
748
  mock(@logger).event(Fluent::Log::LEVEL_TRACE, { key: "value" })
290
749
  @log.event(Fluent::Log::LEVEL_TRACE, { key: "value" })
@@ -316,15 +775,59 @@ class PluginLoggerTest < Test::Unit::TestCase
316
775
  @log.out = Object.new
317
776
  assert_equal(@log.out, @logger.out)
318
777
  end
778
+
779
+ def test_optional_header
780
+ assert_equal(@log.optional_header, @logger.optional_header)
781
+ @log.optional_header = "optional_header"
782
+ assert_equal(@log.optional_header, @logger.optional_header)
783
+ end
784
+
785
+ def test_optional_attrs
786
+ assert_equal(@log.optional_attrs, @logger.optional_attrs)
787
+ @log.optional_attrs = "optional_attrs"
788
+ assert_equal(@log.optional_attrs, @logger.optional_attrs)
789
+ end
790
+ end
791
+
792
+ sub_test_case "partially delegated" do
793
+ def setup
794
+ super
795
+ @log = Fluent::PluginLogger.new(@logger)
796
+ end
797
+
798
+ data(
799
+ text: [:text, "2016-04-21 02:58:41 +0000 [info]: yaaay\n"],
800
+ json: [:json, %Q({"time":"2016-04-21 02:58:41 +0000","level":"info","message":"yaaay"}\n)],
801
+ )
802
+ def test_format(data)
803
+ fmt, expected_log_line = data
804
+ with_timezone('utc') {
805
+ @log.format = fmt
806
+ @log.info "yaaay"
807
+ }
808
+ assert{ @log_device.logs.include? expected_log_line }
809
+ end
810
+
811
+ data(
812
+ text: [:text, "2016 [info]: yaaay\n"],
813
+ json: [:json, %Q({"time":"2016","level":"info","message":"yaaay"}\n)],
814
+ )
815
+ def test_time_format(data)
816
+ fmt, expected_log_line = data
817
+ @log.format = fmt
818
+ @log.time_format = "%Y"
819
+ @log.info "yaaay"
820
+ assert{ @log_device.logs.include? expected_log_line }
821
+ end
319
822
  end
320
823
  end
321
824
 
322
825
  class PluginLoggerMixinTest < Test::Unit::TestCase
323
- class DummyPlugin < Fluent::Input
826
+ class DummyPlugin < Fluent::Plugin::Input
324
827
  end
325
828
 
326
829
  def create_driver(conf)
327
- Fluent::Test::TestDriver.new(DummyPlugin).configure(conf)
830
+ Fluent::Test::Driver::Input.new(DummyPlugin).configure(conf)
328
831
  end
329
832
 
330
833
  def setup
@@ -343,4 +846,61 @@ class PluginLoggerMixinTest < Test::Unit::TestCase
343
846
  assert_not_equal($log.level, log.level)
344
847
  assert_equal(Fluent::Log::LEVEL_FATAL, log.level)
345
848
  end
849
+
850
+ def test_optional_header
851
+ d = create_driver(%[@id myplugin])
852
+ log = d.instance.log
853
+ assert_equal("[myplugin] ", log.optional_header)
854
+ assert_equal({}, log.optional_attrs)
855
+ end
856
+
857
+ def test_start
858
+ plugin = DummyPlugin.new
859
+ mock(plugin.log).should_receive(:reset).never
860
+ plugin.start
861
+ end
862
+
863
+ def test_terminate
864
+ plugin = DummyPlugin.new
865
+ mock(plugin.log).reset
866
+ plugin.terminate
867
+ end
868
+ end
869
+
870
+ class LogDeviceIOTest < Test::Unit::TestCase
871
+ test 'flush' do
872
+ io = StringIO.new
873
+ logdev = Fluent::LogDeviceIO.new(io)
874
+ assert_equal io, logdev.flush
875
+
876
+ io.instance_eval { undef :flush }
877
+ logdev = Fluent::LogDeviceIO.new(io)
878
+ assert_raise NoMethodError do
879
+ logdev.flush
880
+ end
881
+ end
882
+
883
+ test 'tty?' do
884
+ io = StringIO.new
885
+ logdev = Fluent::LogDeviceIO.new(io)
886
+ assert_equal io.tty?, logdev.tty?
887
+
888
+ io.instance_eval { undef :tty? }
889
+ logdev = Fluent::LogDeviceIO.new(io)
890
+ assert_raise NoMethodError do
891
+ logdev.tty?
892
+ end
893
+ end
894
+
895
+ test 'sync=' do
896
+ io = StringIO.new
897
+ logdev = Fluent::LogDeviceIO.new(io)
898
+ assert_true logdev.sync = true
899
+
900
+ io.instance_eval { undef :sync= }
901
+ logdev = Fluent::LogDeviceIO.new(io)
902
+ assert_raise NoMethodError do
903
+ logdev.sync = true
904
+ end
905
+ end
346
906
  end