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,328 +0,0 @@
1
- require_relative '../helper'
2
- require 'fluent/test/driver/input'
3
- require 'fluent/plugin/in_tcp'
4
-
5
- class TcpInputTest < Test::Unit::TestCase
6
- def setup
7
- Fluent::Test.setup
8
- @port = unused_port
9
- end
10
-
11
- def teardown
12
- @port = nil
13
- end
14
-
15
- def base_config
16
- %[
17
- port #{@port}
18
- tag tcp
19
- ]
20
- end
21
-
22
- def ipv4_config
23
- base_config + %[
24
- bind 127.0.0.1
25
- format none
26
- ]
27
- end
28
-
29
- def ipv6_config
30
- base_config + %[
31
- bind ::1
32
- format none
33
- ]
34
- end
35
-
36
- def create_driver(conf)
37
- Fluent::Test::Driver::Input.new(Fluent::Plugin::TcpInput).configure(conf)
38
- end
39
-
40
- def create_tcp_socket(host, port, &block)
41
- if block_given?
42
- TCPSocket.open(host, port, &block)
43
- else
44
- TCPSocket.open(host, port)
45
- end
46
- end
47
-
48
-
49
- data(
50
- 'ipv4' => ['127.0.0.1', :ipv4],
51
- 'ipv6' => ['::1', :ipv6],
52
- )
53
- test 'configure' do |data|
54
- bind, protocol = data
55
- conf = send("#{protocol}_config")
56
- omit "IPv6 is not supported on this environment" if protocol == :ipv6 && !ipv6_enabled?
57
-
58
- d = create_driver(conf)
59
- assert_equal @port, d.instance.port
60
- assert_equal bind, d.instance.bind
61
- assert_equal "\n", d.instance.delimiter
62
- end
63
-
64
- test ' configure w/o parse section' do
65
- assert_raise(Fluent::ConfigError.new("<parse> section is required.")) {
66
- create_driver(base_config)
67
- }
68
- end
69
-
70
- test_case_data = {
71
- 'none' => {
72
- 'format' => 'none',
73
- 'payloads' => [ "tcptest1\n", "tcptest2\n" ],
74
- 'expecteds' => [
75
- {'message' => 'tcptest1'},
76
- {'message' => 'tcptest2'},
77
- ],
78
- },
79
- 'json' => {
80
- 'format' => 'json',
81
- 'payloads' => [
82
- {'k' => 123, 'message' => 'tcptest1'}.to_json + "\n",
83
- {'k' => 'tcptest2', 'message' => 456}.to_json + "\n",
84
- ],
85
- 'expecteds' => [
86
- {'k' => 123, 'message' => 'tcptest1'},
87
- {'k' => 'tcptest2', 'message' => 456}
88
- ],
89
- },
90
- }
91
-
92
- data(test_case_data)
93
- test 'test_msg_size' do |data|
94
- format = data['format']
95
- payloads = data['payloads']
96
- expecteds = data['expecteds']
97
-
98
- d = create_driver(base_config + "format #{format}")
99
- d.run(expect_records: 2) do
100
- payloads.each do |payload|
101
- create_tcp_socket('127.0.0.1', @port) do |sock|
102
- sock.send(payload, 0)
103
- end
104
- end
105
- end
106
-
107
- assert_equal 2, d.events.size
108
- expecteds.each_with_index do |expected_record, i|
109
- assert_equal "tcp", d.events[i][0]
110
- assert d.events[i][1].is_a?(Fluent::EventTime)
111
- assert_equal expected_record, d.events[i][2]
112
- end
113
- end
114
-
115
- data(test_case_data)
116
- test 'test data in a connection' do |data|
117
- format = data['format']
118
- payloads = data['payloads']
119
- expecteds = data['expecteds']
120
-
121
- d = create_driver(base_config + "format #{format}")
122
- d.run(expect_records: 2) do
123
- create_tcp_socket('127.0.0.1', @port) do |sock|
124
- payloads.each do |payload|
125
- sock.send(payload, 0)
126
- end
127
- end
128
- end
129
-
130
- assert_equal 2, d.events.size
131
- expecteds.each_with_index do |expected_record, i|
132
- assert_equal "tcp", d.events[i][0]
133
- assert d.events[i][1].is_a?(Fluent::EventTime)
134
- assert_equal expected_record, d.events[i][2]
135
- end
136
- end
137
-
138
- test 'source_hostname_key' do
139
- d = create_driver(base_config + %!
140
- format none
141
- source_hostname_key host
142
- !)
143
- hostname = nil
144
- d.run(expect_records: 1) do
145
- create_tcp_socket('127.0.0.1', @port) do |sock|
146
- sock.do_not_reverse_lookup = false
147
- hostname = sock.peeraddr[2]
148
- sock.send("test\n", 0)
149
- end
150
- end
151
-
152
- assert_equal 1, d.events.size
153
- event = d.events[0]
154
- assert_equal "tcp", event[0]
155
- assert event[1].is_a?(Fluent::EventTime)
156
- assert_equal hostname, event[2]['host']
157
- end
158
-
159
- test "send_keepalive_packet_can_be_enabled" do
160
- d = create_driver(base_config + %!
161
- format none
162
- send_keepalive_packet true
163
- !)
164
- assert_true d.instance.send_keepalive_packet
165
-
166
- d = create_driver(base_config + %!
167
- format none
168
- !)
169
- assert_false d.instance.send_keepalive_packet
170
- end
171
-
172
- test 'source_address_key' do
173
- d = create_driver(base_config + %!
174
- format none
175
- source_address_key addr
176
- !)
177
- address = nil
178
- d.run(expect_records: 1) do
179
- create_tcp_socket('127.0.0.1', @port) do |sock|
180
- address = sock.peeraddr[3]
181
- sock.send("test\n", 0)
182
- end
183
- end
184
-
185
- assert_equal 1, d.events.size
186
- event = d.events[0]
187
- assert_equal "tcp", event[0]
188
- assert event[1].is_a?(Fluent::EventTime)
189
- assert_equal address, event[2]['addr']
190
- end
191
-
192
- sub_test_case '<security>' do
193
- test 'accept from allowed client' do
194
- d = create_driver(ipv4_config + %!
195
- <security>
196
- <client>
197
- network 127.0.0.1
198
- </client>
199
- </security>
200
- !)
201
- d.run(expect_records: 1) do
202
- create_tcp_socket('127.0.0.1', @port) do |sock|
203
- sock.send("hello\n", 0)
204
- end
205
- end
206
-
207
- assert_equal 1, d.events.size
208
- event = d.events[0]
209
- assert_equal 'tcp', event[0]
210
- assert_equal 'hello', event[2]['message']
211
- end
212
-
213
- test 'deny from disallowed client' do
214
- d = create_driver(ipv4_config + %!
215
- <security>
216
- <client>
217
- network 200.0.0.0
218
- </client>
219
- </security>
220
- !)
221
- d.run(expect_records: 1, timeout: 2) do
222
- create_tcp_socket('127.0.0.1', @port) do |sock|
223
- sock.send("hello\n", 0)
224
- end
225
- end
226
-
227
- assert_equal 1, d.logs.count { |l| l =~ /anonymous client/ }
228
- assert_equal 0, d.events.size
229
- end
230
- end
231
-
232
- sub_test_case '<extract>' do
233
- test 'extract tag from record field' do
234
- d = create_driver(base_config + %!
235
- <parse>
236
- @type json
237
- </parse>
238
- <extract>
239
- tag_key tag
240
- </extract>
241
- !)
242
- d.run(expect_records: 1) do
243
- create_tcp_socket('127.0.0.1', @port) do |sock|
244
- data = {'msg' => 'hello', 'tag' => 'helper_test'}
245
- sock.send("#{data.to_json}\n", 0)
246
- end
247
- end
248
-
249
- assert_equal 1, d.events.size
250
- event = d.events[0]
251
- assert_equal 'helper_test', event[0]
252
- assert event[1].is_a?(Fluent::EventTime)
253
- assert_equal 'hello', event[2]['msg']
254
- end
255
- end
256
-
257
- sub_test_case "message_length_limit" do
258
- data("batch_emit", { extract: "" }, keep: true)
259
- data("single_emit", { extract: "<extract>\ntag_key tag\n</extract>\n" }, keep: true)
260
- test "drop records exceeding limit" do |data|
261
- message_length_limit = 10
262
- d = create_driver(base_config + %!
263
- message_length_limit #{message_length_limit}
264
- <parse>
265
- @type none
266
- </parse>
267
- #{data[:extract]}
268
- !)
269
- d.run(expect_records: 2, timeout: 10) do
270
- create_tcp_socket('127.0.0.1', @port) do |sock|
271
- sock.send("a" * message_length_limit + "\n", 0)
272
- sock.send("b" * (message_length_limit + 1) + "\n", 0)
273
- sock.send("c" * (message_length_limit - 1) + "\n", 0)
274
- end
275
- end
276
-
277
- expected_records = [
278
- "a" * message_length_limit,
279
- "c" * (message_length_limit - 1)
280
- ]
281
- actual_records = d.events.collect do |event|
282
- event[2]["message"]
283
- end
284
-
285
- assert_equal expected_records, actual_records
286
- end
287
-
288
- test "clear buffer and discard the subsequent data until the next delimiter" do |data|
289
- message_length_limit = 12
290
- d = create_driver(base_config + %!
291
- message_length_limit #{message_length_limit}
292
- delimiter ";"
293
- <parse>
294
- @type json
295
- </parse>
296
- #{data[:extract]}
297
- !)
298
- d.run(expect_records: 1, timeout: 10) do
299
- create_tcp_socket('127.0.0.1', @port) do |sock|
300
- sock.send('{"message":', 0)
301
- sock.send('"hello', 0)
302
- sleep 1 # To make the server read data and clear the buffer here.
303
- sock.send('world!"};', 0) # This subsequent data must be discarded so that a parsing failure doesn't occur.
304
- sock.send('{"k":"v"};', 0) # This will succeed to parse.
305
- end
306
- end
307
-
308
- logs = d.logs.collect do |log|
309
- log.gsub(/\A\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} [-+]\d{4} /, "")
310
- end
311
- actual_records = d.events.collect do |event|
312
- event[2]
313
- end
314
-
315
- assert_equal(
316
- {
317
- # Asserting that '[warn]: pattern not matched message="world!\"}"' warning does not occur.
318
- logs: ['[info]: The buffer size exceeds \'message_length_limit\', cleared: limit=12 size=17 head="{\"message\":\"hello"' + "\n"],
319
- records: [{"k" => "v"}],
320
- },
321
- {
322
- logs: logs[1..],
323
- records: actual_records,
324
- }
325
- )
326
- end
327
- end
328
- end
@@ -1,296 +0,0 @@
1
- require_relative '../helper'
2
- require 'fluent/test/driver/input'
3
- require 'fluent/plugin/in_udp'
4
-
5
- class UdpInputTest < Test::Unit::TestCase
6
- def setup
7
- Fluent::Test.setup
8
- @port = unused_port
9
- end
10
-
11
- def teardown
12
- @port = nil
13
- end
14
-
15
- def base_config
16
- %[
17
- port #{@port}
18
- tag udp
19
- ]
20
- end
21
-
22
- def ipv4_config
23
- base_config + %!
24
- bind 127.0.0.1
25
- format /^\\[(?<time>[^\\]]*)\\] (?<message>.*)/
26
- !
27
- end
28
-
29
- def ipv6_config
30
- base_config + %!
31
- bind ::1
32
- format /^\\[(?<time>[^\\]]*)\\] (?<message>.*)/
33
- !
34
- end
35
-
36
- def create_driver(conf)
37
- Fluent::Test::Driver::Input.new(Fluent::Plugin::UdpInput).configure(conf)
38
- end
39
-
40
- def create_udp_socket(host, port)
41
- u = if IPAddr.new(IPSocket.getaddress(host)).ipv4?
42
- UDPSocket.new(Socket::AF_INET)
43
- else
44
- UDPSocket.new(Socket::AF_INET6)
45
- end
46
- u.do_not_reverse_lookup = false
47
- u.connect(host, port)
48
- if block_given?
49
- begin
50
- yield u
51
- ensure
52
- u.close rescue nil
53
- end
54
- else
55
- u
56
- end
57
- end
58
-
59
- data(
60
- 'ipv4' => ['127.0.0.1', :ipv4],
61
- 'ipv6' => ['::1', :ipv6],
62
- )
63
- test 'configure' do |data|
64
- bind, protocol = data
65
- conf = send("#{protocol}_config")
66
- omit "IPv6 is not supported on this environment" if protocol == :ipv6 && !ipv6_enabled?
67
-
68
- d = create_driver(conf)
69
- assert_equal @port, d.instance.port
70
- assert_equal bind, d.instance.bind
71
- assert_equal 4096, d.instance.message_length_limit
72
- assert_equal nil, d.instance.receive_buffer_size
73
- end
74
-
75
- test ' configure w/o parse section' do
76
- assert_raise(Fluent::ConfigError.new("<parse> section is required.")) {
77
- create_driver(base_config)
78
- }
79
- end
80
-
81
- data(
82
- 'ipv4' => ['127.0.0.1', :ipv4],
83
- 'ipv6' => ['::1', :ipv6],
84
- )
85
- test 'time_format' do |data|
86
- bind, protocol = data
87
- conf = send("#{protocol}_config")
88
- omit "IPv6 is not supported on this environment" if protocol == :ipv6 && !ipv6_enabled?
89
-
90
- d = create_driver(conf)
91
-
92
- tests = [
93
- {'msg' => '[Sep 11 00:00:00] localhost logger: foo', 'expected' => event_time('Sep 11 00:00:00', format: '%b %d %H:%M:%S')},
94
- {'msg' => '[Sep 1 00:00:00] localhost logger: foo', 'expected' => event_time('Sep 1 00:00:00', format: '%b %d %H:%M:%S')},
95
- ]
96
-
97
- d.run(expect_records: 2) do
98
- create_udp_socket(bind, @port) do |u|
99
- tests.each do |test|
100
- u.send(test['msg'], 0)
101
- end
102
- end
103
- end
104
-
105
- events = d.events
106
- tests.each_with_index do |t, i|
107
- assert_equal_event_time(t['expected'], events[i][1])
108
- end
109
- end
110
-
111
- data(
112
- 'message_length_limit' => 'message_length_limit 2048',
113
- 'body_size_limit' => 'body_size_limit 2048'
114
- )
115
- test 'message_length_limit/body_size_limit compatibility' do |param|
116
-
117
- d = create_driver(ipv4_config + param)
118
- assert_equal 2048, d.instance.message_length_limit
119
- end
120
-
121
- data(
122
- 'none' => {
123
- 'format' => 'none',
124
- 'payloads' => ["tcptest1\n", "tcptest2\n"],
125
- 'expecteds' => [
126
- {"message" => "tcptest1"},
127
- {"message" => "tcptest2"},
128
- ],
129
- },
130
- 'json' => {
131
- 'format' => 'json',
132
- 'payloads' => [
133
- {'k' => 123, 'message' => 'tcptest1'}.to_json + "\n",
134
- {'k' => 'tcptest2', 'message' => 456}.to_json + "\n",
135
- ],
136
- 'expecteds' => [
137
- {'k' => 123, 'message' => 'tcptest1'},
138
- {'k' => 'tcptest2', 'message' => 456},
139
- ],
140
- },
141
- 'regexp' => {
142
- 'format' => '/^\\[(?<time>[^\\]]*)\\] (?<message>.*)/',
143
- 'payloads' => [
144
- '[Sep 10 00:00:00] localhost: ' + 'x' * 100 + "\n",
145
- '[Sep 10 00:00:00] localhost: ' + 'x' * 1024 + "\n"
146
- ],
147
- 'expecteds' => [
148
- {"message" => 'localhost: ' + 'x' * 100},
149
- {"message" => 'localhost: ' + 'x' * 1024},
150
- ],
151
- },
152
- )
153
- test 'message size with format' do |data|
154
- format = data['format']
155
- payloads = data['payloads']
156
- expecteds = data['expecteds']
157
-
158
- d = create_driver(base_config + "format #{format}")
159
- d.run(expect_records: 2) do
160
- create_udp_socket('127.0.0.1', @port) do |u|
161
- payloads.each do |payload|
162
- u.send(payload, 0)
163
- end
164
- end
165
- end
166
-
167
- assert_equal 2, d.events.size
168
- expecteds.each_with_index do |expected_record, i|
169
- assert_equal "udp", d.events[i][0]
170
- assert d.events[i][1].is_a?(Fluent::EventTime)
171
- assert_equal expected_record, d.events[i][2]
172
- end
173
- end
174
-
175
- test 'remove_newline' do
176
- d = create_driver(base_config + %!
177
- format none
178
- remove_newline false
179
- !)
180
- payloads = ["test1\n", "test2\n"]
181
- d.run(expect_records: 2) do
182
- create_udp_socket('127.0.0.1', @port) do |u|
183
- payloads.each do |payload|
184
- u.send(payload, 0)
185
- end
186
- end
187
- end
188
-
189
- expecteds = payloads.map { |payload| {'message' => payload} }
190
- assert_equal 2, d.events.size
191
- expecteds.each_with_index do |expected_record, i|
192
- assert_equal "udp", d.events[i][0]
193
- assert d.events[i][1].is_a?(Fluent::EventTime)
194
- assert_equal expected_record, d.events[i][2]
195
- end
196
- end
197
-
198
- test 'source_hostname_key' do
199
- d = create_driver(base_config + %!
200
- format none
201
- source_hostname_key host
202
- !)
203
- hostname = nil
204
- d.run(expect_records: 1) do
205
- create_udp_socket('127.0.0.1', @port) do |u|
206
- u.send("test", 0)
207
- hostname = u.peeraddr[2]
208
- end
209
- end
210
-
211
- assert_equal 1, d.events.size
212
- assert_equal "udp", d.events[0][0]
213
- assert d.events[0][1].is_a?(Fluent::EventTime)
214
- assert_equal hostname, d.events[0][2]['host']
215
- end
216
-
217
- test 'source_address_key' do
218
- d = create_driver(base_config + %!
219
- format none
220
- source_address_key addr
221
- !)
222
- address = nil
223
- d.run(expect_records: 1) do
224
- create_udp_socket('127.0.0.1', @port) do |u|
225
- u.send("test", 0)
226
- address = u.peeraddr[3]
227
- end
228
- end
229
-
230
- assert_equal 1, d.events.size
231
- assert_equal "udp", d.events[0][0]
232
- assert d.events[0][1].is_a?(Fluent::EventTime)
233
- assert_equal address, d.events[0][2]['addr']
234
- end
235
-
236
- test 'receive_buffer_size' do
237
- # doesn't check exact value because it depends on platform and condition
238
-
239
- # check if default socket and in_udp's one without receive_buffer_size have same size buffer
240
- d0 = create_driver(base_config + %!
241
- format none
242
- !)
243
- d0.run do
244
- sock = d0.instance.instance_variable_get(:@_servers)[0].server.instance_variable_get(:@sock)
245
- begin
246
- default_sock = UDPSocket.new
247
- assert_equal(default_sock.getsockopt(Socket::SOL_SOCKET, Socket::SO_RCVBUF).int, sock.getsockopt(Socket::SOL_SOCKET, Socket::SO_RCVBUF).int)
248
- ensure
249
- default_sock.close
250
- end
251
- end
252
-
253
- # check if default socket and in_udp's one with receive_buffer_size have different size buffer
254
- d1 = create_driver(base_config + %!
255
- format none
256
- receive_buffer_size 1001
257
- !)
258
- d1.run do
259
- sock = d1.instance.instance_variable_get(:@_servers)[0].server.instance_variable_get(:@sock)
260
- begin
261
- default_sock = UDPSocket.new
262
- assert_not_equal(default_sock.getsockopt(Socket::SOL_SOCKET, Socket::SO_RCVBUF).int, sock.getsockopt(Socket::SOL_SOCKET, Socket::SO_RCVBUF).int)
263
- ensure
264
- default_sock.close
265
- end
266
- end
267
- end
268
-
269
- test 'message_length_limit' do
270
- message_length_limit = 32
271
- d = create_driver(base_config + %!
272
- format none
273
- message_length_limit #{message_length_limit}
274
- !)
275
- d.run(expect_records: 3) do
276
- create_udp_socket('127.0.0.1', @port) do |u|
277
- 3.times do |i|
278
- u.send("#{i}" * 40 + "\n", 0)
279
- end
280
- end
281
- end
282
-
283
- if Fluent.windows?
284
- expected_records = []
285
- else
286
- expected_records = 3.times.collect do |i|
287
- "#{i}" * message_length_limit
288
- end
289
- end
290
- actual_records = d.events.collect do |event|
291
- event[2]["message"]
292
- end
293
-
294
- assert_equal expected_records, actual_records
295
- end
296
- end