Skip to content

Commit 15b6a65

Browse files
committed
✅ Fix backport to net-imap 0.3 and ruby 2.6
FakeServer was introduced by v0.4, so the tests needed to be rewritten without it. And ruby 2.6 doesn't support numbered params or "...".
1 parent b87b288 commit 15b6a65

File tree

1 file changed

+64
-22
lines changed

1 file changed

+64
-22
lines changed

test/net/imap/test_imap_response_handlers.rb

Lines changed: 64 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,10 @@
22

33
require "net/imap"
44
require "test/unit"
5-
require_relative "fake_server"
65

76
class IMAPResponseHandlersTest < Test::Unit::TestCase
8-
include Net::IMAP::FakeServer::TestHelper
97

108
def setup
11-
Net::IMAP.config.reset
129
@do_not_reverse_lookup = Socket.do_not_reverse_lookup
1310
Socket.do_not_reverse_lookup = true
1411
@threads = []
@@ -23,17 +20,32 @@ def teardown
2320
end
2421

2522
test "#add_response_handlers" do
26-
responses = []
27-
with_fake_server do |server, imap|
28-
server.on("NOOP") do |resp|
29-
3.times do resp.untagged("#{_1 + 1} EXPUNGE") end
30-
resp.done_ok
23+
server = create_tcp_server
24+
port = server.addr[1]
25+
start_server do
26+
sock = server.accept
27+
Timeout.timeout(5) do
28+
sock.print("* OK connection established\r\n")
29+
sock.gets # => NOOP
30+
sock.print("* 1 EXPUNGE\r\n")
31+
sock.print("* 2 EXPUNGE\r\n")
32+
sock.print("* 3 EXPUNGE\r\n")
33+
sock.print("RUBY0001 OK NOOP completed\r\n")
34+
sock.gets # => LOGOUT
35+
sock.print("* BYE terminating connection\r\n")
36+
sock.print("RUBY0002 OK LOGOUT completed\r\n")
37+
ensure
38+
sock.close
39+
server.close
3140
end
32-
41+
end
42+
begin
43+
responses = []
44+
imap = Net::IMAP.new(server_addr, port: port)
3345
assert_equal 0, imap.response_handlers.length
34-
imap.add_response_handler do responses << [:block, _1] end
46+
imap.add_response_handler do |r| responses << [:block, r] end
3547
assert_equal 1, imap.response_handlers.length
36-
imap.add_response_handler(->{ responses << [:proc, _1] })
48+
imap.add_response_handler(->(r) { responses << [:proc, r] })
3749
assert_equal 2, imap.response_handlers.length
3850

3951
imap.noop
@@ -48,6 +60,9 @@ def teardown
4860
[:block, Net::IMAP::UntaggedResponse, "EXPUNGE", 3],
4961
[:proc, Net::IMAP::UntaggedResponse, "EXPUNGE", 3],
5062
], responses
63+
ensure
64+
imap&.logout
65+
imap&.disconnect
5166
end
5267
end
5368

@@ -56,14 +71,32 @@ def teardown
5671
expunges = []
5772
alerts = []
5873
untagged = 0
59-
handler0 = ->{ greeting ||= _1 }
74+
handler0 = ->(r) { greeting ||= r }
6075
handler1 = ->(r) { alerts << r.data.text if r.data.code.name == "ALERT" rescue nil }
6176
handler2 = ->(r) { expunges << r.data if r.name == "EXPUNGE" }
6277
handler3 = ->(r) { untagged += 1 if r.is_a?(Net::IMAP::UntaggedResponse) }
6378
response_handlers = [handler0, handler1, handler2, handler3]
6479

65-
run_fake_server_in_thread do |server|
66-
port = server.port
80+
server = create_tcp_server
81+
port = server.addr[1]
82+
start_server do
83+
sock = server.accept
84+
Timeout.timeout(5) do
85+
sock.print("* OK connection established\r\n")
86+
sock.gets # => NOOP
87+
sock.print("* 1 EXPUNGE\r\n")
88+
sock.print("* 1 EXPUNGE\r\n")
89+
sock.print("* OK [ALERT] The first alert.\r\n")
90+
sock.print("RUBY0001 OK [ALERT] Did you see the alert?\r\n")
91+
sock.gets # => LOGOUT
92+
sock.print("* BYE terminating connection\r\n")
93+
sock.print("RUBY0002 OK LOGOUT completed\r\n")
94+
ensure
95+
sock.close
96+
server.close
97+
end
98+
end
99+
begin
67100
imap = Net::IMAP.new("localhost", port: port,
68101
response_handlers: response_handlers)
69102
assert_equal response_handlers, imap.response_handlers
@@ -73,20 +106,29 @@ def teardown
73106
assert_equal imap.greeting, greeting
74107
assert_equal 1, untagged
75108

76-
server.on("NOOP") do |resp|
77-
resp.untagged "1 EXPUNGE"
78-
resp.untagged "1 EXPUNGE"
79-
resp.untagged "OK [ALERT] The first alert."
80-
resp.done_ok "[ALERT] Did you see the alert?"
81-
end
82-
83109
imap.noop
84110
assert_equal 4, untagged
85111
assert_equal [1, 1], expunges # from handler2
86112
assert_equal ["The first alert.", "Did you see the alert?"], alerts
87113
ensure
88-
imap&.logout! unless imap&.disconnected?
114+
imap&.logout
115+
imap&.disconnect
89116
end
90117
end
91118

119+
def start_server
120+
th = Thread.new do
121+
yield
122+
end
123+
@threads << th
124+
sleep 0.1 until th.stop?
125+
end
126+
127+
def create_tcp_server
128+
return TCPServer.new(server_addr, 0)
129+
end
130+
131+
def server_addr
132+
Addrinfo.tcp("localhost", 0).ip_address
133+
end
92134
end

0 commit comments

Comments
 (0)