fluentd 1.16.5-x86-mingw32 → 1.17.1-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -1,429 +0,0 @@
1
- require_relative "../helper"
2
- require 'fluent/test/driver/output'
3
- require 'fluent/plugin/out_http'
4
-
5
- require 'webrick'
6
- require 'webrick/https'
7
- require 'net/http'
8
- require 'uri'
9
- require 'json'
10
-
11
- # WEBrick's ProcHandler doesn't handle PUT by default
12
- module WEBrick::HTTPServlet
13
- class ProcHandler < AbstractServlet
14
- alias do_PUT do_GET
15
- end
16
- end
17
-
18
- class HTTPOutputTest < Test::Unit::TestCase
19
- include Fluent::Test::Helpers
20
-
21
- TMP_DIR = File.join(__dir__, "../tmp/out_http#{ENV['TEST_ENV_NUMBER']}")
22
- DEFAULT_LOGGER = ::WEBrick::Log.new(::STDOUT, ::WEBrick::BasicLog::FATAL)
23
-
24
- class << self
25
- # Use class variable to reduce server start/shutdown time
26
- def startup
27
- @@result = nil
28
- @@auth_handler = nil
29
- @@http_server_thread = nil
30
- end
31
-
32
- def shutdown
33
- @@http_server_thread.kill
34
- @@http_server_thread.join
35
- rescue
36
- end
37
- end
38
-
39
- def server_port
40
- 19880
41
- end
42
-
43
- def base_endpoint
44
- "http://127.0.0.1:#{server_port}"
45
- end
46
-
47
- def server_config
48
- config = {BindAddress: '127.0.0.1', Port: server_port}
49
- # Suppress webrick logs
50
- config[:Logger] = DEFAULT_LOGGER
51
- config[:AccessLog] = []
52
- config
53
- end
54
-
55
- def http_client(**opts, &block)
56
- opts = opts.merge(open_timeout: 1, read_timeout: 1)
57
- if block_given?
58
- Net::HTTP.start('127.0.0.1', server_port, **opts, &block)
59
- else
60
- Net::HTTP.start('127.0.0.1', server_port, **opts)
61
- end
62
- end
63
-
64
- def run_http_server
65
- server = ::WEBrick::HTTPServer.new(server_config)
66
- server.mount_proc('/test') { |req, res|
67
- if @@auth_handler
68
- @@auth_handler.call(req, res)
69
- end
70
-
71
- @@result.method = req.request_method
72
- @@result.content_type = req.content_type
73
- req.each do |key, value|
74
- @@result.headers[key] = value
75
- end
76
-
77
- data = []
78
- case req.content_type
79
- when 'application/x-ndjson'
80
- req.body.each_line { |l|
81
- data << JSON.parse(l)
82
- }
83
- when 'application/json'
84
- data = JSON.parse(req.body)
85
- when 'text/plain'
86
- # Use single_value in this test
87
- req.body.each_line { |line|
88
- data << line.chomp
89
- }
90
- else
91
- data << req.body
92
- end
93
- @@result.data = data
94
-
95
- res.status = 200
96
- res.body = "success"
97
- }
98
- server.mount_proc('/503') { |_, res|
99
- res.status = 503
100
- res.body = 'Service Unavailable'
101
- }
102
- server.mount_proc('/404') { |_, res|
103
- res.status = 404
104
- res.body = 'Not Found'
105
- }
106
- # For start check
107
- server.mount_proc('/') { |_, res|
108
- res.status = 200
109
- res.body = 'Hello Fluentd!'
110
- }
111
- server.start
112
- ensure
113
- server.shutdown rescue nil
114
- end
115
-
116
- Result = Struct.new("Result", :method, :content_type, :headers, :data)
117
-
118
- setup do
119
- Fluent::Test.setup
120
- FileUtils.rm_rf(TMP_DIR)
121
-
122
- @@result = Result.new(nil, nil, {}, nil)
123
- @@http_server_thread ||= Thread.new do
124
- run_http_server
125
- end
126
-
127
- now = Time.now
128
- started = false
129
- until started
130
- raise "Server not started" if (Time.now - now > 10.0)
131
- begin
132
- http_client { |c| c.request_get('/') }
133
- started = true
134
- rescue
135
- sleep 0.5
136
- end
137
- end
138
- end
139
-
140
- teardown do
141
- @@result = nil
142
- @@auth_handler = nil
143
- end
144
-
145
- def create_driver(conf)
146
- Fluent::Test::Driver::Output.new(Fluent::Plugin::HTTPOutput).configure(conf)
147
- end
148
-
149
- def config
150
- %[
151
- endpoint #{base_endpoint}/test
152
- ]
153
- end
154
-
155
- def test_events
156
- [
157
- {"message" => "hello", "num" => 10, "bool" => true},
158
- {"message" => "hello", "num" => 11, "bool" => false}
159
- ]
160
- end
161
-
162
- def test_configure
163
- d = create_driver(config)
164
- assert_equal "http://127.0.0.1:#{server_port}/test", d.instance.endpoint
165
- assert_equal :post, d.instance.http_method
166
- assert_equal 'application/x-ndjson', d.instance.content_type
167
- assert_equal [503], d.instance.retryable_response_codes
168
- assert_true d.instance.error_response_as_unrecoverable
169
- assert_nil d.instance.proxy
170
- assert_nil d.instance.headers
171
- end
172
-
173
- def test_configure_with_warn
174
- d = create_driver(config)
175
- assert_match(/Status code 503 is going to be removed/, d.instance.log.out.logs.join)
176
- end
177
-
178
- def test_configure_without_warn
179
- d = create_driver(<<~CONFIG)
180
- endpoint #{base_endpoint}/test
181
- retryable_response_codes [503]
182
- CONFIG
183
- assert_not_match(/Status code 503 is going to be removed/, d.instance.log.out.logs.join)
184
- end
185
-
186
- # Check if an exception is raised on not JSON format use
187
- data('not_json' => 'msgpack')
188
- def test_configure_with_json_array_err(format_type)
189
- assert_raise(Fluent::ConfigError) do
190
- create_driver(config + %[
191
- json_array true
192
- <format>
193
- @type #{format_type}
194
- </format>
195
- ])
196
- end
197
- end
198
-
199
- data('json' => ['json', 'application/x-ndjson'],
200
- 'ltsv' => ['ltsv', 'text/tab-separated-values'],
201
- 'msgpack' => ['msgpack', 'application/x-msgpack'],
202
- 'single_value' => ['single_value', 'text/plain'])
203
- def test_configure_content_type(types)
204
- format_type, content_type = types
205
- d = create_driver(config + %[
206
- <format>
207
- @type #{format_type}
208
- </format>
209
- ])
210
- assert_equal content_type, d.instance.content_type
211
- end
212
-
213
- # Check that json_array setting sets content_type = application/json
214
- data('json' => 'application/json')
215
- def test_configure_content_type_json_array(content_type)
216
- d = create_driver(config + "json_array true")
217
-
218
- assert_equal content_type, d.instance.content_type
219
- end
220
-
221
- data('PUT' => 'put', 'POST' => 'post')
222
- def test_write_with_method(method)
223
- d = create_driver(config + "http_method #{method}")
224
- d.run(default_tag: 'test.http') do
225
- test_events.each { |event|
226
- d.feed(event)
227
- }
228
- end
229
-
230
- result = @@result
231
- assert_equal method.upcase, result.method
232
- assert_equal 'application/x-ndjson', result.content_type
233
- assert_equal test_events, result.data
234
- assert_not_empty result.headers
235
- end
236
-
237
- # Check that JSON at HTTP request body is valid
238
- def test_write_with_json_array_setting
239
- d = create_driver(config + "json_array true")
240
- d.run(default_tag: 'test.http') do
241
- test_events.each { |event|
242
- d.feed(event)
243
- }
244
- end
245
-
246
- result = @@result
247
- assert_equal 'application/json', result.content_type
248
- assert_equal test_events, result.data
249
- assert_not_empty result.headers
250
- end
251
-
252
- def test_write_with_single_value_format
253
- d = create_driver(config + %[
254
- <format>
255
- @type single_value
256
- </format>
257
- ])
258
- d.run(default_tag: 'test.http') do
259
- test_events.each { |event|
260
- d.feed(event)
261
- }
262
- end
263
-
264
- result = @@result
265
- assert_equal 'text/plain', result.content_type
266
- assert_equal (test_events.map { |e| e['message'] }), result.data
267
- assert_not_empty result.headers
268
- end
269
-
270
- def test_write_with_headers
271
- d = create_driver(config + 'headers {"test_header":"fluentd!"}')
272
- d.run(default_tag: 'test.http') do
273
- test_events.each { |event|
274
- d.feed(event)
275
- }
276
- end
277
-
278
- result = @@result
279
- assert_true result.headers.has_key?('test_header')
280
- assert_equal "fluentd!", result.headers['test_header']
281
- end
282
-
283
- def test_write_with_headers_from_placeholders
284
- d = create_driver(config + %[
285
- headers_from_placeholders {"x-test":"${$.foo.bar}-test","x-tag":"${tag}"}
286
- <buffer tag,$.foo.bar>
287
- </buffer>
288
- ])
289
- d.run(default_tag: 'test.http') do
290
- test_events.each { |event|
291
- ev = event.dup
292
- ev['foo'] = {'bar' => 'abcd'}
293
- d.feed(ev)
294
- }
295
- end
296
-
297
- result = @@result
298
- assert_equal "abcd-test", result.headers['x-test']
299
- assert_equal "test.http", result.headers['x-tag']
300
- end
301
-
302
- def test_write_with_retryable_response
303
- old_report_on_exception = Thread.report_on_exception
304
- Thread.report_on_exception = false # thread finished as invalid state since RetryableResponse raises.
305
-
306
- d = create_driver("endpoint #{base_endpoint}/503")
307
- assert_raise(Fluent::Plugin::HTTPOutput::RetryableResponse) do
308
- d.run(default_tag: 'test.http', shutdown: false) do
309
- test_events.each { |event|
310
- d.feed(event)
311
- }
312
- end
313
- end
314
-
315
- d.instance_shutdown(log: $log)
316
- ensure
317
- Thread.report_on_exception = old_report_on_exception
318
- end
319
-
320
- def test_write_with_disabled_unrecoverable
321
- d = create_driver(%[
322
- endpoint #{base_endpoint}/404
323
- error_response_as_unrecoverable false
324
- ])
325
- d.run(default_tag: 'test.http', shutdown: false) do
326
- test_events.each { |event|
327
- d.feed(event)
328
- }
329
- end
330
- assert_match(/got error response from.*404 Not Found Not Found/, d.instance.log.out.logs.join)
331
- d.instance_shutdown
332
- end
333
-
334
- sub_test_case 'basic auth' do
335
- setup do
336
- FileUtils.mkdir_p(TMP_DIR)
337
- htpd = WEBrick::HTTPAuth::Htpasswd.new(File.join(TMP_DIR, 'dot.htpasswd'))
338
- htpd.set_passwd(nil, 'test', 'hey')
339
- authenticator = WEBrick::HTTPAuth::BasicAuth.new(:UserDB => htpd, :Realm => 'test', :Logger => DEFAULT_LOGGER)
340
- @@auth_handler = Proc.new { |req, res| authenticator.authenticate(req, res) }
341
- end
342
-
343
- teardown do
344
- FileUtils.rm_rf(TMP_DIR)
345
- end
346
-
347
- def server_port
348
- 19881
349
- end
350
-
351
- def test_basic_auth
352
- d = create_driver(config + %[
353
- <auth>
354
- method basic
355
- username test
356
- password hey
357
- </auth>
358
- ])
359
- d.run(default_tag: 'test.http') do
360
- test_events.each { |event|
361
- d.feed(event)
362
- }
363
- end
364
-
365
- result = @@result
366
- assert_equal 'POST', result.method
367
- assert_equal 'application/x-ndjson', result.content_type
368
- assert_equal test_events, result.data
369
- assert_not_empty result.headers
370
- end
371
-
372
- # This test includes `error_response_as_unrecoverable true` behaviour check
373
- def test_basic_auth_with_invalid_auth
374
- d = create_driver(config + %[
375
- <auth>
376
- method basic
377
- username ayaya
378
- password hello?
379
- </auth>
380
- ])
381
- d.instance.system_config_override(root_dir: TMP_DIR) # Backup files are generated in TMP_DIR.
382
- d.run(default_tag: 'test.http', shutdown: false) do
383
- test_events.each { |event|
384
- d.feed(event)
385
- }
386
- end
387
- assert_match(/got unrecoverable error/, d.instance.log.out.logs.join)
388
-
389
- d.instance_shutdown
390
- end
391
- end
392
-
393
- sub_test_case 'HTTPS' do
394
- def server_port
395
- 19882
396
- end
397
-
398
- def server_config
399
- config = super
400
- # WEBrick supports self-generated self-signed certificate
401
- config[:SSLEnable] = true
402
- config[:SSLCertName] = [["CN", WEBrick::Utils::getservername]]
403
- config
404
- end
405
-
406
- def http_client(&block)
407
- super(use_ssl: true, verify_mode: OpenSSL::SSL::VERIFY_NONE, &block)
408
- end
409
-
410
- def test_write_with_https
411
- d = create_driver(%[
412
- endpoint https://127.0.0.1:#{server_port}/test
413
- tls_verify_mode none
414
- ssl_timeout 2s
415
- ])
416
- d.run(default_tag: 'test.http') do
417
- test_events.each { |event|
418
- d.feed(event)
419
- }
420
- end
421
-
422
- result = @@result
423
- assert_equal 'POST', result.method
424
- assert_equal 'application/x-ndjson', result.content_type
425
- assert_equal test_events, result.data
426
- assert_not_empty result.headers
427
- end
428
- end
429
- end
@@ -1,105 +0,0 @@
1
- require_relative '../helper'
2
- require 'fluent/test/driver/output'
3
- require 'fluent/plugin/out_null'
4
-
5
- class NullOutputTest < Test::Unit::TestCase
6
- def setup
7
- Fluent::Test.setup
8
- end
9
-
10
- def create_driver(conf = "")
11
- Fluent::Test::Driver::Output.new(Fluent::Plugin::NullOutput).configure(conf)
12
- end
13
-
14
- sub_test_case 'non-buffered' do
15
- test 'configure' do
16
- assert_nothing_raised do
17
- create_driver
18
- end
19
- end
20
-
21
- test 'process' do
22
- d = create_driver
23
- assert_nothing_raised do
24
- d.run do
25
- d.feed("test", Fluent::EventTime.now, {"test" => "null"})
26
- end
27
- end
28
- assert_equal([], d.events(tag: "test"))
29
- end
30
- end
31
-
32
- sub_test_case 'buffered' do
33
- test 'default chunk limit size is 100' do
34
- d = create_driver(config_element("ROOT", "", {}, [config_element("buffer")]))
35
- assert_equal 10 * 1024, d.instance.buffer_config.chunk_limit_size
36
- assert d.instance.buffer_config.flush_at_shutdown
37
- assert_equal ['tag'], d.instance.buffer_config.chunk_keys
38
- assert d.instance.chunk_key_tag
39
- assert !d.instance.chunk_key_time
40
- assert_equal [], d.instance.chunk_keys
41
- end
42
-
43
- test 'writes standard formatted chunks' do
44
- d = create_driver(config_element("ROOT", "", {}, [config_element("buffer")]))
45
- t = event_time("2016-05-23 00:22:13 -0800")
46
- d.run(default_tag: 'test', flush: true) do
47
- d.feed(t, {"message" => "null null null"})
48
- d.feed(t, {"message" => "null null"})
49
- d.feed(t, {"message" => "null"})
50
- end
51
-
52
- assert_equal 3, d.instance.emit_count
53
- assert_equal 3, d.instance.emit_records
54
- end
55
-
56
- test 'check for chunk passed to #write' do
57
- d = create_driver(config_element("ROOT", "", {}, [config_element("buffer")]))
58
- data = []
59
- d.instance.feed_proc = ->(chunk){ data << [chunk.unique_id, chunk.metadata.tag, chunk.read] }
60
-
61
- t = event_time("2016-05-23 00:22:13 -0800")
62
- d.run(default_tag: 'test', flush: true) do
63
- d.feed(t, {"message" => "null null null"})
64
- d.feed(t, {"message" => "null null"})
65
- d.feed(t, {"message" => "null"})
66
- end
67
-
68
- assert_equal 1, data.size
69
- _, tag, binary = data.first
70
- events = []
71
- Fluent::MessagePackFactory.unpacker.feed_each(binary){|obj| events << obj }
72
- assert_equal 'test', tag
73
- assert_equal [ [t, {"message" => "null null null"}], [t, {"message" => "null null"}], [t, {"message" => "null"}] ], events
74
- end
75
-
76
- test 'check for chunk passed to #try_write' do
77
- d = create_driver(config_element("ROOT", "", {}, [config_element("buffer")]))
78
- data = []
79
- d.instance.feed_proc = ->(chunk){ data << [chunk.unique_id, chunk.metadata.tag, chunk.read] }
80
- d.instance.delayed = true
81
-
82
- t = event_time("2016-05-23 00:22:13 -0800")
83
- d.run(default_tag: 'test', flush: true, wait_flush_completion: false, shutdown: false) do
84
- d.feed(t, {"message" => "null null null"})
85
- d.feed(t, {"message" => "null null"})
86
- d.feed(t, {"message" => "null"})
87
- end
88
-
89
- assert_equal 1, data.size
90
- chunk_id, tag, binary = data.first
91
- events = []
92
- Fluent::MessagePackFactory.unpacker.feed_each(binary){|obj| events << obj }
93
- assert_equal 'test', tag
94
- assert_equal [ [t, {"message" => "null null null"}], [t, {"message" => "null null"}], [t, {"message" => "null"}] ], events
95
-
96
- assert_equal [chunk_id], d.instance.buffer.dequeued.keys
97
-
98
- d.instance.commit_write(chunk_id)
99
-
100
- assert_equal [], d.instance.buffer.dequeued.keys
101
-
102
- d.instance_shutdown
103
- end
104
- end
105
- end
@@ -1,28 +0,0 @@
1
- require_relative '../helper'
2
- require 'fluent/test/driver/output'
3
- require 'fluent/plugin/out_relabel'
4
-
5
- class RelabelOutputTest < Test::Unit::TestCase
6
- def setup
7
- Fluent::Test.setup
8
- end
9
-
10
- def default_config
11
- config_element('ROOT', '', {"@type"=>"relabel", "@label"=>"@RELABELED"})
12
- end
13
-
14
- def create_driver(conf = default_config)
15
- Fluent::Test::Driver::Output.new(Fluent::Plugin::RelabelOutput).configure(conf)
16
- end
17
-
18
- def test_process
19
- d = create_driver
20
-
21
- time = event_time("2011-01-02 13:14:15 UTC")
22
- d.run(default_tag: 'test') do
23
- d.feed(time, {"a"=>1})
24
- d.feed(time, {"a"=>2})
25
- end
26
- assert_equal [["test", time, {"a"=>1}], ["test", time, {"a"=>2}]], d.events
27
- end
28
- end
@@ -1,146 +0,0 @@
1
- require_relative '../helper'
2
- require 'fluent/test/driver/multi_output'
3
- require 'fluent/plugin/out_roundrobin'
4
-
5
- class RoundRobinOutputTest < Test::Unit::TestCase
6
- class << self
7
- def startup
8
- $LOAD_PATH.unshift File.expand_path(File.join(File.dirname(__FILE__), '..', 'scripts'))
9
- require 'fluent/plugin/out_test'
10
- require 'fluent/plugin/out_test2'
11
- end
12
-
13
- def shutdown
14
- $LOAD_PATH.shift
15
- end
16
- end
17
-
18
- def setup
19
- Fluent::Test.setup
20
- end
21
-
22
- CONFIG = %[
23
- <store>
24
- @type test
25
- name c0
26
- </store>
27
- <store>
28
- @type test2
29
- name c1
30
- </store>
31
- <store>
32
- @type test
33
- name c2
34
- </store>
35
- ]
36
- CONFIG_WITH_WEIGHT = %[
37
- <store>
38
- @type test
39
- name c0
40
- weight 3
41
- </store>
42
- <store>
43
- @type test2
44
- name c1
45
- weight 3
46
- </store>
47
- <store>
48
- @type test
49
- name c2
50
- </store>
51
- ]
52
-
53
- def create_driver(conf = CONFIG)
54
- Fluent::Test::Driver::MultiOutput.new(Fluent::Plugin::RoundRobinOutput).configure(conf)
55
- end
56
-
57
- def test_configure
58
- d = create_driver
59
-
60
- outputs = d.instance.outputs
61
- assert_equal 3, outputs.size
62
-
63
- assert_equal Fluent::Plugin::TestOutput, outputs[0].class
64
- assert_equal Fluent::Plugin::Test2Output, outputs[1].class
65
- assert_equal Fluent::Plugin::TestOutput, outputs[2].class
66
-
67
- assert !outputs[0].has_router?
68
- assert outputs[1].has_router?
69
- assert outputs[1].router
70
- assert !outputs[2].has_router?
71
-
72
- assert_equal "c0", outputs[0].name
73
- assert_equal "c1", outputs[1].name
74
- assert_equal "c2", outputs[2].name
75
-
76
- weights = d.instance.weights
77
- assert_equal 3, weights.size
78
- assert_equal 1, weights[0]
79
- assert_equal 1, weights[1]
80
- assert_equal 1, weights[2]
81
-
82
- d = create_driver(CONFIG_WITH_WEIGHT)
83
-
84
- outputs = d.instance.outputs
85
- assert_equal 3, outputs.size
86
-
87
- assert_equal Fluent::Plugin::TestOutput, outputs[0].class
88
- assert_equal Fluent::Plugin::Test2Output, outputs[1].class
89
- assert_equal Fluent::Plugin::TestOutput, outputs[2].class
90
-
91
- assert_equal "c0", outputs[0].name
92
- assert_equal "c1", outputs[1].name
93
- assert_equal "c2", outputs[2].name
94
-
95
- weights = d.instance.weights
96
- assert_equal 3, weights.size
97
- assert_equal 3, weights[0]
98
- assert_equal 3, weights[1]
99
- assert_equal 1, weights[2]
100
- end
101
-
102
- def test_events_feeded_to_plugins_by_roundrobin
103
- d = create_driver
104
-
105
- time = event_time("2011-01-02 13:14:15 UTC")
106
- d.run(default_tag: 'test') do
107
- d.feed(time, {"a" => 1})
108
- d.feed(time, {"a" => 2})
109
- d.feed(time, {"a" => 3})
110
- d.feed(time, {"a" => 4})
111
- end
112
-
113
- os = d.instance.outputs
114
-
115
- assert_equal [
116
- [time, {"a"=>1}],
117
- [time, {"a"=>4}],
118
- ], os[0].events
119
-
120
- assert_equal [
121
- [time, {"a"=>2}],
122
- ], os[1].events
123
-
124
- assert_equal [
125
- [time, {"a"=>3}],
126
- ], os[2].events
127
- end
128
-
129
- def test_events_feeded_with_specified_weights
130
- d = create_driver(CONFIG_WITH_WEIGHT)
131
-
132
- time = event_time("2011-01-02 13:14:15 UTC")
133
- d.run(default_tag: 'test') do
134
- 14.times do |i|
135
- d.feed(time, {"a" => i})
136
- end
137
- end
138
-
139
- os = d.instance.outputs
140
-
141
- assert_equal 6, os[0].events.size # weight=3
142
- assert_equal 6, os[1].events.size # weight=3
143
- assert_equal 2, os[2].events.size # weight=1
144
- end
145
- end
146
-