fluentd 1.17.0-x64-mingw-ucrt → 1.18.0-x64-mingw-ucrt

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