Skip to content
Merged
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
8 changes: 4 additions & 4 deletions lib/mongo/socket.rb
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class Socket
# Error message for SSL related exceptions.
#
# @since 2.0.0
SSL_ERROR = 'SSL handshake failed. MongoDB may not be configured with SSL support.'.freeze
SSL_ERROR = 'MongoDB may not be configured with SSL support'.freeze

# Error message for timeouts on socket calls.
#
Expand Down Expand Up @@ -284,9 +284,9 @@ def handle_errors
rescue Errno::ETIMEDOUT
raise Error::SocketTimeoutError, TIMEOUT_ERROR
rescue IOError, SystemCallError => e
raise Error::SocketError, e.message
rescue OpenSSL::SSL::SSLError
raise Error::SocketError, SSL_ERROR
raise Error::SocketError, "#{e.class}: #{e}"
rescue OpenSSL::SSL::SSLError => e
raise Error::SocketError, "#{e.class}: #{e} (#{SSL_ERROR})"
end
end
end
Expand Down
2 changes: 1 addition & 1 deletion spec/mongo/socket/ssl_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -561,7 +561,7 @@

it 'should raise EOFError' do
expect { socket.readbyte }
.to raise_error(Mongo::Error::SocketError).with_message("EOFError")
.to raise_error(Mongo::Error::SocketError).with_message("EOFError: EOFError")
end
end
end
Expand Down
42 changes: 42 additions & 0 deletions spec/mongo/socket_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
require 'lite_spec_helper'

describe Mongo::Socket do

let(:socket) do
described_class.new(Socket::PF_INET)
end

describe '#handle_errors' do
it 'maps timeout exception' do
expect do
socket.send(:handle_errors) do
raise Errno::ETIMEDOUT
end
end.to raise_error(Mongo::Error::SocketTimeoutError)
end

it 'maps SystemCallError and preserves message' do
expect do
socket.send(:handle_errors) do
raise SystemCallError.new('Test error', Errno::ENOMEDIUM::Errno)
end
end.to raise_error(Mongo::Error::SocketError, 'Errno::ENOMEDIUM: No medium found - Test error')
end

it 'maps IOError and preserves message' do
expect do
socket.send(:handle_errors) do
raise IOError.new('Test error')
end
end.to raise_error(Mongo::Error::SocketError, 'IOError: Test error')
end

it 'maps SSLError and preserves message' do
expect do
socket.send(:handle_errors) do
raise OpenSSL::SSL::SSLError.new('Test error')
end
end.to raise_error(Mongo::Error::SocketError, 'OpenSSL::SSL::SSLError: Test error (MongoDB may not be configured with SSL support)')
end
end
end