fluentd 1.15.2-x64-mingw32 → 1.15.3-x64-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +19 -0
- data/lib/fluent/command/fluentd.rb +0 -11
- data/lib/fluent/config/yaml_parser/loader.rb +18 -1
- data/lib/fluent/file_wrapper.rb +137 -0
- data/lib/fluent/oj_options.rb +1 -2
- data/lib/fluent/plugin/in_tail.rb +1 -6
- data/lib/fluent/plugin/out_file.rb +0 -4
- data/lib/fluent/supervisor.rb +30 -11
- data/lib/fluent/version.rb +1 -1
- data/test/command/test_fluentd.rb +31 -16
- data/test/plugin/test_in_tail.rb +105 -103
- data/test/plugin/test_out_file.rb +3 -2
- data/test/test_config.rb +57 -0
- data/test/{plugin/test_file_wrapper.rb → test_file_wrapper.rb} +2 -2
- data/test/test_log.rb +15 -5
- data/test/test_supervisor.rb +37 -15
- metadata +5 -7
- data/.github/workflows/issue-auto-closer.yml +0 -12
- data/.github/workflows/stale-actions.yml +0 -22
- data/lib/fluent/plugin/file_wrapper.rb +0 -131
data/test/plugin/test_in_tail.rb
CHANGED
@@ -3,6 +3,7 @@ require 'fluent/test/driver/input'
|
|
3
3
|
require 'fluent/plugin/in_tail'
|
4
4
|
require 'fluent/plugin/buffer'
|
5
5
|
require 'fluent/system_config'
|
6
|
+
require 'fluent/file_wrapper'
|
6
7
|
require 'net/http'
|
7
8
|
require 'flexmock/test_unit'
|
8
9
|
require 'timecop'
|
@@ -378,9 +379,9 @@ class TailInputTest < Test::Unit::TestCase
|
|
378
379
|
conf = ROOT_CONFIG + DEBUG_LOG_LEVEL + create_group_directive(tailing_group_pattern, '1m', rule1) + create_path_element("test*.txt") + SINGLE_LINE_CONFIG
|
379
380
|
|
380
381
|
d = create_driver(conf, false)
|
381
|
-
|
382
|
-
|
383
|
-
|
382
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/test1.txt", 'w')
|
383
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/test2.txt", 'w')
|
384
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/test3.txt", 'w')
|
384
385
|
|
385
386
|
d.run do
|
386
387
|
## checking default group_watcher's paths
|
@@ -419,10 +420,10 @@ class TailInputTest < Test::Unit::TestCase
|
|
419
420
|
file4 = File.join(@tmp_dir, "test-podname4_test-namespace3_test-container-15fabq.log")
|
420
421
|
|
421
422
|
d.run do
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
423
|
+
Fluent::FileWrapper.open(file1, 'w')
|
424
|
+
Fluent::FileWrapper.open(file2, 'w')
|
425
|
+
Fluent::FileWrapper.open(file3, 'w')
|
426
|
+
Fluent::FileWrapper.open(file4, 'w')
|
426
427
|
|
427
428
|
instance = d.instance
|
428
429
|
assert_equal(100, instance.find_group_from_metadata(file1).limit)
|
@@ -438,7 +439,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
438
439
|
parse: PARSE_SINGLE_LINE_CONFIG)
|
439
440
|
def test_emit(data)
|
440
441
|
config = data
|
441
|
-
|
442
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "wb") {|f|
|
442
443
|
f.puts "test1"
|
443
444
|
f.puts "test2"
|
444
445
|
}
|
@@ -446,7 +447,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
446
447
|
d = create_driver(config)
|
447
448
|
|
448
449
|
d.run(expect_emits: 1) do
|
449
|
-
|
450
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "ab") {|f|
|
450
451
|
f.puts "test3\ntest4"
|
451
452
|
}
|
452
453
|
end
|
@@ -462,11 +463,11 @@ class TailInputTest < Test::Unit::TestCase
|
|
462
463
|
|
463
464
|
def test_emit_with_emit_unmatched_lines_true
|
464
465
|
config = config_element("", "", { "format" => "/^(?<message>test.*)/", "emit_unmatched_lines" => true })
|
465
|
-
|
466
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "wb") { |f| }
|
466
467
|
|
467
468
|
d = create_driver(config)
|
468
469
|
d.run(expect_emits: 1) do
|
469
|
-
|
470
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "ab") {|f|
|
470
471
|
f.puts "test line 1"
|
471
472
|
f.puts "test line 2"
|
472
473
|
f.puts "bad line 1"
|
@@ -498,7 +499,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
498
499
|
msg = 'test' * 2000 # in_tail reads 8192 bytes at once.
|
499
500
|
|
500
501
|
d.run(expect_emits: num_events, timeout: 2) do
|
501
|
-
|
502
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "ab") {|f|
|
502
503
|
f.puts msg
|
503
504
|
f.puts msg
|
504
505
|
}
|
@@ -544,7 +545,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
544
545
|
|
545
546
|
d = create_driver(config)
|
546
547
|
d.run(expect_emits: 2) do
|
547
|
-
|
548
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "ab") {|f|
|
548
549
|
100.times do
|
549
550
|
f.puts msg
|
550
551
|
end
|
@@ -567,7 +568,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
567
568
|
start_time = Fluent::Clock.now
|
568
569
|
d = create_driver(config)
|
569
570
|
d.run(expect_emits: 2) do
|
570
|
-
|
571
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "ab") {|f|
|
571
572
|
8000.times do
|
572
573
|
f.puts msg
|
573
574
|
end
|
@@ -606,7 +607,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
606
607
|
io_handler
|
607
608
|
end
|
608
609
|
|
609
|
-
|
610
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "ab") do |f|
|
610
611
|
100.times do
|
611
612
|
f.puts msg
|
612
613
|
end
|
@@ -616,7 +617,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
616
617
|
d.run do
|
617
618
|
start_time = Fluent::Clock.now
|
618
619
|
while Fluent::Clock.now - start_time < 0.8 do
|
619
|
-
|
620
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "ab") do |f|
|
620
621
|
f.puts msg
|
621
622
|
f.flush
|
622
623
|
end
|
@@ -634,7 +635,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
634
635
|
num_lines = 1024 * 3
|
635
636
|
msg = "08bytes"
|
636
637
|
|
637
|
-
|
638
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "wb") do |f|
|
638
639
|
f.write("#{msg}\n" * num_lines)
|
639
640
|
end
|
640
641
|
|
@@ -670,7 +671,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
670
671
|
num_lines = 1024 * 2
|
671
672
|
msg = "08bytes"
|
672
673
|
|
673
|
-
|
674
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "wb") do |f|
|
674
675
|
f.write("#{msg}\n" * num_lines)
|
675
676
|
end
|
676
677
|
|
@@ -718,7 +719,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
718
719
|
parse: CONFIG_READ_FROM_HEAD + PARSE_SINGLE_LINE_CONFIG)
|
719
720
|
def test_emit_with_read_from_head(data)
|
720
721
|
config = data
|
721
|
-
|
722
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "wb") {|f|
|
722
723
|
f.puts "test1"
|
723
724
|
f.puts "test2"
|
724
725
|
}
|
@@ -726,7 +727,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
726
727
|
d = create_driver(config)
|
727
728
|
|
728
729
|
d.run(expect_emits: 2) do
|
729
|
-
|
730
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "ab") {|f|
|
730
731
|
f.puts "test3"
|
731
732
|
f.puts "test4"
|
732
733
|
}
|
@@ -744,7 +745,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
744
745
|
parse: CONFIG_DISABLE_WATCH_TIMER + PARSE_SINGLE_LINE_CONFIG)
|
745
746
|
def test_emit_without_watch_timer(data)
|
746
747
|
config = data
|
747
|
-
|
748
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "wb") {|f|
|
748
749
|
f.puts "test1"
|
749
750
|
f.puts "test2"
|
750
751
|
}
|
@@ -752,7 +753,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
752
753
|
d = create_driver(config)
|
753
754
|
|
754
755
|
d.run(expect_emits: 1) do
|
755
|
-
|
756
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "ab") {|f|
|
756
757
|
f.puts "test3"
|
757
758
|
f.puts "test4"
|
758
759
|
}
|
@@ -776,7 +777,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
776
777
|
})
|
777
778
|
config = config + CONFIG_DISABLE_WATCH_TIMER + SINGLE_LINE_CONFIG
|
778
779
|
|
779
|
-
|
780
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "wb") {|f|
|
780
781
|
f.puts "test1"
|
781
782
|
f.puts "test2"
|
782
783
|
}
|
@@ -784,7 +785,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
784
785
|
d = create_driver(config, false)
|
785
786
|
|
786
787
|
d.run(expect_emits: 1, timeout: 1) do
|
787
|
-
|
788
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "ab") {|f|
|
788
789
|
f.puts "test3"
|
789
790
|
f.puts "test4"
|
790
791
|
}
|
@@ -802,7 +803,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
802
803
|
parse: CONFIG_DISABLE_STAT_WATCHER + PARSE_SINGLE_LINE_CONFIG)
|
803
804
|
def test_emit_with_disable_stat_watcher(data)
|
804
805
|
config = data
|
805
|
-
|
806
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "wb") {|f|
|
806
807
|
f.puts "test1"
|
807
808
|
f.puts "test2"
|
808
809
|
}
|
@@ -810,7 +811,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
810
811
|
d = create_driver(config)
|
811
812
|
|
812
813
|
d.run(expect_emits: 1) do
|
813
|
-
|
814
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "ab") {|f|
|
814
815
|
f.puts "test3"
|
815
816
|
f.puts "test4"
|
816
817
|
}
|
@@ -826,7 +827,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
826
827
|
d = create_driver(SINGLE_LINE_CONFIG)
|
827
828
|
|
828
829
|
d.run(expect_emits: 1, timeout: 3) do
|
829
|
-
|
830
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "wb") {|f|
|
830
831
|
f.puts "test1\ntest2\n"
|
831
832
|
}
|
832
833
|
end
|
@@ -873,7 +874,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
873
874
|
system_conf = parse_system(CONFIG_SYSTEM)
|
874
875
|
sc = Fluent::SystemConfig.new(system_conf)
|
875
876
|
Fluent::Engine.init(sc)
|
876
|
-
|
877
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "wb") {|f|
|
877
878
|
f.puts "test1"
|
878
879
|
f.puts "test2"
|
879
880
|
}
|
@@ -881,7 +882,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
881
882
|
d = create_driver
|
882
883
|
|
883
884
|
d.run(expect_emits: 1) do
|
884
|
-
|
885
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "ab") {|f|
|
885
886
|
f.puts "test3"
|
886
887
|
f.puts "test4"
|
887
888
|
}
|
@@ -938,13 +939,13 @@ class TailInputTest < Test::Unit::TestCase
|
|
938
939
|
def test_rotate_file_with_write_old(data)
|
939
940
|
config = data
|
940
941
|
events = sub_test_rotate_file(config, expect_emits: 3) { |rotated_file|
|
941
|
-
|
942
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "wb") { |f| }
|
942
943
|
rotated_file.puts "test7"
|
943
944
|
rotated_file.puts "test8"
|
944
945
|
rotated_file.flush
|
945
946
|
|
946
947
|
sleep 1
|
947
|
-
|
948
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "ab") { |f|
|
948
949
|
f.puts "test5"
|
949
950
|
f.puts "test6"
|
950
951
|
}
|
@@ -994,10 +995,10 @@ class TailInputTest < Test::Unit::TestCase
|
|
994
995
|
if block_given?
|
995
996
|
yield file
|
996
997
|
else
|
997
|
-
|
998
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "wb") { |f| }
|
998
999
|
sleep 1
|
999
1000
|
|
1000
|
-
|
1001
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "ab") { |f|
|
1001
1002
|
f.puts "test5"
|
1002
1003
|
f.puts "test6"
|
1003
1004
|
}
|
@@ -1012,7 +1013,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
1012
1013
|
|
1013
1014
|
def test_truncate_file
|
1014
1015
|
config = SINGLE_LINE_CONFIG
|
1015
|
-
|
1016
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "wb") {|f|
|
1016
1017
|
f.puts "test1"
|
1017
1018
|
f.puts "test2"
|
1018
1019
|
f.flush
|
@@ -1021,7 +1022,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
1021
1022
|
d = create_driver(config)
|
1022
1023
|
|
1023
1024
|
d.run(expect_emits: 2) do
|
1024
|
-
|
1025
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "ab") {|f|
|
1025
1026
|
f.puts "test3\ntest4"
|
1026
1027
|
f.flush
|
1027
1028
|
}
|
@@ -1052,7 +1053,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
1052
1053
|
|
1053
1054
|
def test_move_truncate_move_back
|
1054
1055
|
config = SINGLE_LINE_CONFIG
|
1055
|
-
|
1056
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "wb") {|f|
|
1056
1057
|
f.puts "test1"
|
1057
1058
|
f.puts "test2"
|
1058
1059
|
}
|
@@ -1089,17 +1090,17 @@ class TailInputTest < Test::Unit::TestCase
|
|
1089
1090
|
end
|
1090
1091
|
|
1091
1092
|
def test_lf
|
1092
|
-
|
1093
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "wb") {|f| }
|
1093
1094
|
|
1094
1095
|
d = create_driver
|
1095
1096
|
|
1096
1097
|
d.run(expect_emits: 1) do
|
1097
|
-
|
1098
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "ab") {|f|
|
1098
1099
|
f.print "test3"
|
1099
1100
|
}
|
1100
1101
|
sleep 1
|
1101
1102
|
|
1102
|
-
|
1103
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "ab") {|f|
|
1103
1104
|
f.puts "test4"
|
1104
1105
|
}
|
1105
1106
|
end
|
@@ -1110,12 +1111,12 @@ class TailInputTest < Test::Unit::TestCase
|
|
1110
1111
|
end
|
1111
1112
|
|
1112
1113
|
def test_whitespace
|
1113
|
-
|
1114
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "wb") {|f| }
|
1114
1115
|
|
1115
1116
|
d = create_driver
|
1116
1117
|
|
1117
1118
|
d.run(expect_emits: 1) do
|
1118
|
-
|
1119
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "ab") {|f|
|
1119
1120
|
f.puts " " # 4 spaces
|
1120
1121
|
f.puts " 4 spaces"
|
1121
1122
|
f.puts "4 spaces "
|
@@ -1146,7 +1147,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
1146
1147
|
d = create_driver(CONFIG_READ_FROM_HEAD + encoding_config)
|
1147
1148
|
|
1148
1149
|
d.run(expect_emits: 1) do
|
1149
|
-
|
1150
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "wb") {|f|
|
1150
1151
|
f.puts "test"
|
1151
1152
|
}
|
1152
1153
|
end
|
@@ -1168,7 +1169,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
1168
1169
|
utf8_message = cp932_message.encode(Encoding::UTF_8)
|
1169
1170
|
|
1170
1171
|
d.run(expect_emits: 1) do
|
1171
|
-
|
1172
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "w:cp932") {|f|
|
1172
1173
|
f.puts cp932_message
|
1173
1174
|
}
|
1174
1175
|
end
|
@@ -1191,7 +1192,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
1191
1192
|
utf8_message = utf16_message.encode(Encoding::UTF_8).strip
|
1192
1193
|
|
1193
1194
|
d.run(expect_emits: 1) do
|
1194
|
-
|
1195
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "w:utf-16le") { |f|
|
1195
1196
|
f.write utf16_message
|
1196
1197
|
}
|
1197
1198
|
end
|
@@ -1212,7 +1213,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
1212
1213
|
d = create_driver(conf)
|
1213
1214
|
|
1214
1215
|
d.run(expect_emits: 1) do
|
1215
|
-
|
1216
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "w") { |f|
|
1216
1217
|
f.write "te\x86st\n"
|
1217
1218
|
}
|
1218
1219
|
end
|
@@ -1227,11 +1228,11 @@ class TailInputTest < Test::Unit::TestCase
|
|
1227
1228
|
parse: PARSE_MULTILINE_CONFIG)
|
1228
1229
|
def test_multiline(data)
|
1229
1230
|
config = data
|
1230
|
-
|
1231
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "wb") { |f| }
|
1231
1232
|
|
1232
1233
|
d = create_driver(config)
|
1233
1234
|
d.run(expect_emits: 1) do
|
1234
|
-
|
1235
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "ab") { |f|
|
1235
1236
|
f.puts "f test1"
|
1236
1237
|
f.puts "s test2"
|
1237
1238
|
f.puts "f test3"
|
@@ -1255,11 +1256,11 @@ class TailInputTest < Test::Unit::TestCase
|
|
1255
1256
|
parse: PARSE_MULTILINE_CONFIG)
|
1256
1257
|
def test_multiline_with_emit_unmatched_lines_true(data)
|
1257
1258
|
config = data + config_element("", "", { "emit_unmatched_lines" => true })
|
1258
|
-
|
1259
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "wb") { |f| }
|
1259
1260
|
|
1260
1261
|
d = create_driver(config)
|
1261
1262
|
d.run(expect_emits: 1) do
|
1262
|
-
|
1263
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "ab") { |f|
|
1263
1264
|
f.puts "f test1"
|
1264
1265
|
f.puts "s test2"
|
1265
1266
|
f.puts "f test3"
|
@@ -1285,11 +1286,11 @@ class TailInputTest < Test::Unit::TestCase
|
|
1285
1286
|
parse: PARSE_MULTILINE_CONFIG_WITH_NEWLINE)
|
1286
1287
|
def test_multiline_with_emit_unmatched_lines2(data)
|
1287
1288
|
config = data + config_element("", "", { "emit_unmatched_lines" => true })
|
1288
|
-
|
1289
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "wb") { |f| }
|
1289
1290
|
|
1290
1291
|
d = create_driver(config)
|
1291
1292
|
d.run(expect_emits: 0, timeout: 1) do
|
1292
|
-
|
1293
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "ab") { |f|
|
1293
1294
|
f.puts "s test0"
|
1294
1295
|
f.puts "f test1"
|
1295
1296
|
f.puts "f test2"
|
@@ -1311,7 +1312,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
1311
1312
|
data(flat: MULTILINE_CONFIG,
|
1312
1313
|
parse: PARSE_MULTILINE_CONFIG)
|
1313
1314
|
def test_multiline_with_flush_interval(data)
|
1314
|
-
|
1315
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "wb") { |f| }
|
1315
1316
|
|
1316
1317
|
config = data + config_element("", "", { "multiline_flush_interval" => "2s" })
|
1317
1318
|
d = create_driver(config)
|
@@ -1319,7 +1320,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
1319
1320
|
assert_equal(2, d.instance.multiline_flush_interval)
|
1320
1321
|
|
1321
1322
|
d.run(expect_emits: 1) do
|
1322
|
-
|
1323
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "ab") { |f|
|
1323
1324
|
f.puts "f test1"
|
1324
1325
|
f.puts "s test2"
|
1325
1326
|
f.puts "f test3"
|
@@ -1354,7 +1355,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
1354
1355
|
d = create_driver(config + encoding_config)
|
1355
1356
|
|
1356
1357
|
d.run(expect_emits: 1) do
|
1357
|
-
|
1358
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "wb") { |f|
|
1358
1359
|
f.puts "s test"
|
1359
1360
|
}
|
1360
1361
|
end
|
@@ -1377,7 +1378,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
1377
1378
|
cp932_message = "s \x82\xCD\x82\xEB\x81\x5B\x82\xED\x81\x5B\x82\xE9\x82\xC7".force_encoding(Encoding::CP932)
|
1378
1379
|
utf8_message = "\x82\xCD\x82\xEB\x81\x5B\x82\xED\x81\x5B\x82\xE9\x82\xC7".encode(Encoding::UTF_8, Encoding::CP932)
|
1379
1380
|
d.run(expect_emits: 1) do
|
1380
|
-
|
1381
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "w:cp932") { |f|
|
1381
1382
|
f.puts cp932_message
|
1382
1383
|
}
|
1383
1384
|
end
|
@@ -1409,11 +1410,11 @@ class TailInputTest < Test::Unit::TestCase
|
|
1409
1410
|
)
|
1410
1411
|
def test_multiline_with_multiple_formats(data)
|
1411
1412
|
config = data
|
1412
|
-
|
1413
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "wb") { |f| }
|
1413
1414
|
|
1414
1415
|
d = create_driver(config)
|
1415
1416
|
d.run(expect_emits: 1) do
|
1416
|
-
|
1417
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "ab") { |f|
|
1417
1418
|
f.puts "f test1"
|
1418
1419
|
f.puts "s test2"
|
1419
1420
|
f.puts "f test3"
|
@@ -1450,7 +1451,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
1450
1451
|
)
|
1451
1452
|
def test_multilinelog_with_multiple_paths(data)
|
1452
1453
|
files = ["#{@tmp_dir}/tail1.txt", "#{@tmp_dir}/tail2.txt"]
|
1453
|
-
files.each { |file|
|
1454
|
+
files.each { |file| Fluent::FileWrapper.open(file, "wb") { |f| } }
|
1454
1455
|
|
1455
1456
|
config = data + config_element("", "", {
|
1456
1457
|
"path" => "#{files[0]},#{files[1]}",
|
@@ -1459,7 +1460,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
1459
1460
|
d = create_driver(config, false)
|
1460
1461
|
d.run(expect_emits: 2) do
|
1461
1462
|
files.each do |file|
|
1462
|
-
|
1463
|
+
Fluent::FileWrapper.open(file, 'ab') { |f|
|
1463
1464
|
f.puts "f #{file} line should be ignored"
|
1464
1465
|
f.puts "s test1"
|
1465
1466
|
f.puts "f test2"
|
@@ -1494,12 +1495,12 @@ class TailInputTest < Test::Unit::TestCase
|
|
1494
1495
|
])
|
1495
1496
|
)
|
1496
1497
|
def test_multiline_without_firstline(data)
|
1497
|
-
|
1498
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "wb") { |f| }
|
1498
1499
|
|
1499
1500
|
config = data
|
1500
1501
|
d = create_driver(config)
|
1501
1502
|
d.run(expect_emits: 1) do
|
1502
|
-
|
1503
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "ab") { |f|
|
1503
1504
|
f.puts "foo 1"
|
1504
1505
|
f.puts "bar 1"
|
1505
1506
|
f.puts "baz 1"
|
@@ -1605,10 +1606,10 @@ class TailInputTest < Test::Unit::TestCase
|
|
1605
1606
|
d = create_driver(config, false)
|
1606
1607
|
d.end_if { d.instance.instance_variable_get(:@tails).keys.size >= 1 }
|
1607
1608
|
d.run(expect_emits: 1, shutdown: false) do
|
1608
|
-
|
1609
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "ab") { |f| f.puts "test3\n" }
|
1609
1610
|
end
|
1610
1611
|
|
1611
|
-
|
1612
|
+
cleanup_file("#{@tmp_dir}/tail.txt")
|
1612
1613
|
waiting(20) { sleep 0.1 until Dir.glob("#{@tmp_dir}/*.txt").size == 0 } # Ensure file is deleted on Windows
|
1613
1614
|
waiting(5) { sleep 0.1 until d.instance.instance_variable_get(:@tails).keys.size <= 0 }
|
1614
1615
|
|
@@ -1624,6 +1625,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
1624
1625
|
)
|
1625
1626
|
ensure
|
1626
1627
|
d.instance_shutdown if d && d.instance
|
1628
|
+
cleanup_directory(@tmp_dir)
|
1627
1629
|
end
|
1628
1630
|
|
1629
1631
|
def count_timer_object
|
@@ -1882,7 +1884,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
1882
1884
|
"max_line_size" => label,
|
1883
1885
|
"log_level" => "debug"
|
1884
1886
|
})
|
1885
|
-
|
1887
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/with_long_lines.txt", "w+") do |f|
|
1886
1888
|
f.puts "foo"
|
1887
1889
|
f.puts "x" * size # 'x' * size + \n > @max_line_size
|
1888
1890
|
f.puts "bar"
|
@@ -1908,7 +1910,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
1908
1910
|
# Ensure that no fatal exception is raised when a file is missing and that
|
1909
1911
|
# files that do exist are still tailed as expected.
|
1910
1912
|
def test_missing_file
|
1911
|
-
|
1913
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "wb") {|f|
|
1912
1914
|
f.puts "test1"
|
1913
1915
|
f.puts "test2"
|
1914
1916
|
}
|
@@ -1926,7 +1928,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
1926
1928
|
[config1, config2].each do |config|
|
1927
1929
|
d = create_driver(config, false)
|
1928
1930
|
d.run(expect_emits: 1) do
|
1929
|
-
|
1931
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "ab") {|f|
|
1930
1932
|
f.puts "test3"
|
1931
1933
|
f.puts "test4"
|
1932
1934
|
}
|
@@ -1947,14 +1949,14 @@ class TailInputTest < Test::Unit::TestCase
|
|
1947
1949
|
path = "#{@tmp_dir}/tail.txt"
|
1948
1950
|
ino = 1
|
1949
1951
|
pos = 1234
|
1950
|
-
|
1952
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.pos", "wb") {|f|
|
1951
1953
|
f.puts ("%s\t%016x\t%016x\n" % [path, pos, ino])
|
1952
1954
|
}
|
1953
1955
|
|
1954
1956
|
d = create_driver(config, false)
|
1955
1957
|
d.run
|
1956
1958
|
|
1957
|
-
pos_file =
|
1959
|
+
pos_file = Fluent::FileWrapper.open("#{@tmp_dir}/tail.pos", "r")
|
1958
1960
|
pos_file.pos = 0
|
1959
1961
|
|
1960
1962
|
assert_raise(EOFError) do
|
@@ -1964,20 +1966,20 @@ class TailInputTest < Test::Unit::TestCase
|
|
1964
1966
|
|
1965
1967
|
def test_should_write_latest_offset_after_rotate_wait
|
1966
1968
|
config = common_follow_inode_config
|
1967
|
-
|
1969
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "wb") {|f|
|
1968
1970
|
f.puts "test1"
|
1969
1971
|
f.puts "test2"
|
1970
1972
|
}
|
1971
1973
|
|
1972
1974
|
d = create_driver(config, false)
|
1973
1975
|
d.run(expect_emits: 2, shutdown: false) do
|
1974
|
-
|
1976
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "ab") {|f| f.puts "test3\n"}
|
1975
1977
|
FileUtils.move("#{@tmp_dir}/tail.txt", "#{@tmp_dir}/tail.txt" + "1")
|
1976
1978
|
sleep 1
|
1977
|
-
|
1979
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt" + "1", "ab") {|f| f.puts "test4\n"}
|
1978
1980
|
end
|
1979
1981
|
|
1980
|
-
pos_file =
|
1982
|
+
pos_file = Fluent::FileWrapper.open("#{@tmp_dir}/tail.pos", "r")
|
1981
1983
|
pos_file.pos = 0
|
1982
1984
|
line_parts = /^([^\t]+)\t([0-9a-fA-F]+)\t([0-9a-fA-F]+)/.match(pos_file.readline)
|
1983
1985
|
waiting(5) {
|
@@ -1997,13 +1999,13 @@ class TailInputTest < Test::Unit::TestCase
|
|
1997
1999
|
path = "#{@tmp_dir}/tail.txt"
|
1998
2000
|
ino = 1
|
1999
2001
|
pos = 1234
|
2000
|
-
|
2002
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.pos", "wb") {|f|
|
2001
2003
|
f.puts ("%s\t%016x\t%016x\n" % [path, pos, ino])
|
2002
2004
|
}
|
2003
2005
|
|
2004
2006
|
d = create_driver(config)
|
2005
2007
|
d.run do
|
2006
|
-
pos_file =
|
2008
|
+
pos_file = Fluent::FileWrapper.open("#{@tmp_dir}/tail.pos", "r")
|
2007
2009
|
pos_file.pos = 0
|
2008
2010
|
assert_equal([], pos_file.readlines)
|
2009
2011
|
end
|
@@ -2024,14 +2026,14 @@ class TailInputTest < Test::Unit::TestCase
|
|
2024
2026
|
|
2025
2027
|
d = create_driver(config, false)
|
2026
2028
|
|
2027
|
-
|
2029
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "wb") {|f|
|
2028
2030
|
f.puts "test1"
|
2029
2031
|
f.puts "test2"
|
2030
2032
|
}
|
2031
2033
|
target_info = create_target_info("#{@tmp_dir}/tail.txt")
|
2032
2034
|
|
2033
2035
|
d.run(expect_emits: 1, shutdown: false) do
|
2034
|
-
|
2036
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "ab") {|f| f.puts "test3\n"}
|
2035
2037
|
end
|
2036
2038
|
|
2037
2039
|
|
@@ -2062,13 +2064,13 @@ class TailInputTest < Test::Unit::TestCase
|
|
2062
2064
|
|
2063
2065
|
d = create_driver(config, false)
|
2064
2066
|
|
2065
|
-
|
2067
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "wb") {|f|
|
2066
2068
|
f.puts "test1"
|
2067
2069
|
f.puts "test2"
|
2068
2070
|
}
|
2069
2071
|
|
2070
2072
|
d.run(expect_emits: 2, shutdown: false) do
|
2071
|
-
|
2073
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "ab") {|f| f.puts "test3\n"}
|
2072
2074
|
FileUtils.move("#{@tmp_dir}/tail.txt", "#{@tmp_dir}/tail.txt1")
|
2073
2075
|
end
|
2074
2076
|
|
@@ -2082,13 +2084,13 @@ class TailInputTest < Test::Unit::TestCase
|
|
2082
2084
|
|
2083
2085
|
d = create_driver(config, false)
|
2084
2086
|
|
2085
|
-
|
2087
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "wb") {|f|
|
2086
2088
|
f.puts "test1"
|
2087
2089
|
f.puts "test2"
|
2088
2090
|
}
|
2089
2091
|
|
2090
2092
|
d.run(expect_emits: 1, shutdown: false) do
|
2091
|
-
|
2093
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "ab") {|f| f.puts "test3\n"}
|
2092
2094
|
end
|
2093
2095
|
|
2094
2096
|
FileUtils.move("#{@tmp_dir}/tail.txt", "#{@tmp_dir}/tail.txt1")
|
@@ -2106,16 +2108,16 @@ class TailInputTest < Test::Unit::TestCase
|
|
2106
2108
|
|
2107
2109
|
d = create_driver(config, false)
|
2108
2110
|
|
2109
|
-
|
2111
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "wb") {|f|
|
2110
2112
|
f.puts "test1"
|
2111
2113
|
f.puts "test2"
|
2112
2114
|
}
|
2113
2115
|
target_info = create_target_info("#{@tmp_dir}/tail.txt")
|
2114
2116
|
|
2115
2117
|
d.run(expect_emits: 2, shutdown: false) do
|
2116
|
-
|
2118
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "ab") {|f| f.puts "test3\n"}
|
2117
2119
|
cleanup_file("#{@tmp_dir}/tail.txt")
|
2118
|
-
|
2120
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "wb") {|f| f.puts "test4\n"}
|
2119
2121
|
end
|
2120
2122
|
|
2121
2123
|
new_target_info = create_target_info("#{@tmp_dir}/tail.txt")
|
@@ -2147,7 +2149,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
2147
2149
|
@metrics = Fluent::Plugin::TailInput::MetricsInfo.new(opened_file_metrics, closed_file_metrics, rotated_file_metrics)
|
2148
2150
|
end
|
2149
2151
|
|
2150
|
-
|
2152
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "wb") {|f|
|
2151
2153
|
f.puts "test1"
|
2152
2154
|
f.puts "test2"
|
2153
2155
|
}
|
@@ -2171,18 +2173,18 @@ class TailInputTest < Test::Unit::TestCase
|
|
2171
2173
|
|
2172
2174
|
d = create_driver(config, false)
|
2173
2175
|
|
2174
|
-
|
2176
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "wb") {|f|
|
2175
2177
|
f.puts "test1"
|
2176
2178
|
f.puts "test2"
|
2177
2179
|
}
|
2178
2180
|
path_ino = create_target_info("#{@tmp_dir}/tail.txt")
|
2179
2181
|
|
2180
2182
|
d.run(expect_emits: 1, shutdown: false) do
|
2181
|
-
|
2183
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "ab") {|f| f.puts "test3\n"}
|
2182
2184
|
end
|
2183
2185
|
|
2184
2186
|
cleanup_file("#{@tmp_dir}/tail.txt")
|
2185
|
-
|
2187
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "wb") {|f|
|
2186
2188
|
f.puts "test3"
|
2187
2189
|
f.puts "test4"
|
2188
2190
|
}
|
@@ -2208,15 +2210,15 @@ class TailInputTest < Test::Unit::TestCase
|
|
2208
2210
|
|
2209
2211
|
d = create_driver(config, false)
|
2210
2212
|
|
2211
|
-
|
2213
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "wb") {|f|
|
2212
2214
|
f.puts "test1"
|
2213
2215
|
f.puts "test2"
|
2214
2216
|
}
|
2215
2217
|
|
2216
2218
|
d.run(expect_emits: 3, shutdown: false) do
|
2217
|
-
|
2219
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "ab") {|f| f.puts "test3\n"}
|
2218
2220
|
sleep 2
|
2219
|
-
|
2221
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "w+b") {|f| f.puts "test4\n"}
|
2220
2222
|
end
|
2221
2223
|
|
2222
2224
|
events = d.events
|
@@ -2230,7 +2232,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
2230
2232
|
|
2231
2233
|
# issue #3464
|
2232
2234
|
def test_should_replace_target_info
|
2233
|
-
|
2235
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "wb") {|f|
|
2234
2236
|
f.puts "test1\n"
|
2235
2237
|
}
|
2236
2238
|
target_info = create_target_info("#{@tmp_dir}/tail.txt")
|
@@ -2257,7 +2259,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
2257
2259
|
assert_equal([target_info.ino], inodes)
|
2258
2260
|
|
2259
2261
|
cleanup_file("#{@tmp_dir}/tail.txt")
|
2260
|
-
|
2262
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "wb") {|f| f.puts "test2\n"}
|
2261
2263
|
|
2262
2264
|
while d.events.size < 2 do
|
2263
2265
|
sleep 0.1
|
@@ -2274,7 +2276,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
2274
2276
|
|
2275
2277
|
sub_test_case "tail_path" do
|
2276
2278
|
def test_tail_path_with_singleline
|
2277
|
-
|
2279
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "wb") {|f|
|
2278
2280
|
f.puts "test1"
|
2279
2281
|
f.puts "test2"
|
2280
2282
|
}
|
@@ -2282,7 +2284,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
2282
2284
|
d = create_driver(SINGLE_LINE_CONFIG + config_element("", "", { "path_key" => "path" }))
|
2283
2285
|
|
2284
2286
|
d.run(expect_emits: 1) do
|
2285
|
-
|
2287
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "ab") {|f|
|
2286
2288
|
f.puts "test3"
|
2287
2289
|
f.puts "test4"
|
2288
2290
|
}
|
@@ -2296,7 +2298,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
2296
2298
|
end
|
2297
2299
|
|
2298
2300
|
def test_tail_path_with_multiline_with_firstline
|
2299
|
-
|
2301
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "wb") { |f| }
|
2300
2302
|
|
2301
2303
|
config = config_element("", "", {
|
2302
2304
|
"path_key" => "path",
|
@@ -2306,7 +2308,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
2306
2308
|
})
|
2307
2309
|
d = create_driver(config)
|
2308
2310
|
d.run(expect_emits: 1) do
|
2309
|
-
|
2311
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "ab") { |f|
|
2310
2312
|
f.puts "f test1"
|
2311
2313
|
f.puts "s test2"
|
2312
2314
|
f.puts "f test3"
|
@@ -2326,7 +2328,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
2326
2328
|
end
|
2327
2329
|
|
2328
2330
|
def test_tail_path_with_multiline_without_firstline
|
2329
|
-
|
2331
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "wb") { |f| }
|
2330
2332
|
|
2331
2333
|
config = config_element("", "", {
|
2332
2334
|
"path_key" => "path",
|
@@ -2337,7 +2339,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
2337
2339
|
})
|
2338
2340
|
d = create_driver(config)
|
2339
2341
|
d.run(expect_emits: 1) do
|
2340
|
-
|
2342
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "ab") { |f|
|
2341
2343
|
f.puts "foo 1"
|
2342
2344
|
f.puts "bar 1"
|
2343
2345
|
f.puts "baz 1"
|
@@ -2356,7 +2358,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
2356
2358
|
omit "This testcase is unstable on AppVeyor."
|
2357
2359
|
end
|
2358
2360
|
files = ["#{@tmp_dir}/tail1.txt", "#{@tmp_dir}/tail2.txt"]
|
2359
|
-
files.each { |file|
|
2361
|
+
files.each { |file| Fluent::FileWrapper.open(file, "wb") { |f| } }
|
2360
2362
|
|
2361
2363
|
config = config_element("", "", {
|
2362
2364
|
"path" => "#{files[0]},#{files[1]}",
|
@@ -2369,7 +2371,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
2369
2371
|
d = create_driver(config, false)
|
2370
2372
|
d.run(expect_emits: 2) do
|
2371
2373
|
files.each do |file|
|
2372
|
-
|
2374
|
+
Fluent::FileWrapper.open(file, 'ab') { |f|
|
2373
2375
|
f.puts "f #{file} line should be ignored"
|
2374
2376
|
f.puts "s test1"
|
2375
2377
|
f.puts "f test2"
|
@@ -2500,7 +2502,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
2500
2502
|
end
|
2501
2503
|
|
2502
2504
|
def test_shutdown_timeout
|
2503
|
-
|
2505
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt", "wb") do |f|
|
2504
2506
|
# Should be large enough to take too long time to consume
|
2505
2507
|
(1024 * 1024 * 5).times do
|
2506
2508
|
f.puts "{\"test\":\"fizzbuzz\"}"
|
@@ -2548,7 +2550,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
2548
2550
|
|
2549
2551
|
conf = ROOT_CONFIG + group + path_element + CONFIG_READ_FROM_HEAD + SINGLE_LINE_CONFIG
|
2550
2552
|
|
2551
|
-
|
2553
|
+
Fluent::FileWrapper.open("#{@tmp_dir}/#{file}", 'wb') do |f|
|
2552
2554
|
num_lines.times do
|
2553
2555
|
f.puts "#{msg}\n"
|
2554
2556
|
end
|
@@ -2594,7 +2596,7 @@ class TailInputTest < Test::Unit::TestCase
|
|
2594
2596
|
d = create_driver(conf, false)
|
2595
2597
|
file_path = "#{@tmp_dir}/#{file}"
|
2596
2598
|
|
2597
|
-
|
2599
|
+
Fluent::FileWrapper.open(file_path, 'wb') do |f|
|
2598
2600
|
num_lines.times do
|
2599
2601
|
f.puts msg
|
2600
2602
|
end
|