summaryrefslogtreecommitdiff
path: root/spec/ruby/library/socket
diff options
context:
space:
mode:
authorBenoit Daloze <[email protected]>2019-05-28 22:41:48 +0200
committerBenoit Daloze <[email protected]>2019-05-28 22:41:48 +0200
commita66bc2c01194a9c017c874a30db5b3b6bd95e966 (patch)
tree598d6375b44fd86f90c3477c73086f6fcf08d76c /spec/ruby/library/socket
parentd070523e7be4b95914adeef9a10401fba7718c5a (diff)
Update to ruby/spec@9a501a8
Diffstat (limited to 'spec/ruby/library/socket')
-rw-r--r--spec/ruby/library/socket/basicsocket/do_not_reverse_lookup_spec.rb64
-rw-r--r--spec/ruby/library/socket/fixtures/classes.rb21
-rw-r--r--spec/ruby/library/socket/socket/tcp_server_loop_spec.rb9
-rw-r--r--spec/ruby/library/socket/socket/udp_server_loop_spec.rb14
-rw-r--r--spec/ruby/library/socket/socket/unix_server_loop_spec.rb9
5 files changed, 94 insertions, 23 deletions
diff --git a/spec/ruby/library/socket/basicsocket/do_not_reverse_lookup_spec.rb b/spec/ruby/library/socket/basicsocket/do_not_reverse_lookup_spec.rb
index 85a66275f8..a8800a8493 100644
--- a/spec/ruby/library/socket/basicsocket/do_not_reverse_lookup_spec.rb
+++ b/spec/ruby/library/socket/basicsocket/do_not_reverse_lookup_spec.rb
@@ -37,3 +37,67 @@ describe "BasicSocket.do_not_reverse_lookup" do
@socket.peeraddr[2].should == "127.0.0.1"
end
end
+
+describe :socket_do_not_reverse_lookup, shared: true do
+ it "inherits from BasicSocket.do_not_reverse_lookup when the socket is created" do
+ @socket = @method.call
+ reverse = BasicSocket.do_not_reverse_lookup
+ @socket.do_not_reverse_lookup.should == reverse
+
+ BasicSocket.do_not_reverse_lookup = !reverse
+ @socket.do_not_reverse_lookup.should == reverse
+ end
+
+ it "is true when BasicSocket.do_not_reverse_lookup is true" do
+ BasicSocket.do_not_reverse_lookup = true
+ @socket = @method.call
+ @socket.do_not_reverse_lookup.should == true
+ end
+
+ it "is false when BasicSocket.do_not_reverse_lookup is false" do
+ BasicSocket.do_not_reverse_lookup = false
+ @socket = @method.call
+ @socket.do_not_reverse_lookup.should == false
+ end
+
+ it "can be changed with #do_not_reverse_lookup=" do
+ @socket = @method.call
+ reverse = @socket.do_not_reverse_lookup
+ @socket.do_not_reverse_lookup = !reverse
+ @socket.do_not_reverse_lookup.should == !reverse
+ end
+end
+
+describe "BasicSocket#do_not_reverse_lookup" do
+ before :each do
+ @do_not_reverse_lookup = BasicSocket.do_not_reverse_lookup
+ @server = TCPServer.new('127.0.0.1', 0)
+ @port = @server.addr[1]
+ end
+
+ after :each do
+ @server.close unless @server.closed?
+ @socket.close if @socket && [email protected]?
+ BasicSocket.do_not_reverse_lookup = @do_not_reverse_lookup
+ end
+
+ describe "for an TCPSocket.new socket" do
+ it_behaves_like :socket_do_not_reverse_lookup, -> {
+ TCPSocket.new('127.0.0.1', @port)
+ }
+ end
+
+ describe "for an TCPServer#accept socket" do
+ before :each do
+ @client = TCPSocket.new('127.0.0.1', @port)
+ end
+
+ after :each do
+ @client.close if @client && [email protected]?
+ end
+
+ it_behaves_like :socket_do_not_reverse_lookup, -> {
+ @server.accept
+ }
+ end
+end
diff --git a/spec/ruby/library/socket/fixtures/classes.rb b/spec/ruby/library/socket/fixtures/classes.rb
index 4cfa084333..6cc7ecb389 100644
--- a/spec/ruby/library/socket/fixtures/classes.rb
+++ b/spec/ruby/library/socket/fixtures/classes.rb
@@ -72,24 +72,11 @@ module SocketSpecs
end
def self.loop_with_timeout(timeout = TIME_TOLERANCE)
- require 'timeout'
- time = Process.clock_gettime(Process::CLOCK_MONOTONIC)
+ start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
- loop do
- if Process.clock_gettime(Process::CLOCK_MONOTONIC) - time >= timeout
- raise TimeoutError, "Did not succeed within #{timeout} seconds"
- end
-
- sleep 0.01 # necessary on OSX; don't know why
- yield
- end
- end
-
- def self.wait_until_success(timeout = TIME_TOLERANCE)
- loop_with_timeout(timeout) do
- begin
- return yield
- rescue
+ while yield == :retry
+ if Process.clock_gettime(Process::CLOCK_MONOTONIC) - start >= timeout
+ raise RuntimeError, "Did not succeed within #{timeout} seconds"
end
end
end
diff --git a/spec/ruby/library/socket/socket/tcp_server_loop_spec.rb b/spec/ruby/library/socket/socket/tcp_server_loop_spec.rb
index 617e3d445c..15865a028c 100644
--- a/spec/ruby/library/socket/socket/tcp_server_loop_spec.rb
+++ b/spec/ruby/library/socket/socket/tcp_server_loop_spec.rb
@@ -31,8 +31,13 @@ describe 'Socket.tcp_server_loop' do
end
end
- SocketSpecs.wait_until_success do
- @client.connect(Socket.sockaddr_in(@port, '127.0.0.1'))
+ SocketSpecs.loop_with_timeout do
+ begin
+ @client.connect(Socket.sockaddr_in(@port, '127.0.0.1'))
+ rescue SystemCallError
+ sleep 0.01
+ :retry
+ end
end
# At this point the connection has been set up but the thread may not yet
diff --git a/spec/ruby/library/socket/socket/udp_server_loop_spec.rb b/spec/ruby/library/socket/socket/udp_server_loop_spec.rb
index 95f73a5c35..c6abfb4eb9 100644
--- a/spec/ruby/library/socket/socket/udp_server_loop_spec.rb
+++ b/spec/ruby/library/socket/socket/udp_server_loop_spec.rb
@@ -35,9 +35,17 @@ describe 'Socket.udp_server_loop' do
@client.connect(Socket.sockaddr_in(@port, '127.0.0.1'))
SocketSpecs.loop_with_timeout do
- SocketSpecs.wait_until_success { @client.write('hello') }
-
- break if msg
+ begin
+ @client.write('hello')
+ rescue SystemCallError
+ sleep 0.01
+ :retry
+ else
+ unless msg
+ sleep 0.001
+ :retry
+ end
+ end
end
msg.should == 'hello'
diff --git a/spec/ruby/library/socket/socket/unix_server_loop_spec.rb b/spec/ruby/library/socket/socket/unix_server_loop_spec.rb
index 52c535cd45..a2d2ad9fdb 100644
--- a/spec/ruby/library/socket/socket/unix_server_loop_spec.rb
+++ b/spec/ruby/library/socket/socket/unix_server_loop_spec.rb
@@ -39,7 +39,14 @@ with_feature :unix_socket do
end
end
- @client = SocketSpecs.wait_until_success { Socket.unix(@path) }
+ SocketSpecs.loop_with_timeout do
+ begin
+ @client = Socket.unix(@path)
+ rescue SystemCallError
+ sleep 0.01
+ :retry
+ end
+ end
thread.join(2)