aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/ruby/pb
diff options
context:
space:
mode:
authorGravatar murgatroid99 <mlumish@google.com>2016-06-15 14:30:03 -0700
committerGravatar murgatroid99 <mlumish@google.com>2016-06-15 14:30:03 -0700
commit635c1caf3b943d634f43a5bec4c16b937c595782 (patch)
treec4233ea37335a1327e33fef4353f12c12700f9ba /src/ruby/pb
parent1fa96c5c49b4fda6ebd2be0cfe353297e3e92e0b (diff)
Fixed ruby timeout_on_sleeping_server implementation
Diffstat (limited to 'src/ruby/pb')
-rwxr-xr-xsrc/ruby/pb/test/client.rb28
1 files changed, 23 insertions, 5 deletions
diff --git a/src/ruby/pb/test/client.rb b/src/ruby/pb/test/client.rb
index b6695482a2..146623e0ab 100755
--- a/src/ruby/pb/test/client.rb
+++ b/src/ruby/pb/test/client.rb
@@ -197,6 +197,25 @@ class PingPongPlayer
end
end
+class BlockingEnumerator
+ include Grpc::Testing
+ include Grpc::Testing::PayloadType
+
+ def initialize(req_size, sleep_time)
+ @req_size = req_size
+ @sleep_time = sleep_time
+ end
+
+ def each_item
+ return enum_for(:each_item) unless block_given?
+ req_cls = StreamingOutputCallRequest
+ req = req_cls.new(payload: Payload.new(body: nulls(@req_size)))
+ yield req
+ # Sleep until after the deadline should have passed
+ sleep(@sleep_time)
+ end
+end
+
# defines methods corresponding to each interop test case.
class NamedTests
include Grpc::Testing
@@ -315,11 +334,10 @@ class NamedTests
end
def timeout_on_sleeping_server
- msg_sizes = [[27_182, 31_415]]
- ppp = PingPongPlayer.new(msg_sizes)
- deadline = GRPC::Core::TimeConsts::from_relative_time(0.001)
- resps = @stub.full_duplex_call(ppp.each_item, deadline: deadline)
- resps.each { |r| ppp.queue.push(r) }
+ enum = BlockingEnumerator.new(27_182, 2)
+ deadline = GRPC::Core::TimeConsts::from_relative_time(1)
+ resps = @stub.full_duplex_call(enum.each_item, deadline: deadline)
+ resps.each { } # wait to receive each request (or timeout)
fail 'Should have raised GRPC::BadStatus(DEADLINE_EXCEEDED)'
rescue GRPC::BadStatus => e
assert("#{__callee__}: status was wrong") do