fluentd 1.16.5-x86-mingw32 → 1.16.7-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +8 -1
  3. data/CHANGELOG.md +50 -0
  4. data/README.md +0 -2
  5. data/fluentd.gemspec +9 -1
  6. data/lib/fluent/command/fluentd.rb +1 -1
  7. data/lib/fluent/config/yaml_parser/parser.rb +4 -0
  8. data/lib/fluent/plugin/out_file.rb +8 -0
  9. data/lib/fluent/plugin/parser_json.rb +4 -12
  10. data/lib/fluent/supervisor.rb +1 -1
  11. data/lib/fluent/version.rb +1 -1
  12. data/lib/fluent/winsvc.rb +28 -3
  13. data/test/command/test_cat.rb +2 -2
  14. data/test/command/test_fluentd.rb +57 -10
  15. data/test/helper.rb +27 -7
  16. data/test/plugin/in_tail/test_io_handler.rb +13 -14
  17. data/test/plugin/in_tail/test_position_file.rb +6 -7
  18. data/test/plugin/out_forward/test_ack_handler.rb +3 -3
  19. data/test/plugin/out_forward/test_socket_cache.rb +3 -3
  20. data/test/plugin/test_in_forward.rb +2 -1
  21. data/test/plugin/test_in_http.rb +1 -1
  22. data/test/plugin/test_in_monitor_agent.rb +6 -6
  23. data/test/plugin/test_in_syslog.rb +25 -18
  24. data/test/plugin/test_in_tail.rb +4 -12
  25. data/test/plugin/test_in_tcp.rb +1 -1
  26. data/test/plugin/test_in_udp.rb +16 -10
  27. data/test/plugin/test_out_exec_filter.rb +12 -7
  28. data/test/plugin/test_out_file.rb +22 -2
  29. data/test/plugin/test_out_forward.rb +2 -3
  30. data/test/plugin/test_out_stream.rb +1 -1
  31. data/test/plugin/test_parser_json.rb +31 -0
  32. data/test/plugin_helper/test_http_server_helper.rb +1 -1
  33. data/test/plugin_helper/test_server.rb +64 -41
  34. data/test/plugin_helper/test_socket.rb +1 -1
  35. data/test/test_config.rb +6 -0
  36. data/test/test_event_router.rb +2 -2
  37. metadata +37 -9
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b91c47ef9342fa99cc377c8bafc37afa3b67511ba4b946a15a95dc2e845415f4
4
- data.tar.gz: 402b8c065ab503c337ff90dcd3bcbf08a79fd93df2b5de98f155588060dc5840
3
+ metadata.gz: fcc3a30a9e314d87517f7be5560f5ff382d3335b0320be04ac6b3bb489bbdd8c
4
+ data.tar.gz: e8a6e2ff32150bf564036724aa5e39ee45c933ea391498163a70b4aa3242473d
5
5
  SHA512:
6
- metadata.gz: 6e9b7f9234357fb1ef811dd6087224221dba7e1030aa448eaaf70cee1f7867297ad6bb208ff9e6d2ccfc82a4f4fd6584e137a2b8aa765ca99d3a3054ea2dda9b
7
- data.tar.gz: 9040b8269bd7c3c5be178340f0d264a82affacba575fb1682d67d9088d66ab2eb617cf24baf94e949f98a240c12e3ac58fbab3981f31bcf41aab2d567de5a290
6
+ metadata.gz: d13313bad71d1bf23044f1a8fef3157c8e5392024cf6d2f5015fd4a2ab57eab0fc86b52fa9191705a82536cfafadafb7c19b975bc6c7d68f925ac132590a7278
7
+ data.tar.gz: e0300f26f6713d5cada654b7774b0f0a25a4593cc2f961e484c54c5e15effdbdc87b17e2398f3f4430ca4e92e0a92e014223534e54cf44772a2c55918c73fdc6
@@ -3,8 +3,14 @@ name: Test
3
3
  on:
4
4
  push:
5
5
  branches: [v1.16]
6
+ paths-ignore:
7
+ - '*.md'
8
+ - 'lib/fluent/version.rb'
6
9
  pull_request:
