summaryrefslogtreecommitdiff
path: root/test/fiber
diff options
context:
space:
mode:
authorSamuel Williams <samuel.williams@oriontransfer.co.nz>2023-03-25 18:36:27 +1300
committerGitHub <noreply@github.com>2023-03-25 18:36:27 +1300
commit466aa8010fb49f9ec6c78ea1de4e8ca0965f4fdf (patch)
tree4ba3083b43adc61625c4422ee32ab8f740c10f81 /test/fiber
parent276f4be96df08becfc59ef253025c2e5f19718fa (diff)
downloadruby-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.rb33
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