mirror of
https://github.com/ruby/ruby.git
synced 2025-09-15 08:33:58 +02:00
* lib/net/imap.rb (idle): raises a Net::IMAP::Error when the
connection is closed. based on the patch by Hugo Barauna. [Bug #5190] [ruby-core:38930] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@33007 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
5852b97e4e
commit
2bd37c7183
3 changed files with 74 additions and 3 deletions
|
@ -363,6 +363,61 @@ class IMAPTest < Test::Unit::TestCase
|
|||
end
|
||||
end
|
||||
|
||||
def test_connection_closed_during_idle
|
||||
server = create_tcp_server
|
||||
port = server.addr[1]
|
||||
requests = []
|
||||
sock = nil
|
||||
Thread.start do
|
||||
begin
|
||||
sock = server.accept
|
||||
sock.print("* OK test server\r\n")
|
||||
requests.push(sock.gets)
|
||||
sock.print("+ idling\r\n")
|
||||
rescue
|
||||
end
|
||||
end
|
||||
begin
|
||||
imap = Net::IMAP.new(SERVER_ADDR, :port => port)
|
||||
begin
|
||||
th = Thread.current
|
||||
m = Monitor.new
|
||||
in_idle = false
|
||||
exception_raised = false
|
||||
c = m.new_cond
|
||||
Thread.start do
|
||||
m.synchronize do
|
||||
until in_idle
|
||||
c.wait(0.1)
|
||||
end
|
||||
end
|
||||
sock.close
|
||||
exception_raised = true
|
||||
end
|
||||
assert_raise(Net::IMAP::Error) do
|
||||
imap.idle do |res|
|
||||
m.synchronize do
|
||||
in_idle = true
|
||||
c.signal
|
||||
until exception_raised
|
||||
c.wait(0.1)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
assert_equal(1, requests.length)
|
||||
assert_equal("RUBY0001 IDLE\r\n", requests[0])
|
||||
ensure
|
||||
imap.disconnect if imap
|
||||
end
|
||||
ensure
|
||||
server.close
|
||||
if sock && !sock.closed?
|
||||
sock.close
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def imaps_test
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue