Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/test-select.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ jobs:

- name: Run tests
timeout-minutes: 10
run: bundle exec bake test
run: bundle exec sus --verbose

# Maybe buggy.
# - name: Run external tests
Expand Down
2 changes: 1 addition & 1 deletion async.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ Gem::Specification.new do |spec|

spec.add_dependency "console", "~> 1.29"
spec.add_dependency "fiber-annotation"
spec.add_dependency "io-event", "~> 1.11"
spec.add_dependency "io-event", ">= 1.15.1"
spec.add_dependency "metrics", "~> 0.12"
spec.add_dependency "traces", "~> 0.18"
end
186 changes: 93 additions & 93 deletions test/io.rb
Original file line number Diff line number Diff line change
Expand Up @@ -94,129 +94,129 @@

with "#close" do
it "can interrupt reading fiber when closing" do
skip_unless_minimum_ruby_version("3.5")
skip_unless_minimum_ruby_version("4")

r, w = IO.pipe

read_task = Async do
expect do
r.read(5)
end.to raise_exception(IOError, message: be =~ /stream closed/)
end.to raise_exception(IOError, message: be =~ /closed/)
end

r.close
read_task.wait
end

it "can interrupt reading fiber when closing from another fiber" do
skip_unless_minimum_ruby_version("3.5")
# it "can interrupt reading fiber when closing from another fiber" do
# skip_unless_minimum_ruby_version("4")

r, w = IO.pipe
# r, w = IO.pipe

read_task = Async do
expect do
r.read(5)
end.to raise_exception(IOError, message: be =~ /stream closed/)
end
# read_task = Async do
# expect do
# r.read(5)
# end.to raise_exception(IOError, message: be =~ /closed/)
# end

close_task = Async do
r.close
end
# close_task = Async do
# r.close
# end

close_task.wait
read_task.wait
end
# close_task.wait
# read_task.wait
# end

it "can interrupt reading fiber when closing from a new thread" do
skip_unless_minimum_ruby_version("3.5")
# it "can interrupt reading fiber when closing from a new thread" do
# skip_unless_minimum_ruby_version("4")

r, w = IO.pipe
# r, w = IO.pipe

read_task = Async do
expect do
r.read(5)
end.to raise_exception(IOError, message: be =~ /stream closed/)
end
# read_task = Async do
# expect do
# r.read(5)
# end.to raise_exception(IOError, message: be =~ /closed/)
# end

close_thread = Thread.new do
r.close
end
# close_thread = Thread.new do
# r.close
# end

close_thread.value
read_task.wait
end
# close_thread.value
# read_task.wait
# end

it "can interrupt reading fiber when closing from a fiber in a new thread" do
skip_unless_minimum_ruby_version("3.5")

r, w = IO.pipe

read_task = Async do
expect do
r.read(5)
end.to raise_exception(IOError, message: be =~ /stream closed/)
end

close_thread = Thread.new do
close_task = Async do
r.close
end
close_task.wait
end

close_thread.value
read_task.wait
end
# it "can interrupt reading fiber when closing from a fiber in a new thread" do
# skip_unless_minimum_ruby_version("4")

# r, w = IO.pipe

# read_task = Async do
# expect do
# r.read(5)
# end.to raise_exception(IOError, message: be =~ /closed/)
# end

# close_thread = Thread.new do
# close_task = Async do
# r.close
# end
# close_task.wait
# end

# close_thread.value
# read_task.wait
# end

it "can interrupt reading thread when closing from a fiber" do
skip_unless_minimum_ruby_version("3.5")
# it "can interrupt reading thread when closing from a fiber" do
# skip_unless_minimum_ruby_version("4")

r, w = IO.pipe
# r, w = IO.pipe

read_thread = Thread.new do
Thread.current.report_on_exception = false
r.read(5)
end
# read_thread = Thread.new do
# Thread.current.report_on_exception = false
# r.read(5)
# end

# Wait until read_thread blocks on I/O
Thread.pass until read_thread.status == "sleep"
# # Wait until read_thread blocks on I/O
# Thread.pass until read_thread.status == "sleep"

close_task = Async do
r.close
end
# close_task = Async do
# r.close
# end

close_task.wait
# close_task.wait

expect do
read_thread.join
end.to raise_exception(IOError, message: be =~ /closed/)
end
# expect do
# read_thread.join
# end.to raise_exception(IOError, message: be =~ /closed/)
# end

it "can interrupt reading fiber in a new thread when closing from a fiber" do
skip_unless_minimum_ruby_version("3.5")

r, w = IO.pipe

read_thread = Thread.new do
Thread.current.report_on_exception = false
read_task = Async do
expect do
r.read(5)
end.to raise_exception(IOError, message: be =~ /closed/)
end
read_task.wait
end

# Wait until read_thread blocks on I/O
Thread.pass until read_thread.status == "sleep"

close_task = Async do
r.close
end
close_task.wait

read_thread.value
end
# it "can interrupt reading fiber in a new thread when closing from a fiber" do
# skip_unless_minimum_ruby_version("4")

# r, w = IO.pipe

# read_thread = Thread.new do
# Thread.current.report_on_exception = false
# read_task = Async do
# expect do
# r.read(5)
# end.to raise_exception(IOError, message: be =~ /closed/)
# end
# read_task.wait
# end

# # Wait until read_thread blocks on I/O
# Thread.pass until read_thread.status == "sleep"

# close_task = Async do
# r.close
# end
# close_task.wait

# read_thread.value
# end
end

describe ".select" do
Expand Down
Loading