fluentd 0.14.7-x86-mingw32 → 0.14.10-x86-mingw32
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of fluentd might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/.travis.yml +2 -0
- data/CONTRIBUTING.md +6 -1
- data/ChangeLog +95 -0
- data/Rakefile +21 -0
- data/appveyor.yml +1 -0
- data/code-of-conduct.md +3 -0
- data/example/out_exec_filter.conf +42 -0
- data/fluentd.gemspec +1 -1
- data/lib/fluent/agent.rb +2 -2
- data/lib/fluent/command/binlog_reader.rb +1 -1
- data/lib/fluent/command/cat.rb +15 -4
- data/lib/fluent/compat/output.rb +14 -9
- data/lib/fluent/compat/parser.rb +141 -11
- data/lib/fluent/config/configure_proxy.rb +2 -11
- data/lib/fluent/config/section.rb +8 -1
- data/lib/fluent/configurable.rb +1 -3
- data/lib/fluent/env.rb +1 -1
- data/lib/fluent/log.rb +1 -1
- data/lib/fluent/plugin/base.rb +17 -0
- data/lib/fluent/plugin/filter_parser.rb +108 -0
- data/lib/fluent/plugin/filter_record_transformer.rb +14 -35
- data/lib/fluent/plugin/filter_stdout.rb +1 -1
- data/lib/fluent/plugin/formatter.rb +5 -0
- data/lib/fluent/plugin/formatter_msgpack.rb +4 -0
- data/lib/fluent/plugin/formatter_stdout.rb +3 -2
- data/lib/fluent/plugin/formatter_tsv.rb +34 -0
- data/lib/fluent/plugin/in_exec.rb +48 -93
- data/lib/fluent/plugin/in_forward.rb +66 -265
- data/lib/fluent/plugin/in_http.rb +68 -65
- data/lib/fluent/plugin/in_monitor_agent.rb +8 -4
- data/lib/fluent/plugin/in_syslog.rb +42 -58
- data/lib/fluent/plugin/in_tail.rb +29 -14
- data/lib/fluent/plugin/in_tcp.rb +54 -14
- data/lib/fluent/plugin/in_udp.rb +49 -13
- data/lib/fluent/plugin/multi_output.rb +1 -3
- data/lib/fluent/plugin/out_exec.rb +58 -71
- data/lib/fluent/plugin/out_exec_filter.rb +199 -279
- data/lib/fluent/plugin/out_file.rb +172 -81
- data/lib/fluent/plugin/out_forward.rb +229 -206
- data/lib/fluent/plugin/out_stdout.rb +6 -21
- data/lib/fluent/plugin/output.rb +90 -59
- data/lib/fluent/plugin/parser.rb +121 -61
- data/lib/fluent/plugin/parser_csv.rb +9 -3
- data/lib/fluent/plugin/parser_json.rb +37 -35
- data/lib/fluent/plugin/parser_ltsv.rb +11 -19
- data/lib/fluent/plugin/parser_msgpack.rb +50 -0
- data/lib/fluent/plugin/parser_regexp.rb +15 -42
- data/lib/fluent/plugin/parser_tsv.rb +8 -3
- data/lib/fluent/plugin_helper.rb +10 -1
- data/lib/fluent/plugin_helper/child_process.rb +139 -73
- data/lib/fluent/plugin_helper/compat_parameters.rb +93 -4
- data/lib/fluent/plugin_helper/event_emitter.rb +14 -1
- data/lib/fluent/plugin_helper/event_loop.rb +24 -6
- data/lib/fluent/plugin_helper/extract.rb +16 -4
- data/lib/fluent/plugin_helper/formatter.rb +9 -11
- data/lib/fluent/plugin_helper/inject.rb +16 -1
- data/lib/fluent/plugin_helper/parser.rb +3 -3
- data/lib/fluent/plugin_helper/server.rb +494 -0
- data/lib/fluent/plugin_helper/socket.rb +101 -0
- data/lib/fluent/plugin_helper/socket_option.rb +84 -0
- data/lib/fluent/plugin_helper/timer.rb +1 -0
- data/lib/fluent/root_agent.rb +1 -1
- data/lib/fluent/test/driver/base.rb +95 -49
- data/lib/fluent/test/driver/base_owner.rb +18 -8
- data/lib/fluent/test/driver/multi_output.rb +2 -1
- data/lib/fluent/test/driver/output.rb +29 -6
- data/lib/fluent/test/helpers.rb +3 -1
- data/lib/fluent/test/log.rb +4 -0
- data/lib/fluent/test/startup_shutdown.rb +13 -0
- data/lib/fluent/time.rb +14 -8
- data/lib/fluent/version.rb +1 -1
- data/lib/fluent/winsvc.rb +1 -1
- data/test/command/test_binlog_reader.rb +5 -1
- data/test/compat/test_parser.rb +10 -0
- data/test/config/test_configurable.rb +193 -0
- data/test/config/test_configure_proxy.rb +0 -43
- data/test/helper.rb +36 -1
- data/test/plugin/test_base.rb +16 -0
- data/test/plugin/test_filter_parser.rb +665 -0
- data/test/plugin/test_filter_record_transformer.rb +36 -100
- data/test/plugin/test_filter_stdout.rb +18 -27
- data/test/plugin/test_in_dummy.rb +1 -1
- data/test/plugin/test_in_exec.rb +206 -94
- data/test/plugin/test_in_forward.rb +268 -347
- data/test/plugin/test_in_http.rb +310 -186
- data/test/plugin/test_in_monitor_agent.rb +65 -35
- data/test/plugin/test_in_syslog.rb +39 -3
- data/test/plugin/test_in_tcp.rb +78 -62
- data/test/plugin/test_in_udp.rb +101 -80
- data/test/plugin/test_out_exec.rb +223 -68
- data/test/plugin/test_out_exec_filter.rb +520 -169
- data/test/plugin/test_out_file.rb +637 -177
- data/test/plugin/test_out_forward.rb +242 -234
- data/test/plugin/test_out_null.rb +1 -1
- data/test/plugin/test_out_secondary_file.rb +4 -2
- data/test/plugin/test_out_stdout.rb +14 -35
- data/test/plugin/test_output_as_buffered.rb +60 -2
- data/test/plugin/test_parser.rb +359 -0
- data/test/plugin/test_parser_csv.rb +1 -2
- data/test/plugin/test_parser_json.rb +3 -4
- data/test/plugin/test_parser_labeled_tsv.rb +1 -2
- data/test/plugin/test_parser_none.rb +1 -2
- data/test/plugin/test_parser_regexp.rb +8 -4
- data/test/plugin/test_parser_tsv.rb +4 -3
- data/test/plugin_helper/test_child_process.rb +184 -0
- data/test/plugin_helper/test_compat_parameters.rb +88 -1
- data/test/plugin_helper/test_extract.rb +0 -1
- data/test/plugin_helper/test_formatter.rb +5 -2
- data/test/plugin_helper/test_inject.rb +21 -0
- data/test/plugin_helper/test_parser.rb +6 -5
- data/test/plugin_helper/test_server.rb +905 -0
- data/test/test_event_time.rb +3 -1
- data/test/test_output.rb +53 -2
- data/test/test_plugin_classes.rb +20 -0
- data/test/test_root_agent.rb +139 -0
- data/test/test_test_drivers.rb +135 -0
- metadata +28 -8
- data/test/plugin/test_parser_base.rb +0 -32
@@ -1,6 +1,6 @@
|
|
1
1
|
require_relative '../helper'
|
2
2
|
|
3
|
-
require 'fluent/test'
|
3
|
+
require 'fluent/test/driver/input'
|
4
4
|
require 'fluent/test/startup_shutdown'
|
5
5
|
require 'base64'
|
6
6
|
|
@@ -9,12 +9,19 @@ require 'fluent/event'
|
|
9
9
|
require 'fluent/plugin/in_forward'
|
10
10
|
require 'fluent/plugin/compressable'
|
11
11
|
|
12
|
+
require 'timecop'
|
13
|
+
|
12
14
|
class ForwardInputTest < Test::Unit::TestCase
|
13
15
|
include Fluent::Plugin::Compressable
|
14
16
|
|
15
17
|
def setup
|
16
18
|
Fluent::Test.setup
|
17
19
|
@responses = [] # for testing responses after sending data
|
20
|
+
@d = nil
|
21
|
+
end
|
22
|
+
|
23
|
+
def teardown
|
24
|
+
@d.instance_shutdown if @d
|
18
25
|
end
|
19
26
|
|
20
27
|
PORT = unused_port
|
@@ -48,12 +55,12 @@ class ForwardInputTest < Test::Unit::TestCase
|
|
48
55
|
]
|
49
56
|
|
50
57
|
def create_driver(conf=CONFIG)
|
51
|
-
Fluent::Test::
|
58
|
+
Fluent::Test::Driver::Input.new(Fluent::Plugin::ForwardInput).configure(conf)
|
52
59
|
end
|
53
60
|
|
54
|
-
|
55
|
-
|
56
|
-
d = create_driver
|
61
|
+
sub_test_case '#configure' do
|
62
|
+
test 'simple' do
|
63
|
+
@d = d = create_driver
|
57
64
|
assert_equal PORT, d.instance.port
|
58
65
|
assert_equal '127.0.0.1', d.instance.bind
|
59
66
|
assert_equal 0, d.instance.linger_timeout
|
@@ -61,8 +68,8 @@ class ForwardInputTest < Test::Unit::TestCase
|
|
61
68
|
assert !d.instance.backlog
|
62
69
|
end
|
63
70
|
|
64
|
-
|
65
|
-
d = create_driver(CONFIG_AUTH)
|
71
|
+
test 'auth' do
|
72
|
+
@d = d = create_driver(CONFIG_AUTH)
|
66
73
|
assert_equal PORT, d.instance.port
|
67
74
|
assert_equal '127.0.0.1', d.instance.bind
|
68
75
|
assert_equal 0, d.instance.linger_timeout
|
@@ -74,149 +81,137 @@ class ForwardInputTest < Test::Unit::TestCase
|
|
74
81
|
end
|
75
82
|
end
|
76
83
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
d.expected_emits_length = records.length
|
98
|
-
d.run_timeout = 2
|
99
|
-
d.run do
|
100
|
-
records.each {|tag, _time, record|
|
101
|
-
send_data packer.write([tag, 0, record]).to_s
|
102
|
-
}
|
84
|
+
sub_test_case 'message' do
|
85
|
+
test 'time' do
|
86
|
+
time = event_time("2011-01-02 13:14:15 UTC")
|
87
|
+
begin
|
88
|
+
Timecop.freeze(Time.at(time))
|
89
|
+
@d = d = create_driver
|
90
|
+
|
91
|
+
records = [
|
92
|
+
["tag1", time, {"a"=>1}],
|
93
|
+
["tag2", time, {"a"=>2}],
|
94
|
+
]
|
95
|
+
|
96
|
+
d.run(expect_records: records.length, timeout: 5) do
|
97
|
+
records.each {|tag, _time, record|
|
98
|
+
send_data packer.write([tag, 0, record]).to_s
|
99
|
+
}
|
100
|
+
end
|
101
|
+
assert_equal(records, d.events.sort_by {|a| a[0] })
|
102
|
+
ensure
|
103
|
+
Timecop.return
|
103
104
|
end
|
104
|
-
assert_equal(records, d.emits.sort_by {|a| a[0] })
|
105
105
|
end
|
106
106
|
|
107
|
-
|
108
|
-
d = create_driver
|
107
|
+
test 'plain' do
|
108
|
+
@d = d = create_driver
|
109
109
|
|
110
|
-
time =
|
110
|
+
time = event_time("2011-01-02 13:14:15 UTC")
|
111
111
|
|
112
112
|
records = [
|
113
113
|
["tag1", time, {"a"=>1}],
|
114
114
|
["tag2", time, {"a"=>2}],
|
115
115
|
]
|
116
116
|
|
117
|
-
d.
|
118
|
-
d.run_timeout = 2
|
119
|
-
d.run do
|
117
|
+
d.run(expect_records: records.length, timeout: 5) do
|
120
118
|
records.each {|tag, _time, record|
|
121
119
|
send_data packer.write([tag, _time, record]).to_s
|
122
120
|
}
|
123
121
|
end
|
124
|
-
assert_equal(records, d.
|
122
|
+
assert_equal(records, d.events)
|
125
123
|
end
|
126
124
|
|
127
|
-
|
128
|
-
d = create_driver
|
125
|
+
test 'time_as_integer' do
|
126
|
+
@d = d = create_driver
|
129
127
|
|
130
|
-
|
128
|
+
time_i = event_time("2011-01-02 13:14:15 UTC").to_i
|
131
129
|
|
132
130
|
records = [
|
133
|
-
["tag1",
|
134
|
-
["tag2",
|
131
|
+
["tag1", time_i, {"a"=>1}],
|
132
|
+
["tag2", time_i, {"a"=>2}],
|
135
133
|
]
|
136
134
|
|
137
|
-
d.
|
138
|
-
d.run_timeout = 2
|
139
|
-
d.run do
|
135
|
+
d.run(expect_records: records.length, timeout: 5) do
|
140
136
|
records.each {|tag, _time, record|
|
141
137
|
send_data packer.write([tag, _time, record]).to_s
|
142
138
|
}
|
143
139
|
end
|
144
140
|
|
145
|
-
assert_equal(records, d.
|
141
|
+
assert_equal(records, d.events)
|
146
142
|
end
|
147
143
|
|
148
|
-
|
149
|
-
d = create_driver(CONFIG + "skip_invalid_event true")
|
144
|
+
test 'skip_invalid_event' do
|
145
|
+
@d = d = create_driver(CONFIG + "skip_invalid_event true")
|
150
146
|
|
151
|
-
time =
|
147
|
+
time = event_time("2011-01-02 13:14:15 UTC")
|
152
148
|
|
153
149
|
records = [
|
154
150
|
["tag1", time, {"a" => 1}],
|
155
151
|
["tag2", time, {"a" => 2}],
|
156
152
|
]
|
157
153
|
|
158
|
-
d.run do
|
159
|
-
entries =
|
154
|
+
d.run(shutdown: false, expect_records: 2, timeout: 10) do
|
155
|
+
entries = []
|
160
156
|
# These entries are skipped
|
161
157
|
entries << ['tag1', true, {'a' => 3}] << ['tag2', time, 'invalid record']
|
158
|
+
entries += records.map { |tag, _time, record| [tag, _time, record] }
|
162
159
|
|
163
160
|
entries.each {|tag, _time, record|
|
164
161
|
# Without ack, logs are sometimes not saved to logs during test.
|
165
|
-
send_data packer.write([tag, _time, record]).to_s
|
162
|
+
send_data packer.write([tag, _time, record]).to_s #, try_to_receive_response: true
|
166
163
|
}
|
167
164
|
end
|
168
165
|
|
169
|
-
|
170
|
-
assert_equal
|
171
|
-
assert_equal records[
|
166
|
+
logs = d.instance.log.logs
|
167
|
+
assert_equal 2, logs.count { |line| line =~ /got invalid event and drop it/ }
|
168
|
+
assert_equal records[0], d.events[0]
|
169
|
+
assert_equal records[1], d.events[1]
|
170
|
+
|
171
|
+
d.instance_shutdown
|
172
172
|
end
|
173
173
|
|
174
|
-
|
175
|
-
d = create_driver
|
174
|
+
test 'json_using_integer_time' do
|
175
|
+
@d = d = create_driver
|
176
176
|
|
177
|
-
|
177
|
+
time_i = event_time("2011-01-02 13:14:15 UTC").to_i
|
178
178
|
|
179
179
|
records = [
|
180
|
-
["tag1",
|
181
|
-
["tag2",
|
180
|
+
["tag1", time_i, {"a"=>1}],
|
181
|
+
["tag2", time_i, {"a"=>2}],
|
182
182
|
]
|
183
183
|
|
184
|
-
d.
|
185
|
-
d.run_timeout = 2
|
186
|
-
d.run do
|
184
|
+
d.run(expect_records: records.length, timeout: 20) do
|
187
185
|
records.each {|tag, _time, record|
|
188
186
|
send_data [tag, _time, record].to_json
|
189
187
|
}
|
190
188
|
end
|
191
189
|
|
192
|
-
assert_equal(records, d.
|
190
|
+
assert_equal(records, d.events.sort_by {|a| a[1] })
|
193
191
|
end
|
194
192
|
|
195
|
-
|
196
|
-
d = create_driver
|
193
|
+
test 'json_with_newline' do
|
194
|
+
@d = d = create_driver
|
197
195
|
|
198
|
-
|
196
|
+
time_i = event_time("2011-01-02 13:14:15 UTC").to_i
|
199
197
|
|
200
198
|
records = [
|
201
|
-
["tag1",
|
202
|
-
["tag2",
|
199
|
+
["tag1", time_i, {"a"=>1}],
|
200
|
+
["tag2", time_i, {"a"=>2}],
|
203
201
|
]
|
204
202
|
|
205
|
-
d.
|
206
|
-
d.run_timeout = 2
|
207
|
-
d.run do
|
203
|
+
d.run(expect_records: records.length, timeout: 20) do
|
208
204
|
records.each {|tag, _time, record|
|
209
205
|
send_data [tag, _time, record].to_json + "\n"
|
206
|
+
sleep 1
|
210
207
|
}
|
211
208
|
end
|
212
209
|
|
213
|
-
assert_equal(records, d.
|
210
|
+
assert_equal(records, d.events.sort_by {|a| a[1] })
|
214
211
|
end
|
215
212
|
end
|
216
213
|
|
217
|
-
|
218
|
-
extend Fluent::Test::StartupShutdown
|
219
|
-
|
214
|
+
sub_test_case 'forward' do
|
220
215
|
data(tcp: {
|
221
216
|
config: CONFIG,
|
222
217
|
options: {
|
@@ -229,32 +224,26 @@ class ForwardInputTest < Test::Unit::TestCase
|
|
229
224
|
auth: true
|
230
225
|
}
|
231
226
|
})
|
232
|
-
|
227
|
+
test 'plain' do |data|
|
233
228
|
config = data[:config]
|
234
229
|
options = data[:options]
|
235
|
-
d = create_driver(config)
|
230
|
+
@d = d = create_driver(config)
|
236
231
|
|
237
|
-
time =
|
232
|
+
time = event_time("2011-01-02 13:14:15 UTC")
|
238
233
|
|
239
234
|
records = [
|
240
235
|
["tag1", time, {"a"=>1}],
|
241
236
|
["tag1", time, {"a"=>2}]
|
242
237
|
]
|
243
238
|
|
244
|
-
d.
|
245
|
-
d.run_timeout = 2
|
246
|
-
d.run do
|
247
|
-
sleep 0.1 until d.instance.instance_eval{ @thread } && d.instance.instance_eval{ @thread }.status
|
248
|
-
|
239
|
+
d.run(expect_records: records.length, timeout: 20) do
|
249
240
|
entries = []
|
250
241
|
records.each {|tag, _time, record|
|
251
242
|
entries << [_time, record]
|
252
243
|
}
|
253
244
|
send_data packer.write(["tag1", entries]).to_s, **options
|
254
245
|
end
|
255
|
-
assert_equal(records, d.
|
256
|
-
|
257
|
-
sleep 0.1 while d.instance.instance_eval{ @thread }.status # to confirm that plugin stopped completely
|
246
|
+
assert_equal(records, d.events)
|
258
247
|
end
|
259
248
|
|
260
249
|
data(tcp: {
|
@@ -269,23 +258,19 @@ class ForwardInputTest < Test::Unit::TestCase
|
|
269
258
|
auth: true
|
270
259
|
}
|
271
260
|
})
|
272
|
-
|
261
|
+
test 'time_as_integer' do |data|
|
273
262
|
config = data[:config]
|
274
263
|
options = data[:options]
|
275
|
-
d = create_driver(config)
|
264
|
+
@d = d = create_driver(config)
|
276
265
|
|
277
|
-
|
266
|
+
time_i = event_time("2011-01-02 13:14:15 UTC")
|
278
267
|
|
279
268
|
records = [
|
280
|
-
["tag1",
|
281
|
-
["tag1",
|
269
|
+
["tag1", time_i, {"a"=>1}],
|
270
|
+
["tag1", time_i, {"a"=>2}]
|
282
271
|
]
|
283
272
|
|
284
|
-
d.
|
285
|
-
d.run_timeout = 2
|
286
|
-
d.run do
|
287
|
-
sleep 0.1 until d.instance.instance_eval{ @thread } && d.instance.instance_eval{ @thread }.status
|
288
|
-
|
273
|
+
d.run(expect_records: records.length, timeout: 20) do
|
289
274
|
entries = []
|
290
275
|
records.each {|tag, _time, record|
|
291
276
|
entries << [_time, record]
|
@@ -293,9 +278,7 @@ class ForwardInputTest < Test::Unit::TestCase
|
|
293
278
|
send_data packer.write(["tag1", entries]).to_s, **options
|
294
279
|
end
|
295
280
|
|
296
|
-
assert_equal(records, d.
|
297
|
-
|
298
|
-
sleep 0.1 while d.instance.instance_eval{ @thread }.status # to confirm that plugin stopped completely
|
281
|
+
assert_equal(records, d.events)
|
299
282
|
end
|
300
283
|
|
301
284
|
data(tcp: {
|
@@ -310,23 +293,19 @@ class ForwardInputTest < Test::Unit::TestCase
|
|
310
293
|
auth: true
|
311
294
|
}
|
312
295
|
})
|
313
|
-
|
296
|
+
test 'skip_invalid_event' do |data|
|
314
297
|
config = data[:config]
|
315
298
|
options = data[:options]
|
316
|
-
d = create_driver(config + "skip_invalid_event true")
|
299
|
+
@d = d = create_driver(config + "skip_invalid_event true")
|
317
300
|
|
318
|
-
time =
|
301
|
+
time = event_time("2011-01-02 13:14:15 UTC")
|
319
302
|
|
320
303
|
records = [
|
321
304
|
["tag1", time, {"a" => 1}],
|
322
305
|
["tag1", time, {"a" => 2}],
|
323
306
|
]
|
324
307
|
|
325
|
-
d.
|
326
|
-
d.run_timeout = 2
|
327
|
-
d.run do
|
328
|
-
sleep 0.1 until d.instance.instance_eval{ @thread } && d.instance.instance_eval{ @thread }.status
|
329
|
-
|
308
|
+
d.run(shutdown: false, expect_records: records.length, timeout: 20) do
|
330
309
|
entries = records.map { |tag, _time, record| [_time, record] }
|
331
310
|
# These entries are skipped
|
332
311
|
entries << ['invalid time', {'a' => 3}] << [time, 'invalid record']
|
@@ -334,15 +313,14 @@ class ForwardInputTest < Test::Unit::TestCase
|
|
334
313
|
send_data packer.write(["tag1", entries]).to_s, **options
|
335
314
|
end
|
336
315
|
|
337
|
-
|
316
|
+
logs = d.instance.log.out.logs
|
317
|
+
assert{ logs.select{|line| line =~ /skip invalid event/ }.size == 2 }
|
338
318
|
|
339
|
-
|
319
|
+
d.instance_shutdown
|
340
320
|
end
|
341
321
|
end
|
342
322
|
|
343
|
-
|
344
|
-
extend Fluent::Test::StartupShutdown
|
345
|
-
|
323
|
+
sub_test_case 'packed forward' do
|
346
324
|
data(tcp: {
|
347
325
|
config: CONFIG,
|
348
326
|
options: {
|
@@ -355,32 +333,26 @@ class ForwardInputTest < Test::Unit::TestCase
|
|
355
333
|
auth: true
|
356
334
|
}
|
357
335
|
})
|
358
|
-
|
336
|
+
test 'plain' do |data|
|
359
337
|
config = data[:config]
|
360
338
|
options = data[:options]
|
361
|
-
d = create_driver(config)
|
339
|
+
@d = d = create_driver(config)
|
362
340
|
|
363
|
-
time =
|
341
|
+
time = event_time("2011-01-02 13:14:15 UTC")
|
364
342
|
|
365
343
|
records = [
|
366
344
|
["tag1", time, {"a"=>1}],
|
367
345
|
["tag1", time, {"a"=>2}],
|
368
346
|
]
|
369
347
|
|
370
|
-
d.
|
371
|
-
d.run_timeout = 2
|
372
|
-
d.run do
|
373
|
-
sleep 0.1 until d.instance.instance_eval{ @thread } && d.instance.instance_eval{ @thread }.status
|
374
|
-
|
348
|
+
d.run(expect_records: records.length, timeout: 20) do
|
375
349
|
entries = ''
|
376
350
|
records.each {|_tag, _time, record|
|
377
351
|
packer(entries).write([_time, record]).flush
|
378
352
|
}
|
379
353
|
send_data packer.write(["tag1", entries]).to_s, **options
|
380
354
|
end
|
381
|
-
assert_equal(records, d.
|
382
|
-
|
383
|
-
sleep 0.1 while d.instance.instance_eval{ @thread }.status # to confirm that plugin stopped completely
|
355
|
+
assert_equal(records, d.events)
|
384
356
|
end
|
385
357
|
|
386
358
|
data(tcp: {
|
@@ -395,32 +367,26 @@ class ForwardInputTest < Test::Unit::TestCase
|
|
395
367
|
auth: true
|
396
368
|
}
|
397
369
|
})
|
398
|
-
|
370
|
+
test 'time_as_integer' do |data|
|
399
371
|
config = data[:config]
|
400
372
|
options = data[:options]
|
401
|
-
d = create_driver(config)
|
373
|
+
@d = d = create_driver(config)
|
402
374
|
|
403
|
-
|
375
|
+
time_i = event_time("2011-01-02 13:14:15 UTC").to_i
|
404
376
|
|
405
377
|
records = [
|
406
|
-
["tag1",
|
407
|
-
["tag1",
|
378
|
+
["tag1", time_i, {"a"=>1}],
|
379
|
+
["tag1", time_i, {"a"=>2}],
|
408
380
|
]
|
409
381
|
|
410
|
-
d.
|
411
|
-
d.run_timeout = 2
|
412
|
-
d.run do
|
413
|
-
sleep 0.1 until d.instance.instance_eval{ @thread } && d.instance.instance_eval{ @thread }.status
|
414
|
-
|
382
|
+
d.run(expect_records: records.length, timeout: 20) do
|
415
383
|
entries = ''
|
416
384
|
records.each {|tag, _time, record|
|
417
385
|
packer(entries).write([_time, record]).flush
|
418
386
|
}
|
419
387
|
send_data packer.write(["tag1", entries]).to_s, **options
|
420
388
|
end
|
421
|
-
assert_equal(records, d.
|
422
|
-
|
423
|
-
sleep 0.1 while d.instance.instance_eval{ @thread }.status # to confirm that plugin stopped completely
|
389
|
+
assert_equal(records, d.events)
|
424
390
|
end
|
425
391
|
|
426
392
|
data(tcp: {
|
@@ -435,23 +401,19 @@ class ForwardInputTest < Test::Unit::TestCase
|
|
435
401
|
auth: true
|
436
402
|
}
|
437
403
|
})
|
438
|
-
|
404
|
+
test 'skip_invalid_event' do |data|
|
439
405
|
config = data[:config]
|
440
406
|
options = data[:options]
|
441
|
-
d = create_driver(config + "skip_invalid_event true")
|
407
|
+
@d = d = create_driver(config + "skip_invalid_event true")
|
442
408
|
|
443
|
-
time =
|
409
|
+
time = event_time("2011-01-02 13:14:15 UTC")
|
444
410
|
|
445
411
|
records = [
|
446
412
|
["tag1", time, {"a" => 1}],
|
447
413
|
["tag1", time, {"a" => 2}],
|
448
414
|
]
|
449
415
|
|
450
|
-
d.
|
451
|
-
d.run_timeout = 2
|
452
|
-
d.run do
|
453
|
-
sleep 0.1 until d.instance.instance_eval{ @thread } && d.instance.instance_eval{ @thread }.status
|
454
|
-
|
416
|
+
d.run(shutdown: false, expect_records: records.length, timeout: 20) do
|
455
417
|
entries = records.map { |tag, _time, record| [_time, record] }
|
456
418
|
# These entries are skipped
|
457
419
|
entries << ['invalid time', {'a' => 3}] << [time, 'invalid record']
|
@@ -463,22 +425,21 @@ class ForwardInputTest < Test::Unit::TestCase
|
|
463
425
|
send_data packer.write(["tag1", packed_entries]).to_s, **options
|
464
426
|
end
|
465
427
|
|
466
|
-
|
428
|
+
logs = d.instance.log.logs
|
429
|
+
assert_equal 2, logs.count { |line| line =~ /skip invalid event/ }
|
467
430
|
|
468
|
-
|
431
|
+
d.instance_shutdown
|
469
432
|
end
|
470
433
|
end
|
471
434
|
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
def test_set_compress_to_option
|
476
|
-
d = create_driver
|
435
|
+
sub_test_case 'compressed packed forward' do
|
436
|
+
test 'set_compress_to_option' do
|
437
|
+
@d = d = create_driver
|
477
438
|
|
478
|
-
|
439
|
+
time_i = event_time("2011-01-02 13:14:15 UTC").to_i
|
479
440
|
events = [
|
480
|
-
["tag1",
|
481
|
-
["tag1",
|
441
|
+
["tag1", time_i, {"a"=>1}],
|
442
|
+
["tag1", time_i, {"a"=>2}]
|
482
443
|
]
|
483
444
|
|
484
445
|
# create compressed entries
|
@@ -496,16 +457,16 @@ class ForwardInputTest < Test::Unit::TestCase
|
|
496
457
|
end
|
497
458
|
end
|
498
459
|
|
499
|
-
assert_equal events, d.
|
460
|
+
assert_equal events, d.events
|
500
461
|
end
|
501
462
|
|
502
|
-
|
503
|
-
d = create_driver
|
463
|
+
test 'create_CompressedMessagePackEventStream_with_gzip_compress_option' do
|
464
|
+
@d = d = create_driver
|
504
465
|
|
505
|
-
|
466
|
+
time_i = event_time("2011-01-02 13:14:15 UTC").to_i
|
506
467
|
events = [
|
507
|
-
["tag1",
|
508
|
-
["tag1",
|
468
|
+
["tag1", time_i, {"a"=>1}],
|
469
|
+
["tag1", time_i, {"a"=>2}]
|
509
470
|
]
|
510
471
|
|
511
472
|
# create compressed entries
|
@@ -525,20 +486,17 @@ class ForwardInputTest < Test::Unit::TestCase
|
|
525
486
|
assert_equal 'gzip', option['compressed']
|
526
487
|
end
|
527
488
|
end
|
528
|
-
d.emits
|
529
489
|
end
|
530
490
|
end
|
531
491
|
|
532
|
-
|
533
|
-
|
492
|
+
sub_test_case 'warning' do
|
493
|
+
test 'send_large_chunk_warning' do
|
494
|
+
@d = d = create_driver(CONFIG + %[
|
495
|
+
chunk_size_warn_limit 16M
|
496
|
+
chunk_size_limit 32M
|
497
|
+
])
|
534
498
|
|
535
|
-
|
536
|
-
d = create_driver(CONFIG + %[
|
537
|
-
chunk_size_warn_limit 16M
|
538
|
-
chunk_size_limit 32M
|
539
|
-
])
|
540
|
-
|
541
|
-
time = Fluent::EventTime.parse("2014-04-25 13:14:15 UTC")
|
499
|
+
time = event_time("2014-04-25 13:14:15 UTC")
|
542
500
|
|
543
501
|
# generate over 16M chunk
|
544
502
|
str = "X" * 1024 * 1024
|
@@ -546,59 +504,61 @@ class ForwardInputTest < Test::Unit::TestCase
|
|
546
504
|
assert chunk.size > (16 * 1024 * 1024)
|
547
505
|
assert chunk.size < (32 * 1024 * 1024)
|
548
506
|
|
549
|
-
d.run do
|
550
|
-
sleep 0.1 until d.instance.instance_eval{ @thread } && d.instance.instance_eval{ @thread }.status
|
551
|
-
|
507
|
+
d.run(shutdown: false) do
|
552
508
|
Fluent::Engine.msgpack_factory.unpacker.feed_each(chunk) do |obj|
|
553
|
-
d.instance.send(:on_message, obj, chunk.size,
|
509
|
+
d.instance.send(:on_message, obj, chunk.size, '127.0.0.1')
|
554
510
|
end
|
555
511
|
end
|
556
512
|
|
557
513
|
# check emitted data
|
558
|
-
emits = d.
|
514
|
+
emits = d.events
|
559
515
|
assert_equal 16, emits.size
|
560
516
|
assert emits.map(&:first).all?{|t| t == "test.tag" }
|
561
517
|
assert_equal (0...16).to_a, emits.map{|_tag, t, _record| t - time }
|
562
518
|
|
563
519
|
# check log
|
564
|
-
|
520
|
+
logs = d.instance.log.logs
|
521
|
+
assert_equal 1, logs.select{|line|
|
565
522
|
line =~ / \[warn\]: Input chunk size is larger than 'chunk_size_warn_limit':/ &&
|
566
|
-
line =~ / tag="test.tag"
|
567
|
-
}.size
|
523
|
+
line =~ / tag="test.tag" host="127.0.0.1" limit=16777216 size=16777501/
|
524
|
+
}.size, "large chunk warning is not logged"
|
525
|
+
|
526
|
+
d.instance_shutdown
|
568
527
|
end
|
569
528
|
|
570
|
-
|
571
|
-
d = create_driver(CONFIG + %[
|
572
|
-
|
573
|
-
|
574
|
-
time =
|
529
|
+
test 'send_large_chunk_only_warning' do
|
530
|
+
@d = d = create_driver(CONFIG + %[
|
531
|
+
chunk_size_warn_limit 16M
|
532
|
+
])
|
533
|
+
time = event_time("2014-04-25 13:14:15 UTC")
|
575
534
|
|
576
535
|
# generate over 16M chunk
|
577
536
|
str = "X" * 1024 * 1024
|
578
537
|
chunk = [ "test.tag", (0...16).map{|i| [time + i, {"data" => str}] } ].to_msgpack
|
579
538
|
|
580
|
-
d.run do
|
581
|
-
sleep 0.1 until d.instance.instance_eval{ @thread } && d.instance.instance_eval{ @thread }.status
|
582
|
-
|
539
|
+
d.run(shutdown: false) do
|
583
540
|
Fluent::Engine.msgpack_factory.unpacker.feed_each(chunk) do |obj|
|
584
|
-
d.instance.send(:on_message, obj, chunk.size,
|
541
|
+
d.instance.send(:on_message, obj, chunk.size, '127.0.0.1')
|
585
542
|
end
|
586
543
|
end
|
587
544
|
|
588
545
|
# check log
|
589
|
-
|
546
|
+
logs = d.instance.log.logs
|
547
|
+
assert_equal 1, logs.select{ |line|
|
590
548
|
line =~ / \[warn\]: Input chunk size is larger than 'chunk_size_warn_limit':/ &&
|
591
|
-
line =~ / tag="test.tag"
|
592
|
-
}.size
|
549
|
+
line =~ / tag="test.tag" host="127.0.0.1" limit=16777216 size=16777501/
|
550
|
+
}.size, "large chunk warning is not logged"
|
551
|
+
|
552
|
+
d.instance_shutdown
|
593
553
|
end
|
594
554
|
|
595
|
-
|
596
|
-
d = create_driver(CONFIG + %[
|
597
|
-
|
598
|
-
|
599
|
-
|
555
|
+
test 'send_large_chunk_limit' do
|
556
|
+
@d = d = create_driver(CONFIG + %[
|
557
|
+
chunk_size_warn_limit 16M
|
558
|
+
chunk_size_limit 32M
|
559
|
+
])
|
600
560
|
|
601
|
-
time =
|
561
|
+
time = event_time("2014-04-25 13:14:15 UTC")
|
602
562
|
|
603
563
|
# generate over 32M chunk
|
604
564
|
str = "X" * 1024 * 1024
|
@@ -606,51 +566,50 @@ class ForwardInputTest < Test::Unit::TestCase
|
|
606
566
|
assert chunk.size > (32 * 1024 * 1024)
|
607
567
|
|
608
568
|
# d.run => send_data
|
609
|
-
d.run do
|
610
|
-
sleep 0.1 until d.instance.instance_eval{ @thread } && d.instance.instance_eval{ @thread }.status
|
611
|
-
|
569
|
+
d.run(shutdown: false) do
|
612
570
|
Fluent::Engine.msgpack_factory.unpacker.feed_each(chunk) do |obj|
|
613
|
-
d.instance.send(:on_message, obj, chunk.size,
|
571
|
+
d.instance.send(:on_message, obj, chunk.size, '127.0.0.1')
|
614
572
|
end
|
615
573
|
end
|
616
574
|
|
617
575
|
# check emitted data
|
618
|
-
emits = d.
|
576
|
+
emits = d.events
|
619
577
|
assert_equal 0, emits.size
|
620
578
|
|
621
579
|
# check log
|
622
|
-
|
580
|
+
logs = d.instance.log.logs
|
581
|
+
assert_equal 1, logs.select{|line|
|
623
582
|
line =~ / \[warn\]: Input chunk size is larger than 'chunk_size_limit', dropped:/ &&
|
624
|
-
line =~ / tag="test.tag"
|
625
|
-
}.size
|
583
|
+
line =~ / tag="test.tag" host="127.0.0.1" limit=33554432 size=33554989/
|
584
|
+
}.size, "large chunk warning is not logged"
|
585
|
+
|
586
|
+
d.instance_shutdown
|
626
587
|
end
|
627
588
|
|
628
589
|
data('string chunk' => 'broken string',
|
629
590
|
'integer chunk' => 10)
|
630
|
-
|
631
|
-
d = create_driver
|
591
|
+
test 'send_broken_chunk' do |data|
|
592
|
+
@d = d = create_driver
|
632
593
|
|
633
594
|
# d.run => send_data
|
634
|
-
d.run do
|
635
|
-
|
636
|
-
|
637
|
-
d.instance.send(:on_message, data, 1000000000, PEERADDR)
|
595
|
+
d.run(shutdown: false) do
|
596
|
+
d.instance.send(:on_message, data, 1000000000, '127.0.0.1')
|
638
597
|
end
|
639
598
|
|
640
599
|
# check emitted data
|
641
|
-
|
642
|
-
assert_equal 0, emits.size
|
600
|
+
assert_equal 0, d.events.size
|
643
601
|
|
644
602
|
# check log
|
645
|
-
|
646
|
-
|
647
|
-
|
603
|
+
logs = d.instance.log.logs
|
604
|
+
assert_equal 1, logs.select{|line|
|
605
|
+
line =~ / \[warn\]: incoming chunk is broken: host="127.0.0.1" msg=#{data.inspect}/
|
606
|
+
}.size, "should not accept broken chunk"
|
607
|
+
|
608
|
+
d.instance_shutdown
|
648
609
|
end
|
649
610
|
end
|
650
611
|
|
651
|
-
|
652
|
-
extend Fluent::Test::StartupShutdown
|
653
|
-
|
612
|
+
sub_test_case 'respond to required ack' do
|
654
613
|
data(tcp: {
|
655
614
|
config: CONFIG,
|
656
615
|
options: {
|
@@ -663,24 +622,21 @@ class ForwardInputTest < Test::Unit::TestCase
|
|
663
622
|
auth: true
|
664
623
|
}
|
665
624
|
})
|
666
|
-
|
625
|
+
test 'message' do |data|
|
667
626
|
config = data[:config]
|
668
627
|
options = data[:options]
|
669
|
-
d = create_driver(config)
|
628
|
+
@d = d = create_driver(config)
|
670
629
|
|
671
|
-
time =
|
630
|
+
time = event_time("2011-01-02 13:14:15 UTC")
|
672
631
|
|
673
632
|
events = [
|
674
633
|
["tag1", time, {"a"=>1}],
|
675
634
|
["tag2", time, {"a"=>2}]
|
676
635
|
]
|
677
|
-
d.expected_emits_length = events.length
|
678
636
|
|
679
637
|
expected_acks = []
|
680
638
|
|
681
|
-
d.run do
|
682
|
-
sleep 0.1 until d.instance.instance_eval{ @thread } && d.instance.instance_eval{ @thread }.status
|
683
|
-
|
639
|
+
d.run(expect_records: events.size) do
|
684
640
|
events.each {|tag, _time, record|
|
685
641
|
op = { 'chunk' => Base64.encode64(record.object_id.to_s) }
|
686
642
|
expected_acks << op['chunk']
|
@@ -688,10 +644,8 @@ class ForwardInputTest < Test::Unit::TestCase
|
|
688
644
|
}
|
689
645
|
end
|
690
646
|
|
691
|
-
assert_equal events, d.
|
647
|
+
assert_equal events, d.events
|
692
648
|
assert_equal expected_acks, @responses.map { |res| MessagePack.unpack(res)['ack'] }
|
693
|
-
|
694
|
-
sleep 0.1 while d.instance.instance_eval{ @thread }.status # to confirm that plugin stopped completely
|
695
649
|
end
|
696
650
|
|
697
651
|
# FIX: response is not pushed into @responses because IO.select has been blocked until InputForward shutdowns
|
@@ -707,24 +661,21 @@ class ForwardInputTest < Test::Unit::TestCase
|
|
707
661
|
auth: true
|
708
662
|
}
|
709
663
|
})
|
710
|
-
|
664
|
+
test 'forward' do |data|
|
711
665
|
config = data[:config]
|
712
666
|
options = data[:options]
|
713
|
-
d = create_driver(config)
|
667
|
+
@d = d = create_driver(config)
|
714
668
|
|
715
|
-
time =
|
669
|
+
time = event_time("2011-01-02 13:14:15 UTC")
|
716
670
|
|
717
671
|
events = [
|
718
672
|
["tag1", time, {"a"=>1}],
|
719
673
|
["tag1", time, {"a"=>2}]
|
720
674
|
]
|
721
|
-
d.expected_emits_length = events.length
|
722
675
|
|
723
676
|
expected_acks = []
|
724
677
|
|
725
|
-
d.run do
|
726
|
-
sleep 0.1 until d.instance.instance_eval{ @thread } && d.instance.instance_eval{ @thread }.status
|
727
|
-
|
678
|
+
d.run(expect_records: events.size) do
|
728
679
|
entries = []
|
729
680
|
events.each {|_tag, _time, record|
|
730
681
|
entries << [_time, record]
|
@@ -734,10 +685,8 @@ class ForwardInputTest < Test::Unit::TestCase
|
|
734
685
|
send_data ["tag1", entries, op].to_msgpack, try_to_receive_response: true, **options
|
735
686
|
end
|
736
687
|
|
737
|
-
assert_equal events, d.
|
688
|
+
assert_equal events, d.events
|
738
689
|
assert_equal expected_acks, @responses.map { |res| MessagePack.unpack(res)['ack'] }
|
739
|
-
|
740
|
-
sleep 0.1 while d.instance.instance_eval{ @thread }.status # to confirm that plugin stopped completely
|
741
690
|
end
|
742
691
|
|
743
692
|
data(tcp: {
|
@@ -752,24 +701,21 @@ class ForwardInputTest < Test::Unit::TestCase
|
|
752
701
|
auth: true
|
753
702
|
}
|
754
703
|
})
|
755
|
-
|
704
|
+
test 'packed_forward' do |data|
|
756
705
|
config = data[:config]
|
757
706
|
options = data[:options]
|
758
|
-
d = create_driver(config)
|
707
|
+
@d = d = create_driver(config)
|
759
708
|
|
760
|
-
time =
|
709
|
+
time = event_time("2011-01-02 13:14:15 UTC")
|
761
710
|
|
762
711
|
events = [
|
763
712
|
["tag1", time, {"a"=>1}],
|
764
713
|
["tag1", time, {"a"=>2}]
|
765
714
|
]
|
766
|
-
d.expected_emits_length = events.length
|
767
715
|
|
768
716
|
expected_acks = []
|
769
717
|
|
770
|
-
d.run do
|
771
|
-
sleep 0.1 until d.instance.instance_eval{ @thread } && d.instance.instance_eval{ @thread }.status
|
772
|
-
|
718
|
+
d.run(expect_records: events.size) do
|
773
719
|
entries = ''
|
774
720
|
events.each {|_tag, _time,record|
|
775
721
|
[time, record].to_msgpack(entries)
|
@@ -779,45 +725,40 @@ class ForwardInputTest < Test::Unit::TestCase
|
|
779
725
|
send_data ["tag1", entries, op].to_msgpack, try_to_receive_response: true, **options
|
780
726
|
end
|
781
727
|
|
782
|
-
assert_equal events, d.
|
728
|
+
assert_equal events, d.events
|
783
729
|
assert_equal expected_acks, @responses.map { |res| MessagePack.unpack(res)['ack'] }
|
784
|
-
|
785
|
-
sleep 0.1 while d.instance.instance_eval{ @thread }.status # to confirm that plugin stopped completely
|
786
730
|
end
|
787
731
|
|
788
|
-
data(
|
789
|
-
|
790
|
-
|
791
|
-
|
792
|
-
|
793
|
-
|
794
|
-
|
795
|
-
|
796
|
-
|
797
|
-
|
798
|
-
|
799
|
-
|
800
|
-
|
732
|
+
data(
|
733
|
+
tcp: {
|
734
|
+
config: CONFIG,
|
735
|
+
options: {
|
736
|
+
auth: false
|
737
|
+
}
|
738
|
+
},
|
739
|
+
### Auth is not supported with json
|
740
|
+
# auth: {
|
741
|
+
# config: CONFIG_AUTH,
|
742
|
+
# options: {
|
743
|
+
# auth: true
|
744
|
+
# }
|
745
|
+
# },
|
746
|
+
)
|
747
|
+
test 'message_json' do |data|
|
801
748
|
config = data[:config]
|
802
749
|
options = data[:options]
|
803
|
-
|
804
|
-
d = create_driver(config)
|
750
|
+
@d = d = create_driver(config)
|
805
751
|
|
806
|
-
|
752
|
+
time_i = event_time("2011-01-02 13:14:15 UTC")
|
807
753
|
|
808
754
|
events = [
|
809
|
-
["tag1",
|
810
|
-
["tag2",
|
755
|
+
["tag1", time_i, {"a"=>1}],
|
756
|
+
["tag2", time_i, {"a"=>2}]
|
811
757
|
]
|
812
|
-
d.expected_emits_length = events.length
|
813
758
|
|
814
759
|
expected_acks = []
|
815
760
|
|
816
|
-
d.
|
817
|
-
d.run_timeout = 2
|
818
|
-
d.run do
|
819
|
-
sleep 0.1 until d.instance.instance_eval{ @thread } && d.instance.instance_eval{ @thread }.status
|
820
|
-
|
761
|
+
d.run(expect_records: events.size, timeout: 20) do
|
821
762
|
events.each {|tag, _time, record|
|
822
763
|
op = { 'chunk' => Base64.encode64(record.object_id.to_s) }
|
823
764
|
expected_acks << op['chunk']
|
@@ -825,16 +766,12 @@ class ForwardInputTest < Test::Unit::TestCase
|
|
825
766
|
}
|
826
767
|
end
|
827
768
|
|
828
|
-
assert_equal events, d.
|
769
|
+
assert_equal events, d.events
|
829
770
|
assert_equal expected_acks, @responses.map { |res| JSON.parse(res)['ack'] }
|
830
|
-
|
831
|
-
sleep 0.1 while d.instance.instance_eval{ @thread }.status # to confirm that plugin stopped completely
|
832
771
|
end
|
833
772
|
end
|
834
773
|
|
835
|
-
|
836
|
-
extend Fluent::Test::StartupShutdown
|
837
|
-
|
774
|
+
sub_test_case 'not respond without required ack' do
|
838
775
|
data(tcp: {
|
839
776
|
config: CONFIG,
|
840
777
|
options: {
|
@@ -847,31 +784,26 @@ class ForwardInputTest < Test::Unit::TestCase
|
|
847
784
|
auth: true
|
848
785
|
}
|
849
786
|
})
|
850
|
-
|
787
|
+
test 'message' do |data|
|
851
788
|
config = data[:config]
|
852
789
|
options = data[:options]
|
853
|
-
d = create_driver(config)
|
790
|
+
@d = d = create_driver(config)
|
854
791
|
|
855
|
-
time =
|
792
|
+
time = event_time("2011-01-02 13:14:15 UTC")
|
856
793
|
|
857
794
|
events = [
|
858
795
|
["tag1", time, {"a"=>1}],
|
859
796
|
["tag2", time, {"a"=>2}]
|
860
797
|
]
|
861
|
-
d.expected_emits_length = events.length
|
862
|
-
|
863
|
-
d.run do
|
864
|
-
sleep 0.1 until d.instance.instance_eval{ @thread } && d.instance.instance_eval{ @thread }.status
|
865
798
|
|
799
|
+
d.run(expect_records: events.size, timeout: 20) do
|
866
800
|
events.each {|tag, _time, record|
|
867
801
|
send_data [tag, _time, record].to_msgpack, try_to_receive_response: true, **options
|
868
802
|
}
|
869
803
|
end
|
870
804
|
|
871
|
-
assert_equal events, d.
|
805
|
+
assert_equal events, d.events
|
872
806
|
assert_equal [nil, nil], @responses
|
873
|
-
|
874
|
-
sleep 0.1 while d.instance.instance_eval{ @thread }.status # to confirm that plugin stopped completely
|
875
807
|
end
|
876
808
|
|
877
809
|
data(tcp: {
|
@@ -886,22 +818,19 @@ class ForwardInputTest < Test::Unit::TestCase
|
|
886
818
|
auth: true
|
887
819
|
}
|
888
820
|
})
|
889
|
-
|
821
|
+
test 'forward' do |data|
|
890
822
|
config = data[:config]
|
891
823
|
options = data[:options]
|
892
|
-
d = create_driver(config)
|
824
|
+
@d = d = create_driver(config)
|
893
825
|
|
894
|
-
time =
|
826
|
+
time = event_time("2011-01-02 13:14:15 UTC")
|
895
827
|
|
896
828
|
events = [
|
897
829
|
["tag1", time, {"a"=>1}],
|
898
830
|
["tag1", time, {"a"=>2}]
|
899
831
|
]
|
900
|
-
d.expected_emits_length = events.length
|
901
|
-
|
902
|
-
d.run do
|
903
|
-
sleep 0.1 until d.instance.instance_eval{ @thread } && d.instance.instance_eval{ @thread }.status
|
904
832
|
|
833
|
+
d.run(expect_records: events.size, timeout: 20) do
|
905
834
|
entries = []
|
906
835
|
events.each {|tag, _time, record|
|
907
836
|
entries << [_time, record]
|
@@ -909,10 +838,8 @@ class ForwardInputTest < Test::Unit::TestCase
|
|
909
838
|
send_data ["tag1", entries].to_msgpack, try_to_receive_response: true, **options
|
910
839
|
end
|
911
840
|
|
912
|
-
assert_equal events, d.
|
841
|
+
assert_equal events, d.events
|
913
842
|
assert_equal [nil], @responses
|
914
|
-
|
915
|
-
sleep 0.1 while d.instance.instance_eval{ @thread }.status # to confirm that plugin stopped completely
|
916
843
|
end
|
917
844
|
|
918
845
|
data(tcp: {
|
@@ -927,22 +854,19 @@ class ForwardInputTest < Test::Unit::TestCase
|
|
927
854
|
auth: true
|
928
855
|
}
|
929
856
|
})
|
930
|
-
|
857
|
+
test 'packed_forward' do |data|
|
931
858
|
config = data[:config]
|
932
859
|
options = data[:options]
|
933
|
-
d = create_driver(config)
|
860
|
+
@d = d = create_driver(config)
|
934
861
|
|
935
|
-
time =
|
862
|
+
time = event_time("2011-01-02 13:14:15 UTC")
|
936
863
|
|
937
864
|
events = [
|
938
865
|
["tag1", time, {"a"=>1}],
|
939
866
|
["tag1", time, {"a"=>2}]
|
940
867
|
]
|
941
|
-
d.expected_emits_length = events.length
|
942
|
-
|
943
|
-
d.run do
|
944
|
-
sleep 0.1 until d.instance.instance_eval{ @thread } && d.instance.instance_eval{ @thread }.status
|
945
868
|
|
869
|
+
d.run(expect_records: events.size, timeout: 20) do
|
946
870
|
entries = ''
|
947
871
|
events.each {|tag, _time, record|
|
948
872
|
[_time, record].to_msgpack(entries)
|
@@ -950,50 +874,45 @@ class ForwardInputTest < Test::Unit::TestCase
|
|
950
874
|
send_data ["tag1", entries].to_msgpack, try_to_receive_response: true, **options
|
951
875
|
end
|
952
876
|
|
953
|
-
assert_equal events, d.
|
877
|
+
assert_equal events, d.events
|
954
878
|
assert_equal [nil], @responses
|
955
|
-
|
956
|
-
sleep 0.1 while d.instance.instance_eval{ @thread }.status # to confirm that plugin stopped completely
|
957
879
|
end
|
958
880
|
|
959
|
-
data(
|
960
|
-
|
961
|
-
|
962
|
-
|
963
|
-
|
964
|
-
|
965
|
-
|
966
|
-
|
967
|
-
|
968
|
-
|
969
|
-
|
970
|
-
|
971
|
-
|
881
|
+
data(
|
882
|
+
tcp: {
|
883
|
+
config: CONFIG,
|
884
|
+
options: {
|
885
|
+
auth: false
|
886
|
+
}
|
887
|
+
},
|
888
|
+
### Auth is not supported with json
|
889
|
+
# auth: {
|
890
|
+
# config: CONFIG_AUTH,
|
891
|
+
# options: {
|
892
|
+
# auth: true
|
893
|
+
# }
|
894
|
+
# },
|
895
|
+
)
|
896
|
+
test 'message_json' do |data|
|
972
897
|
config = data[:config]
|
973
898
|
options = data[:options]
|
974
|
-
|
975
|
-
d = create_driver(config)
|
899
|
+
@d = d = create_driver(config)
|
976
900
|
|
977
|
-
|
901
|
+
time_i = event_time("2011-01-02 13:14:15 UTC").to_i
|
978
902
|
|
979
903
|
events = [
|
980
|
-
["tag1",
|
981
|
-
["tag2",
|
904
|
+
["tag1", time_i, {"a"=>1}],
|
905
|
+
["tag2", time_i, {"a"=>2}]
|
982
906
|
]
|
983
|
-
d.expected_emits_length = events.length
|
984
|
-
|
985
|
-
d.run do
|
986
|
-
sleep 0.1 until d.instance.instance_eval{ @thread } && d.instance.instance_eval{ @thread }.status
|
987
907
|
|
908
|
+
d.run(expect_records: events.size, timeout: 20) do
|
988
909
|
events.each {|tag, _time, record|
|
989
910
|
send_data [tag, _time, record].to_json, try_to_receive_response: true, **options
|
990
911
|
}
|
991
912
|
end
|
992
913
|
|
993
|
-
assert_equal events, d.
|
914
|
+
assert_equal events, d.events
|
994
915
|
assert_equal [nil, nil], @responses
|
995
|
-
|
996
|
-
sleep 0.1 while d.instance.instance_eval{ @thread }.status # to confirm that plugin stopped completely
|
997
916
|
end
|
998
917
|
end
|
999
918
|
|
@@ -1011,11 +930,12 @@ class ForwardInputTest < Test::Unit::TestCase
|
|
1011
930
|
def read_data(io, timeout, &block)
|
1012
931
|
res = ''
|
1013
932
|
select_timeout = 2
|
1014
|
-
|
933
|
+
clock_id = Process::CLOCK_MONOTONIC_RAW rescue Process::CLOCK_MONOTONIC
|
934
|
+
timeout_at = Process.clock_gettime(clock_id) + timeout
|
1015
935
|
begin
|
1016
936
|
buf = ''
|
1017
937
|
io_activated = false
|
1018
|
-
while
|
938
|
+
while Process.clock_gettime(clock_id) < timeout_at
|
1019
939
|
if IO.select([io], nil, nil, select_timeout)
|
1020
940
|
io_activated = true
|
1021
941
|
buf = io.readpartial(2048)
|
@@ -1089,6 +1009,10 @@ class ForwardInputTest < Test::Unit::TestCase
|
|
1089
1009
|
true
|
1090
1010
|
end
|
1091
1011
|
|
1012
|
+
def connect
|
1013
|
+
TCPSocket.new('127.0.0.1', PORT)
|
1014
|
+
end
|
1015
|
+
|
1092
1016
|
# Data ordering is not assured:
|
1093
1017
|
# Records in different sockets are processed on different thread, so its scheduling make effect
|
1094
1018
|
# on order of emitted records.
|
@@ -1110,8 +1034,6 @@ class ForwardInputTest < Test::Unit::TestCase
|
|
1110
1034
|
end
|
1111
1035
|
|
1112
1036
|
sub_test_case 'source_hostname_key feature' do
|
1113
|
-
extend Fluent::Test::StartupShutdown
|
1114
|
-
|
1115
1037
|
test 'message protocol with source_hostname_key' do
|
1116
1038
|
execute_test { |events|
|
1117
1039
|
events.each { |tag, time, record|
|
@@ -1142,20 +1064,19 @@ class ForwardInputTest < Test::Unit::TestCase
|
|
1142
1064
|
end
|
1143
1065
|
|
1144
1066
|
def execute_test(&block)
|
1145
|
-
d = create_driver(CONFIG + 'source_hostname_key source')
|
1067
|
+
@d = d = create_driver(CONFIG + 'source_hostname_key source')
|
1146
1068
|
|
1147
|
-
time =
|
1069
|
+
time = event_time("2011-01-02 13:14:15 UTC")
|
1148
1070
|
events = [
|
1149
1071
|
["tag1", time, {"a"=>1}],
|
1150
1072
|
["tag1", time, {"a"=>2}]
|
1151
1073
|
]
|
1152
|
-
d.expected_emits_length = events.length
|
1153
1074
|
|
1154
|
-
d.run do
|
1075
|
+
d.run(expect_records: events.size) do
|
1155
1076
|
block.call(events)
|
1156
1077
|
end
|
1157
1078
|
|
1158
|
-
d.
|
1079
|
+
d.events.each { |tag, _time, record|
|
1159
1080
|
assert_true record.has_key?('source')
|
1160
1081
|
}
|
1161
1082
|
end
|