From 11ad20481c9bf51c60fd0b01d1c2c8b2e604e086 Mon Sep 17 00:00:00 2001 From: Daijiro Fukuda Date: Tue, 4 Mar 2025 18:21:49 +0900 Subject: [PATCH] test: improve Sigdump test for Windows Sigdump.dump iterates ObjectSpace. If there are DoubleDefinition objects of RR, it can set some expectations of RR unexpectedly. It can cause test failure. By doing GC, we can remove DoubleDefinition objects made in other tests. This allows us to simplify this test. See https://github.com/fluent/fluentd/issues/4063 Signed-off-by: Daijiro Fukuda --- test/test_supervisor.rb | 39 ++++++++++++++++++--------------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/test/test_supervisor.rb b/test/test_supervisor.rb index 2ad47a4070..b92c2c25b9 100644 --- a/test/test_supervisor.rb +++ b/test/test_supervisor.rb @@ -478,34 +478,31 @@ def test_fluentsigdump_get_path_with_pid(data) def test_supervisor_event_dump_windows omit "Only for Windows, alternative to UNIX signals" unless Fluent.windows? + # https://github.com/fluent/fluentd/issues/4063 + GC.start + + ENV['SIGDUMP_PATH'] = TMP_DIR + "/sigdump.log" + server = DummyServer.new def server.config {:signame => "TestFluentdEvent"} end server.install_windows_event_handler - assert_rr do - # Have to use mock because `Sigdump.dump` seems to be somehow incompatible with RR. - # The `mock(server).restart(true) { nil }` line in `test_rpc_server_windows` cause the next error. - # Failure: test_supervisor_event_dump_windows(SupervisorTest): - # class() - # Called 0 times. - # Expected 1 times. - # .../Ruby26-x64/lib/ruby/gems/2.6.0/gems/sigdump-0.2.4/lib/sigdump.rb:74:in `block in dump_object_count' - # 73: ObjectSpace.each_object {|o| - # 74: c = o.class <-- HERE! - mock(Sigdump).dump(anything) - - begin - sleep 0.1 # Wait for starting windows event thread - event = Win32::Event.open("TestFluentdEvent_CONT") - event.set - event.close - sleep 1.0 # Wait for dumping - ensure - server.stop_windows_event_thread - end + begin + sleep 0.1 # Wait for starting windows event thread + event = Win32::Event.open("TestFluentdEvent_CONT") + event.set + event.close + sleep 1.0 # Wait for dumping + ensure + server.stop_windows_event_thread end + + result_filepaths = Dir.glob("#{TMP_DIR}/*") + assert {result_filepaths.length > 0} + ensure + ENV.delete('SIGDUMP_PATH') end data(:ipv4 => ["0.0.0.0", "127.0.0.1", false],