Skip to content

Commit

Permalink
Fix problems with UnexpectedFrameEnd raise
Browse files Browse the repository at this point in the history
  • Loading branch information
dentarg committed Feb 15, 2024
1 parent 43b4c59 commit d409d42
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 1 deletion.
2 changes: 1 addition & 1 deletion lib/amqp/client/connection.rb
Original file line number Diff line number Diff line change
Expand Up @@ -443,7 +443,7 @@ def establish(socket, user, password, vhost, options)

type, channel_id, frame_size = buf.unpack("C S> L>")
frame_end = buf.getbyte(frame_size + 7)
raise UnexpectedFrameEnd, frame_end if frame_end != 206
raise Error::UnexpectedFrameEnd, frame_end if frame_end != 206

case type
when 1 # method frame
Expand Down
9 changes: 9 additions & 0 deletions test/amqp/client_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,15 @@ def test_it_can_connect
assert connection
end

def test_it_raises_on_connecting_to_unrelated_service
with_fake_server do |port|
client = AMQP::Client.new("amqp://guest1:guest2@localhost:#{port}")
assert_raises(AMQP::Client::Error) do
client.connect
end
end
end

def test_it_raises_on_bad_credentials
client = AMQP::Client.new("amqp://guest1:guest2@localhost")
assert_raises(AMQP::Client::Error) do
Expand Down
23 changes: 23 additions & 0 deletions test/test_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -37,5 +37,28 @@ def skip_if_no_sudo
end
end

require "socket"
module FakeServer
def with_fake_server(host: "127.0.0.1")
server = TCPServer.new(host, 0)

Thread.new do
loop do
client = server.accept
client.puts "foobar"
client.close
break
rescue IOError
break
end
end

yield server.connect_address.ip_port

server.close
end
end

Minitest::Test.prepend TimeoutEveryTestCase
Minitest::Test.prepend SkipSudoTestCase
Minitest::Test.prepend FakeServer

0 comments on commit d409d42

Please sign in to comment.