Skip to content

Commit d26f6e1

Browse files
committed
Don't monkeypatch IO in order to test write timeouts.
1 parent d353ad2 commit d26f6e1

File tree

2 files changed

+16
-15
lines changed

2 files changed

+16
-15
lines changed

lib/redis/connection/ruby.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
require "redis/connection/command_helper"
33
require "redis/errors"
44
require "socket"
5+
require "timeout"
56

67
class Redis
78
module Connection

test/internals_test.rb

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -162,25 +162,25 @@ def test_connection_timeout
162162

163163
driver(:ruby) do
164164
def test_write_timeout
165-
redis_mock(:write_timeout => 0.1, :timeout => 1) do |redis|
166-
# This is really disgusting, but this essentially mocks the "super" call in write
167-
IO.class_eval do
168-
alias_method :old_write, :write
165+
t = Thread.new do
166+
TCPServer.new("127.0.0.1", 6383)
167+
end
169168

170-
def write(*args)
171-
sleep 1
172-
end
173-
end
174-
assert_raise Redis::TimeoutError do
175-
redis.rpush("tmp", "test")
169+
begin
170+
TCPSocket.new("127.0.0.1", 6383)
171+
rescue Errno::ECONNREFUSED
172+
sleep(0.05)
173+
retry
174+
end
175+
176+
assert_raise(Redis::TimeoutError) do
177+
Timeout.timeout(1) do
178+
redis = Redis.new(:port => 6383, timeout: 5, write_timeout: 0.2)
179+
redis.set("foo", "1" * 1048576)
176180
end
177181
end
178182
ensure
179-
IO.class_eval do
180-
undef_method :write
181-
alias_method :write, :old_write
182-
undef_method :old_write
183-
end
183+
t.join if t
184184
end
185185
end
186186

0 commit comments

Comments
 (0)