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
@@ -1,96 +0,0 @@
1
- require_relative '../helper'
2
- require 'fluent/plugin/metrics_local'
3
- require 'fluent/system_config'
4
-
5
- class LocalMetricsTest < ::Test::Unit::TestCase
6
- sub_test_case 'configure' do
7
- test "configured for counter mode" do
8
- m = Fluent::Plugin::LocalMetrics.new
9
- m.configure(config_element('metrics', '', {"labels" => {test: "test-unit", language: "Ruby"}}))
10
-
11
- assert_false m.use_gauge_metric
12
- assert_equal({agent: "Fluentd", hostname: "#{Socket.gethostname}"}, m.default_labels)
13
- assert_equal({test: "test-unit", language: "Ruby"}, m.labels)
14
- assert_true m.has_methods_for_counter
15
- assert_false m.has_methods_for_gauge
16
- end
17
-
18
- test "configured for gauge mode" do
19
- m = Fluent::Plugin::LocalMetrics.new
20
- m.use_gauge_metric = true
21
- m.configure(config_element('metrics', '', {"labels" => {test: "test-unit", language: "Ruby"}}))
22
-
23
- assert_true m.use_gauge_metric
24
- assert_equal({agent: "Fluentd", hostname: "#{Socket.gethostname}"}, m.default_labels)
25
- assert_equal({test: "test-unit", language: "Ruby"}, m.labels)
26
- assert_false m.has_methods_for_counter
27
- assert_true m.has_methods_for_gauge
28
- end
29
- end
30
-
31
- sub_test_case 'LocalMetric' do
32
- sub_test_case "counter" do
33
- setup do
34
- @m = Fluent::Plugin::LocalMetrics.new
35
- @m.configure(config_element('metrics', '', {}))
36
- end
37
-
38
- test '#configure' do
39
- assert_true @m.has_methods_for_counter
40
- assert_false @m.has_methods_for_gauge
41
- end
42
-
43
- test 'all local counter operations work well' do
44
- assert_equal 0, @m.get
45
- assert_equal 1, @m.inc
46
-
47
- @m.add(20)
48
- assert_equal 21, @m.get
49
- assert_raise NotImplementedError do
50
- @m.dec
51
- end
52
-
53
- @m.set(100)
54
- assert_equal 100, @m.get
55
-
56
- @m.set(10)
57
- assert_equal 100, @m.get # On counter, value should be overwritten bigger than stored one.
58
- assert_raise NotImplementedError do
59
- @m.sub(11)
60
- end
61
- end
62
- end
63
-
64
- sub_test_case "gauge" do
65
- setup do
66
- @m = Fluent::Plugin::LocalMetrics.new
67
- @m.use_gauge_metric = true
68
- @m.configure(config_element('metrics', '', {}))
69
- end
70
-
71
- test '#configure' do
72
- assert_false @m.has_methods_for_counter
73
- assert_true @m.has_methods_for_gauge
74
- end
75
-
76
- test 'all local gauge operations work well' do
77
- assert_equal 0, @m.get
78
- assert_equal 1, @m.inc
79
-
80
- @m.add(20)
81
- assert_equal 21, @m.get
82
- @m.dec
83
- assert_equal 20, @m.get
84
-
85
- @m.set(100)
86
- assert_equal 100, @m.get
87
-
88
- @m.sub(11)
89
- assert_equal 89, @m.get
90
-
91
- @m.set(10)
92
- assert_equal 10, @m.get # On gauge, value always should be overwritten.
93
- end
94
- end
95
- end
96
- end
@@ -1,204 +0,0 @@
1
- require_relative '../helper'
2
- require 'fluent/plugin/multi_output'
3
- require 'fluent/event'
4
-
5
- require 'json'
6
- require 'time'
7
- require 'timeout'
8
-
9
- module FluentPluginMultiOutputTest
10
- class DummyMultiOutput < Fluent::Plugin::MultiOutput
11
- attr_reader :events
12
- def initialize
13
- super
14
- @events = []
15
- end
16
- def configure(conf)
17
- super
18
- end
19
- def process(tag, es)
20
- es.each do |time, record|
21
- @events << [tag, time, record]
22
- end
23
- end
24
- end
25
- class DummyCompatMultiOutput < Fluent::Plugin::MultiOutput
26
- def initialize
27
- super
28
- @compat = true
29
- end
30
- def configure(conf)
31
- super
32
- end
33
- def process(tag, es)
34
- # ...
35
- end
36
- end
37
-
38
- class Dummy1Output < Fluent::Plugin::Output
39
- Fluent::Plugin.register_output('dummy_test_multi_output_1', self)
40
- attr_reader :configured
41
- def configure(conf)
42
- super
43
- @configured = true
44
- end
45
- def process(tag, es)
46
- end
47
- end
48
- class Dummy2Output < Fluent::Plugin::Output
49
- Fluent::Plugin.register_output('dummy_test_multi_output_2', self)
50
- attr_reader :configured
51
- def configure(conf)
52
- super
53
- @configured = true
54
- end
55
- def process(tag, es)
56
- end
57
- end
58
- class Dummy3Output < Fluent::Plugin::Output
59
- Fluent::Plugin.register_output('dummy_test_multi_output_3', self)
60
- attr_reader :configured
61
- def configure(conf)
62
- super
63
- @configured = true
64
- end
65
- def process(tag, es)
66
- end
67
- end
68
- class Dummy4Output < Fluent::Plugin::Output
69
- Fluent::Plugin.register_output('dummy_test_multi_output_4', self)
70
- attr_reader :configured
71
- def configure(conf)
72
- super
73
- @configured = true
74
- end
75
- def process(tag, es)
76
- end
77
- end
78
- end
79
-
80
- class MultiOutputTest < Test::Unit::TestCase
81
- def create_output(type=:multi)
82
- case type
83
- when :compat_multi
84
- FluentPluginMultiOutputTest::DummyCompatMultiOutput.new
85
- else
86
- FluentPluginMultiOutputTest::DummyMultiOutput.new
87
- end
88
- end
89
-
90
- sub_test_case 'basic multi output plugin' do
91
- setup do
92
- Fluent::Test.setup
93
- @i = create_output()
94
- end
95
-
96
- teardown do
97
- @i.log.out.reset
98
- end
99
-
100
- test '#configure raises error if <store> sections are missing' do
101
- conf = config_element('ROOT', '', { '@type' => 'dummy_test_multi_output' }, [])
102
- assert_raise Fluent::ConfigError do
103
- @i.configure(conf)
104
- end
105
- end
106
-
107
- test '#configure initialize child plugins and call these #configure' do
108
- assert_equal [], @i.outputs
109
-
110
- conf = config_element('ROOT', '', { '@type' => 'dummy_test_multi_output' },
111
- [
112
- config_element('store', '', { '@type' => 'dummy_test_multi_output_1' }),
113
- config_element('store', '', { '@type' => 'dummy_test_multi_output_2' }),
114
- config_element('store', '', { '@type' => 'dummy_test_multi_output_3' }),
115
- config_element('store', '', { '@type' => 'dummy_test_multi_output_4' }),
116
- ]
117
- )
118
- @i.configure(conf)
119
-
120
- assert_equal 4, @i.outputs.size
121
-
122
- assert @i.outputs[0].is_a? FluentPluginMultiOutputTest::Dummy1Output
123
- assert @i.outputs[0].configured
124
-
125
- assert @i.outputs[1].is_a? FluentPluginMultiOutputTest::Dummy2Output
126
- assert @i.outputs[1].configured
127
-
128
- assert @i.outputs[2].is_a? FluentPluginMultiOutputTest::Dummy3Output
129
- assert @i.outputs[2].configured
130
-
131
- assert @i.outputs[3].is_a? FluentPluginMultiOutputTest::Dummy4Output
132
- assert @i.outputs[3].configured
133
- end
134
-
135
- test '#configure warns if "type" is used in <store> sections instead of "@type"' do
136
- assert_equal [], @i.log.out.logs
137
-
138
- conf = config_element('ROOT', '', { '@type' => 'dummy_test_multi_output' },
139
- [
140
- config_element('store', '', { 'type' => 'dummy_test_multi_output_1' }),
141
- config_element('store', '', { 'type' => 'dummy_test_multi_output_2' }),
142
- config_element('store', '', { 'type' => 'dummy_test_multi_output_3' }),
143
- config_element('store', '', { 'type' => 'dummy_test_multi_output_4' }),
144
- ]
145
- )
146
- @i.configure(conf)
147
- assert_equal 4, @i.outputs.size
148
-
149
- log_size_for_multi_output_itself = 4
150
- log_size_for_metrics_plugin_helper = 4
151
- expected_warn_log_size = log_size_for_multi_output_itself + log_size_for_metrics_plugin_helper
152
- logs = @i.log.out.logs
153
- assert{ logs.count{|log| log.include?('[warn]') && log.include?("'type' is deprecated parameter name. use '@type' instead.") } == expected_warn_log_size }
154
- end
155
-
156
- test '#emit_events calls #process always' do
157
- conf = config_element('ROOT', '', { '@type' => 'dummy_test_multi_output' },
158
- [
159
- config_element('store', '', { '@type' => 'dummy_test_multi_output_1' }),
160
- config_element('store', '', { '@type' => 'dummy_test_multi_output_2' }),
161
- config_element('store', '', { '@type' => 'dummy_test_multi_output_3' }),
162
- config_element('store', '', { '@type' => 'dummy_test_multi_output_4' }),
163
- ]
164
- )
165
- @i.configure(conf)
166
- @i.start
167
-
168
- assert @i.events.empty?
169
-
170
- @i.emit_events(
171
- 'test.tag',
172
- Fluent::ArrayEventStream.new(
173
- [
174
- [event_time(), {"message" => "multi test 1"}],
175
- [event_time(), {"message" => "multi test 1"}],
176
- ]
177
- )
178
- )
179
-
180
- assert_equal 2, @i.events.size
181
- end
182
-
183
- test 'can use metrics plugins and fallback methods' do
184
- conf = config_element('ROOT', '', { '@type' => 'dummy_test_multi_output' },
185
- [
186
- config_element('store', '', { 'type' => 'dummy_test_multi_output_1' }),
187
- config_element('store', '', { 'type' => 'dummy_test_multi_output_2' }),
188
- config_element('store', '', { 'type' => 'dummy_test_multi_output_3' }),
189
- config_element('store', '', { 'type' => 'dummy_test_multi_output_4' }),
190
- ]
191
- )
192
- @i.configure(conf)
193
-
194
- %w[num_errors_metrics emit_count_metrics emit_size_metrics emit_records_metrics].each do |metric_name|
195
- assert_true @i.instance_variable_get(:"@#{metric_name}").is_a?(Fluent::Plugin::Metrics)
196
- end
197
-
198
- assert_equal 0, @i.num_errors
199
- assert_equal 0, @i.emit_count
200
- assert_equal 0, @i.emit_size
201
- assert_equal 0, @i.emit_records
202
- end
203
- end
204
- end
@@ -1,308 +0,0 @@
1
- require_relative '../helper'
2
- require 'fluent/test/driver/multi_output'
3
- require 'fluent/plugin/out_copy'
4
- require 'fluent/event'
5
- require 'flexmock/test_unit'
6
-
7
- class CopyOutputTest < Test::Unit::TestCase
8
- include FlexMock::TestCase
9
-
10
- class << self
11
- def startup
12
- $LOAD_PATH.unshift File.expand_path(File.join(File.dirname(__FILE__), '..', 'scripts'))
13
- require 'fluent/plugin/out_test'
14
- require 'fluent/plugin/out_test2'
15
- end
16
-
17
- def shutdown
18
- $LOAD_PATH.shift
19
- end
20
- end
21
-
22
- def setup
23
- Fluent::Test.setup
24
- end
25
-
26
- CONFIG = %[
27
- <store>
28
- @type test
29
- name c0
30
- </store>
31
- <store>
32
- @type test2
33
- name c1
34
- </store>
35
- <store>
36
- @type test
37
- name c2
38
- </store>
39
- ]
40
-
41
- def create_driver(conf = CONFIG)
42
- Fluent::Test::Driver::MultiOutput.new(Fluent::Plugin::CopyOutput).configure(conf)
43
- end
44
-
45
- def test_configure
46
- d = create_driver
47
-
48
- outputs = d.instance.outputs
49
- assert_equal 3, outputs.size
50
- assert_equal Fluent::Plugin::TestOutput, outputs[0].class
51
- assert_equal Fluent::Plugin::Test2Output, outputs[1].class
52
- assert_equal Fluent::Plugin::TestOutput, outputs[2].class
53
- assert_equal "c0", outputs[0].name
54
- assert_equal "c1", outputs[1].name
55
- assert_equal "c2", outputs[2].name
56
- assert_false d.instance.deep_copy
57
- assert_equal :no_copy, d.instance.copy_mode
58
- end
59
-
60
- ERRORNEOUS_IGNORE_IF_PREV_SUCCESS_CONFIG = %[
61
- <store ignore_if_prev_success ignore_error>
62
- @type test
63
- name c0
64
- </store>
65
- <store ignore_if_prev_success ignore_error>
66
- @type test
67
- name c1
68
- </store>
69
- <store ignore_if_prev_success>
70
- @type test
71
- name c2
72
- </store>
73
- ]
74
- def test_configure_with_errorneus_ignore_if_prev_success
75
- assert_raise(Fluent::ConfigError) do
76
- create_driver(ERRORNEOUS_IGNORE_IF_PREV_SUCCESS_CONFIG)
77
- end
78
- end
79
-
80
- ALL_IGNORE_ERROR_WITHOUT_IGNORE_IF_PREV_SUCCESS_CONFIG = %[
81
- @log_level info
82
- <store ignore_error>
83
- @type test
84
- name c0
85
- </store>
86
- <store ignore_error>
87
- @type test
88
- name c1
89
- </store>
90
- <store ignore_error>
91
- @type test
92
- name c2
93
- </store>
94
- ]
95
- def test_configure_all_ignore_errors_without_ignore_if_prev_success
96
- d = create_driver(ALL_IGNORE_ERROR_WITHOUT_IGNORE_IF_PREV_SUCCESS_CONFIG)
97
- expected = /ignore_errors are specified in all <store>, but ignore_if_prev_success is not specified./
98
- matches = d.logs.grep(expected)
99
- assert_equal(1, matches.length, "Logs do not contain '#{expected}' '#{d.logs}'")
100
- end
101
-
102
- def test_configure_with_deep_copy_and_use_shallow_copy_mode
103
- d = create_driver(%[
104
- deep_copy true
105
- <store>
106
- @type test
107
- name c0
108
- </store>
109
- ])
110
-
111
- outputs = d.instance.outputs
112
- assert_equal 1, outputs.size
113
- assert_equal Fluent::Plugin::TestOutput, outputs[0].class
114
- assert_equal "c0", outputs[0].name
115
- assert_true d.instance.deep_copy
116
- assert_equal :shallow, d.instance.copy_mode
117
- end
118
-
119
- def test_feed_events
120
- d = create_driver
121
-
122
- assert !d.instance.outputs[0].has_router?
123
- assert_not_nil d.instance.outputs[1].router
124
- assert !d.instance.outputs[2].has_router?
125
-
126
- time = event_time("2011-01-02 13:14:15 UTC")
127
- d.run(default_tag: 'test') do
128
- d.feed(time, {"a" => 1})
129
- d.feed(time, {"a" => 2})
130
- end
131
-
132
- d.instance.outputs.each {|o|
133
- assert_equal [ [time, {"a"=>1}], [time, {"a"=>2}] ], o.events
134
- }
135
- end
136
-
137
- def test_msgpack_unpacker_cache_bug_for_msgpack_event_stream
138
- d = create_driver
139
-
140
- time = event_time("2011-01-02 13:14:15 UTC")
141
- source = Fluent::ArrayEventStream.new([ [time, {"a" => 1}], [time, {"a" => 2}] ])
142
- es = Fluent::MessagePackEventStream.new(source.to_msgpack_stream)
143
-
144
- d.run(default_tag: 'test') do
145
- d.feed(es)
146
- end
147
-
148
- d.instance.outputs.each { |o|
149
- assert_equal [ [time, {"a"=>1}], [time, {"a"=>2}] ], o.events
150
- }
151
- end
152
-
153
- def create_event_test_driver(copy_mode = 'no_copy')
154
- config = %[
155
- copy_mode #{copy_mode}
156
- <store>
157
- @type test
158
- name output1
159
- </store>
160
- <store>
161
- @type test
162
- name output2
163
- </store>
164
- ]
165
-
166
- d = Fluent::Test::Driver::MultiOutput.new(Fluent::Plugin::CopyOutput).configure(config)
167
- d.instance.outputs[0].define_singleton_method(:process) do |tag, es|
168
- es.each do |time, record|
169
- record['foo'] = 'bar'
170
- end
171
- super(tag, es)
172
- end
173
- d
174
- end
175
-
176
- time = event_time("2013-05-26 06:37:22 UTC")
177
- gen_multi_es = Proc.new {
178
- es = Fluent::MultiEventStream.new
179
- es.add(time, {"a" => 1, "nest" => {'k' => 'v'}})
180
- es.add(time, {"b" => 1, "nest" => {'k' => 'v'}})
181
- es
182
- }
183
-
184
- data(
185
- "OneEventStream without copy" => ['no_copy', Fluent::OneEventStream.new(time, {"a" => 1, "nest" => {'k' => 'v'}})],
186
- "OneEventStream with shallow" => ['shallow', Fluent::OneEventStream.new(time, {"a" => 1, "nest" => {'k' => 'v'}})],
187
- "OneEventStream with marshal" => ['marshal', Fluent::OneEventStream.new(time, {"a" => 1, "nest" => {'k' => 'v'}})],
188
- "OneEventStream with deep" => ['deep', Fluent::OneEventStream.new(time, {"a" => 1, "nest" => {'k' => 'v'}})],
189
- "ArrayEventStream without copy" => ['no_copy', Fluent::ArrayEventStream.new([[time, {"a" => 1, "nest" => {'k' => 'v'}}], [time, {"b" => 2, "nest" => {'k' => 'v'}}]])],
190
- "ArrayEventStream with shallow" => ['shallow', Fluent::ArrayEventStream.new([[time, {"a" => 1, "nest" => {'k' => 'v'}}], [time, {"b" => 2, "nest" => {'k' => 'v'}}]])],
191
- "ArrayEventStream with marshal" => ['marshal', Fluent::ArrayEventStream.new([[time, {"a" => 1, "nest" => {'k' => 'v'}}], [time, {"b" => 2, "nest" => {'k' => 'v'}}]])],
192
- "ArrayEventStream with deep" => ['deep', Fluent::ArrayEventStream.new([[time, {"a" => 1, "nest" => {'k' => 'v'}}], [time, {"b" => 2, "nest" => {'k' => 'v'}}]])],
193
- "MultiEventStream without copy" => ['no_copy', gen_multi_es.call],
194
- "MultiEventStream with shallow" => ['shallow', gen_multi_es.call],
195
- "MultiEventStream with marshal" => ['marshal', gen_multi_es.call],
196
- "MultiEventStream with deep" => ['deep', gen_multi_es.call],
197
- )
198
- def test_copy_mode_with_event_streams(data)
199
- copy_mode, es = data
200
-
201
- d = create_event_test_driver(copy_mode)
202
- d.run(default_tag: 'test') do
203
- d.feed(es)
204
- end
205
-
206
- events = d.instance.outputs.map(&:events)
207
-
208
- if copy_mode != 'no_copy'
209
- events[0].each_with_index do |entry0, i|
210
- record0 = entry0.last
211
- record1 = events[1][i].last
212
-
213
- assert_not_equal record0.object_id, record1.object_id
214
- assert_equal "bar", record0["foo"]
215
- assert !record1.has_key?("foo")
216
- if copy_mode == 'shallow'
217
- assert_equal record0['nest'].object_id, record1['nest'].object_id
218
- else
219
- assert_not_equal record0['nest'].object_id, record1['nest'].object_id
220
- end
221
- end
222
- else
223
- events[0].each_with_index do |entry0, i|
224
- record0 = entry0.last
225
- record1 = events[1][i].last
226
-
227
- assert_equal record0.object_id, record1.object_id
228
- assert_equal "bar", record0["foo"]
229
- assert_equal "bar", record1["foo"]
230
- assert_equal record0['nest'].object_id, record1['nest'].object_id
231
- end
232
- end
233
- end
234
-
235
- IGNORE_ERROR_CONFIG = %[
236
- <store ignore_error>
237
- @type test
238
- name c0
239
- </store>
240
- <store ignore_error>
241
- @type test
242
- name c1
243
- </store>
244
- <store>
245
- @type test
246
- name c2
247
- </store>
248
- ]
249
-
250
- def test_ignore_error
251
- d = create_driver(IGNORE_ERROR_CONFIG)
252
-
253
- # override to raise an error
254
- d.instance.outputs[0].define_singleton_method(:process) do |tag, es|
255
- raise ArgumentError, 'Failed'
256
- end
257
-
258
- time = Time.parse("2011-01-02 13:14:15 UTC").to_i
259
- assert_nothing_raised do
260
- d.run(default_tag: 'test') do
261
- d.feed(time, {"a"=>1})
262
- end
263
- end
264
- end
265
-
266
- IGNORE_IF_PREV_SUCCESS_CONFIG = %[
267
- <store ignore_error>
268
- @type test
269
- name c0
270
- </store>
271
- <store ignore_if_prev_success ignore_error>
272
- @type test
273
- name c1
274
- </store>
275
- <store ignore_if_prev_success>
276
- @type test
277
- name c2
278
- </store>
279
- ]
280
-
281
- def test_ignore_if_prev_success
282
- d = create_driver(IGNORE_IF_PREV_SUCCESS_CONFIG)
283
-
284
- # override to raise an error
285
- d.instance.outputs[0].define_singleton_method(:process) do |tag, es|
286
- raise ArgumentError, 'Failed'
287
- end
288
-
289
- # check ingore_if_prev_success functionality:
290
- # 1. output 2 is succeeded.
291
- # 2. output 3 is not called.
292
- flexstub(d.instance.outputs[1]) do |output|
293
- output.should_receive(:process).once
294
- end
295
- flexstub(d.instance.outputs[2]) do |output|
296
- output.should_receive(:process).never
297
- end
298
-
299
- time = Time.parse("2011-01-02 13:14:15 UTC").to_i
300
- assert_nothing_raised do
301
- d.run(default_tag: 'test') do
302
- d.feed(time, {"a"=>1})
303
- end
304
- end
305
- end
306
-
307
- end
308
-