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,557 +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
- require 'aws-sdk-core'
11
-
12
- # WEBrick's ProcHandler doesn't handle PUT by default
13
- module WEBrick::HTTPServlet
14
- class ProcHandler < AbstractServlet
15
- alias do_PUT do_GET
16
- end
17
- end
18
-
19
- class HTTPOutputTest < Test::Unit::TestCase
20
- include Fluent::Test::Helpers
21
-
22
- TMP_DIR = File.join(__dir__, "../tmp/out_http#{ENV['TEST_ENV_NUMBER']}")
23
- DEFAULT_LOGGER = ::WEBrick::Log.new(::STDOUT, ::WEBrick::BasicLog::FATAL)
24
-
25
- class << self
26
- # Use class variable to reduce server start/shutdown time
27
- def startup
28
- @@result = nil
29
- @@auth_handler = nil
30
- @@http_server_thread = nil
31
- end
32
-
33
- def shutdown
34
- @@http_server_thread.kill
35
- @@http_server_thread.join
36
- rescue
37
- end
38
- end
39
-
40
- def server_port
41
- 19880
42
- end
43
-
44
- def base_endpoint
45
- "http://127.0.0.1:#{server_port}"
46
- end
47
-
48
- def server_config
49
- config = {BindAddress: '127.0.0.1', Port: server_port}
50
- # Suppress webrick logs
51
- config[:Logger] = DEFAULT_LOGGER
52
- config[:AccessLog] = []
53
- config
54
- end
55
-
56
- def http_client(**opts, &block)
57
- opts = opts.merge(open_timeout: 1, read_timeout: 1)
58
- if block_given?
59
- Net::HTTP.start('127.0.0.1', server_port, **opts, &block)
60
- else
61
- Net::HTTP.start('127.0.0.1', server_port, **opts)
62
- end
63
- end
64
-
65
- def run_http_server
66
- server = ::WEBrick::HTTPServer.new(server_config)
67
- server.mount_proc('/test') { |req, res|
68
- if @@auth_handler
69
- @@auth_handler.call(req, res)
70
- end
71
-
72
- @@result.method = req.request_method
73
- @@result.content_type = req.content_type
74
- req.each do |key, value|
75
- @@result.headers[key] = value
76
- end
77
-
78
- data = []
79
- case req.content_type
80
- when 'application/x-ndjson'
81
- req.body.each_line { |l|
82
- data << JSON.parse(l)
83
- }
84
- when 'application/json'
85
- data = JSON.parse(req.body)
86
- when 'text/plain'
87
- # Use single_value in this test
88
- req.body.each_line { |line|
89
- data << line.chomp
90
- }
91
- else
92
- data << req.body
93
- end
94
- @@result.data = data
95
-
96
- res.status = 200
97
- res.body = "success"
98
- }
99
- server.mount_proc('/503') { |_, res|
100
- res.status = 503
101
- res.body = 'Service Unavailable'
102
- }
103
- server.mount_proc('/404') { |_, res|
104
- res.status = 404
105
- res.body = 'Not Found'
106
- }
107
- # For start check
108
- server.mount_proc('/') { |_, res|
109
- res.status = 200
110
- res.body = 'Hello Fluentd!'
111
- }
112
- server.start
113
- ensure
114
- server.shutdown rescue nil
115
- end
116
-
117
- Result = Struct.new("Result", :method, :content_type, :headers, :data)
118
-
119
- setup do
120
- Fluent::Test.setup
121
- FileUtils.rm_rf(TMP_DIR)
122
-
123
- @@result = Result.new(nil, nil, {}, nil)
124
- @@http_server_thread ||= Thread.new do
125
- run_http_server
126
- end
127
-
128
- now = Time.now
129
- started = false
130
- until started
131
- raise "Server not started" if (Time.now - now > 10.0)
132
- begin
133
- http_client { |c| c.request_get('/') }
134
- started = true
135
- rescue
136
- sleep 0.5
137
- end
138
- end
139
- end
140
-
141
- teardown do
142
- @@result = nil
143
- @@auth_handler = nil
144
- end
145
-
146
- def create_driver(conf)
147
- Fluent::Test::Driver::Output.new(Fluent::Plugin::HTTPOutput).configure(conf)
148
- end
149
-
150
- def config
151
- %[
152
- endpoint #{base_endpoint}/test
153
- ]
154
- end
155
-
156
- def test_events
157
- [
158
- {"message" => "hello", "num" => 10, "bool" => true},
159
- {"message" => "hello", "num" => 11, "bool" => false}
160
- ]
161
- end
162
-
163
- def test_configure
164
- d = create_driver(config)
165
- assert_equal "http://127.0.0.1:#{server_port}/test", d.instance.endpoint
166
- assert_equal :post, d.instance.http_method
167
- assert_equal 'application/x-ndjson', d.instance.content_type
168
- assert_equal [503], d.instance.retryable_response_codes
169
- assert_true d.instance.error_response_as_unrecoverable
170
- assert_nil d.instance.proxy
171
- assert_nil d.instance.headers
172
- end
173
-
174
- def test_configure_with_warn
175
- d = create_driver(config)
176
- assert_match(/Status code 503 is going to be removed/, d.instance.log.out.logs.join)
177
- end
178
-
179
- def test_configure_without_warn
180
- d = create_driver(<<~CONFIG)
181
- endpoint #{base_endpoint}/test
182
- retryable_response_codes [503]
183
- CONFIG
184
- assert_not_match(/Status code 503 is going to be removed/, d.instance.log.out.logs.join)
185
- end
186
-
187
- # Check if an exception is raised on not JSON format use
188
- data('not_json' => 'msgpack')
189
- def test_configure_with_json_array_err(format_type)
190
- assert_raise(Fluent::ConfigError) do
191
- create_driver(config + %[
192
- json_array true
193
- <format>
194
- @type #{format_type}
195
- </format>
196
- ])
197
- end
198
- end
199
-
200
- data('json' => ['json', 'application/x-ndjson'],
201
- 'ltsv' => ['ltsv', 'text/tab-separated-values'],
202
- 'msgpack' => ['msgpack', 'application/x-msgpack'],
203
- 'single_value' => ['single_value', 'text/plain'])
204
- def test_configure_content_type(types)
205
- format_type, content_type = types
206
- d = create_driver(config + %[
207
- <format>
208
- @type #{format_type}
209
- </format>
210
- ])
211
- assert_equal content_type, d.instance.content_type
212
- end
213
-
214
- # Check that json_array setting sets content_type = application/json
215
- data('json' => 'application/json')
216
- def test_configure_content_type_json_array(content_type)
217
- d = create_driver(config + "json_array true")
218
-
219
- assert_equal content_type, d.instance.content_type
220
- end
221
-
222
- data('PUT' => 'put', 'POST' => 'post')
223
- def test_write_with_method(method)
224
- d = create_driver(config + "http_method #{method}")
225
- d.run(default_tag: 'test.http') do
226
- test_events.each { |event|
227
- d.feed(event)
228
- }
229
- end
230
-
231
- result = @@result
232
- assert_equal method.upcase, result.method
233
- assert_equal 'application/x-ndjson', result.content_type
234
- assert_equal test_events, result.data
235
- assert_not_empty result.headers
236
- end
237
-
238
- # Check that JSON at HTTP request body is valid
239
- def test_write_with_json_array_setting
240
- d = create_driver(config + "json_array true")
241
- d.run(default_tag: 'test.http') do
242
- test_events.each { |event|
243
- d.feed(event)
244
- }
245
- end
246
-
247
- result = @@result
248
- assert_equal 'application/json', result.content_type
249
- assert_equal test_events, result.data
250
- assert_not_empty result.headers
251
- end
252
-
253
- def test_write_with_single_value_format
254
- d = create_driver(config + %[
255
- <format>
256
- @type single_value
257
- </format>
258
- ])
259
- d.run(default_tag: 'test.http') do
260
- test_events.each { |event|
261
- d.feed(event)
262
- }
263
- end
264
-
265
- result = @@result
266
- assert_equal 'text/plain', result.content_type
267
- assert_equal (test_events.map { |e| e['message'] }), result.data
268
- assert_not_empty result.headers
269
- end
270
-
271
- def test_write_with_headers
272
- d = create_driver(config + 'headers {"test_header":"fluentd!"}')
273
- d.run(default_tag: 'test.http') do
274
- test_events.each { |event|
275
- d.feed(event)
276
- }
277
- end
278
-
279
- result = @@result
280
- assert_true result.headers.has_key?('test_header')
281
- assert_equal "fluentd!", result.headers['test_header']
282
- end
283
-
284
- def test_write_with_headers_from_placeholders
285
- d = create_driver(config + %[
286
- headers_from_placeholders {"x-test":"${$.foo.bar}-test","x-tag":"${tag}"}
287
- <buffer tag,$.foo.bar>
288
- </buffer>
289
- ])
290
- d.run(default_tag: 'test.http') do
291
- test_events.each { |event|
292
- ev = event.dup
293
- ev['foo'] = {'bar' => 'abcd'}
294
- d.feed(ev)
295
- }
296
- end
297
-
298
- result = @@result
299
- assert_equal "abcd-test", result.headers['x-test']
300
- assert_equal "test.http", result.headers['x-tag']
301
- end
302
-
303
- def test_write_with_retryable_response
304
- old_report_on_exception = Thread.report_on_exception
305
- Thread.report_on_exception = false # thread finished as invalid state since RetryableResponse raises.
306
-
307
- d = create_driver("endpoint #{base_endpoint}/503")
308
- assert_raise(Fluent::Plugin::HTTPOutput::RetryableResponse) do
309
- d.run(default_tag: 'test.http', shutdown: false) do
310
- test_events.each { |event|
311
- d.feed(event)
312
- }
313
- end
314
- end
315
-
316
- d.instance_shutdown(log: $log)
317
- ensure
318
- Thread.report_on_exception = old_report_on_exception
319
- end
320
-
321
- def test_write_with_disabled_unrecoverable
322
- d = create_driver(%[
323
- endpoint #{base_endpoint}/404
324
- error_response_as_unrecoverable false
325
- ])
326
- d.run(default_tag: 'test.http', shutdown: false) do
327
- test_events.each { |event|
328
- d.feed(event)
329
- }
330
- end
331
- assert_match(/got error response from.*404 Not Found Not Found/, d.instance.log.out.logs.join)
332
- d.instance_shutdown
333
- end
334
-
335
- sub_test_case 'basic auth' do
336
- setup do
337
- FileUtils.mkdir_p(TMP_DIR)
338
- htpd = WEBrick::HTTPAuth::Htpasswd.new(File.join(TMP_DIR, 'dot.htpasswd'))
339
- htpd.set_passwd(nil, 'test', 'hey')
340
- authenticator = WEBrick::HTTPAuth::BasicAuth.new(:UserDB => htpd, :Realm => 'test', :Logger => DEFAULT_LOGGER)
341
- @@auth_handler = Proc.new { |req, res| authenticator.authenticate(req, res) }
342
- end
343
-
344
- teardown do
345
- FileUtils.rm_rf(TMP_DIR)
346
- end
347
-
348
- def server_port
349
- 19881
350
- end
351
-
352
- def test_basic_auth
353
- d = create_driver(config + %[
354
- <auth>
355
- method basic
356
- username test
357
- password hey
358
- </auth>
359
- ])
360
- d.run(default_tag: 'test.http') do
361
- test_events.each { |event|
362
- d.feed(event)
363
- }
364
- end
365
-
366
- result = @@result
367
- assert_equal 'POST', result.method
368
- assert_equal 'application/x-ndjson', result.content_type
369
- assert_equal test_events, result.data
370
- assert_not_empty result.headers
371
- end
372
-
373
- # This test includes `error_response_as_unrecoverable true` behaviour check
374
- def test_basic_auth_with_invalid_auth
375
- d = create_driver(config + %[
376
- <auth>
377
- method basic
378
- username ayaya
379
- password hello?
380
- </auth>
381
- ])
382
- d.instance.system_config_override(root_dir: TMP_DIR) # Backup files are generated in TMP_DIR.
383
- d.run(default_tag: 'test.http', shutdown: false) do
384
- test_events.each { |event|
385
- d.feed(event)
386
- }
387
- end
388
- assert_match(/got unrecoverable error/, d.instance.log.out.logs.join)
389
-
390
- d.instance_shutdown
391
- end
392
- end
393
-
394
-
395
- sub_test_case 'aws sigv4 auth' do
396
- setup do
397
- @@fake_aws_credentials = Aws::Credentials.new(
398
- 'fakeaccess',
399
- 'fakesecret',
400
- 'fake session token'
401
- )
402
- end
403
-
404
- def server_port
405
- 19883
406
- end
407
-
408
- def test_aws_sigv4_sts_role_arn
409
- stub(Aws::AssumeRoleCredentials).new do |credentials_provider|
410
- stub(credentials_provider).credentials {
411
- @@fake_aws_credentials
412
- }
413
- credentials_provider
414
- end
415
-
416
- d = create_driver(config + %[
417
- <auth>
418
- method aws_sigv4
419
- aws_service someservice
420
- aws_region my-region-1
421
- aws_role_arn arn:aws:iam::123456789012:role/MyRole
422
- </auth>
423
- ])
424
- d.run(default_tag: 'test.http') do
425
- test_events.each { |event|
426
- d.feed(event)
427
- }
428
- end
429
-
430
- result = @@result
431
- assert_equal 'POST', result.method
432
- assert_equal 'application/x-ndjson', result.content_type
433
- assert_equal test_events, result.data
434
- assert_not_empty result.headers
435
- assert_not_nil result.headers['authorization']
436
- assert_match /AWS4-HMAC-SHA256 Credential=[a-zA-Z0-9]*\/\d+\/my-region-1\/someservice\/aws4_request/, result.headers['authorization']
437
- assert_match /SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date;x-amz-security-token/, result.headers['authorization']
438
- assert_equal @@fake_aws_credentials.session_token, result.headers['x-amz-security-token']
439
- assert_not_nil result.headers['x-amz-content-sha256']
440
- assert_not_empty result.headers['x-amz-content-sha256']
441
- assert_not_nil result.headers['x-amz-security-token']
442
- assert_not_empty result.headers['x-amz-security-token']
443
- assert_not_nil result.headers['x-amz-date']
444
- assert_not_empty result.headers['x-amz-date']
445
- end
446
-
447
- def test_aws_sigv4_no_role
448
- stub(Aws::CredentialProviderChain).new do |provider_chain|
449
- stub(provider_chain).resolve {
450
- @@fake_aws_credentials
451
- }
452
- provider_chain
453
- end
454
- d = create_driver(config + %[
455
- <auth>
456
- method aws_sigv4
457
- aws_service someservice
458
- aws_region my-region-1
459
- </auth>
460
- ])
461
- d.run(default_tag: 'test.http') do
462
- test_events.each { |event|
463
- d.feed(event)
464
- }
465
- end
466
-
467
- result = @@result
468
- assert_equal 'POST', result.method
469
- assert_equal 'application/x-ndjson', result.content_type
470
- assert_equal test_events, result.data
471
- assert_not_empty result.headers
472
- assert_not_nil result.headers['authorization']
473
- assert_match /AWS4-HMAC-SHA256 Credential=[a-zA-Z0-9]*\/\d+\/my-region-1\/someservice\/aws4_request/, result.headers['authorization']
474
- assert_match /SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date;x-amz-security-token/, result.headers['authorization']
475
- assert_equal @@fake_aws_credentials.session_token, result.headers['x-amz-security-token']
476
- assert_not_nil result.headers['x-amz-content-sha256']
477
- assert_not_empty result.headers['x-amz-content-sha256']
478
- assert_not_nil result.headers['x-amz-security-token']
479
- assert_not_empty result.headers['x-amz-security-token']
480
- assert_not_nil result.headers['x-amz-date']
481
- assert_not_empty result.headers['x-amz-date']
482
- end
483
- end
484
-
485
- sub_test_case 'HTTPS' do
486
- def server_port
487
- 19882
488
- end
489
-
490
- def server_config
491
- config = super
492
- # WEBrick supports self-generated self-signed certificate
493
- config[:SSLEnable] = true
494
- config[:SSLCertName] = [["CN", WEBrick::Utils::getservername]]
495
- config
496
- end
497
-
498
- def http_client(&block)
499
- super(use_ssl: true, verify_mode: OpenSSL::SSL::VERIFY_NONE, &block)
500
- end
501
-
502
- def test_write_with_https
503
- d = create_driver(%[
504
- endpoint https://127.0.0.1:#{server_port}/test
505
- tls_verify_mode none
506
- ssl_timeout 2s
507
- ])
508
- d.run(default_tag: 'test.http') do
509
- test_events.each { |event|
510
- d.feed(event)
511
- }
512
- end
513
-
514
- result = @@result
515
- assert_equal 'POST', result.method
516
- assert_equal 'application/x-ndjson', result.content_type
517
- assert_equal test_events, result.data
518
- assert_not_empty result.headers
519
- end
520
- end
521
-
522
- sub_test_case 'connection_reuse' do
523
- def server_port
524
- 19883
525
- end
526
-
527
- def test_connection_recreation
528
- d = create_driver(%[
529
- endpoint http://127.0.0.1:#{server_port}/test
530
- reuse_connections true
531
- ])
532
-
533
- d.run(default_tag: 'test.http', shutdown: false) do
534
- d.feed(test_events[0])
535
- end
536
-
537
- data = @@result.data
538
-
539
- # Restart server to simulate connection loss
540
- @@http_server_thread.kill
541
- @@http_server_thread.join
542
- @@http_server_thread = Thread.new do
543
- run_http_server
544
- end
545
-
546
- d.run(default_tag: 'test.http') do
547
- d.feed(test_events[1])
548
- end
549
-
550
- result = @@result
551
- assert_equal 'POST', result.method
552
- assert_equal 'application/x-ndjson', result.content_type
553
- assert_equal test_events, data.concat(result.data)
554
- assert_not_empty result.headers
555
- end
556
- end
557
- 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