diff options
author | Samuel Williams <samuel.williams@oriontransfer.co.nz> | 2023-03-25 18:36:27 +1300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-25 18:36:27 +1300 |
commit | 466aa8010fb49f9ec6c78ea1de4e8ca0965f4fdf (patch) | |
tree | 4ba3083b43adc61625c4422ee32ab8f740c10f81 /test/fiber | |
parent | 276f4be96df08becfc59ef253025c2e5f19718fa (diff) | |
download | ruby-466aa8010fb49f9ec6c78ea1de4e8ca0965f4fdf.tar.gz |
Fix incorrect usage of `rb_fiber_scheduler_io_(p)(read|write)`. (#7593)
Diffstat (limited to 'test/fiber')
-rw-r--r-- | test/fiber/test_io_buffer.rb | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/test/fiber/test_io_buffer.rb b/test/fiber/test_io_buffer.rb index 48a34c31b6..3de70200d5 100644 --- a/test/fiber/test_io_buffer.rb +++ b/test/fiber/test_io_buffer.rb @@ -122,4 +122,37 @@ class TestFiberIOBuffer < Test::Unit::TestCase i&.close o&.close end + + def test_io_buffer_read_write + omit "UNIXSocket is not defined!" unless defined?(UNIXSocket) + + i, o = UNIXSocket.pair + source_buffer = IO::Buffer.for("Hello World!") + destination_buffer = IO::Buffer.new(source_buffer.size) + + # Test non-scheduler code path: + source_buffer.write(o, source_buffer.size) + destination_buffer.read(i, source_buffer.size) + assert_equal source_buffer, destination_buffer + + # Test scheduler code path: + destination_buffer.clear + + thread = Thread.new do + scheduler = IOBufferScheduler.new + Fiber.set_scheduler scheduler + + Fiber.schedule do + source_buffer.write(o, source_buffer.size) + destination_buffer.read(i, source_buffer.size) + end + end + + thread.join + + assert_equal source_buffer, destination_buffer + ensure + i&.close + o&.close + end end |