fluentd 0.14.4-x64-mingw32

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 (328) hide show
  1. checksums.yaml +7 -0
  2. data/.github/ISSUE_TEMPLATE.md +6 -0
  3. data/.gitignore +26 -0
  4. data/.travis.yml +45 -0
  5. data/AUTHORS +2 -0
  6. data/CONTRIBUTING.md +35 -0
  7. data/COPYING +14 -0
  8. data/ChangeLog +276 -0
  9. data/Gemfile +9 -0
  10. data/README.md +51 -0
  11. data/Rakefile +53 -0
  12. data/Vagrantfile +17 -0
  13. data/appveyor.yml +41 -0
  14. data/bin/fluent-debug +5 -0
  15. data/example/copy_roundrobin.conf +39 -0
  16. data/example/filter_stdout.conf +22 -0
  17. data/example/in_forward.conf +11 -0
  18. data/example/in_http.conf +14 -0
  19. data/example/in_out_forward.conf +17 -0
  20. data/example/in_syslog.conf +15 -0
  21. data/example/in_tail.conf +14 -0
  22. data/example/in_tcp.conf +13 -0
  23. data/example/in_udp.conf +13 -0
  24. data/example/multi_filters.conf +61 -0
  25. data/example/out_buffered_null.conf +32 -0
  26. data/example/out_copy.conf +20 -0
  27. data/example/out_file.conf +13 -0
  28. data/example/out_forward.conf +35 -0
  29. data/example/out_forward_buf_file.conf +23 -0
  30. data/example/v0_12_filter.conf +78 -0
  31. data/example/v1_literal_example.conf +36 -0
  32. data/fluent.conf +139 -0
  33. data/fluentd.gemspec +51 -0
  34. data/lib/fluent/agent.rb +194 -0
  35. data/lib/fluent/command/bundler_injection.rb +45 -0
  36. data/lib/fluent/command/cat.rb +319 -0
  37. data/lib/fluent/command/debug.rb +102 -0
  38. data/lib/fluent/command/fluentd.rb +273 -0
  39. data/lib/fluent/compat/call_super_mixin.rb +67 -0
  40. data/lib/fluent/compat/exec_util.rb +129 -0
  41. data/lib/fluent/compat/file_util.rb +54 -0
  42. data/lib/fluent/compat/filter.rb +68 -0
  43. data/lib/fluent/compat/formatter.rb +111 -0
  44. data/lib/fluent/compat/formatter_utils.rb +85 -0
  45. data/lib/fluent/compat/handle_tag_and_time_mixin.rb +62 -0
  46. data/lib/fluent/compat/handle_tag_name_mixin.rb +53 -0
  47. data/lib/fluent/compat/input.rb +49 -0
  48. data/lib/fluent/compat/output.rb +677 -0
  49. data/lib/fluent/compat/output_chain.rb +60 -0
  50. data/lib/fluent/compat/parser.rb +180 -0
  51. data/lib/fluent/compat/parser_utils.rb +40 -0
  52. data/lib/fluent/compat/propagate_default.rb +62 -0
  53. data/lib/fluent/compat/record_filter_mixin.rb +34 -0
  54. data/lib/fluent/compat/set_tag_key_mixin.rb +50 -0
  55. data/lib/fluent/compat/set_time_key_mixin.rb +69 -0
  56. data/lib/fluent/compat/socket_util.rb +165 -0
  57. data/lib/fluent/compat/string_util.rb +34 -0
  58. data/lib/fluent/compat/structured_format_mixin.rb +26 -0
  59. data/lib/fluent/compat/type_converter.rb +90 -0
  60. data/lib/fluent/config.rb +56 -0
  61. data/lib/fluent/config/basic_parser.rb +123 -0
  62. data/lib/fluent/config/configure_proxy.rb +366 -0
  63. data/lib/fluent/config/dsl.rb +149 -0
  64. data/lib/fluent/config/element.rb +218 -0
  65. data/lib/fluent/config/error.rb +26 -0
  66. data/lib/fluent/config/literal_parser.rb +251 -0
  67. data/lib/fluent/config/parser.rb +107 -0
  68. data/lib/fluent/config/section.rb +212 -0
  69. data/lib/fluent/config/types.rb +136 -0
  70. data/lib/fluent/config/v1_parser.rb +190 -0
  71. data/lib/fluent/configurable.rb +176 -0
  72. data/lib/fluent/daemon.rb +15 -0
  73. data/lib/fluent/engine.rb +220 -0
  74. data/lib/fluent/env.rb +27 -0
  75. data/lib/fluent/event.rb +287 -0
  76. data/lib/fluent/event_router.rb +259 -0
  77. data/lib/fluent/filter.rb +21 -0
  78. data/lib/fluent/formatter.rb +23 -0
  79. data/lib/fluent/input.rb +21 -0
  80. data/lib/fluent/label.rb +38 -0
  81. data/lib/fluent/load.rb +36 -0
  82. data/lib/fluent/log.rb +445 -0
  83. data/lib/fluent/match.rb +141 -0
  84. data/lib/fluent/mixin.rb +31 -0
  85. data/lib/fluent/msgpack_factory.rb +62 -0
  86. data/lib/fluent/output.rb +26 -0
  87. data/lib/fluent/output_chain.rb +23 -0
  88. data/lib/fluent/parser.rb +23 -0
  89. data/lib/fluent/plugin.rb +161 -0
  90. data/lib/fluent/plugin/bare_output.rb +63 -0
  91. data/lib/fluent/plugin/base.rb +130 -0
  92. data/lib/fluent/plugin/buf_file.rb +154 -0
  93. data/lib/fluent/plugin/buf_memory.rb +34 -0
  94. data/lib/fluent/plugin/buffer.rb +603 -0
  95. data/lib/fluent/plugin/buffer/chunk.rb +160 -0
  96. data/lib/fluent/plugin/buffer/file_chunk.rb +323 -0
  97. data/lib/fluent/plugin/buffer/memory_chunk.rb +90 -0
  98. data/lib/fluent/plugin/exec_util.rb +22 -0
  99. data/lib/fluent/plugin/file_util.rb +22 -0
  100. data/lib/fluent/plugin/file_wrapper.rb +120 -0
  101. data/lib/fluent/plugin/filter.rb +93 -0
  102. data/lib/fluent/plugin/filter_grep.rb +75 -0
  103. data/lib/fluent/plugin/filter_record_transformer.rb +342 -0
  104. data/lib/fluent/plugin/filter_stdout.rb +53 -0
  105. data/lib/fluent/plugin/formatter.rb +45 -0
  106. data/lib/fluent/plugin/formatter_csv.rb +47 -0
  107. data/lib/fluent/plugin/formatter_hash.rb +29 -0
  108. data/lib/fluent/plugin/formatter_json.rb +44 -0
  109. data/lib/fluent/plugin/formatter_ltsv.rb +41 -0
  110. data/lib/fluent/plugin/formatter_msgpack.rb +29 -0
  111. data/lib/fluent/plugin/formatter_out_file.rb +78 -0
  112. data/lib/fluent/plugin/formatter_single_value.rb +34 -0
  113. data/lib/fluent/plugin/formatter_stdout.rb +74 -0
  114. data/lib/fluent/plugin/in_debug_agent.rb +64 -0
  115. data/lib/fluent/plugin/in_dummy.rb +135 -0
  116. data/lib/fluent/plugin/in_exec.rb +149 -0
  117. data/lib/fluent/plugin/in_forward.rb +366 -0
  118. data/lib/fluent/plugin/in_gc_stat.rb +52 -0
  119. data/lib/fluent/plugin/in_http.rb +422 -0
  120. data/lib/fluent/plugin/in_monitor_agent.rb +401 -0
  121. data/lib/fluent/plugin/in_object_space.rb +90 -0
  122. data/lib/fluent/plugin/in_syslog.rb +204 -0
  123. data/lib/fluent/plugin/in_tail.rb +838 -0
  124. data/lib/fluent/plugin/in_tcp.rb +41 -0
  125. data/lib/fluent/plugin/in_udp.rb +37 -0
  126. data/lib/fluent/plugin/in_unix.rb +201 -0
  127. data/lib/fluent/plugin/input.rb +33 -0
  128. data/lib/fluent/plugin/multi_output.rb +95 -0
  129. data/lib/fluent/plugin/out_buffered_null.rb +59 -0
  130. data/lib/fluent/plugin/out_buffered_stdout.rb +70 -0
  131. data/lib/fluent/plugin/out_copy.rb +42 -0
  132. data/lib/fluent/plugin/out_exec.rb +114 -0
  133. data/lib/fluent/plugin/out_exec_filter.rb +393 -0
  134. data/lib/fluent/plugin/out_file.rb +167 -0
  135. data/lib/fluent/plugin/out_forward.rb +646 -0
  136. data/lib/fluent/plugin/out_null.rb +27 -0
  137. data/lib/fluent/plugin/out_relabel.rb +28 -0
  138. data/lib/fluent/plugin/out_roundrobin.rb +80 -0
  139. data/lib/fluent/plugin/out_stdout.rb +48 -0
  140. data/lib/fluent/plugin/out_stream.rb +130 -0
  141. data/lib/fluent/plugin/output.rb +1020 -0
  142. data/lib/fluent/plugin/owned_by_mixin.rb +42 -0
  143. data/lib/fluent/plugin/parser.rb +175 -0
  144. data/lib/fluent/plugin/parser_apache.rb +28 -0
  145. data/lib/fluent/plugin/parser_apache2.rb +84 -0
  146. data/lib/fluent/plugin/parser_apache_error.rb +26 -0
  147. data/lib/fluent/plugin/parser_csv.rb +33 -0
  148. data/lib/fluent/plugin/parser_json.rb +79 -0
  149. data/lib/fluent/plugin/parser_ltsv.rb +50 -0
  150. data/lib/fluent/plugin/parser_multiline.rb +104 -0
  151. data/lib/fluent/plugin/parser_nginx.rb +28 -0
  152. data/lib/fluent/plugin/parser_none.rb +36 -0
  153. data/lib/fluent/plugin/parser_regexp.rb +73 -0
  154. data/lib/fluent/plugin/parser_syslog.rb +82 -0
  155. data/lib/fluent/plugin/parser_tsv.rb +37 -0
  156. data/lib/fluent/plugin/socket_util.rb +22 -0
  157. data/lib/fluent/plugin/storage.rb +84 -0
  158. data/lib/fluent/plugin/storage_local.rb +132 -0
  159. data/lib/fluent/plugin/string_util.rb +22 -0
  160. data/lib/fluent/plugin_helper.rb +42 -0
  161. data/lib/fluent/plugin_helper/child_process.rb +298 -0
  162. data/lib/fluent/plugin_helper/compat_parameters.rb +224 -0
  163. data/lib/fluent/plugin_helper/event_emitter.rb +80 -0
  164. data/lib/fluent/plugin_helper/event_loop.rb +118 -0
  165. data/lib/fluent/plugin_helper/formatter.rb +149 -0
  166. data/lib/fluent/plugin_helper/inject.rb +125 -0
  167. data/lib/fluent/plugin_helper/parser.rb +147 -0
  168. data/lib/fluent/plugin_helper/retry_state.rb +177 -0
  169. data/lib/fluent/plugin_helper/storage.rb +331 -0
  170. data/lib/fluent/plugin_helper/thread.rb +147 -0
  171. data/lib/fluent/plugin_helper/timer.rb +90 -0
  172. data/lib/fluent/plugin_id.rb +63 -0
  173. data/lib/fluent/process.rb +504 -0
  174. data/lib/fluent/registry.rb +99 -0
  175. data/lib/fluent/root_agent.rb +314 -0
  176. data/lib/fluent/rpc.rb +94 -0
  177. data/lib/fluent/supervisor.rb +680 -0
  178. data/lib/fluent/system_config.rb +122 -0
  179. data/lib/fluent/test.rb +56 -0
  180. data/lib/fluent/test/base.rb +85 -0
  181. data/lib/fluent/test/driver/base.rb +179 -0
  182. data/lib/fluent/test/driver/base_owned.rb +70 -0
  183. data/lib/fluent/test/driver/base_owner.rb +125 -0
  184. data/lib/fluent/test/driver/event_feeder.rb +98 -0
  185. data/lib/fluent/test/driver/filter.rb +57 -0
  186. data/lib/fluent/test/driver/formatter.rb +30 -0
  187. data/lib/fluent/test/driver/input.rb +31 -0
  188. data/lib/fluent/test/driver/multi_output.rb +52 -0
  189. data/lib/fluent/test/driver/output.rb +76 -0
  190. data/lib/fluent/test/driver/parser.rb +30 -0
  191. data/lib/fluent/test/driver/test_event_router.rb +45 -0
  192. data/lib/fluent/test/filter_test.rb +77 -0
  193. data/lib/fluent/test/formatter_test.rb +65 -0
  194. data/lib/fluent/test/helpers.rb +79 -0
  195. data/lib/fluent/test/input_test.rb +172 -0
  196. data/lib/fluent/test/log.rb +73 -0
  197. data/lib/fluent/test/output_test.rb +156 -0
  198. data/lib/fluent/test/parser_test.rb +70 -0
  199. data/lib/fluent/time.rb +175 -0
  200. data/lib/fluent/timezone.rb +133 -0
  201. data/lib/fluent/unique_id.rb +39 -0
  202. data/lib/fluent/version.rb +21 -0
  203. data/lib/fluent/winsvc.rb +71 -0
  204. data/test/compat/test_calls_super.rb +166 -0
  205. data/test/compat/test_parser.rb +82 -0
  206. data/test/config/assertions.rb +42 -0
  207. data/test/config/test_config_parser.rb +507 -0
  208. data/test/config/test_configurable.rb +1194 -0
  209. data/test/config/test_configure_proxy.rb +386 -0
  210. data/test/config/test_dsl.rb +415 -0
  211. data/test/config/test_element.rb +403 -0
  212. data/test/config/test_literal_parser.rb +297 -0
  213. data/test/config/test_section.rb +184 -0
  214. data/test/config/test_system_config.rb +120 -0
  215. data/test/config/test_types.rb +171 -0
  216. data/test/helper.rb +119 -0
  217. data/test/plugin/data/2010/01/20100102-030405.log +0 -0
  218. data/test/plugin/data/2010/01/20100102-030406.log +0 -0
  219. data/test/plugin/data/2010/01/20100102.log +0 -0
  220. data/test/plugin/data/log/bar +0 -0
  221. data/test/plugin/data/log/foo/bar.log +0 -0
  222. data/test/plugin/data/log/test.log +0 -0
  223. data/test/plugin/test_bare_output.rb +118 -0
  224. data/test/plugin/test_base.rb +75 -0
  225. data/test/plugin/test_buf_file.rb +571 -0
  226. data/test/plugin/test_buf_memory.rb +42 -0
  227. data/test/plugin/test_buffer.rb +1200 -0
  228. data/test/plugin/test_buffer_chunk.rb +168 -0
  229. data/test/plugin/test_buffer_file_chunk.rb +771 -0
  230. data/test/plugin/test_buffer_memory_chunk.rb +265 -0
  231. data/test/plugin/test_file_util.rb +96 -0
  232. data/test/plugin/test_filter.rb +353 -0
  233. data/test/plugin/test_filter_grep.rb +119 -0
  234. data/test/plugin/test_filter_record_transformer.rb +600 -0
  235. data/test/plugin/test_filter_stdout.rb +211 -0
  236. data/test/plugin/test_formatter_csv.rb +94 -0
  237. data/test/plugin/test_formatter_json.rb +30 -0
  238. data/test/plugin/test_formatter_ltsv.rb +52 -0
  239. data/test/plugin/test_formatter_msgpack.rb +28 -0
  240. data/test/plugin/test_formatter_out_file.rb +95 -0
  241. data/test/plugin/test_formatter_single_value.rb +38 -0
  242. data/test/plugin/test_in_debug_agent.rb +28 -0
  243. data/test/plugin/test_in_dummy.rb +188 -0
  244. data/test/plugin/test_in_exec.rb +133 -0
  245. data/test/plugin/test_in_forward.rb +635 -0
  246. data/test/plugin/test_in_gc_stat.rb +39 -0
  247. data/test/plugin/test_in_http.rb +442 -0
  248. data/test/plugin/test_in_monitor_agent.rb +329 -0
  249. data/test/plugin/test_in_object_space.rb +64 -0
  250. data/test/plugin/test_in_syslog.rb +205 -0
  251. data/test/plugin/test_in_tail.rb +1001 -0
  252. data/test/plugin/test_in_tcp.rb +102 -0
  253. data/test/plugin/test_in_udp.rb +121 -0
  254. data/test/plugin/test_in_unix.rb +126 -0
  255. data/test/plugin/test_input.rb +122 -0
  256. data/test/plugin/test_multi_output.rb +180 -0
  257. data/test/plugin/test_out_buffered_null.rb +79 -0
  258. data/test/plugin/test_out_buffered_stdout.rb +122 -0
  259. data/test/plugin/test_out_copy.rb +160 -0
  260. data/test/plugin/test_out_exec.rb +155 -0
  261. data/test/plugin/test_out_exec_filter.rb +262 -0
  262. data/test/plugin/test_out_file.rb +383 -0
  263. data/test/plugin/test_out_forward.rb +590 -0
  264. data/test/plugin/test_out_null.rb +29 -0
  265. data/test/plugin/test_out_relabel.rb +28 -0
  266. data/test/plugin/test_out_roundrobin.rb +146 -0
  267. data/test/plugin/test_out_stdout.rb +92 -0
  268. data/test/plugin/test_out_stream.rb +93 -0
  269. data/test/plugin/test_output.rb +568 -0
  270. data/test/plugin/test_output_as_buffered.rb +1604 -0
  271. data/test/plugin/test_output_as_buffered_overflow.rb +250 -0
  272. data/test/plugin/test_output_as_buffered_retries.rb +839 -0
  273. data/test/plugin/test_output_as_buffered_secondary.rb +817 -0
  274. data/test/plugin/test_output_as_standard.rb +374 -0
  275. data/test/plugin/test_owned_by.rb +35 -0
  276. data/test/plugin/test_parser_apache.rb +42 -0
  277. data/test/plugin/test_parser_apache2.rb +38 -0
  278. data/test/plugin/test_parser_apache_error.rb +45 -0
  279. data/test/plugin/test_parser_base.rb +32 -0
  280. data/test/plugin/test_parser_csv.rb +104 -0
  281. data/test/plugin/test_parser_json.rb +107 -0
  282. data/test/plugin/test_parser_labeled_tsv.rb +129 -0
  283. data/test/plugin/test_parser_multiline.rb +100 -0
  284. data/test/plugin/test_parser_nginx.rb +48 -0
  285. data/test/plugin/test_parser_none.rb +53 -0
  286. data/test/plugin/test_parser_regexp.rb +277 -0
  287. data/test/plugin/test_parser_syslog.rb +66 -0
  288. data/test/plugin/test_parser_time.rb +46 -0
  289. data/test/plugin/test_parser_tsv.rb +121 -0
  290. data/test/plugin/test_storage.rb +167 -0
  291. data/test/plugin/test_storage_local.rb +8 -0
  292. data/test/plugin/test_string_util.rb +26 -0
  293. data/test/plugin_helper/test_child_process.rb +608 -0
  294. data/test/plugin_helper/test_compat_parameters.rb +242 -0
  295. data/test/plugin_helper/test_event_emitter.rb +51 -0
  296. data/test/plugin_helper/test_event_loop.rb +52 -0
  297. data/test/plugin_helper/test_formatter.rb +252 -0
  298. data/test/plugin_helper/test_inject.rb +487 -0
  299. data/test/plugin_helper/test_parser.rb +263 -0
  300. data/test/plugin_helper/test_retry_state.rb +399 -0
  301. data/test/plugin_helper/test_storage.rb +521 -0
  302. data/test/plugin_helper/test_thread.rb +164 -0
  303. data/test/plugin_helper/test_timer.rb +131 -0
  304. data/test/scripts/exec_script.rb +32 -0
  305. data/test/scripts/fluent/plugin/formatter_known.rb +8 -0
  306. data/test/scripts/fluent/plugin/out_test.rb +81 -0
  307. data/test/scripts/fluent/plugin/out_test2.rb +80 -0
  308. data/test/scripts/fluent/plugin/parser_known.rb +4 -0
  309. data/test/test_config.rb +179 -0
  310. data/test/test_configdsl.rb +148 -0
  311. data/test/test_event.rb +329 -0
  312. data/test/test_event_router.rb +331 -0
  313. data/test/test_event_time.rb +184 -0
  314. data/test/test_filter.rb +121 -0
  315. data/test/test_formatter.rb +319 -0
  316. data/test/test_input.rb +31 -0
  317. data/test/test_log.rb +572 -0
  318. data/test/test_match.rb +137 -0
  319. data/test/test_mixin.rb +351 -0
  320. data/test/test_output.rb +214 -0
  321. data/test/test_plugin_classes.rb +136 -0
  322. data/test/test_plugin_helper.rb +81 -0
  323. data/test/test_process.rb +48 -0
  324. data/test/test_root_agent.rb +278 -0
  325. data/test/test_supervisor.rb +339 -0
  326. data/test/test_time_formatter.rb +186 -0
  327. data/test/test_unique_id.rb +47 -0
  328. metadata +823 -0
