fluentd 1.17.0-x86-mingw32 → 1.18.0-x86-mingw32

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,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