fluentd 1.16.6-x64-mingw-ucrt → 1.16.7-x64-mingw-ucrt

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8da42c71a4e549e36487a1c2aa44f6f3c57e334de07b2db530bb8b53c8e2c234
4
- data.tar.gz: d7953b063d58d20cbc3b8b7bbddc496f6682add58fce983bfa5f24e1b33824e5
3
+ metadata.gz: 7f16846a608f3956616ce5937e1f585253309dfaf4e12f249efa8cd700136e57
4
+ data.tar.gz: e746ebc044f59fd28e238268af9e8d96ac1b3dc145f13695450f1ce7748b3c17
5
5
  SHA512:
6
- metadata.gz: b832e44c501295a88e89d2a5ca47c2846293252101ad9dd7a79f93a381344201c7eb2cb4578179a19f5405a22d23eab2d0f3f41f3e04823d6729d4b5483bbcfa
7
- data.tar.gz: 5c7bf91228f746fdc17ec24dfb2d54e62a58853c8e55a0b58e2d1652061f496da9a07ba9019f36084e42f724d426f570e9d648bceba26a379b98858bcdd0f291
6
+ metadata.gz: 349dbad6bd1e176408e90db75e34c989663ffc00e9d370f2832679490bb3294a6bd4d61cf78196b9b7d061b627da18e6a378886356cc021389caa182dd916e7c
7
+ data.tar.gz: a07e37342332987957e256c560d6a2358625e842c20f617d5d12dc609b55aaf2071fb5c8b7d486152f80e3a1f012ec328158f458c45a4dd323e28c0a8d90c6d3
@@ -29,6 +29,7 @@ jobs:
29
29
  uses: ruby/setup-ruby@v1
30
30
  with:
31
31
  ruby-version: ${{ matrix.ruby-version }}
32
+ rubygems: latest
32
33
  - name: Install addons
33
34
  if: ${{ matrix.os == 'ubuntu-latest' }}
34
35
  run: sudo apt-get install libgmp3-dev libcap-ng-dev
data/CHANGELOG.md CHANGED
@@ -1,5 +1,37 @@
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
+
3
35
  ## Release v1.16.6 - 2024/08/16
4
36
 
5
37
  ### 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
@@ -31,6 +31,11 @@ Gem::Specification.new do |gem|
31
31
  gem.add_runtime_dependency("webrick", ["~> 1.4"])
32
32
  gem.add_runtime_dependency("console", ["< 1.24"])
33
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"])
38
+
34
39
  # build gem for a certain platform. see also Rakefile
35
40
  fake_platform = ENV['GEM_BUILD_FAKE_PLATFORM'].to_s
36
41
  gem.platform = fake_platform unless fake_platform.empty?
@@ -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.6'
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
@@ -1175,7 +1175,7 @@ CONF
1175
1175
  end
1176
1176
  end
1177
1177
 
1178
- sub_test_case 'sahred socket options' do
1178
+ sub_test_case 'shared socket options' do
1179
1179
  test 'enable shared socket by default' do
1180
1180
  conf = ""
1181
1181
  conf_path = create_conf_file('empty.conf', conf)
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
@@ -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'
@@ -5,24 +5,24 @@ require 'fluent/plugin/in_syslog'
5
5
  class SyslogInputTest < Test::Unit::TestCase
6
6
  def setup
7
7
  Fluent::Test.setup
8
- @port = unused_port
8
+ @port = unused_port(protocol: :udp)
9
9
  end
10
10
 
11
11
  def teardown
12
12
  @port = nil
13
13
  end
14
14
 
15
- def ipv4_config
15
+ def ipv4_config(port = @port)
16
16
  %[
17
- port #{@port}
17
+ port #{port}
18
18
  bind 127.0.0.1
19
19
  tag syslog
20
20
  ]
21
21
  end
22
22
 
23
- def ipv6_config
23
+ def ipv6_config(port = @port)
24
24
  %[
25
- port #{@port}
25
+ port #{port}
26
26
  bind ::1
27
27
  tag syslog
28
28
  ]
@@ -69,7 +69,8 @@ EOS
69
69
  'Use transport and protocol' => ["protocol_type udp\n<transport tcp>\n </transport>", :udp, :tcp])
70
70
  def test_configure_protocol(param)
71
71
  conf, proto_type, transport_proto_type = *param
72
- d = create_driver([ipv4_config, conf].join("\n"))
72
+ port = unused_port(protocol: proto_type ? proto_type : transport_proto_type)
73
+ d = create_driver([ipv4_config(port), conf].join("\n"))
73
74
 
74
75
  assert_equal(d.instance.protocol_type, proto_type)
75
76
  assert_equal(d.instance.transport_config.protocol, transport_proto_type)
@@ -158,12 +159,13 @@ EOS
158
159
  end
159
160
 
160
161
  def test_msg_size_with_tcp
161
- d = create_driver([ipv4_config, "<transport tcp> \n</transport>"].join("\n"))
162
+ port = unused_port(protocol: :tcp)
163
+ d = create_driver([ipv4_config(port), "<transport tcp> \n</transport>"].join("\n"))
162
164
  tests = create_test_case
163
165
 
164
166
  d.run(expect_emits: 2) do