@@ -0,0 +1,214 @@
1
+ require_relative 'helper'
2
+ require 'fluent/test'
3
+ require 'fluent/output'
4
+ require 'fluent/output_chain'
5
+ require 'timecop'
6
+ require 'flexmock/test_unit'
7
+
8
+ module FluentOutputTest
9
+ include Fluent
10
+ include FlexMock::TestCase
11
+
12
+ class BufferedOutputTest < ::Test::Unit::TestCase
13
+ include FluentOutputTest
14
+
15
+ class << self
16
+ def startup
17
+ $LOAD_PATH.unshift File.expand_path(File.join(File.dirname(__FILE__), 'scripts'))
18
+ require 'fluent/plugin/out_test'
19
+ require 'fluent/plugin/out_test2'
20
+ end
21
+
22
+ def shutdown
23
+ $LOAD_PATH.shift
24
+ end
25
+ end
26
+
27
+ def setup
28
+ Fluent::Test.setup
29
+ end
30
+
31
+ CONFIG = %[]
32
+
33
+ def create_driver(conf=CONFIG)
34
+ Fluent::Test::BufferedOutputTestDriver.new(Fluent::BufferedOutput) do
35
+ def write(chunk)
36
+ chunk.read
37
+ end
38
+ end.configure(conf)
39
+ end
40
+
41
+ def test_configure
42
+ # default
43
+ d = create_driver
44
+ assert_equal 'memory', d.instance.buffer_type
45
+ assert_equal 60, d.instance.flush_interval
46
+ assert_equal false, d.instance.disable_retry_limit
47
+ assert_equal 17, d.instance.retry_limit
48
+ assert_equal 1.0, d.instance.retry_wait
49
+ assert_equal nil, d.instance.max_retry_wait
50
+ assert_equal 1.0, d.instance.retry_wait
51
+ assert_equal 1, d.instance.num_threads
52
+ assert_equal 1, d.instance.queued_chunk_flush_interval
53
+
54
+ # max_retry_wait
55
+ d = create_driver(CONFIG + %[max_retry_wait 4])
56
+ assert_equal 4, d.instance.max_retry_wait
57
+
58
+ # disable_retry_limit
59
+ d = create_driver(CONFIG + %[disable_retry_limit true])
60
+ assert_equal true, d.instance.disable_retry_limit
61
+
62
+ #### retry_state cares it
63
+ # # retry_wait is converted to Float for calc_retry_wait
64
+ # d = create_driver(CONFIG + %[retry_wait 1s])
65
+ # assert_equal Float, d.instance.retry_wait.class
66
+ end
67
+
68
+ class FormatterInjectTestOutput < Fluent::Output
69
+ def initialize
70
+ super
71
+ @formatter = nil
72
+ end
73
+ end
74
+ def test_start
75
+ i = FormatterInjectTestOutput.new
76
+ i.configure(config_element('ROOT', '', {}, [config_element('inject', '', {'hostname_key' => "host"})]))
77
+ assert_nothing_raised do
78
+ i.start
79
+ end
80
+ end
81
+
82
+ def create_mock_driver(conf=CONFIG)
83
+ Fluent::Test::BufferedOutputTestDriver.new(Fluent::BufferedOutput) do
84
+ attr_accessor :submit_flush_threads
85
+
86
+ def start_mock
87
+ @started = false
88
+ start
89
+ # ensure OutputThread to start successfully
90
+ submit_flush
91
+ sleep 0.5
92
+ while !@started
93
+ submit_flush
94
+ sleep 0.5
95
+ end
96
+ end
97
+
98
+ def try_flush
99
+ @started = true
100
+ @submit_flush_threads ||= {}
101
+ @submit_flush_threads[Thread.current] ||= 0
102
+ @submit_flush_threads[Thread.current] += 1
103
+ end
104
+
105
+ def write(chunk)
106
+ chunk.read
107
+ end
108
+ end.configure(conf)
109
+ end
110
+
111
+ def test_secondary
112
+ d = Fluent::Test::BufferedOutputTestDriver.new(Fluent::BufferedOutput) do
113
+ def write(chunk)
114
+ chunk.read
115
+ end
116
+ end
117
+
118
+ mock(d.instance.log).warn("secondary type should be same with primary one",
119
+ { primary: d.instance.class.to_s, secondary: "Fluent::Plugin::Test2Output" })
120
+ d.configure(CONFIG + %[
121
+ <secondary>
122
+ type test2
123
+ name c0
124
+ </secondary>
125
+ ])
126
+
127
+ assert_not_nil d.instance.instance_variable_get(:@secondary).router
128
+ end
129
+
130
+ def test_secondary_with_no_warn_log
131
+ # ObjectBufferedOutput doesn't implemnt `custom_filter`
132
+ d = Fluent::Test::BufferedOutputTestDriver.new(Fluent::ObjectBufferedOutput)
133
+
134
+ mock(d.instance.log).warn("secondary type should be same with primary one",
135
+ { primary: d.instance.class.to_s, secondary: "Fluent::Plugin::Test2Output" }).never
136
+ d.configure(CONFIG + %[
137
+ <secondary>
138
+ type test2
139
+ name c0
140
+ </secondary>
141
+ ])
142
+
143
+ assert_not_nil d.instance.instance_variable_get(:@secondary).router
144
+ end
145
+ end
146
+
147
+ class ObjectBufferedOutputTest < ::Test::Unit::TestCase
148
+ include FluentOutputTest
149
+
150
+ def setup
151
+ Fluent::Test.setup
152
+ end
153
+
154
+ CONFIG = %[]
155
+
156
+ def create_driver(conf=CONFIG)
157
+ Fluent::Test::OutputTestDriver.new(Fluent::ObjectBufferedOutput).configure(conf, true)
158
+ end
159
+
160
+ def test_configure
161
+ # default
162
+ d = create_driver
163
+ assert_equal true, d.instance.time_as_integer
164
+ end
165
+ end
166
+
167
+ class TimeSlicedOutputTest < ::Test::Unit::TestCase
168
+ include FluentOutputTest
169
+ include FlexMock::TestCase
170
+
171
+ def setup
172
+ Fluent::Test.setup
173
+ FileUtils.rm_rf(TMP_DIR)
174
+ FileUtils.mkdir_p(TMP_DIR)
175
+ end
176
+
177
+ TMP_DIR = File.expand_path(File.dirname(__FILE__) + "/tmp/time_sliced_output")
178
+
179
+ CONFIG = %[
180
+ buffer_path #{TMP_DIR}/foo
181
+ time_slice_format %Y%m%d
182
+ ]
183
+
184
+ class TimeSlicedOutputTestPlugin < Fluent::TimeSlicedOutput
185
+ def format(tag, time, record)
186
+ ''
187
+ end
188
+ end
189
+
190
+ def create_driver(conf=CONFIG)
191
+ Fluent::Test::TimeSlicedOutputTestDriver.new(TimeSlicedOutputTestPlugin).configure(conf, true)
192
+ end
193
+
194
+ sub_test_case "test emit" do
195
+ setup do
196
+ @time = Time.parse("2011-01-02 13:14:15 UTC")
197
+ Timecop.freeze(@time)
198
+ end
199
+
200
+ teardown do
201
+ Timecop.return
202
+ end
203
+
204
+ test "emit with invalid event" do
205
+ d = create_driver
206
+ d.instance.start
207
+ d.instance.after_start
208
+ assert_raise ArgumentError, "time must be a Fluent::EventTime (or Integer)" do
209
+ d.instance.emit_events('test', OneEventStream.new('string', 10))
210
+ end
211
+ end
212
+ end
213
+ end
214
+ end
@@ -0,0 +1,136 @@
1
+ require_relative 'helper'
2
+ require 'fluent/plugin/input'
3
+ require 'fluent/plugin/output'
4
+ require 'fluent/plugin/filter'
5
+
6
+ module FluentTest
7
+ class FluentTestInput < ::Fluent::Plugin::Input
8
+ ::Fluent::Plugin.register_input('test_in', self)
9
+
10
+ attr_reader :started
11
+
12
+ def start
13
+ super
14
+ @started = true
15
+ end
16
+
17
+ def shutdown
18
+ @started = false
19
+ super
20
+ end
21
+ end
22
+
23
+ class FluentTestOutput < ::Fluent::Plugin::Output
24
+ ::Fluent::Plugin.register_output('test_out', self)
25
+
26
+ def initialize
27
+ super
28
+ @events = Hash.new { |h, k| h[k] = [] }
29
+ end
30
+
31
+ attr_reader :events
32
+ attr_reader :started
33
+
34
+ def start
35
+ super
36
+ @started = true
37
+ end
38
+
39
+ def shutdown
40
+ @started = false
41
+ super
42
+ end
43
+
44
+ def process(tag, es)
45
+ es.each do |time, record|
46
+ @events[tag] << record
47
+ end
48
+ end
49
+ end
50
+
51
+ class FluentTestErrorOutput < ::Fluent::Plugin::Output
52
+ ::Fluent::Plugin.register_output('test_out_error', self)
53
+
54
+ def format(tag, time, record)
55
+ raise "emit error!"
56
+ end
57
+
58
+ def write(chunk)
59
+ raise "chunk error!"
60
+ end
61
+ end
62
+
63
+ class FluentCompatTestFilter < ::Fluent::Filter
64
+ ::Fluent::Plugin.register_filter('test_compat_filter', self)
65
+
66
+ def initialize(field = '__test__')
67
+ super()
68
+ @num = 0
69
+ @field = field
70
+ end
71
+
72
+ attr_reader :num
73
+ attr_reader :started
74
+
75
+ def start
76
+ super
77
+ @started = true
78
+ end
79
+
80
+ def shutdown
81
+ @started = false
82
+ super
83
+ end
84
+
85
+ def filter(tag, time, record)
86
+ record[@field] = @num
87
+ @num += 1
88
+ record
89
+ end
90
+ end
91
+
92
+ class FluentTestFilter < ::Fluent::Plugin::Filter
93
+ ::Fluent::Plugin.register_filter('test_filter', self)
94
+
95
+ def initialize(field = '__test__')
96
+ super()
97
+ @num = 0
98
+ @field = field
99
+ end
100
+
101
+ attr_reader :num
102
+ attr_reader :started
103
+
104
+ def start
105
+ super
106
+ @started = true
107
+ end
108
+
109
+ def shutdown
110
+ @started = false
111
+ super
112
+ end
113
+
114
+ def filter(tag, time, record)
115
+ record[@field] = @num
116
+ @num += 1
117
+ record
118
+ end
119
+ end
120
+
121
+ class TestEmitErrorHandler
122
+ def initialize
123
+ @events = Hash.new { |h, k| h[k] = [] }
124
+ end
125
+
126
+ attr_reader :events
127
+
128
+ def handle_emit_error(tag, time, record, error)
129
+ @events[tag] << record
130
+ end
131
+
132
+ def handle_emits_error(tag, es, error)
133
+ es.each { |time,record| handle_emit_error(tag, time, record, error) }
134
+ end
135
+ end
136
+ end
@@ -0,0 +1,81 @@
1
+ require_relative 'helper'
2
+ require 'fluent/plugin_helper'
3
+ require 'fluent/plugin/base'
4
+
5
+ class ConfigTest < Test::Unit::TestCase
6
+ module FluentTest; end
7
+
8
+ sub_test_case 'Fluent::Plugin::Base.helpers method works as shortcut to include helper modules' do
9
+ class FluentTest::PluginTest1 < Fluent::Plugin::TestBase
10
+ helpers :event_emitter
11
+ end
12
+ class FluentTest::PluginTest2 < Fluent::Plugin::TestBase
13
+ helpers :thread
14
+ end
15
+ class FluentTest::PluginTest3 < Fluent::Plugin::TestBase
16
+ helpers :event_loop
17
+ end
18
+ class FluentTest::PluginTest4 < Fluent::Plugin::TestBase
19
+ helpers :timer
20
+ end
21
+ class FluentTest::PluginTest5 < Fluent::Plugin::TestBase
22
+ helpers :child_process
23
+ end
24
+ class FluentTest::PluginTest6 < Fluent::Plugin::TestBase
25
+ helpers :retry_state
26
+ end
27
+ class FluentTest::PluginTest0 < Fluent::Plugin::TestBase
28
+ helpers :event_emitter, :thread, :event_loop, :timer, :child_process, :retry_state
29
+ end
30
+
31
+ test 'plugin can include helper event_emitter' do
32
+ assert FluentTest::PluginTest1.include?(Fluent::PluginHelper::EventEmitter)
33
+ p1 = FluentTest::PluginTest1.new
34
+ assert p1.respond_to?(:has_router?)
35
+ assert p1.has_router?
36
+ end
37
+
38
+ test 'plugin can include helper thread' do
39
+ assert FluentTest::PluginTest2.include?(Fluent::PluginHelper::Thread)
40
+ p2 = FluentTest::PluginTest2.new
41
+ assert p2.respond_to?(:thread_current_running?)
42
+ assert p2.respond_to?(:thread_create)
43
+ end
44
+
45
+ test 'plugin can include helper event_loop' do
46
+ assert FluentTest::PluginTest3.include?(Fluent::PluginHelper::EventLoop)
47
+ p3 = FluentTest::PluginTest3.new
48
+ assert p3.respond_to?(:event_loop_attach)
49
+ assert p3.respond_to?(:event_loop_running?)
50
+ end
51
+
52
+ test 'plugin can include helper timer' do
53
+ assert FluentTest::PluginTest4.include?(Fluent::PluginHelper::Timer)
54
+ p4 = FluentTest::PluginTest4.new
55
+ assert p4.respond_to?(:timer_execute)
56
+ end
57
+
58
+ test 'plugin can include helper child_process' do
59
+ assert FluentTest::PluginTest5.include?(Fluent::PluginHelper::ChildProcess)
60
+ p5 = FluentTest::PluginTest5.new
61
+ assert p5.respond_to?(:child_process_execute)
62
+ end
63
+
64
+ test 'plugin can 2 or more helpers at once' do
65
+ assert FluentTest::PluginTest0.include?(Fluent::PluginHelper::EventEmitter)
66
+ assert FluentTest::PluginTest0.include?(Fluent::PluginHelper::Thread)
67
+ assert FluentTest::PluginTest0.include?(Fluent::PluginHelper::EventLoop)
68
+ assert FluentTest::PluginTest0.include?(Fluent::PluginHelper::Timer)
69
+ assert FluentTest::PluginTest0.include?(Fluent::PluginHelper::ChildProcess)
70
+
71
+ p0 = FluentTest::PluginTest0.new
72
+ assert p0.respond_to?(:child_process_execute)
73
+ assert p0.respond_to?(:timer_execute)
74
+ assert p0.respond_to?(:event_loop_attach)
75
+ assert p0.respond_to?(:event_loop_running?)
76
+ assert p0.respond_to?(:thread_current_running?)
77
+ assert p0.respond_to?(:thread_create)
78
+ assert p0.respond_to?(:has_router?)
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,48 @@
1
+ require_relative 'helper'
2
+ require 'fluent/test'
3
+ require 'fluent/event'
4
+ require 'fluent/process'
5
+ require 'stringio'
6
+ require 'msgpack'
7
+
8
+ module FluentProcessTest
9
+ class DelayedForwarderTest < Test::Unit::TestCase
10
+ include Fluent
11
+
12
+ test 'run and emit' do
13
+ io = StringIO.new
14
+ fwd = Fluent::DetachProcessManager::DelayedForwarder.new(io, 0.001)
15
+
16
+ num_events_per_tag = 5000
17
+ num_tags = 20
18
+
19
+ now = Time.now.to_i
20
+ record = {'key' => 'value'}
21
+ (num_tags * num_events_per_tag).times do |i|
22
+ tag = "foo.bar#{i % num_tags}"
23
+ fwd.emit(tag, OneEventStream.new(now, record))
24
+ end
25
+ sleep 0.5
26
+
27
+ io.pos = 0
28
+
29
+ tags = {}
30
+ MessagePack::Unpacker.new(io).each do |tag_and_msgpacks|
31
+ tag, ms = *tag_and_msgpacks
32
+ tags[tag] ||= ''
33
+ tags[tag] << ms
34
+ end
35
+
36
+ assert_equal(num_tags, tags.size)
37
+ num_tags.times do |i|
38
+ tag = "foo.bar#{i % num_tags}"
39
+ ms = tags[tag]
40
+ count = 0
41
+ MessagePack::Unpacker.new(StringIO.new(ms)).each do |x|
42
+ count += 1
43
+ end
44
+ assert_equal(num_events_per_tag, count)
45
+ end
46
+ end
47
+ end
48
+ end