fluentd 1.16.5-x64-mingw-ucrt → 1.17.1-x64-mingw-ucrt

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (268) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +88 -0
  3. data/README.md +2 -1
  4. data/Rakefile +1 -1
  5. data/SECURITY.md +2 -2
  6. data/fluent.conf +14 -14
  7. data/lib/fluent/command/binlog_reader.rb +1 -1
  8. data/lib/fluent/command/cap_ctl.rb +4 -4
  9. data/lib/fluent/compat/call_super_mixin.rb +3 -3
  10. data/lib/fluent/compat/propagate_default.rb +4 -4
  11. data/lib/fluent/config/configure_proxy.rb +2 -2
  12. data/lib/fluent/config/types.rb +1 -1
  13. data/lib/fluent/config/yaml_parser/parser.rb +4 -0
  14. data/lib/fluent/configurable.rb +2 -2
  15. data/lib/fluent/counter/mutex_hash.rb +1 -1
  16. data/lib/fluent/fluent_log_event_router.rb +0 -2
  17. data/lib/fluent/log/console_adapter.rb +4 -2
  18. data/lib/fluent/plugin/buf_file.rb +1 -1
  19. data/lib/fluent/plugin/buffer/file_chunk.rb +1 -1
  20. data/lib/fluent/plugin/buffer/file_single_chunk.rb +2 -3
  21. data/lib/fluent/plugin/filter_parser.rb +26 -8
  22. data/lib/fluent/plugin/in_exec.rb +14 -2
  23. data/lib/fluent/plugin/in_http.rb +19 -54
  24. data/lib/fluent/plugin/in_sample.rb +13 -7
  25. data/lib/fluent/plugin/in_tail.rb +99 -25
  26. data/lib/fluent/plugin/out_copy.rb +1 -1
  27. data/lib/fluent/plugin/out_file.rb +8 -0
  28. data/lib/fluent/plugin/out_http.rb +137 -13
  29. data/lib/fluent/plugin/owned_by_mixin.rb +0 -1
  30. data/lib/fluent/plugin/parser_json.rb +26 -17
  31. data/lib/fluent/plugin/parser_msgpack.rb +24 -3
  32. data/lib/fluent/plugin_helper/http_server/server.rb +1 -1
  33. data/lib/fluent/plugin_helper/metrics.rb +2 -2
  34. data/lib/fluent/registry.rb +6 -6
  35. data/lib/fluent/test/output_test.rb +1 -1
  36. data/lib/fluent/unique_id.rb +1 -1
  37. data/lib/fluent/version.rb +1 -1
  38. data/templates/new_gem/fluent-plugin.gemspec.erb +6 -5
  39. metadata +109 -459
  40. data/.github/ISSUE_TEMPLATE/bug_report.yml +0 -71
  41. data/.github/ISSUE_TEMPLATE/config.yml +0 -5
  42. data/.github/ISSUE_TEMPLATE/feature_request.yml +0 -39
  43. data/.github/ISSUE_TEMPLATE.md +0 -17
  44. data/.github/PULL_REQUEST_TEMPLATE.md +0 -14
  45. data/.github/workflows/stale-actions.yml +0 -24
  46. data/.github/workflows/test.yml +0 -32
  47. data/.gitignore +0 -30
  48. data/Gemfile +0 -9
  49. data/fluentd.gemspec +0 -54
  50. data/test/command/test_binlog_reader.rb +0 -362
  51. data/test/command/test_ca_generate.rb +0 -70
  52. data/test/command/test_cap_ctl.rb +0 -100
  53. data/test/command/test_cat.rb +0 -128
  54. data/test/command/test_ctl.rb +0 -56
  55. data/test/command/test_fluentd.rb +0 -1291
  56. data/test/command/test_plugin_config_formatter.rb +0 -397
  57. data/test/command/test_plugin_generator.rb +0 -109
  58. data/test/compat/test_calls_super.rb +0 -166
  59. data/test/compat/test_parser.rb +0 -92
  60. data/test/config/assertions.rb +0 -42
  61. data/test/config/test_config_parser.rb +0 -551
  62. data/test/config/test_configurable.rb +0 -1784
  63. data/test/config/test_configure_proxy.rb +0 -604
  64. data/test/config/test_dsl.rb +0 -415
  65. data/test/config/test_element.rb +0 -518
  66. data/test/config/test_literal_parser.rb +0 -309
  67. data/test/config/test_plugin_configuration.rb +0 -56
  68. data/test/config/test_section.rb +0 -191
  69. data/test/config/test_system_config.rb +0 -195
  70. data/test/config/test_types.rb +0 -408
  71. data/test/counter/test_client.rb +0 -563
  72. data/test/counter/test_error.rb +0 -44
  73. data/test/counter/test_mutex_hash.rb +0 -179
  74. data/test/counter/test_server.rb +0 -589
  75. data/test/counter/test_store.rb +0 -258
  76. data/test/counter/test_validator.rb +0 -137
  77. data/test/helper.rb +0 -155
  78. data/test/helpers/fuzzy_assert.rb +0 -89
  79. data/test/helpers/process_extenstion.rb +0 -33
  80. data/test/log/test_console_adapter.rb +0 -110
  81. data/test/plugin/data/2010/01/20100102-030405.log +0 -0
  82. data/test/plugin/data/2010/01/20100102-030406.log +0 -0
  83. data/test/plugin/data/2010/01/20100102.log +0 -0
  84. data/test/plugin/data/log/bar +0 -0
  85. data/test/plugin/data/log/foo/bar.log +0 -0
  86. data/test/plugin/data/log/foo/bar2 +0 -0
  87. data/test/plugin/data/log/test.log +0 -0
  88. data/test/plugin/data/sd_file/config +0 -11
  89. data/test/plugin/data/sd_file/config.json +0 -17
  90. data/test/plugin/data/sd_file/config.yaml +0 -11
  91. data/test/plugin/data/sd_file/config.yml +0 -11
  92. data/test/plugin/data/sd_file/invalid_config.yml +0 -7
  93. data/test/plugin/in_tail/test_fifo.rb +0 -121
  94. data/test/plugin/in_tail/test_io_handler.rb +0 -150
  95. data/test/plugin/in_tail/test_position_file.rb +0 -346
  96. data/test/plugin/out_forward/test_ack_handler.rb +0 -140
  97. data/test/plugin/out_forward/test_connection_manager.rb +0 -145
  98. data/test/plugin/out_forward/test_handshake_protocol.rb +0 -112
  99. data/test/plugin/out_forward/test_load_balancer.rb +0 -106
  100. data/test/plugin/out_forward/test_socket_cache.rb +0 -174
  101. data/test/plugin/test_bare_output.rb +0 -131
  102. data/test/plugin/test_base.rb +0 -247
  103. data/test/plugin/test_buf_file.rb +0 -1314
  104. data/test/plugin/test_buf_file_single.rb +0 -898
  105. data/test/plugin/test_buf_memory.rb +0 -42
  106. data/test/plugin/test_buffer.rb +0 -1493
  107. data/test/plugin/test_buffer_chunk.rb +0 -209
  108. data/test/plugin/test_buffer_file_chunk.rb +0 -871
  109. data/test/plugin/test_buffer_file_single_chunk.rb +0 -611
  110. data/test/plugin/test_buffer_memory_chunk.rb +0 -339
  111. data/test/plugin/test_compressable.rb +0 -87
  112. data/test/plugin/test_file_util.rb +0 -96
  113. data/test/plugin/test_filter.rb +0 -368
  114. data/test/plugin/test_filter_grep.rb +0 -697
  115. data/test/plugin/test_filter_parser.rb +0 -731
  116. data/test/plugin/test_filter_record_transformer.rb +0 -577
  117. data/test/plugin/test_filter_stdout.rb +0 -207
  118. data/test/plugin/test_formatter_csv.rb +0 -136
  119. data/test/plugin/test_formatter_hash.rb +0 -38
  120. data/test/plugin/test_formatter_json.rb +0 -61
  121. data/test/plugin/test_formatter_ltsv.rb +0 -70
  122. data/test/plugin/test_formatter_msgpack.rb +0 -28
  123. data/test/plugin/test_formatter_out_file.rb +0 -116
  124. data/test/plugin/test_formatter_single_value.rb +0 -44
  125. data/test/plugin/test_formatter_tsv.rb +0 -76
  126. data/test/plugin/test_in_debug_agent.rb +0 -49
  127. data/test/plugin/test_in_exec.rb +0 -261
  128. data/test/plugin/test_in_forward.rb +0 -1178
  129. data/test/plugin/test_in_gc_stat.rb +0 -62
  130. data/test/plugin/test_in_http.rb +0 -1102
  131. data/test/plugin/test_in_monitor_agent.rb +0 -922
  132. data/test/plugin/test_in_object_space.rb +0 -66
  133. data/test/plugin/test_in_sample.rb +0 -190
  134. data/test/plugin/test_in_syslog.rb +0 -505
  135. data/test/plugin/test_in_tail.rb +0 -3288
  136. data/test/plugin/test_in_tcp.rb +0 -328
  137. data/test/plugin/test_in_udp.rb +0 -296
  138. data/test/plugin/test_in_unix.rb +0 -181
  139. data/test/plugin/test_input.rb +0 -137
  140. data/test/plugin/test_metadata.rb +0 -89
  141. data/test/plugin/test_metrics.rb +0 -294
  142. data/test/plugin/test_metrics_local.rb +0 -96
  143. data/test/plugin/test_multi_output.rb +0 -204
  144. data/test/plugin/test_out_copy.rb +0 -308
  145. data/test/plugin/test_out_exec.rb +0 -312
  146. data/test/plugin/test_out_exec_filter.rb +0 -606
  147. data/test/plugin/test_out_file.rb +0 -1038
  148. data/test/plugin/test_out_forward.rb +0 -1349
  149. data/test/plugin/test_out_http.rb +0 -429
  150. data/test/plugin/test_out_null.rb +0 -105
  151. data/test/plugin/test_out_relabel.rb +0 -28
  152. data/test/plugin/test_out_roundrobin.rb +0 -146
  153. data/test/plugin/test_out_secondary_file.rb +0 -458
  154. data/test/plugin/test_out_stdout.rb +0 -205
  155. data/test/plugin/test_out_stream.rb +0 -103
  156. data/test/plugin/test_output.rb +0 -1334
  157. data/test/plugin/test_output_as_buffered.rb +0 -2024
  158. data/test/plugin/test_output_as_buffered_backup.rb +0 -363
  159. data/test/plugin/test_output_as_buffered_compress.rb +0 -179
  160. data/test/plugin/test_output_as_buffered_overflow.rb +0 -250
  161. data/test/plugin/test_output_as_buffered_retries.rb +0 -966
  162. data/test/plugin/test_output_as_buffered_secondary.rb +0 -882
  163. data/test/plugin/test_output_as_standard.rb +0 -374
  164. data/test/plugin/test_owned_by.rb +0 -35
  165. data/test/plugin/test_parser.rb +0 -399
  166. data/test/plugin/test_parser_apache.rb +0 -42
  167. data/test/plugin/test_parser_apache2.rb +0 -47
  168. data/test/plugin/test_parser_apache_error.rb +0 -45
  169. data/test/plugin/test_parser_csv.rb +0 -200
  170. data/test/plugin/test_parser_json.rb +0 -138
  171. data/test/plugin/test_parser_labeled_tsv.rb +0 -160
  172. data/test/plugin/test_parser_multiline.rb +0 -111
  173. data/test/plugin/test_parser_nginx.rb +0 -88
  174. data/test/plugin/test_parser_none.rb +0 -52
  175. data/test/plugin/test_parser_regexp.rb +0 -284
  176. data/test/plugin/test_parser_syslog.rb +0 -650
  177. data/test/plugin/test_parser_tsv.rb +0 -122
  178. data/test/plugin/test_sd_file.rb +0 -228
  179. data/test/plugin/test_sd_srv.rb +0 -230
  180. data/test/plugin/test_storage.rb +0 -167
  181. data/test/plugin/test_storage_local.rb +0 -335
  182. data/test/plugin/test_string_util.rb +0 -26
  183. data/test/plugin_helper/data/cert/cert-key.pem +0 -27
  184. data/test/plugin_helper/data/cert/cert-with-CRLF.pem +0 -19
  185. data/test/plugin_helper/data/cert/cert-with-no-newline.pem +0 -19
  186. data/test/plugin_helper/data/cert/cert.pem +0 -19
  187. data/test/plugin_helper/data/cert/cert_chains/ca-cert-key.pem +0 -27
  188. data/test/plugin_helper/data/cert/cert_chains/ca-cert.pem +0 -20
  189. data/test/plugin_helper/data/cert/cert_chains/cert-key.pem +0 -27
  190. data/test/plugin_helper/data/cert/cert_chains/cert.pem +0 -40
  191. data/test/plugin_helper/data/cert/empty.pem +0 -0
  192. data/test/plugin_helper/data/cert/generate_cert.rb +0 -125
  193. data/test/plugin_helper/data/cert/with_ca/ca-cert-key-pass.pem +0 -30
  194. data/test/plugin_helper/data/cert/with_ca/ca-cert-key.pem +0 -27
  195. data/test/plugin_helper/data/cert/with_ca/ca-cert-pass.pem +0 -20
  196. data/test/plugin_helper/data/cert/with_ca/ca-cert.pem +0 -20
  197. data/test/plugin_helper/data/cert/with_ca/cert-key-pass.pem +0 -30
  198. data/test/plugin_helper/data/cert/with_ca/cert-key.pem +0 -27
  199. data/test/plugin_helper/data/cert/with_ca/cert-pass.pem +0 -21
  200. data/test/plugin_helper/data/cert/with_ca/cert.pem +0 -21
  201. data/test/plugin_helper/data/cert/without_ca/cert-key-pass.pem +0 -30
  202. data/test/plugin_helper/data/cert/without_ca/cert-key.pem +0 -27
  203. data/test/plugin_helper/data/cert/without_ca/cert-pass.pem +0 -20
  204. data/test/plugin_helper/data/cert/without_ca/cert.pem +0 -20
  205. data/test/plugin_helper/http_server/test_app.rb +0 -65
  206. data/test/plugin_helper/http_server/test_route.rb +0 -32
  207. data/test/plugin_helper/service_discovery/test_manager.rb +0 -93
  208. data/test/plugin_helper/service_discovery/test_round_robin_balancer.rb +0 -21
  209. data/test/plugin_helper/test_cert_option.rb +0 -25
  210. data/test/plugin_helper/test_child_process.rb +0 -862
  211. data/test/plugin_helper/test_compat_parameters.rb +0 -358
  212. data/test/plugin_helper/test_event_emitter.rb +0 -80
  213. data/test/plugin_helper/test_event_loop.rb +0 -52
  214. data/test/plugin_helper/test_extract.rb +0 -194
  215. data/test/plugin_helper/test_formatter.rb +0 -255
  216. data/test/plugin_helper/test_http_server_helper.rb +0 -372
  217. data/test/plugin_helper/test_inject.rb +0 -561
  218. data/test/plugin_helper/test_metrics.rb +0 -137
  219. data/test/plugin_helper/test_parser.rb +0 -264
  220. data/test/plugin_helper/test_record_accessor.rb +0 -238
  221. data/test/plugin_helper/test_retry_state.rb +0 -1006
  222. data/test/plugin_helper/test_server.rb +0 -1895
  223. data/test/plugin_helper/test_service_discovery.rb +0 -165
  224. data/test/plugin_helper/test_socket.rb +0 -146
  225. data/test/plugin_helper/test_storage.rb +0 -542
  226. data/test/plugin_helper/test_thread.rb +0 -164
  227. data/test/plugin_helper/test_timer.rb +0 -130
  228. data/test/scripts/exec_script.rb +0 -32
  229. data/test/scripts/fluent/plugin/formatter1/formatter_test1.rb +0 -7
  230. data/test/scripts/fluent/plugin/formatter2/formatter_test2.rb +0 -7
  231. data/test/scripts/fluent/plugin/formatter_known.rb +0 -8
  232. data/test/scripts/fluent/plugin/out_test.rb +0 -81
  233. data/test/scripts/fluent/plugin/out_test2.rb +0 -80
  234. data/test/scripts/fluent/plugin/parser_known.rb +0 -4
  235. data/test/test_capability.rb +0 -74
  236. data/test/test_clock.rb +0 -164
  237. data/test/test_config.rb +0 -369
  238. data/test/test_configdsl.rb +0 -148
  239. data/test/test_daemonizer.rb +0 -91
  240. data/test/test_engine.rb +0 -203
  241. data/test/test_event.rb +0 -531
  242. data/test/test_event_router.rb +0 -348
  243. data/test/test_event_time.rb +0 -199
  244. data/test/test_file_wrapper.rb +0 -53
  245. data/test/test_filter.rb +0 -121
  246. data/test/test_fluent_log_event_router.rb +0 -99
  247. data/test/test_formatter.rb +0 -369
  248. data/test/test_input.rb +0 -31
  249. data/test/test_log.rb +0 -1076
  250. data/test/test_match.rb +0 -148
  251. data/test/test_mixin.rb +0 -351
  252. data/test/test_msgpack_factory.rb +0 -50
  253. data/test/test_oj_options.rb +0 -55
  254. data/test/test_output.rb +0 -278
  255. data/test/test_plugin.rb +0 -251
  256. data/test/test_plugin_classes.rb +0 -370
  257. data/test/test_plugin_helper.rb +0 -81
  258. data/test/test_plugin_id.rb +0 -119
  259. data/test/test_process.rb +0 -14
  260. data/test/test_root_agent.rb +0 -951
  261. data/test/test_static_config_analysis.rb +0 -177
  262. data/test/test_supervisor.rb +0 -821
  263. data/test/test_test_drivers.rb +0 -136
  264. data/test/test_time_formatter.rb +0 -301
  265. data/test/test_time_parser.rb +0 -362
  266. data/test/test_tls.rb +0 -65
  267. data/test/test_unique_id.rb +0 -47
  268. data/test/test_variable_store.rb +0 -65