165
167
  tests.each {|test|
166
- TCPSocket.open('127.0.0.1', @port) do |s|
168
+ TCPSocket.open('127.0.0.1', port) do |s|
167
169
  s.send(test['msg'], 0)
168
170
  end
169
171
  }
@@ -189,11 +191,12 @@ EOS
189
191
  end
190
192
 
191
193
  def test_msg_size_with_same_tcp_connection
192
- d = create_driver([ipv4_config, "<transport tcp> \n</transport>"].join("\n"))
194
+ port = unused_port(protocol: :tcp)
195
+ d = create_driver([ipv4_config(port), "<transport tcp> \n</transport>"].join("\n"))
193
196
  tests = create_test_case
194
197
 
195
198
  d.run(expect_emits: 2) do
196
- TCPSocket.open('127.0.0.1', @port) do |s|
199
+ TCPSocket.open('127.0.0.1', port) do |s|
197
200
  tests.each {|test|
198
201
  s.send(test['msg'], 0)
199
202
  }
@@ -347,12 +350,13 @@ EOS
347
350
 
348
351
  sub_test_case 'octet counting frame' do
349
352
  def test_msg_size_with_tcp
350
- d = create_driver([ipv4_config, "<transport tcp> \n</transport>", 'frame_type octet_count'].join("\n"))
353
+ port = unused_port(protocol: :tcp)
354
+ d = create_driver([ipv4_config(port), "<transport tcp> \n</transport>", 'frame_type octet_count'].join("\n"))
351
355
  tests = create_test_case
352
356
 
353
357
  d.run(expect_emits: 2) do
354
358
  tests.each {|test|
355
- TCPSocket.open('127.0.0.1', @port) do |s|
359
+ TCPSocket.open('127.0.0.1', port) do |s|
356
360
  s.send(test['msg'], 0)
357
361
  end
358
362
  }
@@ -363,11 +367,12 @@ EOS
363
367
  end
364
368
 
365
369
  def test_msg_size_with_same_tcp_connection
366
- d = create_driver([ipv4_config, "<transport tcp> \n</transport>", 'frame_type octet_count'].join("\n"))
370
+ port = unused_port(protocol: :tcp)
371
+ d = create_driver([ipv4_config(port), "<transport tcp> \n</transport>", 'frame_type octet_count'].join("\n"))
367
372
  tests = create_test_case
368
373
 
369
374
  d.run(expect_emits: 2) do
370
- TCPSocket.open('127.0.0.1', @port) do |s|
375
+ TCPSocket.open('127.0.0.1', port) do |s|
371
376
  tests.each {|test|
372
377
  s.send(test['msg'], 0)
373
378
  }
@@ -469,7 +474,8 @@ EOS
469
474
  end
470
475
 
471
476
  def test_send_keepalive_packet_is_disabled_by_default
