fluentd 0.14.6 → 0.14.7
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/ChangeLog +46 -0
- data/bin/fluent-binlog-reader +7 -0
- data/example/in_dummy_with_compression.conf +23 -0
- data/lib/fluent/agent.rb +8 -12
- data/lib/fluent/command/binlog_reader.rb +234 -0
- data/lib/fluent/command/fluentd.rb +17 -1
- data/lib/fluent/compat/file_util.rb +1 -1
- data/lib/fluent/compat/output.rb +5 -1
- data/lib/fluent/config/configure_proxy.rb +18 -4
- data/lib/fluent/config/element.rb +1 -1
- data/lib/fluent/config/section.rb +1 -1
- data/lib/fluent/config/v1_parser.rb +1 -1
- data/lib/fluent/env.rb +1 -0
- data/lib/fluent/event.rb +49 -2
- data/lib/fluent/event_router.rb +6 -2
- data/lib/fluent/label.rb +8 -0
- data/lib/fluent/log.rb +30 -1
- data/lib/fluent/plugin.rb +1 -1
- data/lib/fluent/plugin/base.rb +3 -0
- data/lib/fluent/plugin/buf_file.rb +2 -2
- data/lib/fluent/plugin/buf_memory.rb +1 -1
- data/lib/fluent/plugin/buffer.rb +12 -2
- data/lib/fluent/plugin/buffer/chunk.rb +68 -7
- data/lib/fluent/plugin/buffer/file_chunk.rb +4 -4
- data/lib/fluent/plugin/buffer/memory_chunk.rb +4 -4
- data/lib/fluent/plugin/compressable.rb +91 -0
- data/lib/fluent/plugin/filter_grep.rb +4 -4
- data/lib/fluent/plugin/formatter.rb +2 -2
- data/lib/fluent/plugin/formatter_json.rb +2 -1
- data/lib/fluent/plugin/formatter_out_file.rb +3 -30
- data/lib/fluent/plugin/in_forward.rb +3 -2
- data/lib/fluent/plugin/in_monitor_agent.rb +7 -21
- data/lib/fluent/plugin/in_syslog.rb +1 -1
- data/lib/fluent/plugin/in_tail.rb +10 -2
- data/lib/fluent/plugin/multi_output.rb +63 -3
- data/lib/fluent/plugin/out_exec.rb +1 -1
- data/lib/fluent/plugin/out_file.rb +5 -1
- data/lib/fluent/plugin/out_forward.rb +17 -5
- data/lib/fluent/plugin/out_stdout.rb +2 -1
- data/lib/fluent/plugin/output.rb +205 -19
- data/lib/fluent/plugin/parser.rb +5 -49
- data/lib/fluent/plugin/parser_apache2.rb +1 -1
- data/lib/fluent/plugin/parser_json.rb +4 -4
- data/lib/fluent/plugin/parser_multiline.rb +5 -5
- data/lib/fluent/plugin/parser_regexp.rb +1 -2
- data/lib/fluent/plugin/parser_syslog.rb +2 -2
- data/lib/fluent/plugin/storage_local.rb +2 -1
- data/lib/fluent/plugin_helper.rb +1 -0
- data/lib/fluent/plugin_helper/compat_parameters.rb +39 -21
- data/lib/fluent/plugin_helper/extract.rb +92 -0
- data/lib/fluent/plugin_helper/inject.rb +10 -12
- data/lib/fluent/plugin_helper/thread.rb +23 -3
- data/lib/fluent/registry.rb +1 -1
- data/lib/fluent/root_agent.rb +2 -1
- data/lib/fluent/supervisor.rb +28 -8
- data/lib/fluent/test/base.rb +0 -7
- data/lib/fluent/test/driver/base.rb +1 -0
- data/lib/fluent/test/driver/output.rb +3 -0
- data/lib/fluent/test/helpers.rb +18 -0
- data/lib/fluent/test/input_test.rb +4 -2
- data/lib/fluent/test/log.rb +3 -1
- data/lib/fluent/time.rb +232 -1
- data/lib/fluent/timezone.rb +1 -1
- data/lib/fluent/version.rb +1 -1
- data/test/command/test_binlog_reader.rb +351 -0
- data/test/config/test_config_parser.rb +6 -0
- data/test/config/test_configurable.rb +47 -1
- data/test/helper.rb +0 -1
- data/test/plugin/test_buffer.rb +22 -2
- data/test/plugin/test_buffer_chunk.rb +34 -4
- data/test/plugin/test_buffer_file_chunk.rb +73 -0
- data/test/plugin/test_buffer_memory_chunk.rb +73 -0
- data/test/plugin/test_compressable.rb +81 -0
- data/test/plugin/test_formatter_json.rb +14 -1
- data/test/plugin/test_in_forward.rb +67 -3
- data/test/plugin/test_in_monitor_agent.rb +17 -1
- data/test/plugin/test_in_tail.rb +8 -8
- data/test/plugin/test_out_file.rb +0 -8
- data/test/plugin/test_out_forward.rb +85 -0
- data/test/plugin/test_out_secondary_file.rb +20 -12
- data/test/plugin/test_out_stdout.rb +11 -10
- data/test/plugin/test_output.rb +234 -0
- data/test/plugin/test_output_as_buffered.rb +223 -0
- data/test/plugin/test_output_as_buffered_compress.rb +165 -0
- data/test/plugin/test_parser_json.rb +8 -0
- data/test/plugin/test_parser_regexp.rb +1 -1
- data/test/plugin_helper/test_child_process.rb +2 -2
- data/test/plugin_helper/test_extract.rb +195 -0
- data/test/plugin_helper/test_inject.rb +0 -7
- data/test/scripts/fluent/plugin/formatter1/formatter_test1.rb +7 -0
- data/test/scripts/fluent/plugin/formatter2/formatter_test2.rb +7 -0
- data/test/test_event.rb +186 -0
- data/test/test_event_router.rb +1 -1
- data/test/test_formatter.rb +0 -7
- data/test/test_log.rb +121 -0
- data/test/test_plugin_classes.rb +62 -0
- data/test/test_root_agent.rb +125 -0
- data/test/test_supervisor.rb +25 -2
- data/test/test_time_formatter.rb +103 -7
- data/test/test_time_parser.rb +211 -0
- metadata +23 -4
- data/test/plugin/test_parser_time.rb +0 -46
data/test/helper.rb
CHANGED
data/test/plugin/test_buffer.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
require_relative '../helper'
|
2
2
|
require 'fluent/plugin/buffer'
|
3
3
|
require 'fluent/plugin/buffer/memory_chunk'
|
4
|
+
require 'fluent/plugin/compressable'
|
5
|
+
require 'fluent/plugin/buffer/chunk'
|
4
6
|
require 'fluent/event'
|
5
7
|
require 'flexmock/test_unit'
|
6
8
|
|
@@ -18,7 +20,7 @@ module FluentPluginBufferTest
|
|
18
20
|
class DummyMemoryChunk < Fluent::Plugin::Buffer::MemoryChunk
|
19
21
|
attr_reader :append_count, :rollbacked, :closed, :purged
|
20
22
|
attr_accessor :failing
|
21
|
-
def initialize(metadata)
|
23
|
+
def initialize(metadata, compress: :text)
|
22
24
|
super
|
23
25
|
@append_count = 0
|
24
26
|
@rollbacked = false
|
@@ -77,7 +79,7 @@ module FluentPluginBufferTest
|
|
77
79
|
return staged, queued
|
78
80
|
end
|
79
81
|
def generate_chunk(metadata)
|
80
|
-
DummyMemoryChunk.new(metadata)
|
82
|
+
DummyMemoryChunk.new(metadata, compress: @compress)
|
81
83
|
end
|
82
84
|
end
|
83
85
|
end
|
@@ -865,6 +867,10 @@ class BufferTest < Test::Unit::TestCase
|
|
865
867
|
assert{ @p.stage[@dm1].size == 2 }
|
866
868
|
assert @p.stage[@dm1].rollbacked
|
867
869
|
end
|
870
|
+
|
871
|
+
test '#compress returns :text' do
|
872
|
+
assert_equal :text, @p.compress
|
873
|
+
end
|
868
874
|
end
|
869
875
|
|
870
876
|
sub_test_case 'standard format with configuration for test with lower chunk limit size' do
|
@@ -1197,4 +1203,18 @@ class BufferTest < Test::Unit::TestCase
|
|
1197
1203
|
end
|
1198
1204
|
end
|
1199
1205
|
|
1206
|
+
sub_test_case 'when compress is gzip' do
|
1207
|
+
setup do
|
1208
|
+
@p = create_buffer({'compress' => 'gzip'})
|
1209
|
+
end
|
1210
|
+
|
1211
|
+
test '#compress returns :gzip' do
|
1212
|
+
assert_equal :gzip, @p.compress
|
1213
|
+
end
|
1214
|
+
|
1215
|
+
test 'create decompressable chunk' do
|
1216
|
+
chunk = @p.generate_chunk(create_metadata)
|
1217
|
+
assert chunk.singleton_class.ancestors.include?(Fluent::Plugin::Buffer::Chunk::Decompressable)
|
1218
|
+
end
|
1219
|
+
end
|
1200
1220
|
end
|
@@ -31,7 +31,6 @@ class BufferChunkTest < Test::Unit::TestCase
|
|
31
31
|
assert chunk.respond_to?(:read)
|
32
32
|
assert chunk.respond_to?(:open)
|
33
33
|
assert chunk.respond_to?(:write_to)
|
34
|
-
assert chunk.respond_to?(:msgpack_each)
|
35
34
|
assert_raise(NotImplementedError){ chunk.append([]) }
|
36
35
|
assert_raise(NotImplementedError){ chunk.concat(nil, 0) }
|
37
36
|
assert_raise(NotImplementedError){ chunk.commit }
|
@@ -43,7 +42,29 @@ class BufferChunkTest < Test::Unit::TestCase
|
|
43
42
|
assert_raise(NotImplementedError){ chunk.read }
|
44
43
|
assert_raise(NotImplementedError){ chunk.open(){} }
|
45
44
|
assert_raise(NotImplementedError){ chunk.write_to(nil) }
|
46
|
-
|
45
|
+
assert !chunk.respond_to?(:msgpack_each)
|
46
|
+
end
|
47
|
+
|
48
|
+
test 'has method #each and #msgpack_each only when extended by ChunkMessagePackEventStreamer' do
|
49
|
+
meta = Object.new
|
50
|
+
chunk = Fluent::Plugin::Buffer::Chunk.new(meta)
|
51
|
+
|
52
|
+
assert !chunk.respond_to?(:each)
|
53
|
+
assert !chunk.respond_to?(:msgpack_each)
|
54
|
+
|
55
|
+
chunk.extend Fluent::ChunkMessagePackEventStreamer
|
56
|
+
assert chunk.respond_to?(:each)
|
57
|
+
assert chunk.respond_to?(:msgpack_each)
|
58
|
+
end
|
59
|
+
|
60
|
+
test 'some methods raise ArgumentError with an option of `compressed: :gzip` and without extending Compressble`' do
|
61
|
+
meta = Object.new
|
62
|
+
chunk = Fluent::Plugin::Buffer::Chunk.new(meta)
|
63
|
+
|
64
|
+
assert_raise(ArgumentError){ chunk.read(compressed: :gzip) }
|
65
|
+
assert_raise(ArgumentError){ chunk.open(compressed: :gzip){} }
|
66
|
+
assert_raise(ArgumentError){ chunk.write_to(nil, compressed: :gzip) }
|
67
|
+
assert_raise(ArgumentError){ chunk.append(nil, compress: :gzip) }
|
47
68
|
end
|
48
69
|
end
|
49
70
|
|
@@ -56,7 +77,7 @@ class BufferChunkTest < Test::Unit::TestCase
|
|
56
77
|
def size
|
57
78
|
@data.size
|
58
79
|
end
|
59
|
-
def open
|
80
|
+
def open(**kwargs)
|
60
81
|
require 'stringio'
|
61
82
|
io = StringIO.new(@data)
|
62
83
|
yield io
|
@@ -152,9 +173,10 @@ class BufferChunkTest < Test::Unit::TestCase
|
|
152
173
|
assert "my data\nyour data\n", io.to_s
|
153
174
|
end
|
154
175
|
|
155
|
-
test 'can feed objects into blocks with unpacking msgpack' do
|
176
|
+
test 'can feed objects into blocks with unpacking msgpack if ChunkMessagePackEventStreamer is included' do
|
156
177
|
require 'msgpack'
|
157
178
|
c = TestChunk.new(Object.new)
|
179
|
+
c.extend Fluent::ChunkMessagePackEventStreamer
|
158
180
|
c.data << MessagePack.pack(['my data', 1])
|
159
181
|
c.data << MessagePack.pack(['your data', 2])
|
160
182
|
ary = []
|
@@ -165,4 +187,12 @@ class BufferChunkTest < Test::Unit::TestCase
|
|
165
187
|
assert_equal ['your data', 2], ary[1]
|
166
188
|
end
|
167
189
|
end
|
190
|
+
|
191
|
+
sub_test_case 'when compress is gzip' do
|
192
|
+
test 'create decompressable chunk' do
|
193
|
+
meta = Object.new
|
194
|
+
chunk = Fluent::Plugin::Buffer::Chunk.new(meta, compress: :gzip)
|
195
|
+
assert chunk.singleton_class.ancestors.include?(Fluent::Plugin::Buffer::Chunk::Decompressable)
|
196
|
+
end
|
197
|
+
end
|
168
198
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require_relative '../helper'
|
2
2
|
require 'fluent/plugin/buffer/file_chunk'
|
3
|
+
require 'fluent/plugin/compressable'
|
3
4
|
require 'fluent/unique_id'
|
4
5
|
|
5
6
|
require 'fileutils'
|
@@ -8,6 +9,8 @@ require 'time'
|
|
8
9
|
require 'timecop'
|
9
10
|
|
10
11
|
class BufferFileChunkTest < Test::Unit::TestCase
|
12
|
+
include Fluent::Plugin::Compressable
|
13
|
+
|
11
14
|
setup do
|
12
15
|
@klass = Fluent::Plugin::Buffer::FileChunk
|
13
16
|
@chunkdir = File.expand_path('../../tmp/buffer_file_chunk', __FILE__)
|
@@ -768,4 +771,74 @@ class BufferFileChunkTest < Test::Unit::TestCase
|
|
768
771
|
end
|
769
772
|
end
|
770
773
|
end
|
774
|
+
|
775
|
+
sub_test_case 'compressed buffer' do
|
776
|
+
setup do
|
777
|
+
@src = 'text data for compressing' * 5
|
778
|
+
@gzipped_src = compress(@src)
|
779
|
+
end
|
780
|
+
|
781
|
+
test '#append with compress option writes compressed data to chunk when compress is gzip' do
|
782
|
+
c = @klass.new(gen_metadata, File.join(@chunkdir,'test.*.log'), :create, compress: :gzip)
|
783
|
+
c.append([@src, @src], compress: :gzip)
|
784
|
+
c.commit
|
785
|
+
|
786
|
+
# check chunk is compressed
|
787
|
+
assert c.read(compressed: :gzip).size < [@src, @src].join("").size
|
788
|
+
|
789
|
+
assert_equal @src + @src, c.read
|
790
|
+
end
|
791
|
+
|
792
|
+
test '#open passes io object having decompressed data to a block when compress is gzip' do
|
793
|
+
c = @klass.new(gen_metadata, File.join(@chunkdir,'test.*.log'), :create, compress: :gzip)
|
794
|
+
c.concat(@gzipped_src, @src.size)
|
795
|
+
c.commit
|
796
|
+
|
797
|
+
decomressed_data = c.open do |io|
|
798
|
+
v = io.read
|
799
|
+
assert_equal @src, v
|
800
|
+
v
|
801
|
+
end
|
802
|
+
assert_equal @src, decomressed_data
|
803
|
+
end
|
804
|
+
|
805
|
+
test '#open with compressed option passes io object having decompressed data to a block when compress is gzip' do
|
806
|
+
c = @klass.new(gen_metadata, File.join(@chunkdir,'test.*.log'), :create, compress: :gzip)
|
807
|
+
c.concat(@gzipped_src, @src.size)
|
808
|
+
c.commit
|
809
|
+
|
810
|
+
comressed_data = c.open(compressed: :gzip) do |io|
|
811
|
+
v = io.read
|
812
|
+
assert_equal @gzipped_src, v
|
813
|
+
v
|
814
|
+
end
|
815
|
+
assert_equal @gzipped_src, comressed_data
|
816
|
+
end
|
817
|
+
|
818
|
+
test '#write_to writes decompressed data when compress is gzip' do
|
819
|
+
c = @klass.new(gen_metadata, File.join(@chunkdir,'test.*.log'), :create, compress: :gzip)
|
820
|
+
c.concat(@gzipped_src, @src.size)
|
821
|
+
c.commit
|
822
|
+
|
823
|
+
assert_equal @src, c.read
|
824
|
+
assert_equal @gzipped_src, c.read(compressed: :gzip)
|
825
|
+
|
826
|
+
io = StringIO.new
|
827
|
+
c.write_to(io)
|
828
|
+
assert_equal @src, io.string
|
829
|
+
end
|
830
|
+
|
831
|
+
test '#write_to with compressed option writes compressed data when compress is gzip' do
|
832
|
+
c = @klass.new(gen_metadata, File.join(@chunkdir,'test.*.log'), :create, compress: :gzip)
|
833
|
+
c.concat(@gzipped_src, @src.size)
|
834
|
+
c.commit
|
835
|
+
|
836
|
+
assert_equal @src, c.read
|
837
|
+
assert_equal @gzipped_src, c.read(compressed: :gzip)
|
838
|
+
|
839
|
+
io = StringIO.new
|
840
|
+
c.write_to(io, compressed: :gzip)
|
841
|
+
assert_equal @gzipped_src, io.string
|
842
|
+
end
|
843
|
+
end
|
771
844
|
end
|
@@ -1,9 +1,12 @@
|
|
1
1
|
require_relative '../helper'
|
2
2
|
require 'fluent/plugin/buffer/memory_chunk'
|
3
|
+
require 'fluent/plugin/compressable'
|
3
4
|
|
4
5
|
require 'json'
|
5
6
|
|
6
7
|
class BufferMemoryChunkTest < Test::Unit::TestCase
|
8
|
+
include Fluent::Plugin::Compressable
|
9
|
+
|
7
10
|
setup do
|
8
11
|
@c = Fluent::Plugin::Buffer::MemoryChunk.new(Object.new)
|
9
12
|
end
|
@@ -262,4 +265,74 @@ class BufferMemoryChunkTest < Test::Unit::TestCase
|
|
262
265
|
assert_equal d3.to_json + "\n", lines[2]
|
263
266
|
assert_equal d4.to_json + "\n", lines[3]
|
264
267
|
end
|
268
|
+
|
269
|
+
sub_test_case 'compressed buffer' do
|
270
|
+
setup do
|
271
|
+
@src = 'text data for compressing' * 5
|
272
|
+
@gzipped_src = compress(@src)
|
273
|
+
end
|
274
|
+
|
275
|
+
test '#append with compress option writes compressed data to chunk when compress is gzip' do
|
276
|
+
c = Fluent::Plugin::Buffer::MemoryChunk.new(Object.new, compress: :gzip)
|
277
|
+
c.append([@src, @src], compress: :gzip)
|
278
|
+
c.commit
|
279
|
+
|
280
|
+
# check chunk is compressed
|
281
|
+
assert c.read(compressed: :gzip).size < [@src, @src].join("").size
|
282
|
+
|
283
|
+
assert_equal @src + @src, c.read
|
284
|
+
end
|
285
|
+
|
286
|
+
test '#open passes io object having decompressed data to a block when compress is gzip' do
|
287
|
+
c = Fluent::Plugin::Buffer::MemoryChunk.new(Object.new, compress: :gzip)
|
288
|
+
c.concat(@gzipped_src, @src.size)
|
289
|
+
c.commit
|
290
|
+
|
291
|
+
decomressed_data = c.open do |io|
|
292
|
+
v = io.read
|
293
|
+
assert_equal @src, v
|
294
|
+
v
|
295
|
+
end
|
296
|
+
assert_equal @src, decomressed_data
|
297
|
+
end
|
298
|
+
|
299
|
+
test '#open with compressed option passes io object having decompressed data to a block when compress is gzip' do
|
300
|
+
c = Fluent::Plugin::Buffer::MemoryChunk.new(Object.new, compress: :gzip)
|
301
|
+
c.concat(@gzipped_src, @src.size)
|
302
|
+
c.commit
|
303
|
+
|
304
|
+
comressed_data = c.open(compressed: :gzip) do |io|
|
305
|
+
v = io.read
|
306
|
+
assert_equal @gzipped_src, v
|
307
|
+
v
|
308
|
+
end
|
309
|
+
assert_equal @gzipped_src, comressed_data
|
310
|
+
end
|
311
|
+
|
312
|
+
test '#write_to writes decompressed data when compress is gzip' do
|
313
|
+
c = Fluent::Plugin::Buffer::MemoryChunk.new(Object.new, compress: :gzip)
|
314
|
+
c.concat(@gzipped_src, @src.size)
|
315
|
+
c.commit
|
316
|
+
|
317
|
+
assert_equal @src, c.read
|
318
|
+
assert_equal @gzipped_src, c.read(compressed: :gzip)
|
319
|
+
|
320
|
+
io = StringIO.new
|
321
|
+
c.write_to(io)
|
322
|
+
assert_equal @src, io.string
|
323
|
+
end
|
324
|
+
|
325
|
+
test '#write_to with compressed option writes compressed data when compress is gzip' do
|
326
|
+
c = Fluent::Plugin::Buffer::MemoryChunk.new(Object.new, compress: :gzip)
|
327
|
+
c.concat(@gzipped_src, @src.size)
|
328
|
+
c.commit
|
329
|
+
|
330
|
+
assert_equal @src, c.read
|
331
|
+
assert_equal @gzipped_src, c.read(compressed: :gzip)
|
332
|
+
|
333
|
+
io = StringIO.new
|
334
|
+
c.write_to(io, compressed: :gzip)
|
335
|
+
assert_equal @gzipped_src, io.string
|
336
|
+
end
|
337
|
+
end
|
265
338
|
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
require_relative '../helper'
|
2
|
+
require 'fluent/plugin/compressable'
|
3
|
+
|
4
|
+
class CompressableTest < Test::Unit::TestCase
|
5
|
+
include Fluent::Plugin::Compressable
|
6
|
+
|
7
|
+
sub_test_case '#compress' do
|
8
|
+
setup do
|
9
|
+
@src = 'text data for compressing' * 5
|
10
|
+
@gzipped_src = compress(@src)
|
11
|
+
end
|
12
|
+
|
13
|
+
test 'compress data' do
|
14
|
+
assert compress(@src).size < @src.size
|
15
|
+
assert_not_equal @gzipped_src, @src
|
16
|
+
end
|
17
|
+
|
18
|
+
test 'write compressed data to IO with output_io option' do
|
19
|
+
io = StringIO.new
|
20
|
+
compress(@src, output_io: io)
|
21
|
+
assert_equal @gzipped_src, io.string
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
sub_test_case '#decompress' do
|
26
|
+
setup do
|
27
|
+
@src = 'text data for compressing' * 5
|
28
|
+
@gzipped_src = compress(@src)
|
29
|
+
end
|
30
|
+
|
31
|
+
test 'decompress compressed data' do
|
32
|
+
assert_equal @src, decompress(@gzipped_src)
|
33
|
+
end
|
34
|
+
|
35
|
+
test 'write decompressed data to IO with output_io option' do
|
36
|
+
io = StringIO.new
|
37
|
+
decompress(@gzipped_src, output_io: io)
|
38
|
+
assert_equal @src, io.string
|
39
|
+
end
|
40
|
+
|
41
|
+
test 'return decompressed string with output_io option' do
|
42
|
+
io = StringIO.new(@gzipped_src)
|
43
|
+
assert_equal @src, decompress(input_io: io)
|
44
|
+
end
|
45
|
+
|
46
|
+
test 'decompress multiple compressed data' do
|
47
|
+
src1 = 'text data'
|
48
|
+
src2 = 'text data2'
|
49
|
+
gzipped_src = compress(src1) + compress(src2)
|
50
|
+
|
51
|
+
assert_equal src1 + src2, decompress(gzipped_src)
|
52
|
+
end
|
53
|
+
|
54
|
+
test 'decompress with input_io and output_io' do
|
55
|
+
input_io = StringIO.new(@gzipped_src)
|
56
|
+
output_io = StringIO.new
|
57
|
+
|
58
|
+
decompress(input_io: input_io, output_io: output_io)
|
59
|
+
assert_equal @src, output_io.string
|
60
|
+
end
|
61
|
+
|
62
|
+
test 'decompress multiple compressed data with input_io and output_io' do
|
63
|
+
src1 = 'text data'
|
64
|
+
src2 = 'text data2'
|
65
|
+
gzipped_src = compress(src1) + compress(src2)
|
66
|
+
|
67
|
+
input_io = StringIO.new(gzipped_src)
|
68
|
+
output_io = StringIO.new
|
69
|
+
|
70
|
+
decompress(input_io: input_io, output_io: output_io)
|
71
|
+
assert_equal src1 + src2, output_io.string
|
72
|
+
end
|
73
|
+
|
74
|
+
test 'return the received value as it is with empty string or nil' do
|
75
|
+
assert_equal nil, decompress
|
76
|
+
assert_equal nil, decompress(nil)
|
77
|
+
assert_equal '', decompress('')
|
78
|
+
assert_equal '', decompress('', output_io: StringIO.new)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require_relative '../helper'
|
2
|
+
require 'json'
|
2
3
|
require 'fluent/test/driver/formatter'
|
3
4
|
require 'fluent/plugin/formatter_json'
|
4
5
|
|
@@ -20,11 +21,23 @@ class JsonFormatterTest < ::Test::Unit::TestCase
|
|
20
21
|
{'message' => 'awesome'}
|
21
22
|
end
|
22
23
|
|
24
|
+
def symbolic_record
|
25
|
+
{:message => :awesome}
|
26
|
+
end
|
27
|
+
|
23
28
|
data('oj' => 'oj', 'yajl' => 'yajl')
|
24
29
|
def test_format(data)
|
25
30
|
d = create_driver('json_parser' => data)
|
26
31
|
formatted = d.instance.format(tag, @time, record)
|
27
32
|
|
28
|
-
assert_equal("#{
|
33
|
+
assert_equal("#{JSON.generate(record)}\n", formatted)
|
34
|
+
end
|
35
|
+
|
36
|
+
data('oj' => 'oj', 'yajl' => 'yajl')
|
37
|
+
def test_format_with_symbolic_record(data)
|
38
|
+
d = create_driver('json_parser' => data)
|
39
|
+
formatted = d.instance.format(tag, @time, symbolic_record)
|
40
|
+
|
41
|
+
assert_equal("#{JSON.generate(record)}\n", formatted)
|
29
42
|
end
|
30
43
|
end
|
@@ -5,9 +5,13 @@ require 'fluent/test/startup_shutdown'
|
|
5
5
|
require 'base64'
|
6
6
|
|
7
7
|
require 'fluent/env'
|
8
|
+
require 'fluent/event'
|
8
9
|
require 'fluent/plugin/in_forward'
|
10
|
+
require 'fluent/plugin/compressable'
|
9
11
|
|
10
12
|
class ForwardInputTest < Test::Unit::TestCase
|
13
|
+
include Fluent::Plugin::Compressable
|
14
|
+
|
11
15
|
def setup
|
12
16
|
Fluent::Test.setup
|
13
17
|
@responses = [] # for testing responses after sending data
|
@@ -465,6 +469,66 @@ class ForwardInputTest < Test::Unit::TestCase
|
|
465
469
|
end
|
466
470
|
end
|
467
471
|
|
472
|
+
class CompressedPackedForward < self
|
473
|
+
extend Fluent::Test::StartupShutdown
|
474
|
+
|
475
|
+
def test_set_compress_to_option
|
476
|
+
d = create_driver
|
477
|
+
|
478
|
+
time = event_time("2011-01-02 13:14:15 UTC").to_i
|
479
|
+
events = [
|
480
|
+
["tag1", time, {"a"=>1}],
|
481
|
+
["tag1", time, {"a"=>2}]
|
482
|
+
]
|
483
|
+
|
484
|
+
# create compressed entries
|
485
|
+
entries = ''
|
486
|
+
events.each do |_tag, _time, record|
|
487
|
+
v = [_time, record].to_msgpack
|
488
|
+
entries << compress(v)
|
489
|
+
end
|
490
|
+
chunk = ["tag1", entries, { 'compressed' => 'gzip' }].to_msgpack
|
491
|
+
|
492
|
+
d.run do
|
493
|
+
Fluent::Engine.msgpack_factory.unpacker.feed_each(chunk) do |obj|
|
494
|
+
option = d.instance.send(:on_message, obj, chunk.size, PEERADDR)
|
495
|
+
assert_equal 'gzip', option['compressed']
|
496
|
+
end
|
497
|
+
end
|
498
|
+
|
499
|
+
assert_equal events, d.emits
|
500
|
+
end
|
501
|
+
|
502
|
+
def test_create_CompressedMessagePackEventStream_with_gzip_compress_option
|
503
|
+
d = create_driver
|
504
|
+
|
505
|
+
time = event_time("2011-01-02 13:14:15 UTC").to_i
|
506
|
+
events = [
|
507
|
+
["tag1", time, {"a"=>1}],
|
508
|
+
["tag1", time, {"a"=>2}]
|
509
|
+
]
|
510
|
+
|
511
|
+
# create compressed entries
|
512
|
+
entries = ''
|
513
|
+
events.each do |_tag, _time, record|
|
514
|
+
v = [_time, record].to_msgpack
|
515
|
+
entries << compress(v)
|
516
|
+
end
|
517
|
+
chunk = ["tag1", entries, { 'compressed' => 'gzip' }].to_msgpack
|
518
|
+
|
519
|
+
# check CompressedMessagePackEventStream is created
|
520
|
+
mock(Fluent::CompressedMessagePackEventStream).new(entries, nil, 0)
|
521
|
+
|
522
|
+
d.run do
|
523
|
+
Fluent::Engine.msgpack_factory.unpacker.feed_each(chunk) do |obj|
|
524
|
+
option = d.instance.send(:on_message, obj, chunk.size, PEERADDR)
|
525
|
+
assert_equal 'gzip', option['compressed']
|
526
|
+
end
|
527
|
+
end
|
528
|
+
d.emits
|
529
|
+
end
|
530
|
+
end
|
531
|
+
|
468
532
|
class Warning < self
|
469
533
|
extend Fluent::Test::StartupShutdown
|
470
534
|
|
@@ -688,7 +752,7 @@ class ForwardInputTest < Test::Unit::TestCase
|
|
688
752
|
auth: true
|
689
753
|
}
|
690
754
|
})
|
691
|
-
def test_packed_forward
|
755
|
+
def test_packed_forward(data)
|
692
756
|
config = data[:config]
|
693
757
|
options = data[:options]
|
694
758
|
d = create_driver(config)
|
@@ -783,7 +847,7 @@ class ForwardInputTest < Test::Unit::TestCase
|
|
783
847
|
auth: true
|
784
848
|
}
|
785
849
|
})
|
786
|
-
def test_message
|
850
|
+
def test_message(data)
|
787
851
|
config = data[:config]
|
788
852
|
options = data[:options]
|
789
853
|
d = create_driver(config)
|
@@ -805,7 +869,7 @@ class ForwardInputTest < Test::Unit::TestCase
|
|
805
869
|
end
|
806
870
|
|
807
871
|
assert_equal events, d.emits
|
808
|
-
assert_equal [
|
872
|
+
assert_equal [nil, nil], @responses
|
809
873
|
|
810
874
|
sleep 0.1 while d.instance.instance_eval{ @thread }.status # to confirm that plugin stopped completely
|
811
875
|
end
|