data/test/test_output.rb DELETED
@@ -1,278 +0,0 @@
1
- require_relative 'helper'
2
- require 'fluent/test'
3
- require 'fluent/output'
4
- require 'fluent/output_chain'
5
- require 'fluent/plugin/buffer'
6
- require 'timecop'
7
- require 'flexmock/test_unit'
8
-
9
- module FluentOutputTest
10
- include Fluent
11
- include FlexMock::TestCase
12
-
13
- class BufferedOutputTest < ::Test::Unit::TestCase
14
- include FluentOutputTest
15
-
16
- class << self
17
- def startup
18
- $LOAD_PATH.unshift File.expand_path(File.join(File.dirname(__FILE__), 'scripts'))
19
- require 'fluent/plugin/out_test'
20
- require 'fluent/plugin/out_test2'
21
- end
22
-
23
- def shutdown
24
- $LOAD_PATH.shift
25
- end
26
- end
27
-
28
- def setup
29
- Fluent::Test.setup
30
- end
31
-
32
- CONFIG = %[]
33
-
34
- def create_driver(conf=CONFIG)
35
- Fluent::Test::BufferedOutputTestDriver.new(Fluent::BufferedOutput) do
36
- def write(chunk)
37
- chunk.read
38
- end
39
- end.configure(conf)
40
- end
41
-
42
- def test_configure
43
- # default
44
- d = create_driver
45
- assert_equal 'memory', d.instance.buffer_type
46
- assert_equal 60, d.instance.flush_interval
47
- assert_equal false, d.instance.disable_retry_limit
48
- assert_equal 17, d.instance.retry_limit
49
- assert_equal 1.0, d.instance.retry_wait
50
- assert_equal nil, d.instance.max_retry_wait
51
- assert_equal 1.0, d.instance.retry_wait
52
- assert_equal 1, d.instance.num_threads
53
- assert_equal 1, d.instance.queued_chunk_flush_interval
54
-
55
- # max_retry_wait
56
- d = create_driver(CONFIG + %[max_retry_wait 4])
57
- assert_equal 4, d.instance.max_retry_wait
58
-
59
- # disable_retry_limit
60
- d = create_driver(CONFIG + %[disable_retry_limit true])
61
- assert_equal true, d.instance.disable_retry_limit
62
-
63
- #### retry_state cares it
64
- # # retry_wait is converted to Float for calc_retry_wait
65
- # d = create_driver(CONFIG + %[retry_wait 1s])
66
- # assert_equal Float, d.instance.retry_wait.class
67
- end
68
-
69
- class FormatterInjectTestOutput < Fluent::Output
70
- def initialize
71
- super
72
- @formatter = nil
73
- end
74
- end
75
- def test_start
76
- i = FormatterInjectTestOutput.new
77
- i.configure(config_element('ROOT', '', {}, [config_element('inject', '', {'hostname_key' => "host"})]))
78
- assert_nothing_raised do
79
- i.start
80
- end
81
- end
82
-
83
- def create_mock_driver(conf=CONFIG)
84
- Fluent::Test::BufferedOutputTestDriver.new(Fluent::BufferedOutput) do
85
- attr_accessor :submit_flush_threads
86
-
87
- def start_mock
88
- @started = false
89
- start
90
- # ensure OutputThread to start successfully
91
- submit_flush
92
- sleep 0.5
93
- while !@started
94
- submit_flush
95
- sleep 0.5
96
- end
97
- end
98
-
99
- def try_flush
100
- @started = true
101
- @submit_flush_threads ||= {}
102
- @submit_flush_threads[Thread.current] ||= 0
103
- @submit_flush_threads[Thread.current] += 1
104
- end
105
-
106
- def write(chunk)
107
- chunk.read
108
- end
109
- end.configure(conf)
110
- end
111
-
112
- def test_secondary
113
- d = Fluent::Test::BufferedOutputTestDriver.new(Fluent::BufferedOutput) do
114
- def write(chunk)
115
- chunk.read
116
- end
117
- end
118
-
119
- mock(d.instance.log).warn("Use different plugin for secondary. Check the plugin works with primary like secondary_file",
120
- primary: d.instance.class.to_s, secondary: "Fluent::Plugin::Test2Output")
121
- d.configure(CONFIG + %[
122
- <secondary>
123
- type test2
124
- name c0
125
- </secondary>
126
- ])
127
-
128
- assert_not_nil d.instance.instance_variable_get(:@secondary).router
129
- end
130
-
131
- def test_secondary_with_no_warn_log
132
- # ObjectBufferedOutput doesn't implement `custom_filter`
133
- d = Fluent::Test::BufferedOutputTestDriver.new(Fluent::ObjectBufferedOutput)
134
-
135
- mock(d.instance.log).warn("Use different plugin for secondary. Check the plugin works with primary like secondary_file",
136
- primary: d.instance.class.to_s, secondary: "Fluent::Plugin::Test2Output").never
137
- d.configure(CONFIG + %[
138
- <secondary>
139
- type test2
140
- name c0
141
- </secondary>
142
- ])
143
-
144
- assert_not_nil d.instance.instance_variable_get(:@secondary).router
145
- end
146
-
147
- test 'BufferQueueLimitError compatibility' do
148
- assert_equal Fluent::Plugin::Buffer::BufferOverflowError, Fluent::BufferQueueLimitError
149
- end
150
- end
151
-
152
- class ObjectBufferedOutputTest < ::Test::Unit::TestCase
153
- include FluentOutputTest
154
-
155
- def setup
156
- Fluent::Test.setup
157
- end
158
-
159
- CONFIG = %[]
160
-
161
- def create_driver(conf=CONFIG)
162
- Fluent::Test::OutputTestDriver.new(Fluent::ObjectBufferedOutput).configure(conf, true)
163
- end
164
-
165
- def test_configure
166
- # default
167
- d = create_driver
168
- assert_equal true, d.instance.time_as_integer
169
- end
170
- end
171
-
172
- class TimeSlicedOutputTest < ::Test::Unit::TestCase
173
- include FluentOutputTest
174
- include FlexMock::TestCase
175
-
176
- def setup
177
- Fluent::Test.setup
178
- FileUtils.rm_rf(TMP_DIR)
179
- FileUtils.mkdir_p(TMP_DIR)
180
- end
181
-
182
- TMP_DIR = File.expand_path(File.dirname(__FILE__) + "/tmp/time_sliced_output")
183
-
184
- CONFIG = %[
185
- buffer_path #{TMP_DIR}/foo
186
- time_slice_format %Y%m%d%H
187
- ]
188
-
189
- class TimeSlicedOutputTestPlugin < Fluent::TimeSlicedOutput
190
- attr_reader :written_chunk_keys, :errors_in_write
191
- def initialize
192
- super
193
- @written_chunk_keys = []
194
- @errors_in_write = []
195
- end
196
-
197
- def configure(conf)
198
- super
199
-
200
- @formatter = Fluent::Plugin.new_formatter('out_file')
201
- @formatter.configure(conf)
202
- end
203
-
204
- def format(tag, time, record)
205
- @formatter.format(tag, time, record)
206
- end
207
- def write(chunk)
208
- @written_chunk_keys << chunk.key
209
- true
210
- rescue => e
211
- @errors_in_write << e
212
- end
213
- end
214
-
215
- def create_driver(conf=CONFIG)
216
- Fluent::Test::TimeSlicedOutputTestDriver.new(TimeSlicedOutputTestPlugin).configure(conf, true)
217
- end
218
-
219
- data(:none => '',
220
- :utc => "utc",
221
- :localtime => 'localtime',
222
- :timezone => 'timezone +0000')
223
- test 'configure with timezone related parameters' do |param|
224
- assert_nothing_raised {
225
- create_driver(CONFIG + param)
226
- }
227
- end
228
-
229
- sub_test_case "test emit" do
230
- setup do
231
- @time = Time.parse("2011-01-02 13:14:15 UTC")
232
- Timecop.freeze(@time)
233
- @newline = if Fluent.windows?
234
- "\r\n"
235
- else
236
- "\n"
237
- end
238
- end
239
-
240
- teardown do
241
- Timecop.return
242
- end
243
-
244
- test "emit with invalid event" do
245
- d = create_driver
246
- d.instance.start
247
- d.instance.after_start
248
- assert_raise ArgumentError, "time must be a Fluent::EventTime (or Integer)" do
249
- d.instance.emit_events('test', OneEventStream.new('string', 10))
250
- end
251
- end
252
-
253
- test "plugin can get key of chunk in #write" do
254
- d = create_driver
255
- d.instance.start
256
- d.instance.after_start
257
- d.instance.emit_events('test', OneEventStream.new(event_time("2016-11-08 17:44:30 +0900"), {"message" => "yay"}))
258
- d.instance.force_flush
259
- waiting(10) do
260
- sleep 0.1 until d.instance.written_chunk_keys.size == 1
261
- end
262
- assert_equal [], d.instance.errors_in_write
263
- assert_equal ["2016110808"], d.instance.written_chunk_keys # default timezone is UTC
264
- end
265
-
266
- test "check formatted time compatibility with utc. Should Z, not +00:00" do
267
- d = create_driver(CONFIG + %[
268
- utc
269
- include_time_key
270
- ])
271
- time = Time.parse("2016-11-08 12:00:00 UTC").to_i
272
- d.emit({"a" => 1}, time)
273
- d.expect_format %[2016-11-08T12:00:00Z\ttest\t{"a":1,"time":"2016-11-08T12:00:00Z"}#{@newline}]
274
- d.run
275
- end
276
- end
277
- end
278
- end
data/test/test_plugin.rb DELETED
@@ -1,251 +0,0 @@
1
- require_relative 'helper'
2
-
3
- require 'fluent/plugin'
4
- require 'fluent/plugin/input'
5
- require 'fluent/plugin/filter'
6
- require 'fluent/plugin/output'
7
- require 'fluent/plugin/buffer'
8
- require 'fluent/plugin/parser'
9
- require 'fluent/plugin/formatter'
10
- require 'fluent/plugin/storage'
11
-
12
- class PluginTest < Test::Unit::TestCase
13
- class Dummy1Input < Fluent::Plugin::Input
14
- Fluent::Plugin.register_input('plugin_test_dummy1', self)
15
- end
16
- class Dummy2Input < Fluent::Plugin::Input
17
- Fluent::Plugin.register_input('plugin_test_dummy2', self)
18
- helpers :storage
19
- config_section :storage do
20
- config_set_default :@type, 'plugin_test_dummy1'
21
- end
22
- def multi_workers_ready?
23
- true
24
- end
25
- end
26
- class DummyFilter < Fluent::Plugin::Filter
27
- Fluent::Plugin.register_filter('plugin_test_dummy', self)
28
- helpers :parser, :formatter
29
- config_section :parse do
30
- config_set_default :@type, 'plugin_test_dummy'
31
- end
32
- config_section :format do
33
- config_set_default :@type, 'plugin_test_dummy'
34
- end
35
- def filter(tag, time, record)
36
- record
37
- end
38
- end
39
- class Dummy1Output < Fluent::Plugin::Output
40
- Fluent::Plugin.register_output('plugin_test_dummy1', self)
41
- def write(chunk)
42
- # drop
43
- end
44
- end
45
- class Dummy2Output < Fluent::Plugin::Output
46
- Fluent::Plugin.register_output('plugin_test_dummy2', self)
47
- config_section :buffer do
48
- config_set_default :@type, 'plugin_test_dummy1'
49
- end
50
- def multi_workers_ready?
51
- true
52
- end
53
- def write(chunk)
54
- # drop
55
- end
56
- end
57
- class Dummy1Buffer < Fluent::Plugin::Buffer
58
- Fluent::Plugin.register_buffer('plugin_test_dummy1', self)
59
- end
60
- class Dummy2Buffer < Fluent::Plugin::Buffer
61
- Fluent::Plugin.register_buffer('plugin_test_dummy2', self)
62
- def multi_workers_ready?
63
- false
64
- end
65
- end
66
- class DummyParser < Fluent::Plugin::Parser
67
- Fluent::Plugin.register_parser('plugin_test_dummy', self)
68
- end
69
- class DummyFormatter < Fluent::Plugin::Formatter
70
- Fluent::Plugin.register_formatter('plugin_test_dummy', self)
71
- end
72
- class Dummy1Storage < Fluent::Plugin::Storage
73
- Fluent::Plugin.register_storage('plugin_test_dummy1', self)
74
- end
75
- class Dummy2Storage < Fluent::Plugin::Storage
76
- Fluent::Plugin.register_storage('plugin_test_dummy2', self)
77
- def multi_workers_ready?
78
- false
79
- end
80
- end
81
- class DummyOwner < Fluent::Plugin::Base
82
- include Fluent::PluginId
83
- include Fluent::PluginLoggerMixin
84
- end
85
- class DummyEventRouter
86
- def emit(tag, time, record); end
87
- def emit_array(tag, array); end
88
- def emit_stream(tag, es); end
89
- def emit_error_event(tag, time, record, error); end
90
- end
91
-
92
- sub_test_case '#new_* methods' do
93
- data(
94
- input1: ['plugin_test_dummy1', Dummy1Input, :new_input],
95
- input2: ['plugin_test_dummy2', Dummy2Input, :new_input],
96
- filter: ['plugin_test_dummy', DummyFilter, :new_filter],
97
- output1: ['plugin_test_dummy1', Dummy1Output, :new_output],
98
- output2: ['plugin_test_dummy2', Dummy2Output, :new_output],
99
- )
100
- test 'returns plugin instances of registered plugin classes' do |(type, klass, m)|
101
- instance = Fluent::Plugin.__send__(m, type)
102
- assert_kind_of klass, instance
103
- end
104
-
105
- data(
106
- buffer1: ['plugin_test_dummy1', Dummy1Buffer, :new_buffer],
107
- buffer2: ['plugin_test_dummy2', Dummy2Buffer, :new_buffer],
108
- parser: ['plugin_test_dummy', DummyParser, :new_parser],
109
- formatter: ['plugin_test_dummy', DummyFormatter, :new_formatter],
110
- storage1: ['plugin_test_dummy1', Dummy1Storage, :new_storage],
111
- storage2: ['plugin_test_dummy2', Dummy2Storage, :new_storage],
112
- )
113
- test 'returns plugin instances of registered owned plugin classes' do |(type, klass, m)|
114
- owner = DummyOwner.new
115
- instance = Fluent::Plugin.__send__(m, type, parent: owner)
116
- assert_kind_of klass, instance
117
- end
118
-
119
- data(
120
- input1: ['plugin_test_dummy1', Dummy1Input, :new_input, nil],
121
- input2: ['plugin_test_dummy2', Dummy2Input, :new_input, nil],
122
- filter: ['plugin_test_dummy', DummyFilter, :new_filter, nil],
123
- output1: ['plugin_test_dummy1', Dummy1Output, :new_output, nil],
124
- output2: ['plugin_test_dummy2', Dummy2Output, :new_output, nil],
125
- buffer1: ['plugin_test_dummy1', Dummy1Buffer, :new_buffer, {parent: DummyOwner.new}],
126
- buffer2: ['plugin_test_dummy2', Dummy2Buffer, :new_buffer, {parent: DummyOwner.new}],
127
- parser: ['plugin_test_dummy', DummyParser, :new_parser, {parent: DummyOwner.new}],
128
- formatter: ['plugin_test_dummy', DummyFormatter, :new_formatter, {parent: DummyOwner.new}],
129
- storage1: ['plugin_test_dummy1', Dummy1Storage, :new_storage, {parent: DummyOwner.new}],
130
- storage2: ['plugin_test_dummy2', Dummy2Storage, :new_storage, {parent: DummyOwner.new}],
131
- )
132
- test 'returns plugin instances which are extended by FeatureAvailabilityChecker module' do |(type, _, m, kwargs)|
133
- instance = if kwargs
134
- Fluent::Plugin.__send__(m, type, **kwargs)
135
- else
136
- Fluent::Plugin.__send__(m, type)
137
- end
138
- assert_kind_of Fluent::Plugin::FeatureAvailabilityChecker, instance
139
- end
140
- end
141
-
142
- sub_test_case 'with default system configuration' do
143
- data(
144
- input1: ['plugin_test_dummy1', Dummy1Input, :new_input, nil],
145
- input2: ['plugin_test_dummy2', Dummy2Input, :new_input, nil],
146
- filter: ['plugin_test_dummy', DummyFilter, :new_filter, nil],
147
- output1: ['plugin_test_dummy1', Dummy1Output, :new_output, nil],
148
- output2: ['plugin_test_dummy2', Dummy2Output, :new_output, nil],
149
- buffer1: ['plugin_test_dummy1', Dummy1Buffer, :new_buffer, {parent: DummyOwner.new}],
150
- buffer2: ['plugin_test_dummy2', Dummy2Buffer, :new_buffer, {parent: DummyOwner.new}],
151
- parser: ['plugin_test_dummy', DummyParser, :new_parser, {parent: DummyOwner.new}],
152
- formatter: ['plugin_test_dummy', DummyFormatter, :new_formatter, {parent: DummyOwner.new}],
153
- storage1: ['plugin_test_dummy1', Dummy1Storage, :new_storage, {parent: DummyOwner.new}],
154
- storage2: ['plugin_test_dummy2', Dummy2Storage, :new_storage, {parent: DummyOwner.new}],
155
- )
156
- test '#configure does not raise anything' do |(type, _, m, kwargs)|
157
- instance = if kwargs
158
- Fluent::Plugin.__send__(m, type, **kwargs)
159
- else
160
- Fluent::Plugin.__send__(m, type)
161
- end
162
- if instance.respond_to?(:context_router=)
163
- instance.context_router = DummyEventRouter.new
164
- end
165
- assert_nothing_raised do
166
- instance.configure(config_element())
167
- end
168
- end
169
- end
170
-
171
- sub_test_case 'with single worker configuration' do
172
- data(
173
- input1: ['plugin_test_dummy1', Dummy1Input, :new_input, nil],
174
- input2: ['plugin_test_dummy2', Dummy2Input, :new_input, nil],
175
- filter: ['plugin_test_dummy', DummyFilter, :new_filter, nil],
176
- output1: ['plugin_test_dummy1', Dummy1Output, :new_output, nil],
177
- output2: ['plugin_test_dummy2', Dummy2Output, :new_output, nil],
178
- buffer1: ['plugin_test_dummy1', Dummy1Buffer, :new_buffer, {parent: DummyOwner.new}],
179
- buffer2: ['plugin_test_dummy2', Dummy2Buffer, :new_buffer, {parent: DummyOwner.new}],
180
- parser: ['plugin_test_dummy', DummyParser, :new_parser, {parent: DummyOwner.new}],
181
- formatter: ['plugin_test_dummy', DummyFormatter, :new_formatter, {parent: DummyOwner.new}],
182
- storage1: ['plugin_test_dummy1', Dummy1Storage, :new_storage, {parent: DummyOwner.new}],
183
- storage2: ['plugin_test_dummy2', Dummy2Storage, :new_storage, {parent: DummyOwner.new}],
184
- )
185
- test '#configure does not raise anything' do |(type, _, m, kwargs)|
186
- instance = if kwargs
187
- Fluent::Plugin.__send__(m, type, **kwargs)
188
- else
189
- Fluent::Plugin.__send__(m, type)
190
- end
191
- if instance.respond_to?(:context_router=)
192
- instance.context_router = DummyEventRouter.new
193
- end
194
- assert_nothing_raised do
195
- instance.system_config_override('workers' => 1)
196
- instance.configure(config_element())
197
- end
198
- end
199
- end
200
-
201
- sub_test_case 'with multi workers configuration' do
202
- data(
203
- input1: ['plugin_test_dummy1', Dummy1Input, :new_input],
204
- output1: ['plugin_test_dummy1', Dummy1Output, :new_output],
205
- )
206
- test '#configure raise configuration error if plugins are not ready for multi workers' do |(type, klass, new_method)|
207
- conf = config_element()
208
- instance = Fluent::Plugin.__send__(new_method, type)
209
- if instance.respond_to?(:context_router=)
210
- instance.context_router = DummyEventRouter.new
211
- end
212
- assert_raise Fluent::ConfigError.new("Plugin '#{type}' does not support multi workers configuration (#{klass})") do
213
- instance.system_config_override('workers' => 3)
214
- instance.configure(conf)
215
- end
216
- end
217
-
218
- data(
219
- input2: ['plugin_test_dummy2', Dummy2Input, :new_input], # with Dummy1Storage
220
- filter: ['plugin_test_dummy', DummyFilter, :new_filter], # with DummyParser and DummyFormatter
221
- output2: ['plugin_test_dummy2', Dummy2Output, :new_output], # with Dummy1Buffer
222
- )
223
- test '#configure does not raise any errors if plugins and its owned plugins are ready for multi workers' do |(type, _klass, new_method)|
224
- conf = config_element()
225
- instance = Fluent::Plugin.__send__(new_method, type)
226
- if instance.respond_to?(:context_router=)
227
- instance.context_router = DummyEventRouter.new
228
- end
229
- assert_nothing_raised do
230
- instance.system_config_override('workers' => 3)
231
- instance.configure(conf)
232
- end
233
- end
234
-
235
- data(
236
- input2: ['plugin_test_dummy2', Dummy2Input, :new_input, 'storage', 'plugin_test_dummy2', Dummy2Storage],
237
- output2: ['plugin_test_dummy2', Dummy2Output, :new_output, 'buffer', 'plugin_test_dummy2', Dummy2Buffer],
238
- )
239
- test '#configure raise configuration error if configured owned plugins are not ready for multi workers' do |(type, _klass, new_method, subsection, subsection_type, problematic)|
240
- conf = config_element('root', '', {}, [config_element(subsection, '', {'@type' => subsection_type})])
241
- instance = Fluent::Plugin.__send__(new_method, type)
242
- if instance.respond_to?(:context_router=)
243
- instance.context_router = DummyEventRouter.new
244
- end
245
- assert_raise Fluent::ConfigError.new("Plugin '#{subsection_type}' does not support multi workers configuration (#{problematic})") do
246
- instance.system_config_override('workers' => 3)
247
- instance.configure(conf)
248
- end
249
- end
250
- end
251
- end