7
10
  branches: [v1.16]
11
+ paths-ignore:
12
+ - '*.md'
13
+ - 'lib/fluent/version.rb'
8
14
 
9
15
  jobs:
10
16
  test:
@@ -23,10 +29,11 @@ jobs:
23
29
  uses: ruby/setup-ruby@v1
24
30
  with:
25
31
  ruby-version: ${{ matrix.ruby-version }}
32
+ rubygems: latest
26
33
  - name: Install addons
27
34
  if: ${{ matrix.os == 'ubuntu-latest' }}
28
35
  run: sudo apt-get install libgmp3-dev libcap-ng-dev
29
36
  - name: Install dependencies
30
37
  run: bundle install
31
38
  - name: Run tests
32
- run: bundle exec rake test TESTOPTS=-v
39
+ run: bundle exec rake test TESTOPTS="-v --no-show-detail-immediately"
data/CHANGELOG.md CHANGED
@@ -1,5 +1,55 @@
1
1
  # v1.16
2
2
 
3
+ ## Release v1.16.7 - 2025/01/29
4
+
5
+ ### Bug Fix
6
+
7
+ * Windows: Fix `NoMethodError` of `--daemon` option
8
+ https://github.com/fluent/fluentd/pull/4796
9
+ * Windows: Fixed an issue where stopping the service immediately after startup could leave the processes
10
+ https://github.com/fluent/fluentd/pull/4782
11
+ * Windows: Fixed an issue where stopping service sometimes can not be completed forever
12
+ https://github.com/fluent/fluentd/pull/4782
13
+
14
+ ### Misc
15
+
16
+ * Windows: Add workaround for unexpected exception
17
+ https://github.com/fluent/fluentd/pull/4747
18
+ * README: remove deprecated google analytics beacon
19
+ https://github.com/fluent/fluentd/pull/4797
20
+ * CI improvemnts
21
+ https://github.com/fluent/fluentd/pull/4723
22
+ https://github.com/fluent/fluentd/pull/4788
23
+ https://github.com/fluent/fluentd/pull/4789
24
+ https://github.com/fluent/fluentd/pull/4790
25
+ https://github.com/fluent/fluentd/pull/4791
26
+ https://github.com/fluent/fluentd/pull/4793
27
+ https://github.com/fluent/fluentd/pull/4794
28
+ https://github.com/fluent/fluentd/pull/4795
29
+ https://github.com/fluent/fluentd/pull/4798
30
+ https://github.com/fluent/fluentd/pull/4799
31
+ https://github.com/fluent/fluentd/pull/4800
32
+ https://github.com/fluent/fluentd/pull/4801
33
+ https://github.com/fluent/fluentd/pull/4803
34
+
35
+ ## Release v1.16.6 - 2024/08/16
36
+
37
+ ### Bug Fix
38
+
39
+ * YAML config syntax: Fix issue where `$log_level` element was not supported correctly
40
+ https://github.com/fluent/fluentd/pull/4486
41
+ * parser_json: Fix wrong LoadError warning
42
+ https://github.com/fluent/fluentd/pull/4592
43
+ * `fluentd` command: Fix `--plugin` (`-p`) option not to overwrite default value
44
+ https://github.com/fluent/fluentd/pull/4605
45
+
46
+ ### Misc
47
+
48
+ * out_file: Add warn message for symlink_path setting
49
+ https://github.com/fluent/fluentd/pull/4512
50
+ * Keep console gem v1.23 to avoid LoadError
51
+ https://github.com/fluent/fluentd/pull/4510
52
+
3
53
  ## Release v1.16.5 - 2024/03/27
4
54
 
5
55
  ### Bug Fix
data/README.md CHANGED
@@ -71,5 +71,3 @@ See [SECURITY](SECURITY.md) to contact us about vulnerability.
71
71
  ## Contributors:
72
72
 
