Skip to content

Commit 3bd7a66

Browse files
committed
Add TCPSocket to tests, and use TCPSocket as backing to SSLSocket tests.
1 parent 5c317b0 commit 3bd7a66

File tree

2 files changed

+59
-20
lines changed

2 files changed

+59
-20
lines changed

test/io/stream/buffered.rb

Lines changed: 58 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -825,13 +825,18 @@ def before
825825
client.close
826826

827827
task = reactor.async do
828-
server.write("Hello World")
828+
server.write("Hello")
829+
server.flush
830+
server.write("World")
829831
server.flush
830832
rescue Errno::EPIPE => error
831833
error
834+
rescue Errno::ECONNRESET => error
835+
# OpenSSL sockets may raise ECONNRESET instead of EPIPE because they may try to read when writing:
836+
error
832837
end
833838

834-
expect(task.wait).to be_a(Errno::EPIPE)
839+
expect(task.wait).to be_a(Errno::EPIPE).or be_a(Errno::ECONNRESET)
835840

836841
write_buffer = server.instance_variable_get(:@write_buffer)
837842
expect(write_buffer).to be(:empty?)
@@ -1016,38 +1021,72 @@ def after(error = nil)
10161021

10171022
it_behaves_like AUnidirectionalStream
10181023
it_behaves_like ABidirectionalStream
1019-
it_behaves_like ASocketStream
10201024
end
10211025

1022-
describe "OpenSSL::SSL::SSLSocket" do
1026+
describe TCPSocket do
10231027
include Sus::Fixtures::Async::ReactorContext
10241028

1025-
include Sus::Fixtures::OpenSSL::VerifiedCertificateContext
1026-
include Sus::Fixtures::OpenSSL::ValidCertificateContext
1029+
before do
1030+
server = TCPServer.new("localhost", 0)
1031+
port = server.addr[1]
1032+
1033+
@sockets = [
1034+
TCPSocket.new("localhost", port),
1035+
server.accept
1036+
]
1037+
1038+
@client = IO::Stream::Buffered.wrap(@sockets[0])
1039+
@server = IO::Stream::Buffered.wrap(@sockets[1])
1040+
end
10271041

1028-
let(:sockets) {Socket.pair(:UNIX, :STREAM)}
1042+
after do
1043+
@sockets.each(&:close)
1044+
end
10291045

1030-
let(:client) {IO::Stream::Buffered.wrap(OpenSSL::SSL::SSLSocket.new(sockets[0], client_context))}
1031-
let(:server) {IO::Stream::Buffered.wrap(OpenSSL::SSL::SSLSocket.new(sockets[1], server_context))}
1046+
attr :client
1047+
attr :server
10321048

1033-
def before
1034-
super
1049+
it_behaves_like AUnidirectionalStream
1050+
it_behaves_like ABidirectionalStream
1051+
it_behaves_like ASocketStream
1052+
end
1053+
1054+
describe OpenSSL::SSL::SSLSocket do
1055+
include Sus::Fixtures::Async::ReactorContext
1056+
include Sus::Fixtures::OpenSSL::VerifiedCertificateContext
1057+
include Sus::Fixtures::OpenSSL::ValidCertificateContext
1058+
1059+
before do
1060+
server = TCPServer.new("localhost", 0)
1061+
port = server.addr[1]
10351062

1036-
# Closing the SSLSocket should also close the underlying IO:
1037-
client.io.sync_close = true
1038-
server.io.sync_close = true
1063+
@sockets = [
1064+
TCPSocket.new("localhost", port),
1065+
server.accept
1066+
]
1067+
1068+
client = OpenSSL::SSL::SSLSocket.new(@sockets[0], client_context)
1069+
server = OpenSSL::SSL::SSLSocket.new(@sockets[1], server_context)
1070+
1071+
client.sync_close = true
1072+
server.sync_close = true
10391073

10401074
[
1041-
Async{server.io.accept},
1042-
Async{client.io.connect}
1075+
Async{server.accept},
1076+
Async{client.connect}
10431077
].each(&:wait)
1078+
1079+
@client = IO::Stream::Buffered.wrap(client)
1080+
@server = IO::Stream::Buffered.wrap(server)
10441081
end
10451082

1046-
def after(error = nil)
1047-
sockets.each(&:close)
1048-
super
1083+
after do
1084+
@sockets.each(&:close)
10491085
end
10501086

1087+
attr :client
1088+
attr :server
1089+
10511090
it_behaves_like AUnidirectionalStream
10521091
it_behaves_like ABidirectionalStream
10531092
end

test/io/stream/buffered/syswrite.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,6 @@ def after(error = nil)
3030
end
3131

3232
# Become a segfault:
33-
# sleep 1
33+
sleep 0.001
3434
end
3535
end

0 commit comments

Comments
 (0)