472
- d = create_driver(ipv4_config + %[
477
+ port = unused_port(protocol: :tcp)
478
+ d = create_driver(ipv4_config(port) + %[
473
479
  <transport tcp>
474
480
  </transport>
475
481
  protocol tcp
@@ -479,19 +485,20 @@ EOS
479
485
 
480
486
  def test_send_keepalive_packet_can_be_enabled
481
487
  addr = "127.0.0.1"
482
- d = create_driver(ipv4_config + %[
488
+ port = unused_port(protocol: :tcp)
489
+ d = create_driver(ipv4_config(port) + %[
483
490
  <transport tcp>
484
491
  </transport>
485
492
  send_keepalive_packet true
486
493
  ])
487
494
  assert_true d.instance.send_keepalive_packet
488
495
  mock.proxy(d.instance).server_create_connection(
489
- :in_syslog_tcp_server, @port,
496
+ :in_syslog_tcp_server, port,
490
497
  bind: addr,
491
498
  resolve_name: nil,
492
499
  send_keepalive_packet: true)
493
500
  d.run do
494
- TCPSocket.open(addr, @port)
501
+ TCPSocket.open(addr, port)
495
502
  end
496
503
  end
497
504
 
@@ -3172,9 +3172,7 @@ class TailInputTest < Test::Unit::TestCase
3172
3172
  Fluent::FileWrapper.open("#{@tmp_dir}/tail.txt0", "ab") {|f| f.puts "file3 log2"}
3173
3173
  end
3174
3174
 
3175
- inode_0 = tail_watchers[0]&.ino
3176
- inode_1 = tail_watchers[1]&.ino
3177
- inode_2 = tail_watchers[2]&.ino
3175
+ pos_file_inode = tail_watchers[2].pe.read_inode
3178
3176
  record_values = d.events.collect { |event| event[2]["message"] }.sort
3179
3177
  position_entries = []
3180
3178
  Fluent::FileWrapper.open("#{@tmp_dir}/tail.pos", "r") do |f|
@@ -3188,17 +3186,15 @@ class TailInputTest < Test::Unit::TestCase
3188
3186
  {
3189
3187
  record_values: ["file1 log1", "file1 log2", "file2 log1", "file2 log2", "file3 log1", "file3 log2"],
3190
3188
  tail_watcher_paths: ["#{@tmp_dir}/tail.txt0", "#{@tmp_dir}/tail.txt0", "#{@tmp_dir}/tail.txt0"],
3191
- tail_watcher_inodes: [inode_0, inode_1, inode_2],
3192
3189
  tail_watcher_io_handler_opened_statuses: [false, false, false],
3193
3190
  position_entries: [
3194
3191
  # The recorded path is old, but it is no problem. The path is not used when using follow_inodes.
3195
- ["#{@tmp_dir}/tail.txt0", "0000000000000016", inode_2],
3192
+ ["#{@tmp_dir}/tail.txt0", "0000000000000016", pos_file_inode],
3196
3193
  ],
3197
3194
  },
3198
3195
  {
3199
3196
  record_values: record_values,
3200
3197
  tail_watcher_paths: tail_watchers.collect { |tw| tw.path },
3201
- tail_watcher_inodes: tail_watchers.collect { |tw| tw.ino },
3202
3198
  tail_watcher_io_handler_opened_statuses: tail_watchers.collect { |tw| tw.instance_variable_get(:@io_handler)&.opened? || false },
3203
3199
  position_entries: position_entries
3204
3200
  },
@@ -3253,9 +3249,7 @@ class TailInputTest < Test::Unit::TestCase
3253
3249
  sleep 4
3254
3250
  end
3255
3251
 
3256
- inode_0 = tail_watchers[0]&.ino
3257
- inode_1 = tail_watchers[1]&.ino
3258
- inode_2 = tail_watchers[2]&.ino
3252
+ pos_file_inode = tail_watchers[2].pe.read_inode
3259
3253
  record_values = d.events.collect { |event| event[2]["message"] }.sort
3260
3254
  position_entries = []
3261
3255
  Fluent::FileWrapper.open("#{@tmp_dir}/tail.pos", "r") do |f|
@@ -3269,16 +3263,14 @@ class TailInputTest < Test::Unit::TestCase
3269
3263
  {
3270
3264
  record_values: ["file1 log1", "file1 log2", "file2 log1", "file2 log2", "file3 log1", "file3 log2"],
3271
3265
  tail_watcher_paths: ["#{@tmp_dir}/tail.txt0", "#{@tmp_dir}/tail.txt0", "#{@tmp_dir}/tail.txt0"],
3272
- tail_watcher_inodes: [inode_0, inode_1, inode_2],
3273
3266
  tail_watcher_io_handler_opened_statuses: [false, false, false],
3274
3267
  position_entries: [
3275
- ["#{@tmp_dir}/tail.txt0", "0000000000000016", inode_2],
3268
+ ["#{@tmp_dir}/tail.txt0", "0000000000000016", pos_file_inode],
3276
3269
  ],
3277
3270
  },
3278
3271
  {
3279
3272
  record_values: record_values,
3280
3273
  tail_watcher_paths: tail_watchers.collect { |tw| tw.path },
3281
- tail_watcher_inodes: tail_watchers.collect { |tw| tw.ino },
3282
3274
  tail_watcher_io_handler_opened_statuses: tail_watchers.collect { |tw| tw.instance_variable_get(:@io_handler)&.opened? || false },
3283
3275
  position_entries: position_entries
3284
3276
  },
@@ -5,7 +5,7 @@ require 'fluent/plugin/in_tcp'
5
5
  class TcpInputTest < Test::Unit::TestCase
6
6
  def setup
7
7
  Fluent::Test.setup
8
- @port = unused_port
8
+ @port = unused_port(protocol: :tcp)
9
9
  end
10
10
 
11
11
  def teardown
@@ -5,7 +5,7 @@ require 'fluent/plugin/in_udp'
5
5
  class UdpInputTest < Test::Unit::TestCase
6
6
  def setup
7
7
  Fluent::Test.setup
8
- @port = unused_port
8
+ @port = unused_port(protocol: :udp)
9
9
  end
10
10
 
11
11
  def teardown
@@ -268,25 +268,31 @@ class UdpInputTest < Test::Unit::TestCase
268
268
 
269
269
  test 'message_length_limit' do
270
270
  message_length_limit = 32
271
+
272
+ if Fluent.windows?
273
+ expected_records = ["0" * 30, "4" * 30]
274
+ else
275
+ expected_records = 1.upto(3).collect do |i|
276
+ "#{i}" * message_length_limit
277
+ end
278
+ expected_records.prepend("0" * 30)
279
+ expected_records.append("4" * 30)
280
+ end
281
+
271
282
  d = create_driver(base_config + %!
272
283
  format none
273
284
  message_length_limit #{message_length_limit}
274
285
  !)
275
- d.run(expect_records: 3) do
286
+ d.run(expect_records: expected_records.size, timeout: 5) do
276
287
  create_udp_socket('127.0.0.1', @port) do |u|
277
- 3.times do |i|
288
+ u.send("0" * 30 + "\n", 0)
289
+ 1.upto(3) do |i|
278
290
  u.send("#{i}" * 40 + "\n", 0)
279
291
  end
292
+ u.send("4" * 30 + "\n", 0)
280
293
  end
281
294
  end
282
295
 
283
- if Fluent.windows?
284
- expected_records = []
285
- else
286
- expected_records = 3.times.collect do |i|
287
- "#{i}" * message_length_limit
288
- end
289
- end
290
296
  actual_records = d.events.collect do |event|
291
297
  event[2]["message"]
292
298
  end
@@ -500,10 +500,18 @@ class ExecFilterOutputTest < Test::Unit::TestCase
500
500
  d = create_driver(conf)
501
501
  time = event_time('2011-01-02 13:14:15')
502
502
 
503
- d.run(default_tag: 'test', expect_emits: 1, timeout: 10, start: true, shutdown: false){ d.feed(time, {"k1" => 0}) }
504
- d.run(default_tag: 'test', expect_emits: 1, timeout: 10, start: false, shutdown: false){ d.feed(time, {"k1" => 1}) }
505
- d.run(default_tag: 'test', expect_emits: 1, timeout: 10, start: false, shutdown: false){ d.feed(time, {"k1" => 2}) }
506
- d.run(default_tag: 'test', expect_emits: 1, timeout: 10, start: false, shutdown: false){ d.feed(time, {"k1" => 3}) }
503
+ d.run(default_tag: 'test', expect_emits: 4) do
504
+ d.feed(time, {"k1" => 0})
505
+ d.flush
506
+ sleep 0.5
507
+ d.feed(time, {"k1" => 1})
508
+ d.flush
509
+ sleep 0.5
510
+ d.feed(time, {"k1" => 2})
511
+ d.flush
512
+ sleep 0.5
513
+ d.feed(time, {"k1" => 3})
514
+ end
507
515
 
508
516
  assert_equal "2011-01-02 13:14:15\ttest\t0\n", d.formatted[0]
509
517
  assert_equal "2011-01-02 13:14:15\ttest\t1\n", d.formatted[1]
@@ -524,9 +532,6 @@ class ExecFilterOutputTest < Test::Unit::TestCase
524
532
  assert_equal pid_list[1], events[1][2]['child_pid']
525
533
  assert_equal pid_list[0], events[2][2]['child_pid']
526
534
  assert_equal pid_list[1], events[3][2]['child_pid']
527
-
528
- ensure
529
- d.run(start: false, shutdown: true)
530
535
  end
531
536
 
532
537
  # child process exits per 3 lines
@@ -334,7 +334,7 @@ class FileOutputTest < Test::Unit::TestCase
334
334
  assert_equal r5, d.formatted[4]
335
335
 
336
336
  read_gunzip = ->(path){
337
- File.open(path){ |fio|
337
+ File.open(path, 'rb'){ |fio|
338
338
  Zlib::GzipReader.new(StringIO.new(fio.read)).read
339
339
  }
340
340
  }
@@ -12,7 +12,8 @@ class ForwardOutputTest < Test::Unit::TestCase
12
12
  FileUtils.rm_rf(TMP_DIR)
13
13
  FileUtils.mkdir_p(TMP_DIR)
14
14
  @d = nil
15
- @target_port = unused_port
15
+ # forward plugin uses TCP and UDP sockets on the same port number
16
+ @target_port = unused_port(protocol: :all)
16
17
  end
17
18
 
18
19
  def teardown
@@ -610,7 +611,6 @@ EOL
610
611
 
611
612
  @d = d = create_driver(config + %[
612
613
  require_ack_response true
613
- ack_response_timeout 1s
614
614
  <buffer tag>
615
615
  flush_mode immediate
616
616
  retry_type periodic
@@ -658,7 +658,6 @@ EOL
658
658
 
659
659
  @d = d = create_driver(config + %[
660
660
  require_ack_response true
661
- ack_response_timeout 10s
662
661
  <buffer tag>
663
662
  flush_mode immediate
664
663
  retry_type periodic
@@ -54,7 +54,7 @@ class TcpOutputTest < Test::Unit::TestCase
54
54
 
55
55
  def setup
56
56
  super
57
- @port = unused_port
57
+ @port = unused_port(protocol: :tcp)
58
58
  end
59
59
 
60
60
  def teardown
@@ -14,7 +14,7 @@ class HttpHelperTest < Test::Unit::TestCase
14
14
  CERT_CA_DIR = File.expand_path(File.dirname(__FILE__) + '/data/cert/with_ca')
15
15
 
16
16
  def setup
17
- @port = unused_port
17
+ @port = unused_port(protocol: :tcp)
18
18
  end
19
19
 
20
20
  def teardown
@@ -15,7 +15,7 @@ class ServerPluginHelperTest < Test::Unit::TestCase
15
15
  TMP_DIR = File.expand_path(File.dirname(__FILE__) + "/../tmp/plugin_helper_server")
16
16
 
17
17
  setup do
18
- @port = unused_port
18
+ @port = unused_port(protocol: :tcp)
19
19
  if Fluent.windows?
20
20
  @socket_manager_server = ServerEngine::SocketManager::Server.open
21
21
  @socket_manager_path = @socket_manager_server.path
@@ -233,11 +233,12 @@ class ServerPluginHelperTest < Test::Unit::TestCase
233
233
  # 'server_create_connection tcp' => [:server_create_connection, :unix],
234
234
  )
235
235
  test 'raise error if udp options specified for tcp/tls/unix' do |(m, proto)|
236
+ port = unused_port(protocol: proto)
236
237
  assert_raise ArgumentError do
237
- @d.__send__(m, :myserver, @port, proto: proto, max_bytes: 128){|x| x }
238
+ @d.__send__(m, :myserver, port, proto: proto, max_bytes: 128){|x| x }
238
239
  end
239
240
  assert_raise ArgumentError do
240
- @d.__send__(m, :myserver, @port, proto: proto, flags: 1){|x| x }
241
+ @d.__send__(m, :myserver, port, proto: proto, flags: 1){|x| x }
241
242
  end
242
243
  end
243
244
 
@@ -245,8 +246,9 @@ class ServerPluginHelperTest < Test::Unit::TestCase
245
246
  'server_create udp' => [:server_create, :udp],
246
247
  )
247
248
  test 'raise error if tcp/tls options specified for udp' do |(m, proto)|
249
+ port = unused_port(protocol: proto)
248
250
  assert_raise(ArgumentError.new("BUG: linger_timeout is available for tcp/tls")) do
249
- @d.__send__(m, :myserver, @port, proto: proto, linger_timeout: 1, max_bytes: 128){|x| x }
251
+ @d.__send__(m, :myserver, port, proto: proto, linger_timeout: 1, max_bytes: 128){|x| x }
250
252
  end
251
253
  end
252
254
 
@@ -254,8 +256,9 @@ class ServerPluginHelperTest < Test::Unit::TestCase
254
256
  'server_create udp' => [:server_create, :udp],
255
257
  )
256
258
  test 'raise error if tcp/tls/unix backlog options specified for udp' do |(m, proto)|
259
+ port = unused_port(protocol: proto)
257
260
  assert_raise(ArgumentError.new("BUG: backlog is available for tcp/tls")) do
258
- @d.__send__(m, :myserver, @port, proto: proto, backlog: 500){|x| x }
261
+ @d.__send__(m, :myserver, port, proto: proto, backlog: 500){|x| x }
259
262
  end
260
263
  end
261
264
 
@@ -263,8 +266,9 @@ class ServerPluginHelperTest < Test::Unit::TestCase
263
266
  'server_create udp' => [:server_create, :udp],
264
267
  )
265
268
  test 'raise error if tcp/tls send_keepalive_packet option is specified for udp' do |(m, proto)|
269
+ port = unused_port(protocol: proto)
266
270
  assert_raise(ArgumentError.new("BUG: send_keepalive_packet is available for tcp/tls")) do
267
- @d.__send__(m, :myserver, @port, proto: proto, send_keepalive_packet: true){|x| x }
271
+ @d.__send__(m, :myserver, port, proto: proto, send_keepalive_packet: true){|x| x }
268
272
  end
269
273
  end
270
274
 
@@ -276,8 +280,9 @@ class ServerPluginHelperTest < Test::Unit::TestCase
276
280
  # 'server_create_connection unix' => [:server_create_connection, :unix, {}],
277
281
  )
278
282
  test 'raise error if tls options specified for tcp/udp/unix' do |(m, proto, kwargs)|
283
+ port = unused_port(protocol: proto)
279
284
  assert_raise(ArgumentError.new("BUG: tls_options is available only for tls")) do
280
- @d.__send__(m, :myserver, @port, proto: proto, tls_options: {}, **kwargs){|x| x }
285
+ @d.__send__(m, :myserver, port, proto: proto, tls_options: {}, **kwargs){|x| x }
281
286
  end
282
287
  end
283
288
 
@@ -289,7 +294,8 @@ class ServerPluginHelperTest < Test::Unit::TestCase
289
294
  'server_create_connection tls' => [:server_create_connection, :tls, {tls_options: {insecure: true}}],
290
295
  )
291
296
  test 'can bind specified IPv4 address' do |(m, proto, kwargs)|
292
- @d.__send__(m, :myserver, @port, proto: proto, bind: "127.0.0.1", **kwargs){|x| x }
297
+ port = unused_port(protocol: proto)
298
+ @d.__send__(m, :myserver, port, proto: proto, bind: "127.0.0.1", **kwargs){|x| x }
293
299
  assert_equal "127.0.0.1", @d._servers.first.bind
294
300
  assert_equal "127.0.0.1", @d._servers.first.server.instance_eval{ instance_variable_defined?(:@listen_socket) ? @listen_socket : @_io }.addr[3]
295
301
  end
@@ -303,7 +309,8 @@ class ServerPluginHelperTest < Test::Unit::TestCase
303
309
  )
304
310
  test 'can bind specified IPv6 address' do |(m, proto, kwargs)| # if available
305
311
  omit "IPv6 unavailable here" unless ipv6_enabled?
306
- @d.__send__(m, :myserver, @port, proto: proto, bind: "::1", **kwargs){|x| x }
312
+ port = unused_port(protocol: proto)
313
+ @d.__send__(m, :myserver, port, proto: proto, bind: "::1", **kwargs){|x| x }
307
314
  assert_equal "::1", @d._servers.first.bind
308
315
  assert_equal "::1", @d._servers.first.server.instance_eval{ instance_variable_defined?(:@listen_socket) ? @listen_socket : @_io }.addr[3]
309
316
  end
@@ -320,10 +327,11 @@ class ServerPluginHelperTest < Test::Unit::TestCase
320
327
  test 'can create 2 or more servers which share same bind address and port if shared option is true' do |(m, proto, kwargs)|
321
328
  begin
322
329
  d2 = Dummy.new; d2.start; d2.after_start
330
+ port = unused_port(protocol: proto)
323
331
 
324
332
  assert_nothing_raised do
325
- @d.__send__(m, :myserver, @port, proto: proto, **kwargs){|x| x }
326
- d2.__send__(m, :myserver, @port, proto: proto, **kwargs){|x| x }
333
+ @d.__send__(m, :myserver, port, proto: proto, **kwargs){|x| x }
334
+ d2.__send__(m, :myserver, port, proto: proto, **kwargs){|x| x }
327
335
  end
328
336
  ensure
329
337
  d2.stop; d2.before_shutdown; d2.shutdown; d2.after_shutdown; d2.close; d2.terminate
@@ -344,12 +352,13 @@ class ServerPluginHelperTest < Test::Unit::TestCase
344
352
  test 'cannot create 2 or more servers using same bind address and port if shared option is false' do |(m, proto, kwargs)|
345
353
  begin
346
354
  d2 = Dummy.new; d2.start; d2.after_start
355
+ port = unused_port(protocol: proto)
347
356
 
348
357
  assert_nothing_raised do
349
- @d.__send__(m, :myserver, @port, proto: proto, shared: false, **kwargs){|x| x }
358
+ @d.__send__(m, :myserver, port, proto: proto, shared: false, **kwargs){|x| x }
350
359
  end
351
360
  assert_raise(Errno::EADDRINUSE, Errno::EACCES) do
352
- d2.__send__(m, :myserver, @port, proto: proto, **kwargs){|x| x }
361
+ d2.__send__(m, :myserver, port, proto: proto, **kwargs){|x| x }
353
362
  end
354
363
  ensure
355
364
  d2.stop; d2.before_shutdown; d2.shutdown; d2.after_shutdown; d2.close; d2.terminate
@@ -365,16 +374,18 @@ class ServerPluginHelperTest < Test::Unit::TestCase
365
374
  # 'unix' => [:unix, {}],
366
375
  )
367
376
  test 'raise error if block argument is not specified or too many' do |(proto, kwargs)|
377
+ port = unused_port(protocol: proto)
368
378
  assert_raise(ArgumentError.new("BUG: block must have 1 or 2 arguments")) do
369
- @d.server_create(:myserver, @port, proto: proto, **kwargs){ 1 }
379
+ @d.server_create(:myserver, port, proto: proto, **kwargs){ 1 }
370
380
  end
371
381
  assert_raise(ArgumentError.new("BUG: block must have 1 or 2 arguments")) do
372
- @d.server_create(:myserver, @port, proto: proto, **kwargs){|sock, conn, what_is_this| 1 }
382
+ @d.server_create(:myserver, port, proto: proto, **kwargs){|sock, conn, what_is_this| 1 }
373
383
  end
374
384
  end
375
385
 
376
386
  test 'creates udp server if specified in proto' do
377
- @d.server_create(:myserver, @port, proto: :udp, max_bytes: 512){|x| x }
387
+ port = unused_port(protocol: :udp)
388
+ @d.server_create(:myserver, port, proto: :udp, max_bytes: 512){|x| x }
378
389
 
379
390
  created_server_info = @d._servers.first
380
391
  assert_equal :udp, created_server_info.proto
@@ -587,7 +598,8 @@ class ServerPluginHelperTest < Test::Unit::TestCase
587
598
  sub_test_case '#server_create_udp' do
588
599
  test 'can accept all keyword arguments valid for udp server' do
589
600
  assert_nothing_raised do
590
- @d.server_create_udp(:s, @port, bind: '127.0.0.1', shared: false, resolve_name: true, max_bytes: 100, flags: 1) do |data, conn|
601
+ port = unused_port(protocol: :udp)
602
+ @d.server_create_udp(:s, port, bind: '127.0.0.1', shared: false, resolve_name: true, max_bytes: 100, flags: 1) do |data, conn|
591
603
  # ...
592
604
  end
593
605
  end
@@ -595,14 +607,15 @@ class ServerPluginHelperTest < Test::Unit::TestCase
595
607
 
596
608
  test 'creates a udp server just to read data' do
597
609
  received = ""
598
- @d.server_create_udp(:s, @port, max_bytes: 128) do |data|
610
+ port = unused_port(protocol: :udp)
611
+ @d.server_create_udp(:s, port, max_bytes: 128) do |data|
599
612
  received << data
600
613
  end
601
614
  bind_port = unused_port(protocol: :udp, bind: "127.0.0.1")
602
615
  3.times do
603
616
  sock = UDPSocket.new(Socket::AF_INET)
604
617
  sock.bind("127.0.0.1", bind_port)
605
- sock.connect("127.0.0.1", @port)
618
+ sock.connect("127.0.0.1", port)
606
619
  sock.puts "yay"
607
620
  sock.puts "foo"
608
621
  sock.close
@@ -614,16 +627,17 @@ class ServerPluginHelperTest < Test::Unit::TestCase
614
627
  test 'creates a udp server to read and write data' do
615
628
  received = ""
616
629
  responses = []
617
- @d.server_create_udp(:s, @port, max_bytes: 128) do |data, sock|
630
+ port = unused_port(protocol: :udp)
631
+ @d.server_create_udp(:s, port, max_bytes: 128) do |data, sock|
618
632
  received << data
619
633
  sock.write "ack\n"
620
634
  end
621
- bind_port = unused_port
635
+ bind_port = unused_port(protocol: :udp)
622
636
  3.times do
623
637
  begin
624
638
  sock = UDPSocket.new(Socket::AF_INET)
625
639
  sock.bind("127.0.0.1", bind_port)
626
- sock.connect("127.0.0.1", @port)
640
+ sock.connect("127.0.0.1", port)
627
641
  th = Thread.new do
628
642
  while true
629
643
  begin
@@ -654,11 +668,12 @@ class ServerPluginHelperTest < Test::Unit::TestCase
654
668
 
655
669
  received = ""
656
670
  responses = []
657
- @d.server_create_udp(:s, @port, bind: "::1", max_bytes: 128) do |data, sock|
671
+ port = unused_port(protocol: :udp)
672
+ @d.server_create_udp(:s, port, bind: "::1", max_bytes: 128) do |data, sock|
658
673
  received << data
659
674
  sock.write "ack\n"
660
675
  end
661
- bind_port = unused_port
676
+ bind_port = unused_port(protocol: :udp)
662
677
  3.times do
663
678
  begin
664
679
  sock = UDPSocket.new(Socket::AF_INET6)
@@ -667,7 +682,7 @@ class ServerPluginHelperTest < Test::Unit::TestCase
667
682
  responses << sock.recv(16)
668
683
  true
669
684
  end
670
- sock.connect("::1", @port)
685
+ sock.connect("::1", port)
671
686
  sock.write "yay\nfoo\n"
672
687
  th.join(5)
673
688
  ensure
@@ -682,13 +697,14 @@ class ServerPluginHelperTest < Test::Unit::TestCase
682
697
  test 'does not resolve name of client address in default' do
683
698
  received = ""
684
699
  sources = []
685
- @d.server_create_udp(:s, @port, max_bytes: 128) do |data, sock|
700
+ port = unused_port(protocol: :udp)
701
+ @d.server_create_udp(:s, port, max_bytes: 128) do |data, sock|
686
702
  received << data
687
703
  sources << sock.remote_host
688
704
  end
689
705
  3.times do
690
706
  sock = UDPSocket.new(Socket::AF_INET)
691
- sock.connect("127.0.0.1", @port)
707
+ sock.connect("127.0.0.1", port)
692
708
  sock.puts "yay"
693
709
  sock.close
694
710
  end
@@ -702,13 +718,14 @@ class ServerPluginHelperTest < Test::Unit::TestCase
702
718
 
703
719
  received = ""
704
720
  sources = []
705
- @d.server_create_udp(:s, @port, resolve_name: true, max_bytes: 128) do |data, sock|
721
+ port = unused_port(protocol: :udp)
722
+ @d.server_create_udp(:s, port, resolve_name: true, max_bytes: 128) do |data, sock|
706
723
  received << data
707
724
  sources << sock.remote_host
708
725
  end
709
726
  3.times do
710
727
  sock = UDPSocket.new(Socket::AF_INET)
711
- sock.connect("127.0.0.1", @port)
728
+ sock.connect("127.0.0.1", port)
712
729
  sock.puts "yay"
713
730
  sock.close
714
731
  end
@@ -720,7 +737,8 @@ class ServerPluginHelperTest < Test::Unit::TestCase
720
737
  test 'raises error if plugin registers data callback for connection object from #server_create' do
721
738
  received = ""
722
739
  errors = []
723
- @d.server_create_udp(:s, @port, max_bytes: 128) do |data, sock|
740
+ port = unused_port(protocol: :udp)
741
+ @d.server_create_udp(:s, port, max_bytes: 128) do |data, sock|
724
742
  received << data
725
743
  begin
726
744
  sock.data{|d| received << d.upcase }
@@ -729,7 +747,7 @@ class ServerPluginHelperTest < Test::Unit::TestCase
729
747
  end
730
748
  end
731
749
  sock = UDPSocket.new(Socket::AF_INET)
732
- sock.connect("127.0.0.1", @port)
750
+ sock.connect("127.0.0.1", port)
733
751
  sock.write "foo\n"
734
752
  sock.close
735
753
 
@@ -742,7 +760,8 @@ class ServerPluginHelperTest < Test::Unit::TestCase
742
760
  test 'raise error if plugin registers write_complete callback for udp' do
743
761
  received = ""
744
762
  errors = []
745
- @d.server_create_udp(:s, @port, max_bytes: 128) do |data, sock|
763
+ port = unused_port(protocol: :udp)
764
+ @d.server_create_udp(:s, port, max_bytes: 128) do |data, sock|
746
765
  received << data
747
766
  begin
748
767
  sock.on(:write_complete){|conn| "" }
@@ -751,7 +770,7 @@ class ServerPluginHelperTest < Test::Unit::TestCase
751
770
  end
752
771
  end
753
772
  sock = UDPSocket.new(Socket::AF_INET)
754
- sock.connect("127.0.0.1", @port)
773
+ sock.connect("127.0.0.1", port)
755
774
  sock.write "foo\n"
756
775
  sock.close
757
776
 
@@ -764,7 +783,8 @@ class ServerPluginHelperTest < Test::Unit::TestCase
764
783
  test 'raises error if plugin registers close callback for udp' do
765
784
  received = ""
766
785
  errors = []
767
- @d.server_create_udp(:s, @port, max_bytes: 128) do |data, sock|
786
+ port = unused_port(protocol: :udp)
787
+ @d.server_create_udp(:s, port, max_bytes: 128) do |data, sock|
768
788
  received << data
769
789
  begin
770
790
  sock.on(:close){|d| "" }
@@ -773,7 +793,7 @@ class ServerPluginHelperTest < Test::Unit::TestCase
773
793
  end
774
794
  end
775
795
  sock = UDPSocket.new(Socket::AF_INET)
776
- sock.connect("127.0.0.1", @port)
796
+ sock.connect("127.0.0.1", port)
777
797
  sock.write "foo\n"
778
798
  sock.close
779
799
 
@@ -786,11 +806,12 @@ class ServerPluginHelperTest < Test::Unit::TestCase
786
806
  test 'can bind IPv4 / IPv6 together' do
787
807
  omit "IPv6 unavailable here" unless ipv6_enabled?
788
808
 
809
+ port = unused_port(protocol: :udp)
789
810
  assert_nothing_raised do
790
- @d.server_create_udp(:s_ipv4_udp, @port, bind: '0.0.0.0', shared: false, max_bytes: 128) do |data, sock|
811
+ @d.server_create_udp(:s_ipv4_udp, port, bind: '0.0.0.0', shared: false, max_bytes: 128) do |data, sock|
791
812
  # ...
792
813
  end
793
- @d.server_create_udp(:s_ipv6_udp, @port, bind: '::', shared: false, max_bytes: 128) do |data, sock|
814
+ @d.server_create_udp(:s_ipv6_udp, port, bind: '::', shared: false, max_bytes: 128) do |data, sock|
794
815
  # ...
795
816
  end
796
817
  end
@@ -803,11 +824,12 @@ class ServerPluginHelperTest < Test::Unit::TestCase
803
824
  max_bytes, records, expected = data.values
804
825
 
805
826
  actual_records = []
806
- @d.server_create_udp(:myserver, @port, max_bytes: max_bytes) do |data, sock|
827
+ port = unused_port(protocol: :udp)
828
+ @d.server_create_udp(:myserver, port, max_bytes: max_bytes) do |data, sock|
807
829
  actual_records << data
808
830
  end
809
831
 
810
- open_client(:udp, "127.0.0.1", @port) do |sock|
832
+ open_client(:udp, "127.0.0.1", port) do |sock|
811
833
  records.each do |record|
812
834
  sock.send(record, 0)
813
835
  end
@@ -823,11 +845,12 @@ class ServerPluginHelperTest < Test::Unit::TestCase
823
845
  max_bytes, records, expected = data.values
824
846
 
825
847
  actual_records = []
826
- @d.server_create_udp(:myserver, @port, max_bytes: max_bytes) do |data|
848
+ port = unused_port(protocol: :udp)
849
+ @d.server_create_udp(:myserver, port, max_bytes: max_bytes) do |data|
827
850
  actual_records << data
828
851
  end
829
852
 
830
- open_client(:udp, "127.0.0.1", @port) do |sock|
853
+ open_client(:udp, "127.0.0.1", port) do |sock|
831
854
  records.each do |record|
832
855
  sock.send(record, 0)
833
856
  end
@@ -11,7 +11,7 @@ class SocketHelperTest < Test::Unit::TestCase
11
11
  CERT_CHAINS_DIR = File.expand_path(File.dirname(__FILE__) + '/data/cert/cert_chains')
12
12
 
13
13
  def setup
14
- @port = unused_port
14
+ @port = unused_port(protocol: :tcp)
15
15
  end
16
16
 
17
17
  def teardown
@@ -175,7 +175,7 @@ class EventRouterTest < ::Test::Unit::TestCase
175
175
  test "don't call default collector when tag matched" do
176
176
  event_router.add_rule('test', output)
177
177
  assert_rr do
178
- dont_allow(default_collector).emit_events('test', is_a(OneEventStream))
178
+ mock(default_collector).emit_events('test', is_a(OneEventStream)).never
179
179
  event_router.emit('test', Engine.now, 'k' => 'v')
180
180
  end
181
181
  # check emit handler doesn't catch rr error
@@ -201,7 +201,7 @@ class EventRouterTest < ::Test::Unit::TestCase
201
201
  event_router.add_rule('test', filter)
202
202
 
203
203
  assert_rr do
204
- dont_allow(filter).filter_stream('test', is_a(OneEventStream)) { events }
204
+ mock(filter).filter_stream('test', is_a(OneEventStream)).never
205
205
  event_router.emit('foo', Engine.now, 'k' => 'v')
206
206
  end
207
207
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluentd
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.16.6
4
+ version: 1.16.7
5
5
  platform: x64-mingw-ucrt
6
6
  authors:
7
7
  - Sadayuki Furuhashi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-08-20 00:00:00.000000000 Z
11
+ date: 2025-01-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -214,6 +214,20 @@ dependencies:
214
214
  - - "<"
215
215
  - !ruby/object:Gem::Version
216
216
  version: '1.24'
217
+ - !ruby/object:Gem::Dependency
218
+ name: logger
219
+ requirement: !ruby/object:Gem::Requirement
220
+ requirements:
221
+ - - '='
222
+ - !ruby/object:Gem::Version
223
+ version: 1.6.2
224
+ type: :runtime
225
+ prerelease: false
226
+ version_requirements: !ruby/object:Gem::Requirement
227
+ requirements:
228
+ - - '='
229
+ - !ruby/object:Gem::Version
230
+ version: 1.6.2
217
231
  - !ruby/object:Gem::Dependency
218
232
  name: win32-service
219
233
  requirement: !ruby/object:Gem::Requirement