fluentd 1.17.0-x86-mingw32 → 1.17.1-x86-mingw32

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 (259) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +46 -0
  3. data/README.md +1 -0
  4. data/SECURITY.md +2 -2
  5. data/fluent.conf +14 -14
  6. data/lib/fluent/command/cap_ctl.rb +4 -4
  7. data/lib/fluent/compat/call_super_mixin.rb +3 -3
  8. data/lib/fluent/compat/propagate_default.rb +4 -4
  9. data/lib/fluent/config/yaml_parser/parser.rb +4 -0
  10. data/lib/fluent/log/console_adapter.rb +4 -2
  11. data/lib/fluent/plugin/in_exec.rb +14 -2
  12. data/lib/fluent/plugin/in_http.rb +1 -1
  13. data/lib/fluent/plugin/in_sample.rb +13 -7
  14. data/lib/fluent/plugin/in_tail.rb +65 -23
  15. data/lib/fluent/plugin/out_copy.rb +1 -1
  16. data/lib/fluent/plugin/out_file.rb +8 -0
  17. data/lib/fluent/plugin/out_http.rb +12 -0
  18. data/lib/fluent/plugin/parser_json.rb +4 -12
  19. data/lib/fluent/plugin_helper/http_server/server.rb +1 -1
  20. data/lib/fluent/version.rb +1 -1
  21. data/templates/new_gem/fluent-plugin.gemspec.erb +6 -5
  22. metadata +25 -472
  23. data/.github/DISCUSSION_TEMPLATE/q-a-japanese.yml +0 -50
  24. data/.github/DISCUSSION_TEMPLATE/q-a.yml +0 -47
  25. data/.github/ISSUE_TEMPLATE/bug_report.yml +0 -71
  26. data/.github/ISSUE_TEMPLATE/config.yml +0 -5
  27. data/.github/ISSUE_TEMPLATE/feature_request.yml +0 -39
  28. data/.github/ISSUE_TEMPLATE.md +0 -17
  29. data/.github/PULL_REQUEST_TEMPLATE.md +0 -14
  30. data/.github/workflows/stale-actions.yml +0 -24
  31. data/.github/workflows/test-ruby-head.yml +0 -31
  32. data/.github/workflows/test.yml +0 -32
  33. data/.gitignore +0 -30
  34. data/Gemfile +0 -9
  35. data/fluentd.gemspec +0 -62
  36. data/test/command/test_binlog_reader.rb +0 -362
  37. data/test/command/test_ca_generate.rb +0 -70
  38. data/test/command/test_cap_ctl.rb +0 -100
  39. data/test/command/test_cat.rb +0 -128
  40. data/test/command/test_ctl.rb +0 -56
  41. data/test/command/test_fluentd.rb +0 -1291
  42. data/test/command/test_plugin_config_formatter.rb +0 -397
  43. data/test/command/test_plugin_generator.rb +0 -109
  44. data/test/compat/test_calls_super.rb +0 -166
  45. data/test/compat/test_parser.rb +0 -92
  46. data/test/config/assertions.rb +0 -42
  47. data/test/config/test_config_parser.rb +0 -551
  48. data/test/config/test_configurable.rb +0 -1784
  49. data/test/config/test_configure_proxy.rb +0 -604
  50. data/test/config/test_dsl.rb +0 -415
  51. data/test/config/test_element.rb +0 -518
  52. data/test/config/test_literal_parser.rb +0 -309
  53. data/test/config/test_plugin_configuration.rb +0 -56
  54. data/test/config/test_section.rb +0 -191
  55. data/test/config/test_system_config.rb +0 -195
  56. data/test/config/test_types.rb +0 -408
  57. data/test/counter/test_client.rb +0 -563
  58. data/test/counter/test_error.rb +0 -44
  59. data/test/counter/test_mutex_hash.rb +0 -179
  60. data/test/counter/test_server.rb +0 -589
  61. data/test/counter/test_store.rb +0 -258
  62. data/test/counter/test_validator.rb +0 -137
  63. data/test/helper.rb +0 -155
  64. data/test/helpers/fuzzy_assert.rb +0 -89
  65. data/test/helpers/process_extenstion.rb +0 -33
  66. data/test/log/test_console_adapter.rb +0 -117
  67. data/test/plugin/data/2010/01/20100102-030405.log +0 -0
  68. data/test/plugin/data/2010/01/20100102-030406.log +0 -0
  69. data/test/plugin/data/2010/01/20100102.log +0 -0
  70. data/test/plugin/data/log/bar +0 -0
  71. data/test/plugin/data/log/foo/bar.log +0 -0
  72. data/test/plugin/data/log/foo/bar2 +0 -0
  73. data/test/plugin/data/log/test.log +0 -0
  74. data/test/plugin/data/log_numeric/01.log +0 -0
  75. data/test/plugin/data/log_numeric/02.log +0 -0
  76. data/test/plugin/data/log_numeric/12.log +0 -0
  77. data/test/plugin/data/log_numeric/14.log +0 -0
  78. data/test/plugin/data/sd_file/config +0 -11
  79. data/test/plugin/data/sd_file/config.json +0 -17
  80. data/test/plugin/data/sd_file/config.yaml +0 -11
  81. data/test/plugin/data/sd_file/config.yml +0 -11
  82. data/test/plugin/data/sd_file/invalid_config.yml +0 -7
  83. data/test/plugin/in_tail/test_fifo.rb +0 -121
  84. data/test/plugin/in_tail/test_io_handler.rb +0 -150
  85. data/test/plugin/in_tail/test_position_file.rb +0 -346
  86. data/test/plugin/out_forward/test_ack_handler.rb +0 -140
  87. data/test/plugin/out_forward/test_connection_manager.rb +0 -145
  88. data/test/plugin/out_forward/test_handshake_protocol.rb +0 -112
  89. data/test/plugin/out_forward/test_load_balancer.rb +0 -106
  90. data/test/plugin/out_forward/test_socket_cache.rb +0 -174
  91. data/test/plugin/test_bare_output.rb +0 -131
  92. data/test/plugin/test_base.rb +0 -247
  93. data/test/plugin/test_buf_file.rb +0 -1314
  94. data/test/plugin/test_buf_file_single.rb +0 -898
  95. data/test/plugin/test_buf_memory.rb +0 -42
  96. data/test/plugin/test_buffer.rb +0 -1493
  97. data/test/plugin/test_buffer_chunk.rb +0 -209
  98. data/test/plugin/test_buffer_file_chunk.rb +0 -871
  99. data/test/plugin/test_buffer_file_single_chunk.rb +0 -611
  100. data/test/plugin/test_buffer_memory_chunk.rb +0 -339
  101. data/test/plugin/test_compressable.rb +0 -87
  102. data/test/plugin/test_file_util.rb +0 -96
  103. data/test/plugin/test_filter.rb +0 -368
  104. data/test/plugin/test_filter_grep.rb +0 -697
  105. data/test/plugin/test_filter_parser.rb +0 -731
  106. data/test/plugin/test_filter_record_transformer.rb +0 -577
  107. data/test/plugin/test_filter_stdout.rb +0 -207
  108. data/test/plugin/test_formatter_csv.rb +0 -136
  109. data/test/plugin/test_formatter_hash.rb +0 -38
  110. data/test/plugin/test_formatter_json.rb +0 -61
  111. data/test/plugin/test_formatter_ltsv.rb +0 -70
  112. data/test/plugin/test_formatter_msgpack.rb +0 -28
  113. data/test/plugin/test_formatter_out_file.rb +0 -116
  114. data/test/plugin/test_formatter_single_value.rb +0 -44
  115. data/test/plugin/test_formatter_tsv.rb +0 -76
  116. data/test/plugin/test_in_debug_agent.rb +0 -49
  117. data/test/plugin/test_in_exec.rb +0 -261
  118. data/test/plugin/test_in_forward.rb +0 -1178
  119. data/test/plugin/test_in_gc_stat.rb +0 -62
  120. data/test/plugin/test_in_http.rb +0 -1124
  121. data/test/plugin/test_in_monitor_agent.rb +0 -922
  122. data/test/plugin/test_in_object_space.rb +0 -66
  123. data/test/plugin/test_in_sample.rb +0 -190
  124. data/test/plugin/test_in_syslog.rb +0 -505
  125. data/test/plugin/test_in_tail.rb +0 -3429
  126. data/test/plugin/test_in_tcp.rb +0 -328
  127. data/test/plugin/test_in_udp.rb +0 -296
  128. data/test/plugin/test_in_unix.rb +0 -181
  129. data/test/plugin/test_input.rb +0 -137
  130. data/test/plugin/test_metadata.rb +0 -89
  131. data/test/plugin/test_metrics.rb +0 -294
  132. data/test/plugin/test_metrics_local.rb +0 -96
  133. data/test/plugin/test_multi_output.rb +0 -204
  134. data/test/plugin/test_out_copy.rb +0 -308
  135. data/test/plugin/test_out_exec.rb +0 -312
  136. data/test/plugin/test_out_exec_filter.rb +0 -606
  137. data/test/plugin/test_out_file.rb +0 -1038
  138. data/test/plugin/test_out_forward.rb +0 -1349
  139. data/test/plugin/test_out_http.rb +0 -557
  140. data/test/plugin/test_out_null.rb +0 -105
  141. data/test/plugin/test_out_relabel.rb +0 -28
  142. data/test/plugin/test_out_roundrobin.rb +0 -146
  143. data/test/plugin/test_out_secondary_file.rb +0 -458
  144. data/test/plugin/test_out_stdout.rb +0 -205
  145. data/test/plugin/test_out_stream.rb +0 -103
  146. data/test/plugin/test_output.rb +0 -1334
  147. data/test/plugin/test_output_as_buffered.rb +0 -2024
  148. data/test/plugin/test_output_as_buffered_backup.rb +0 -363
  149. data/test/plugin/test_output_as_buffered_compress.rb +0 -179
  150. data/test/plugin/test_output_as_buffered_overflow.rb +0 -250
  151. data/test/plugin/test_output_as_buffered_retries.rb +0 -966
  152. data/test/plugin/test_output_as_buffered_secondary.rb +0 -882
  153. data/test/plugin/test_output_as_standard.rb +0 -374
  154. data/test/plugin/test_owned_by.rb +0 -34
  155. data/test/plugin/test_parser.rb +0 -399
  156. data/test/plugin/test_parser_apache.rb +0 -42
  157. data/test/plugin/test_parser_apache2.rb +0 -47
  158. data/test/plugin/test_parser_apache_error.rb +0 -45
  159. data/test/plugin/test_parser_csv.rb +0 -200
  160. data/test/plugin/test_parser_json.rb +0 -244
  161. data/test/plugin/test_parser_labeled_tsv.rb +0 -160
  162. data/test/plugin/test_parser_msgpack.rb +0 -127
  163. data/test/plugin/test_parser_multiline.rb +0 -111
  164. data/test/plugin/test_parser_nginx.rb +0 -88
  165. data/test/plugin/test_parser_none.rb +0 -52
  166. data/test/plugin/test_parser_regexp.rb +0 -284
  167. data/test/plugin/test_parser_syslog.rb +0 -650
  168. data/test/plugin/test_parser_tsv.rb +0 -122
  169. data/test/plugin/test_sd_file.rb +0 -228
  170. data/test/plugin/test_sd_srv.rb +0 -230
  171. data/test/plugin/test_storage.rb +0 -166
  172. data/test/plugin/test_storage_local.rb +0 -335
  173. data/test/plugin/test_string_util.rb +0 -26
  174. data/test/plugin_helper/data/cert/cert-key.pem +0 -27
  175. data/test/plugin_helper/data/cert/cert-with-CRLF.pem +0 -19
  176. data/test/plugin_helper/data/cert/cert-with-no-newline.pem +0 -19
  177. data/test/plugin_helper/data/cert/cert.pem +0 -19
  178. data/test/plugin_helper/data/cert/cert_chains/ca-cert-key.pem +0 -27
  179. data/test/plugin_helper/data/cert/cert_chains/ca-cert.pem +0 -20
  180. data/test/plugin_helper/data/cert/cert_chains/cert-key.pem +0 -27
  181. data/test/plugin_helper/data/cert/cert_chains/cert.pem +0 -40
  182. data/test/plugin_helper/data/cert/empty.pem +0 -0
  183. data/test/plugin_helper/data/cert/generate_cert.rb +0 -125
  184. data/test/plugin_helper/data/cert/with_ca/ca-cert-key-pass.pem +0 -30
  185. data/test/plugin_helper/data/cert/with_ca/ca-cert-key.pem +0 -27
  186. data/test/plugin_helper/data/cert/with_ca/ca-cert-pass.pem +0 -20
  187. data/test/plugin_helper/data/cert/with_ca/ca-cert.pem +0 -20
  188. data/test/plugin_helper/data/cert/with_ca/cert-key-pass.pem +0 -30
  189. data/test/plugin_helper/data/cert/with_ca/cert-key.pem +0 -27
  190. data/test/plugin_helper/data/cert/with_ca/cert-pass.pem +0 -21
  191. data/test/plugin_helper/data/cert/with_ca/cert.pem +0 -21
  192. data/test/plugin_helper/data/cert/without_ca/cert-key-pass.pem +0 -30
  193. data/test/plugin_helper/data/cert/without_ca/cert-key.pem +0 -27
  194. data/test/plugin_helper/data/cert/without_ca/cert-pass.pem +0 -20
  195. data/test/plugin_helper/data/cert/without_ca/cert.pem +0 -20
  196. data/test/plugin_helper/http_server/test_app.rb +0 -65
  197. data/test/plugin_helper/http_server/test_route.rb +0 -32
  198. data/test/plugin_helper/service_discovery/test_manager.rb +0 -93
  199. data/test/plugin_helper/service_discovery/test_round_robin_balancer.rb +0 -21
  200. data/test/plugin_helper/test_cert_option.rb +0 -25
  201. data/test/plugin_helper/test_child_process.rb +0 -862
  202. data/test/plugin_helper/test_compat_parameters.rb +0 -358
  203. data/test/plugin_helper/test_event_emitter.rb +0 -80
  204. data/test/plugin_helper/test_event_loop.rb +0 -52
  205. data/test/plugin_helper/test_extract.rb +0 -194
  206. data/test/plugin_helper/test_formatter.rb +0 -255
  207. data/test/plugin_helper/test_http_server_helper.rb +0 -372
  208. data/test/plugin_helper/test_inject.rb +0 -561
  209. data/test/plugin_helper/test_metrics.rb +0 -137
  210. data/test/plugin_helper/test_parser.rb +0 -264
  211. data/test/plugin_helper/test_record_accessor.rb +0 -238
  212. data/test/plugin_helper/test_retry_state.rb +0 -1006
  213. data/test/plugin_helper/test_server.rb +0 -1895
  214. data/test/plugin_helper/test_service_discovery.rb +0 -165
  215. data/test/plugin_helper/test_socket.rb +0 -146
  216. data/test/plugin_helper/test_storage.rb +0 -542
  217. data/test/plugin_helper/test_thread.rb +0 -164
  218. data/test/plugin_helper/test_timer.rb +0 -130
  219. data/test/scripts/exec_script.rb +0 -32
  220. data/test/scripts/fluent/plugin/formatter1/formatter_test1.rb +0 -7
  221. data/test/scripts/fluent/plugin/formatter2/formatter_test2.rb +0 -7
  222. data/test/scripts/fluent/plugin/formatter_known.rb +0 -8
  223. data/test/scripts/fluent/plugin/out_test.rb +0 -81
  224. data/test/scripts/fluent/plugin/out_test2.rb +0 -80
  225. data/test/scripts/fluent/plugin/parser_known.rb +0 -4
  226. data/test/test_capability.rb +0 -74
  227. data/test/test_clock.rb +0 -164
  228. data/test/test_config.rb +0 -369
  229. data/test/test_configdsl.rb +0 -148
  230. data/test/test_daemonizer.rb +0 -91
  231. data/test/test_engine.rb +0 -203
  232. data/test/test_event.rb +0 -531
  233. data/test/test_event_router.rb +0 -348
  234. data/test/test_event_time.rb +0 -199
  235. data/test/test_file_wrapper.rb +0 -53
  236. data/test/test_filter.rb +0 -121
  237. data/test/test_fluent_log_event_router.rb +0 -99
  238. data/test/test_formatter.rb +0 -369
  239. data/test/test_input.rb +0 -31
  240. data/test/test_log.rb +0 -1076
  241. data/test/test_match.rb +0 -148
  242. data/test/test_mixin.rb +0 -351
  243. data/test/test_msgpack_factory.rb +0 -50
  244. data/test/test_oj_options.rb +0 -55
  245. data/test/test_output.rb +0 -278
  246. data/test/test_plugin.rb +0 -251
  247. data/test/test_plugin_classes.rb +0 -370
  248. data/test/test_plugin_helper.rb +0 -81
  249. data/test/test_plugin_id.rb +0 -119
  250. data/test/test_process.rb +0 -14
  251. data/test/test_root_agent.rb +0 -951
  252. data/test/test_static_config_analysis.rb +0 -177
  253. data/test/test_supervisor.rb +0 -821
  254. data/test/test_test_drivers.rb +0 -136
  255. data/test/test_time_formatter.rb +0 -301
  256. data/test/test_time_parser.rb +0 -362
  257. data/test/test_tls.rb +0 -65
  258. data/test/test_unique_id.rb +0 -47
  259. 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