73
73
  Patches contributed by [great developers](https://github.com/fluent/fluentd/contributors).
74
-
75
- [<img src="https://ga-beacon.appspot.com/UA-24890265-6/fluent/fluentd" />](https://github.com/fluent/fluentd)
data/fluentd.gemspec CHANGED
@@ -29,6 +29,12 @@ Gem::Specification.new do |gem|
29
29
  gem.add_runtime_dependency("tzinfo-data", ["~> 1.0"])
30
30
  gem.add_runtime_dependency("strptime", [">= 0.2.4", "< 1.0.0"])
31
31
  gem.add_runtime_dependency("webrick", ["~> 1.4"])
32
+ gem.add_runtime_dependency("console", ["< 1.24"])
33
+
34
+ # gems that aren't default gems as of Ruby 3.5
35
+ # logger 1.6.3 or later cause bug on windows,
36
+ # hold on 1.6.2 for a while. see https://github.com/ruby/logger/issues/107
37
+ gem.add_runtime_dependency("logger", ["1.6.2"])
32
38
 
33
39
  # build gem for a certain platform. see also Rakefile
34
40
  fake_platform = ENV['GEM_BUILD_FAKE_PLATFORM'].to_s
@@ -45,7 +51,9 @@ Gem::Specification.new do |gem|
45
51
  gem.add_development_dependency("parallel_tests", ["~> 0.15.3"])
46
52
  gem.add_development_dependency("simplecov", ["~> 0.7"])
47
53
  gem.add_development_dependency("rr", ["~> 3.0"])
48
- gem.add_development_dependency("timecop", ["~> 0.9"])
54
+ # timecop v0.9.9 supports `Process.clock_gettime`. It breaks some tests.
55
+ # (https://github.com/fluent/fluentd/pull/4521)
56
+ gem.add_development_dependency("timecop", ["< 0.9.9"])
49
57
  gem.add_development_dependency("test-unit", ["~> 3.3"])
50
58
  gem.add_development_dependency("test-unit-rr", ["~> 1.0"])
51
59
  gem.add_development_dependency("oj", [">= 2.14", "< 4"])
@@ -46,7 +46,7 @@ op.on('--show-plugin-config=PLUGIN', "[DEPRECATED] Show PLUGIN configuration and
46
46
  }
47
47
 
48
48
  op.on('-p', '--plugin DIR', "add plugin directory") {|s|
49
- (cmd_opts[:plugin_dirs] ||= []) << s
49
+ (cmd_opts[:plugin_dirs] ||= default_opts[:plugin_dirs]) << s
50
50
  }
51
51
 
52
52
  op.on('-I PATH', "add library path") {|s|
@@ -138,6 +138,10 @@ module Fluent
138
138
  sb.add_line('@id', v)
139
139
  end
140
140
 
141
+ if (v = config.delete('$log_level'))
142
+ sb.add_line('@log_level', v)
143
+ end
144
+
141
145
  config.each do |key, val|
142
146
  if val.is_a?(Array)
143
147
  val.each do |v|
@@ -172,6 +172,14 @@ module Fluent::Plugin
172
172
  log.warn "symlink_path is unavailable on Windows platform. disabled."
173
173
  @symlink_path = nil
174
174
  else
175
+ placeholder_validators(:symlink_path, @symlink_path).reject{ |v| v.type == :time }.each do |v|
176
+ begin
177
+ v.validate!
178
+ rescue Fluent::ConfigError => e
179
+ log.warn "#{e}. This means multiple chunks are competing for a single symlink_path, so some logs may not be taken from the symlink."
180
+ end
181
+ end
182
+
175
183
  @buffer.extend SymlinkBufferMixin
176
184
  @buffer.symlink_path = @symlink_path
177
185
  @buffer.output_plugin_for_symlink = self
@@ -50,23 +50,15 @@ module Fluent
50
50
  def configure_json_parser(name)
51
51
  case name
52
52
  when :oj
53
- raise LoadError unless Fluent::OjOptions.available?
54
- [Oj.method(:load), Oj::ParseError]
53
+ return [Oj.method(:load), Oj::ParseError] if Fluent::OjOptions.available?
54
+
55
+ log&.info "Oj is not installed, and failing back to Yajl for json parser"
56
+ configure_json_parser(:yajl)
55
57
  when :json then [JSON.method(:load), JSON::ParserError]
56
58
  when :yajl then [Yajl.method(:load), Yajl::ParseError]
57
59
  else
58
60
  raise "BUG: unknown json parser specified: #{name}"
59
61
  end
60
- rescue LoadError => ex
61
- name = :yajl
62
- if log
63
- if /\boj\z/.match?(ex.message)
64
- log.info "Oj is not installed, and failing back to Yajl for json parser"
65
- else
66
- log.warn ex.message
67
- end
68
- end
69
- retry
70
62
  end
71
63
 
72
64
  def parse(text)
@@ -440,7 +440,7 @@ module Fluent
440
440
  stop_immediately_at_unrecoverable_exit: true,
441
441
  root_dir: params['root_dir'],
442
442
  logger: $log,
443
- log: $log.out,
443
+ log: $log&.out,
444
444
  log_level: params['log_level'],
445
445
  chuser: params['chuser'],
446
446
  chgroup: params['chgroup'],
@@ -16,6 +16,6 @@
16
16
 
17
17
  module Fluent
18
18
 
19
- VERSION = '1.16.5'
19
+ VERSION = '1.16.7'
20
20
 
21
21
  end
data/lib/fluent/winsvc.rb CHANGED
@@ -63,10 +63,12 @@ begin
63
63
  end
64
64
 
65
65
  def service_stop
66
- set_event(@service_name)
67
- if @pid > 0
68
- Process.waitpid(@pid)
66
+ if @pid <= 0
67
+ set_event(@service_name)
68
+ return
69
69
  end
70
+
71
+ wait_supervisor_finished
70
72
  end
71
73
 
72
74
  def service_paramchange
@@ -91,6 +93,29 @@ begin
91
93
  ev.set
92
94
  ev.close
93
95
  end
96
+
97
+ def repeat_set_event_several_times_until_success(event_name)
98
+ retries = 0
99
+ max_retries = 10
100
+ delay_sec = 3
101
+
102
+ begin
103
+ set_event(event_name)
104
+ rescue Errno::ENOENT
105
+ # This error occurs when the supervisor process has not yet created the event.
106
+ # If STOP is immediately executed, this state will occur.
107
+ # Retry `set_event' to wait for the initialization of the supervisor.
108
+ retries += 1
109
+ raise if max_retries < retries
110
+ sleep(delay_sec)
111
+ retry
112
+ end
113
+ end
114
+
115
+ def wait_supervisor_finished
116
+ repeat_set_event_several_times_until_success(@service_name)
117
+ Process.waitpid(@pid)
118
+ end
94
119
  end
95
120
 
96
121
  FluentdService.new(opts[:service_name]).mainloop
@@ -18,7 +18,7 @@ class TestFluentCat < ::Test::Unit::TestCase
18
18
  @primary = create_primary
19
19
  metadata = @primary.buffer.new_metadata
20
20
  @chunk = create_chunk(@primary, metadata, @es)
21
- @port = unused_port
21
+ @port = unused_port(protocol: :all)
22
22
  end
23
23
 
24
24
  def teardown
@@ -87,7 +87,7 @@ class TestFluentCat < ::Test::Unit::TestCase
87
87
  d = create_driver
88
88
  d.run(expect_records: 1) do
89
89
  Open3.pipeline_w("#{ServerEngine.ruby_bin_path} #{FLUENT_CAT_COMMAND} --port #{@port} --format msgpack secondary") do |stdin|
90
- stdin.write(File.read(path))
90
+ stdin.write(File.read(path, File.size(path)))
91
91
  stdin.close
92
92
  end
93
93
  end
@@ -128,11 +128,14 @@ class TestFluentdCommand < ::Test::Unit::TestCase
128
128
 
129
129
  # ATTENTION: This stops taking logs when all `pattern_list` match or timeout,
130
130
  # so `patterns_not_match` can test only logs up to that point.
131
+ # You can pass a block to assert something after log matching.
131
132
  def assert_log_matches(cmdline, *pattern_list, patterns_not_match: [], timeout: 20, env: {})
132
133
  matched = false
133
134
  matched_wrongly = false
134
- assert_error_msg = ""
135
+ error_msg_match = ""
135
136
  stdio_buf = ""
137
+ succeeded_block = true
138
+ error_msg_block = ""
136
139
  begin
137
140
  execute_command(cmdline, @tmp_dir, env) do |pid, stdout|
138
141
  begin
@@ -163,6 +166,13 @@ class TestFluentdCommand < ::Test::Unit::TestCase
163
166
  end
164
167
  end
165
168
  end
169
+
170
+ begin
171
+ yield if block_given?
172
+ rescue => e
173
+ succeeded_block = false
174
+ error_msg_block = "failed block execution after matching: #{e}"
175
+ end
166
176
  ensure
167
177
  if SUPERVISOR_PID_PATTERN =~ stdio_buf
168
178
  @supervisor_pid = $1.to_i
@@ -173,19 +183,19 @@ class TestFluentdCommand < ::Test::Unit::TestCase
173
183
  end
174
184
  end
175
185
  rescue Timeout::Error
176
- assert_error_msg = "execution timeout"
186
+ error_msg_match = "execution timeout"
177
187
  # https://github.com/fluent/fluentd/issues/4095
178
188
  # On Windows, timeout without `@supervisor_pid` means that the test is invalid,
179
189
  # since the supervisor process will survive without being killed correctly.
180
190
  flunk("Invalid test: The pid of supervisor could not be taken, which is necessary on Windows.") if Fluent.windows? && @supervisor_pid.nil?
181
191
  rescue => e
182
- assert_error_msg = "unexpected error in launching fluentd: #{e.inspect}"
192
+ error_msg_match = "unexpected error in launching fluentd: #{e.inspect}"
183
193
  else
184
- assert_error_msg = "log doesn't match" unless matched
194
+ error_msg_match = "log doesn't match" unless matched
185
195
  end
186
196
 
187
197
  if patterns_not_match.empty?
188
- assert_error_msg = build_message(assert_error_msg,
198
+ error_msg_match = build_message(error_msg_match,
189
199
  "<?>\nwas expected to include:\n<?>",
190
200
  stdio_buf, pattern_list)
191
201
  else
@@ -197,16 +207,17 @@ class TestFluentdCommand < ::Test::Unit::TestCase
197
207
  lines.any?{|line| line.include?(ptn) }
198
208
  end
199
209
  if matched_wrongly
200
- assert_error_msg << "\n" unless assert_error_msg.empty?
201
- assert_error_msg << "pattern exists in logs wrongly: #{ptn}"
210
+ error_msg_match << "\n" unless error_msg_match.empty?
211
+ error_msg_match << "pattern exists in logs wrongly: #{ptn}"
202
212
  end
203
213
  end
204
- assert_error_msg = build_message(assert_error_msg,
214
+ error_msg_match = build_message(error_msg_match,
205
215
  "<?>\nwas expected to include:\n<?>\nand not include:\n<?>",
206
216
  stdio_buf, pattern_list, patterns_not_match)
207
217
  end
208
218
 
209
- assert matched && !matched_wrongly, assert_error_msg
219
+ assert matched && !matched_wrongly, error_msg_match
220
+ assert succeeded_block, error_msg_block if block_given?
210
221
  end
211
222
 
212
223
  def assert_fluentd_fails_to_start(cmdline, *pattern_list, timeout: 20)
@@ -1164,7 +1175,7 @@ CONF
1164
1175
  end
1165
1176
  end
1166
1177
 
1167
- sub_test_case 'sahred socket options' do
1178
+ sub_test_case 'shared socket options' do
1168
1179
  test 'enable shared socket by default' do
1169
1180
  conf = ""
1170
1181
  conf_path = create_conf_file('empty.conf', conf)
@@ -1288,4 +1299,40 @@ CONF
1288
1299
  "[debug]")
1289
1300
  end
1290
1301
  end
1302
+
1303
+ sub_test_case "plugin option" do
1304
+ test "should be the default value when not specifying" do
1305
+ conf_path = create_conf_file('test.conf', <<~CONF)
1306
+ <source>
1307
+ @type monitor_agent
1308
+ </source>
1309
+ CONF
1310
+ assert File.exist?(conf_path)
1311
+ cmdline = create_cmdline(conf_path)
1312
+
1313
+ assert_log_matches(cmdline, "fluentd worker is now running") do
1314
+ response = Net::HTTP.get(URI.parse("http://localhost:24220/api/config.json"))
1315
+ actual_conf = JSON.parse(response)
1316
+ assert_equal Fluent::Supervisor.default_options[:plugin_dirs], actual_conf["plugin_dirs"]
1317
+ end
1318
+ end
1319
+
1320
+ data(short: "-p")
1321
+ data(long: "--plugin")
1322
+ test "can be added by specifying the option" do |option_name|
1323
+ conf_path = create_conf_file('test.conf', <<~CONF)
1324
+ <source>
1325
+ @type monitor_agent
1326
+ </source>
1327
+ CONF
1328
+ assert File.exist?(conf_path)
1329
+ cmdline = create_cmdline(conf_path, option_name, @tmp_dir, option_name, @tmp_dir)
1330
+
1331
+ assert_log_matches(cmdline, "fluentd worker is now running") do
1332
+ response = Net::HTTP.get(URI.parse("http://localhost:24220/api/config.json"))
1333
+ actual_conf = JSON.parse(response)
1334
+ assert_equal Fluent::Supervisor.default_options[:plugin_dirs] + [@tmp_dir, @tmp_dir], actual_conf["plugin_dirs"]
1335
+ end
1336
+ end
1337
+ end
1291
1338
  end
data/test/helper.rb CHANGED
@@ -71,17 +71,31 @@ end
71
71
 
72
72
  include Fluent::Test::Helpers
73
73
 
74
- def unused_port(num = 1, protocol: :tcp, bind: "0.0.0.0")
74
+ def unused_port(num = 1, protocol:, bind: "0.0.0.0")
75
75
  case protocol
76
- when :tcp
76
+ when :tcp, :tls
77
77
  unused_port_tcp(num)
78
78
  when :udp
79
79
  unused_port_udp(num, bind: bind)
80
+ when :all
81
+ unused_port_tcp_udp(num)
80
82
  else
81
83
  raise ArgumentError, "unknown protocol: #{protocol}"
82
84
  end
83
85
  end
84
86
 
87
+ def unused_port_tcp_udp(num = 1)
88
+ raise "not support num > 1" if num > 1
89
+
90
+ # The default maximum number of file descriptors in macOS is 256.
91
+ # It might need to set num to a smaller value than that.
92
+ tcp_ports = unused_port_tcp(200)
93
+ port = unused_port_udp(1, port_list: tcp_ports)
94
+ raise "can't find unused port" unless port
95
+
96
+ port
97
+ end
98
+
85
99
  def unused_port_tcp(num = 1)
86
100
  ports = []
87
101
  sockets = []
@@ -90,7 +104,7 @@ def unused_port_tcp(num = 1)
90
104
  sockets << s
91
105
  ports << s.addr[1]
92
106
  end
93
- sockets.each{|s| s.close }
107
+ sockets.each(&:close)
94
108
  if num == 1
95
109
  return ports.first
96
110
  else
@@ -100,12 +114,15 @@ end
100
114
 
101
115
  PORT_RANGE_AVAILABLE = (1024...65535)
102
116
 
103
- def unused_port_udp(num = 1, bind: "0.0.0.0")
117
+ def unused_port_udp(num = 1, port_list: [], bind: "0.0.0.0")
104
118
  family = IPAddr.new(IPSocket.getaddress(bind)).ipv4? ? ::Socket::AF_INET : ::Socket::AF_INET6
105
119
  ports = []
106
120
  sockets = []
107
- while ports.size < num
108
- port = rand(PORT_RANGE_AVAILABLE)
121
+
122
+ use_random_port = port_list.empty?
123
+ i = 0
124
+ loop do
125
+ port = use_random_port ? rand(PORT_RANGE_AVAILABLE) : port_list[i]
109
126
  u = UDPSocket.new(family)
110
127
  if (u.bind(bind, port) rescue nil)
111
128
  ports << port
@@ -113,8 +130,11 @@ def unused_port_udp(num = 1, bind: "0.0.0.0")
113
130
  else
114
131
  u.close
115
132
  end
133
+ i += 1
134
+ break if ports.size >= num
135
+ break if !use_random_port && i >= port_list.size
116
136
  end
117
- sockets.each{|s| s.close }
137
+ sockets.each(&:close)
118
138
  if num == 1
119
139
  return ports.first
120
140
  else
@@ -5,20 +5,19 @@ require 'fluent/plugin/metrics_local'
5
5
  require 'tempfile'
6
6
 
7
7
  class IntailIOHandlerTest < Test::Unit::TestCase
8
- setup do
9
- @file = Tempfile.new('intail_io_handler').binmode
10
- opened_file_metrics = Fluent::Plugin::LocalMetrics.new
11
- opened_file_metrics.configure(config_element('metrics', '', {}))
12
- closed_file_metrics = Fluent::Plugin::LocalMetrics.new
13
- closed_file_metrics.configure(config_element('metrics', '', {}))
14
- rotated_file_metrics = Fluent::Plugin::LocalMetrics.new
15
- rotated_file_metrics.configure(config_element('metrics', '', {}))
16
- @metrics = Fluent::Plugin::TailInput::MetricsInfo.new(opened_file_metrics, closed_file_metrics, rotated_file_metrics)
17
- end
18
-
19
- teardown do
20
- @file.close rescue nil
21
- @file.unlink rescue nil
8
+ def setup
9
+ Tempfile.create('intail_io_handler') do |file|
10
+ file.binmode
11
+ @file = file
12
+ opened_file_metrics = Fluent::Plugin::LocalMetrics.new
13
+ opened_file_metrics.configure(config_element('metrics', '', {}))
14
+ closed_file_metrics = Fluent::Plugin::LocalMetrics.new
15
+ closed_file_metrics.configure(config_element('metrics', '', {}))
16
+ rotated_file_metrics = Fluent::Plugin::LocalMetrics.new
17
+ rotated_file_metrics.configure(config_element('metrics', '', {}))
18
+ @metrics = Fluent::Plugin::TailInput::MetricsInfo.new(opened_file_metrics, closed_file_metrics, rotated_file_metrics)
19
+ yield
20
+ end
22
21
  end
23
22
 
24
23
  def create_target_info
@@ -6,13 +6,12 @@ require 'fileutils'
6
6
  require 'tempfile'
7
7
 
8
8
  class IntailPositionFileTest < Test::Unit::TestCase
9
- setup do
10
- @file = Tempfile.new('intail_position_file_test').binmode
11
- end
12
-
13
- teardown do
14
- @file.close rescue nil
15
- @file.unlink rescue nil
9
+ def setup
10
+ Tempfile.create('intail_position_file_test') do |file|
11
+ file.binmode
12
+ @file = file
13
+ yield
14
+ end
16
15
  end
17
16
 
18
17
  UNWATCHED_STR = '%016x' % Fluent::Plugin::TailInput::PositionFile::UNWATCHED_POSITION
@@ -111,11 +111,11 @@ class AckHandlerTest < Test::Unit::TestCase
111
111
  r, w = IO.pipe
112
112
  begin
113
113
  w.write(chunk_id)
114
- stub(r).recv { |_|
114
+ def r.recv(arg)
115
115
  sleep(1) # To ensure that multiple threads select the socket before closing.
116
- raise IOError, 'stream closed in another thread' if r.closed?
116
+ raise IOError, 'stream closed in another thread' if self.closed?
117
117
  MessagePack.pack({ 'ack' => Base64.encode64('chunk_id 111') })
118
- }
118
+ end
119
119
  ack.enqueue(r)
120
120
 
121
121
  threads = []
@@ -17,7 +17,7 @@ class SocketCacheTest < Test::Unit::TestCase
17
17
  assert_equal(socket, c.checkout_or('key') { socket })
18
18
  c.checkin(socket)
19
19
 
20
- sock = dont_allow(mock!).open
20
+ sock = mock!.open.never.subject
21
21
  assert_equal(socket, c.checkout_or('key') { sock.open })
22
22
  end
23
23
 
@@ -130,7 +130,7 @@ class SocketCacheTest < Test::Unit::TestCase
130
130
 
131
131
  c = Fluent::Plugin::ForwardOutput::SocketCache.new(10, $log)
132
132
  sock = mock!.close { 'closed' }.subject
133
- sock2 = dont_allow(mock!).close
133
+ sock2 = mock!.close.never.subject
134
134
  stub(sock).inspect
135
135
  stub(sock2).inspect
136
136
 
@@ -154,7 +154,7 @@ class SocketCacheTest < Test::Unit::TestCase
154
154
  Timecop.freeze(Time.parse('2016-04-13 14:00:00 +0900'))
155
155
 
156
156
  c = Fluent::Plugin::ForwardOutput::SocketCache.new(10, $log)
157
- sock = dont_allow(mock!).close
157
+ sock = mock!.close.never.subject
158
158
  stub(sock).inspect
159
159
  c.checkout_or('key') { sock }
160
160
 
@@ -18,7 +18,8 @@ class ForwardInputTest < Test::Unit::TestCase
18
18
  Fluent::Test.setup
19
19
  @responses = [] # for testing responses after sending data
20
20
  @d = nil
21
- @port = unused_port
21
+ # forward plugin uses TCP and UDP sockets on the same port number
22
+ @port = unused_port(protocol: :all)
22
23
  end
23
24
 
24
25
  def teardown
@@ -18,7 +18,7 @@ class HttpInputTest < Test::Unit::TestCase
18
18
 
19
19
  def setup
20
20
  Fluent::Test.setup
21
- @port = unused_port
21
+ @port = unused_port(protocol: :tcp)
22
22
  end
23
23
 
24
24
  def teardown
@@ -392,7 +392,7 @@ EOC
392
392
  end
393
393
 
394
394
  test "emit" do
395
- port = unused_port
395
+ port = unused_port(protocol: :tcp)
396
396
  d = create_driver("
397
397
  @type monitor_agent
398
398
  bind '127.0.0.1'
@@ -451,7 +451,7 @@ EOC
451
451
 
452
452
  sub_test_case "servlets" do
453
453
  setup do
454
- @port = unused_port
454
+ @port = unused_port(protocol: :tcp)
455
455
  # check @type and type in one configuration
456
456
  conf = <<-EOC
457
457
  <source>
@@ -759,7 +759,7 @@ plugin_id:test_filter\tplugin_category:filter\ttype:test_filter\toutput_plugin:f
759
759
  end
760
760
 
761
761
  setup do
762
- @port = unused_port
762
+ @port = unused_port(protocol: :tcp)
763
763
  # check @type and type in one configuration
764
764
  conf = <<-EOC
765
765
  <source>
@@ -840,7 +840,7 @@ plugin_id:test_filter\tplugin_category:filter\ttype:test_filter\toutput_plugin:f
840
840
 
841
841
  sub_test_case "check the port number of http server" do
842
842
  test "on single worker environment" do
843
- port = unused_port
843
+ port = unused_port(protocol: :tcp)
844
844
  d = create_driver("
845
845
  @type monitor_agent
846
846
  bind '127.0.0.1'
@@ -851,7 +851,7 @@ plugin_id:test_filter\tplugin_category:filter\ttype:test_filter\toutput_plugin:f
851
851
  end
852
852
 
853
853
  test "worker_id = 2 on multi worker environment" do
854
- port = unused_port
854
+ port = unused_port(protocol: :tcp)
855
855
  Fluent::SystemConfig.overwrite_system_config('workers' => 4) do
856
856
  d = Fluent::Test::Driver::Input.new(Fluent::Plugin::MonitorAgentInput)
857
857
  d.instance.instance_eval{ @_fluentd_worker_id = 2 }
@@ -905,7 +905,7 @@ EOC
905
905
  end
906
906
 
907
907
  test "plugins have a variable named buffer does not throws NoMethodError" do
908
- port = unused_port
908
+ port = unused_port(protocol: :tcp)
909
909
  d = create_driver("
910
910
  @type monitor_agent
911
911
  bind '127.0.0.1'