summaryrefslogtreecommitdiff
path: root/spec/ruby/library/socket/tcpserver/accept_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/ruby/library/socket/tcpserver/accept_spec.rb')
-rw-r--r--spec/ruby/library/socket/tcpserver/accept_spec.rb43
1 files changed, 38 insertions, 5 deletions
diff --git a/spec/ruby/library/socket/tcpserver/accept_spec.rb b/spec/ruby/library/socket/tcpserver/accept_spec.rb
index f0ef9cc727..f2aa0bf8e1 100644
--- a/spec/ruby/library/socket/tcpserver/accept_spec.rb
+++ b/spec/ruby/library/socket/tcpserver/accept_spec.rb
@@ -15,7 +15,7 @@ describe "TCPServer#accept" do
data = nil
t = Thread.new do
client = @server.accept
- client.should be_kind_of(TCPSocket)
+ client.should.is_a?(TCPSocket)
data = client.read(5)
client << "goodbye"
client.close
@@ -50,7 +50,7 @@ describe "TCPServer#accept" do
t = Thread.new {
-> {
@server.accept
- }.should raise_error(Exception, "interrupted")
+ }.should.raise(Exception, "interrupted")
}
Thread.pass while t.status and t.status != "sleep"
@@ -58,9 +58,29 @@ describe "TCPServer#accept" do
t.join
end
+ it "is automatically retried when interrupted by SIGVTALRM" do
+ t = Thread.new do
+ client = @server.accept
+ value = client.read(2)
+ client.close
+ value
+ end
+
+ Thread.pass while t.status and t.status != "sleep"
+ # Thread#backtrace uses SIGVTALRM on TruffleRuby and potentially other implementations.
+ # Sending a signal to a thread is not possible with Ruby APIs.
+ t.backtrace.join("\n").should =~ /in [`'](?:TCPServer#)?accept'/
+
+ socket = TCPSocket.new('127.0.0.1', @port)
+ socket.write("OK")
+ socket.close
+
+ t.value.should == "OK"
+ end
+
it "raises an IOError if the socket is closed" do
@server.close
- lambda { @server.accept }.should raise_error(IOError)
+ -> { @server.accept }.should.raise(IOError)
end
end
@@ -76,7 +96,7 @@ describe 'TCPServer#accept' do
describe 'without a connected client' do
it 'blocks the caller' do
- lambda { @server.accept }.should block_caller
+ -> { @server.accept }.should block_caller
end
end
@@ -92,7 +112,20 @@ describe 'TCPServer#accept' do
it 'returns a TCPSocket' do
@socket = @server.accept
- @socket.should be_an_instance_of(TCPSocket)
+ @socket.should.instance_of?(TCPSocket)
+ end
+
+ platform_is_not :windows do
+ it "returns a TCPSocket which is set to nonblocking" do
+ require 'io/nonblock'
+ @socket = @server.accept
+ @socket.should.nonblock?
+ end
+ end
+
+ it "returns a TCPSocket which is set to close on exec" do
+ @socket = @server.accept
+ @socket.should.close_on_exec?
end
end
end