diff options
Diffstat (limited to 'test/-ext-')
| -rw-r--r-- | test/-ext-/box/test_load_ext.rb (renamed from test/-ext-/namespace/test_load_ext.rb) | 42 | ||||
| -rw-r--r-- | test/-ext-/bug_reporter/test_bug_reporter.rb | 6 | ||||
| -rw-r--r-- | test/-ext-/postponed_job/test_postponed_job.rb | 35 | ||||
| -rw-r--r-- | test/-ext-/scheduler/test_interrupt_with_scheduler.rb | 54 | ||||
| -rw-r--r-- | test/-ext-/stack/test_stack_overflow.rb | 6 | ||||
| -rw-r--r-- | test/-ext-/string/test_capacity.rb | 11 | ||||
| -rw-r--r-- | test/-ext-/string/test_interned_str.rb | 5 | ||||
| -rw-r--r-- | test/-ext-/string/test_set_len.rb | 2 | ||||
| -rw-r--r-- | test/-ext-/test_abi.rb | 4 | ||||
| -rw-r--r-- | test/-ext-/thread/test_lock_native_thread.rb | 4 | ||||
| -rw-r--r-- | test/-ext-/tracepoint/test_tracepoint.rb | 2 |
11 files changed, 103 insertions, 68 deletions
diff --git a/test/-ext-/namespace/test_load_ext.rb b/test/-ext-/box/test_load_ext.rb index da7fe22a74..ea3744375e 100644 --- a/test/-ext-/namespace/test_load_ext.rb +++ b/test/-ext-/box/test_load_ext.rb @@ -2,13 +2,13 @@ require 'test/unit' class Test_Load_Extensions < Test::Unit::TestCase - ENV_ENABLE_NAMESPACE = {'RUBY_NAMESPACE' => '1'} + ENV_ENABLE_BOX = {'RUBY_BOX' => '1'} def test_load_extension pend assert_separately([], "#{<<~"begin;"}\n#{<<~'end;'}") begin; - require '-test-/namespace/yay1' + require '-test-/box/yay1' assert_equal "1.0.0", Yay.version assert_equal "yay", Yay.yay end; @@ -18,24 +18,24 @@ class Test_Load_Extensions < Test::Unit::TestCase pend assert_separately([], "#{<<~"begin;"}\n#{<<~'end;'}", ignore_stderr: true) begin; - require '-test-/namespace/yay1' + require '-test-/box/yay1' yay1 = Yay assert_equal "1.0.0", Yay.version assert_equal "yay", Yay.yay - require '-test-/namespace/yay2' + require '-test-/box/yay2' assert_equal "2.0.0", Yay.version v = Yay.yay assert(v == "yay" || v == "yaaay") # "yay" on Linux, "yaaay" on macOS, Win32 end; end - def test_load_extension_in_namespace + def test_load_extension_in_box pend - assert_separately([ENV_ENABLE_NAMESPACE], "#{<<~"begin;"}\n#{<<~'end;'}") + assert_separately([ENV_ENABLE_BOX], "#{<<~"begin;"}\n#{<<~'end;'}") begin; - ns = Namespace.new - ns.require '-test-/namespace/yay1' + ns = Ruby::Box.new + ns.require '-test-/box/yay1' assert_equal "1.0.0", ns::Yay.version assert_raise(NameError) { Yay } end; @@ -43,12 +43,12 @@ class Test_Load_Extensions < Test::Unit::TestCase def test_different_version_extensions pend - assert_separately([ENV_ENABLE_NAMESPACE], "#{<<~"begin;"}\n#{<<~'end;'}") + assert_separately([ENV_ENABLE_BOX], "#{<<~"begin;"}\n#{<<~'end;'}") begin; - ns1 = Namespace.new - ns2 = Namespace.new - ns1.require('-test-/namespace/yay1') - ns2.require('-test-/namespace/yay2') + ns1 = Ruby::Box.new + ns2 = Ruby::Box.new + ns1.require('-test-/box/yay1') + ns2.require('-test-/box/yay2') assert_raise(NameError) { Yay } assert_not_nil ns1::Yay @@ -62,14 +62,14 @@ class Test_Load_Extensions < Test::Unit::TestCase def test_loading_extensions_from_global_to_local pend - assert_separately([ENV_ENABLE_NAMESPACE], "#{<<~"begin;"}\n#{<<~'end;'}") + assert_separately([ENV_ENABLE_BOX], "#{<<~"begin;"}\n#{<<~'end;'}") begin; - require '-test-/namespace/yay1' + require '-test-/box/yay1' assert_equal "1.0.0", Yay.version assert_equal "yay", Yay.yay - ns = Namespace.new - ns.require '-test-/namespace/yay2' + ns = Ruby::Box.new + ns.require '-test-/box/yay2' assert_equal "2.0.0", ns::Yay.version assert_equal "yaaay", ns::Yay.yay @@ -79,15 +79,15 @@ class Test_Load_Extensions < Test::Unit::TestCase def test_loading_extensions_from_local_to_global pend - assert_separately([ENV_ENABLE_NAMESPACE], "#{<<~"begin;"}\n#{<<~'end;'}") + assert_separately([ENV_ENABLE_BOX], "#{<<~"begin;"}\n#{<<~'end;'}") begin; - ns = Namespace.new - ns.require '-test-/namespace/yay1' + ns = Ruby::Box.new + ns.require '-test-/box/yay1' assert_equal "1.0.0", ns::Yay.version assert_equal "yay", ns::Yay.yay - require '-test-/namespace/yay2' + require '-test-/box/yay2' assert_equal "2.0.0", Yay.version assert_equal "yaaay", Yay.yay diff --git a/test/-ext-/bug_reporter/test_bug_reporter.rb b/test/-ext-/bug_reporter/test_bug_reporter.rb index d402ab1382..83fdba2282 100644 --- a/test/-ext-/bug_reporter/test_bug_reporter.rb +++ b/test/-ext-/bug_reporter/test_bug_reporter.rb @@ -20,8 +20,10 @@ class TestBugReporter < Test::Unit::TestCase no_core = "Process.setrlimit(Process::RLIMIT_CORE, 0); " if defined?(Process.setrlimit) && defined?(Process::RLIMIT_CORE) args = ["-r-test-/bug_reporter", "-C", tmpdir] - args.push("--yjit") if JITSupport.yjit_enabled? # We want the printed description to match this process's RUBY_DESCRIPTION - args.unshift({"RUBY_ON_BUG" => nil}) + # We want the printed description to match this process's RUBY_DESCRIPTION + args.push("--yjit") if JITSupport.yjit_enabled? + args.push("--zjit") if JITSupport.zjit_enabled? + args.unshift({"RUBY_ON_BUG" => nil, "RUBY_CRASH_REPORT" => nil}) stdin = "#{no_core}register_sample_bug_reporter(12345); Process.kill :SEGV, $$" assert_in_out_err(args, stdin, [], expected_stderr, encoding: "ASCII-8BIT") ensure diff --git a/test/-ext-/postponed_job/test_postponed_job.rb b/test/-ext-/postponed_job/test_postponed_job.rb index 8c2b3e95d1..01d6015de1 100644 --- a/test/-ext-/postponed_job/test_postponed_job.rb +++ b/test/-ext-/postponed_job/test_postponed_job.rb @@ -33,39 +33,4 @@ class TestPostponed_job < Test::Unit::TestCase assert_equal [3, 4], values RUBY end - - def test_legacy_register - assert_separately([], __FILE__, __LINE__, <<-'RUBY') - require '-test-/postponed_job' - direct, registered = [], [] - - Bug.postponed_job_call_direct(direct) - Bug.postponed_job_register(registered) - - assert_equal([0], direct) - assert_equal([3], registered) - - Bug.postponed_job_register_one(ary = []) - assert_equal [1], ary - RUBY - end - - def test_legacy_register_one_same - assert_separately([], __FILE__, __LINE__, <<-'RUBY') - require '-test-/postponed_job' - # Registering the same job three times should result in three of the same handle - handles = Bug.postponed_job_register_one_same - assert_equal [handles[0]], handles.uniq - RUBY - end - - if Bug.respond_to?(:postponed_job_register_in_c_thread) - def test_legacy_register_in_c_thread - assert_separately([], __FILE__, __LINE__, <<-'RUBY') - require '-test-/postponed_job' - assert Bug.postponed_job_register_in_c_thread(ary = []) - assert_equal [1], ary - RUBY - end - end end diff --git a/test/-ext-/scheduler/test_interrupt_with_scheduler.rb b/test/-ext-/scheduler/test_interrupt_with_scheduler.rb new file mode 100644 index 0000000000..eb7a0647e5 --- /dev/null +++ b/test/-ext-/scheduler/test_interrupt_with_scheduler.rb @@ -0,0 +1,54 @@ +# frozen_string_literal: true +require 'test/unit' +require 'timeout' +require_relative '../../fiber/scheduler' + +class TestSchedulerInterruptHandling < Test::Unit::TestCase + def setup + pend("No fork support") unless Process.respond_to?(:fork) + require '-test-/scheduler' + end + + # Test without Thread.handle_interrupt - should work regardless of fix + def test_without_handle_interrupt_signal_works + IO.pipe do |input, output| + pid = fork do + STDERR.reopen(output) + + scheduler = Scheduler.new + Fiber.set_scheduler scheduler + + Signal.trap(:INT) do + ::Thread.current.raise(Interrupt) + end + + Fiber.schedule do + # Yield to the scheduler: + sleep(0) + + Bug::Scheduler.blocking_loop(output) + end + end + + output.close + assert_equal "x", input.read(1) + + Process.kill(:INT, pid) + + reaper = Thread.new do + Process.waitpid2(pid) + end + + unless reaper.join(10) + Process.kill(:KILL, pid) + end + + _, status = reaper.value + + # It should be interrupted (not killed): + assert_not_equal 0, status.exitstatus + assert_equal true, status.signaled? + assert_equal Signal.list["INT"], status.termsig + end + end +end diff --git a/test/-ext-/stack/test_stack_overflow.rb b/test/-ext-/stack/test_stack_overflow.rb index 8eddec6ab5..3d7f00331d 100644 --- a/test/-ext-/stack/test_stack_overflow.rb +++ b/test/-ext-/stack/test_stack_overflow.rb @@ -17,7 +17,7 @@ class Test_StackOverflow < Test::Unit::TestCase require '-test-/stack' assert_raise(SystemStackError) do - Thread.alloca_overflow + Thread.stack_overflow end RUBY end @@ -29,7 +29,7 @@ class Test_StackOverflow < Test::Unit::TestCase thread = Thread.new do Thread.current.report_on_exception = false - Thread.alloca_overflow + Thread.stack_overflow end assert_raise(SystemStackError) do @@ -44,7 +44,7 @@ class Test_StackOverflow < Test::Unit::TestCase GC.disable fiber = Fiber.new do - Thread.alloca_overflow + Thread.stack_overflow end assert_raise(SystemStackError) do diff --git a/test/-ext-/string/test_capacity.rb b/test/-ext-/string/test_capacity.rb index df000f7cdb..a23892142a 100644 --- a/test/-ext-/string/test_capacity.rb +++ b/test/-ext-/string/test_capacity.rb @@ -2,16 +2,17 @@ require 'test/unit' require '-test-/string' require 'rbconfig/sizeof' +require 'objspace' class Test_StringCapacity < Test::Unit::TestCase def test_capacity_embedded - assert_equal GC::INTERNAL_CONSTANTS[:BASE_SLOT_SIZE] - embed_header_size - 1, capa('foo') + assert_equal pool_slot_size(0) - embed_header_size - 1, capa('foo') assert_equal max_embed_len, capa('1' * max_embed_len) assert_equal max_embed_len, capa('1' * (max_embed_len - 1)) end def test_capacity_shared - sym = ("a" * GC::INTERNAL_CONSTANTS[:BASE_SLOT_SIZE]).to_sym + sym = ("a" * pool_slot_size(0)).to_sym assert_equal 0, capa(sym.to_s) end @@ -47,7 +48,7 @@ class Test_StringCapacity < Test::Unit::TestCase def test_capacity_frozen s = String.new("I am testing", capacity: 1000) - s << "a" * GC::INTERNAL_CONSTANTS[:BASE_SLOT_SIZE] + s << "a" * pool_slot_size(0) s.freeze assert_equal(s.length, capa(s)) end @@ -69,6 +70,10 @@ class Test_StringCapacity < Test::Unit::TestCase GC::INTERNAL_CONSTANTS[:RBASIC_SIZE] + RbConfig::SIZEOF['void*'] end + def pool_slot_size(_idx = 0) + Integer(ObjectSpace.dump("")[/"slot_size":(\d+)/, 1]) + end + def max_embed_len GC::INTERNAL_CONSTANTS[:RVARGC_MAX_ALLOCATE_SIZE] - embed_header_size - 1 end diff --git a/test/-ext-/string/test_interned_str.rb b/test/-ext-/string/test_interned_str.rb index 340dba41e8..a81cb59aa5 100644 --- a/test/-ext-/string/test_interned_str.rb +++ b/test/-ext-/string/test_interned_str.rb @@ -9,4 +9,9 @@ class Test_RbInternedStr < Test::Unit::TestCase src << "b" * 20 assert_equal "a" * 20, interned_str end + + def test_interned_str_encoding + src = :ascii.name + assert_equal Encoding::US_ASCII, Bug::String.rb_interned_str_dup(src).encoding + end end diff --git a/test/-ext-/string/test_set_len.rb b/test/-ext-/string/test_set_len.rb index 1531d76167..41e14a293a 100644 --- a/test/-ext-/string/test_set_len.rb +++ b/test/-ext-/string/test_set_len.rb @@ -5,7 +5,7 @@ require "-test-/string" class Test_StrSetLen < Test::Unit::TestCase def setup # Make string long enough so that it is not embedded - @range_end = ("0".ord + GC::INTERNAL_CONSTANTS[:BASE_SLOT_SIZE]).chr + @range_end = ("0".ord + GC.stat_heap(0, :slot_size)).chr @s0 = [*"0"..@range_end].join("").freeze @s1 = Bug::String.new(@s0) end diff --git a/test/-ext-/test_abi.rb b/test/-ext-/test_abi.rb index 307ad9f382..7f30feb944 100644 --- a/test/-ext-/test_abi.rb +++ b/test/-ext-/test_abi.rb @@ -9,7 +9,7 @@ class TestABI < Test::Unit::TestCase assert_separately [], <<~RUBY err = assert_raise(LoadError) { require "-test-/abi" } assert_match(/incompatible ABI version/, err.message) - if Namespace.enabled? + if Ruby::Box.enabled? assert_include err.message, "_-test-+abi." else assert_include err.message, "/-test-/abi." @@ -31,7 +31,7 @@ class TestABI < Test::Unit::TestCase assert_separately [{ "RUBY_ABI_CHECK" => "1" }], <<~RUBY err = assert_raise(LoadError) { require "-test-/abi" } assert_match(/incompatible ABI version/, err.message) - if Namespace.enabled? + if Ruby::Box.enabled? assert_include err.message, "_-test-+abi." else assert_include err.message, "/-test-/abi." diff --git a/test/-ext-/thread/test_lock_native_thread.rb b/test/-ext-/thread/test_lock_native_thread.rb index 8a5ba78838..b4044b2b93 100644 --- a/test/-ext-/thread/test_lock_native_thread.rb +++ b/test/-ext-/thread/test_lock_native_thread.rb @@ -15,6 +15,8 @@ end class TestThreadLockNativeThread < Test::Unit::TestCase def test_lock_native_thread + omit "LSAN reports memory leak because NT is not freed for MN thread" if Test::Sanitizers.lsan_enabled? + assert_separately([{'RUBY_MN_THREADS' => '1'}], <<-RUBY) require '-test-/thread/lock_native_thread' @@ -28,6 +30,8 @@ class TestThreadLockNativeThread < Test::Unit::TestCase end def test_lock_native_thread_tls + omit "LSAN reports memory leak because NT is not freed for MN thread" if Test::Sanitizers.lsan_enabled? + assert_separately([{'RUBY_MN_THREADS' => '1'}], <<-RUBY) require '-test-/thread/lock_native_thread' tn = 10 diff --git a/test/-ext-/tracepoint/test_tracepoint.rb b/test/-ext-/tracepoint/test_tracepoint.rb index bf66d8f105..603fd01fd5 100644 --- a/test/-ext-/tracepoint/test_tracepoint.rb +++ b/test/-ext-/tracepoint/test_tracepoint.rb @@ -83,7 +83,7 @@ class TestTracepointObj < Test::Unit::TestCase end def test_teardown_with_active_GC_end_hook - assert_separately([], 'require("-test-/tracepoint"); Bug.after_gc_exit_hook = proc {}') + assert_ruby_status([], 'require("-test-/tracepoint"); Bug.after_gc_exit_hook = proc {}; GC.start') end end |
