grpc 0.15.0-x86-mingw32 → 1.0.0.pre1-x86-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/etc/roots.pem +784 -509
- data/grpc_c.32.ruby +0 -0
- data/grpc_c.64.ruby +0 -0
- data/src/ruby/ext/grpc/rb_byte_buffer.c +4 -1
- data/src/ruby/ext/grpc/rb_call.c +87 -54
- data/src/ruby/ext/grpc/rb_call.h +1 -1
- data/src/ruby/ext/grpc/rb_call_credentials.c +1 -30
- data/src/ruby/ext/grpc/rb_channel.c +25 -50
- data/src/ruby/ext/grpc/rb_channel_credentials.c +1 -31
- data/src/ruby/ext/grpc/rb_completion_queue.c +15 -134
- data/src/ruby/ext/grpc/rb_completion_queue.h +3 -7
- data/src/ruby/ext/grpc/rb_grpc.c +2 -4
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +4 -1
- data/src/ruby/ext/grpc/rb_server.c +81 -133
- data/src/ruby/ext/grpc/rb_server_credentials.c +4 -33
- data/src/ruby/lib/grpc/2.0/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/2.1/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/2.2/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/2.3/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/generic/active_call.rb +40 -55
- data/src/ruby/lib/grpc/generic/bidi_call.rb +21 -23
- data/src/ruby/lib/grpc/generic/client_stub.rb +20 -15
- data/src/ruby/lib/grpc/generic/rpc_server.rb +15 -37
- data/src/ruby/lib/grpc/generic/service.rb +1 -1
- data/src/ruby/lib/grpc/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/test/client.rb +25 -7
- data/src/ruby/pb/test/server.rb +7 -5
- data/src/ruby/spec/call_spec.rb +1 -2
- data/src/ruby/spec/channel_spec.rb +2 -3
- data/src/ruby/spec/client_server_spec.rb +74 -59
- data/src/ruby/spec/generic/active_call_spec.rb +66 -86
- data/src/ruby/spec/generic/client_stub_spec.rb +27 -48
- data/src/ruby/spec/generic/rpc_server_spec.rb +4 -34
- data/src/ruby/spec/pb/health/checker_spec.rb +0 -2
- data/src/ruby/spec/server_spec.rb +20 -24
- metadata +4 -6
- data/src/ruby/spec/completion_queue_spec.rb +0 -42
| @@ -159,16 +159,6 @@ module GRPC | |
| 159 159 | 
             
                # Signal check period is 0.25s
         | 
| 160 160 | 
             
                SIGNAL_CHECK_PERIOD = 0.25
         | 
| 161 161 |  | 
| 162 | 
            -
                # setup_cq is used by #initialize to constuct a Core::CompletionQueue from
         | 
| 163 | 
            -
                # its arguments.
         | 
| 164 | 
            -
                def self.setup_cq(alt_cq)
         | 
| 165 | 
            -
                  return Core::CompletionQueue.new if alt_cq.nil?
         | 
| 166 | 
            -
                  unless alt_cq.is_a? Core::CompletionQueue
         | 
| 167 | 
            -
                    fail(TypeError, '!CompletionQueue')
         | 
| 168 | 
            -
                  end
         | 
| 169 | 
            -
                  alt_cq
         | 
| 170 | 
            -
                end
         | 
| 171 | 
            -
             | 
| 172 162 | 
             
                # setup_connect_md_proc is used by #initialize to validate the
         | 
| 173 163 | 
             
                # connect_md_proc.
         | 
| 174 164 | 
             
                def self.setup_connect_md_proc(a_proc)
         | 
| @@ -182,26 +172,18 @@ module GRPC | |
| 182 172 | 
             
                # The RPC server is configured using keyword arguments.
         | 
| 183 173 | 
             
                #
         | 
| 184 174 | 
             
                # There are some specific keyword args used to configure the RpcServer
         | 
| 185 | 
            -
                # instance | 
| 186 | 
            -
                # to configure the listeninng connection set up by the RpcServer.
         | 
| 187 | 
            -
                #
         | 
| 188 | 
            -
                # * poll_period: when present, the server polls for new events with this
         | 
| 189 | 
            -
                # period
         | 
| 175 | 
            +
                # instance.
         | 
| 190 176 | 
             
                #
         | 
| 191 177 | 
             
                # * pool_size: the size of the thread pool the server uses to run its
         | 
| 192 178 | 
             
                # threads
         | 
| 193 179 | 
             
                #
         | 
| 194 | 
            -
                # * completion_queue_override: when supplied, this will be used as the
         | 
| 195 | 
            -
                # completion_queue that the server uses to receive network events,
         | 
| 196 | 
            -
                # otherwise its creates a new instance itself
         | 
| 197 | 
            -
                #
         | 
| 198 | 
            -
                # * creds: [GRPC::Core::ServerCredentials]
         | 
| 199 | 
            -
                # the credentials used to secure the server
         | 
| 200 | 
            -
                #
         | 
| 201 180 | 
             
                # * max_waiting_requests: the maximum number of requests that are not
         | 
| 202 181 | 
             
                # being handled to allow. When this limit is exceeded, the server responds
         | 
| 203 182 | 
             
                # with not available to new requests
         | 
| 204 183 | 
             
                #
         | 
| 184 | 
            +
                # * poll_period: when present, the server polls for new events with this
         | 
| 185 | 
            +
                # period
         | 
| 186 | 
            +
                #
         | 
| 205 187 | 
             
                # * connect_md_proc:
         | 
| 206 188 | 
             
                # when non-nil is a proc for determining metadata to to send back the client
         | 
| 207 189 | 
             
                # on receiving an invocation req.  The proc signature is:
         | 
| @@ -212,11 +194,9 @@ module GRPC | |
| 212 194 | 
             
                def initialize(pool_size:DEFAULT_POOL_SIZE,
         | 
| 213 195 | 
             
                               max_waiting_requests:DEFAULT_MAX_WAITING_REQUESTS,
         | 
| 214 196 | 
             
                               poll_period:DEFAULT_POLL_PERIOD,
         | 
| 215 | 
            -
                               completion_queue_override:nil,
         | 
| 216 197 | 
             
                               connect_md_proc:nil,
         | 
| 217 198 | 
             
                               server_args:{})
         | 
| 218 199 | 
             
                  @connect_md_proc = RpcServer.setup_connect_md_proc(connect_md_proc)
         | 
| 219 | 
            -
                  @cq = RpcServer.setup_cq(completion_queue_override)
         | 
| 220 200 | 
             
                  @max_waiting_requests = max_waiting_requests
         | 
| 221 201 | 
             
                  @poll_period = poll_period
         | 
| 222 202 | 
             
                  @pool_size = pool_size
         | 
| @@ -226,7 +206,7 @@ module GRPC | |
| 226 206 | 
             
                  # running_state can take 4 values: :not_started, :running, :stopping, and
         | 
| 227 207 | 
             
                  # :stopped. State transitions can only proceed in that order.
         | 
| 228 208 | 
             
                  @running_state = :not_started
         | 
| 229 | 
            -
                  @server = Core::Server.new( | 
| 209 | 
            +
                  @server = Core::Server.new(server_args)
         | 
| 230 210 | 
             
                end
         | 
| 231 211 |  | 
| 232 212 | 
             
                # stops a running server
         | 
| @@ -240,7 +220,7 @@ module GRPC | |
| 240 220 | 
             
                    transition_running_state(:stopping)
         | 
| 241 221 | 
             
                  end
         | 
| 242 222 | 
             
                  deadline = from_relative_time(@poll_period)
         | 
| 243 | 
            -
                  @server.close( | 
| 223 | 
            +
                  @server.close(deadline)
         | 
| 244 224 | 
             
                  @pool.stop
         | 
| 245 225 | 
             
                end
         | 
| 246 226 |  | 
| @@ -355,7 +335,8 @@ module GRPC | |
| 355 335 | 
             
                  return an_rpc if @pool.jobs_waiting <= @max_waiting_requests
         | 
| 356 336 | 
             
                  GRPC.logger.warn("NOT AVAILABLE: too many jobs_waiting: #{an_rpc}")
         | 
| 357 337 | 
             
                  noop = proc { |x| x }
         | 
| 358 | 
            -
                  c = ActiveCall.new(an_rpc.call,  | 
| 338 | 
            +
                  c = ActiveCall.new(an_rpc.call, noop, noop, an_rpc.deadline,
         | 
| 339 | 
            +
                                     metadata_received: true)
         | 
| 359 340 | 
             
                  c.send_status(GRPC::Core::StatusCodes::RESOURCE_EXHAUSTED, '')
         | 
| 360 341 | 
             
                  nil
         | 
| 361 342 | 
             
                end
         | 
| @@ -366,7 +347,8 @@ module GRPC | |
| 366 347 | 
             
                  return an_rpc if rpc_descs.key?(mth)
         | 
| 367 348 | 
             
                  GRPC.logger.warn("UNIMPLEMENTED: #{an_rpc}")
         | 
| 368 349 | 
             
                  noop = proc { |x| x }
         | 
| 369 | 
            -
                  c = ActiveCall.new(an_rpc.call,  | 
| 350 | 
            +
                  c = ActiveCall.new(an_rpc.call, noop, noop, an_rpc.deadline,
         | 
| 351 | 
            +
                                     metadata_received: true)
         | 
| 370 352 | 
             
                  c.send_status(GRPC::Core::StatusCodes::UNIMPLEMENTED, '')
         | 
| 371 353 | 
             
                  nil
         | 
| 372 354 | 
             
                end
         | 
| @@ -374,11 +356,9 @@ module GRPC | |
| 374 356 | 
             
                # handles calls to the server
         | 
| 375 357 | 
             
                def loop_handle_server_calls
         | 
| 376 358 | 
             
                  fail 'not started' if running_state == :not_started
         | 
| 377 | 
            -
                  loop_tag = Object.new
         | 
| 378 359 | 
             
                  while running_state == :running
         | 
| 379 360 | 
             
                    begin
         | 
| 380 | 
            -
                       | 
| 381 | 
            -
                      an_rpc = @server.request_call(comp_queue, loop_tag, INFINITE_FUTURE)
         | 
| 361 | 
            +
                      an_rpc = @server.request_call
         | 
| 382 362 | 
             
                      break if (!an_rpc.nil?) && an_rpc.call.nil?
         | 
| 383 363 | 
             
                      active_call = new_active_server_call(an_rpc)
         | 
| 384 364 | 
             
                      unless active_call.nil?
         | 
| @@ -410,15 +390,13 @@ module GRPC | |
| 410 390 | 
             
                  return nil if an_rpc.nil? || an_rpc.call.nil?
         | 
| 411 391 |  | 
| 412 392 | 
             
                  # allow the metadata to be accessed from the call
         | 
| 413 | 
            -
                  handle_call_tag = Object.new
         | 
| 414 393 | 
             
                  an_rpc.call.metadata = an_rpc.metadata  # attaches md to call for handlers
         | 
| 415 394 | 
             
                  GRPC.logger.debug("call md is #{an_rpc.metadata}")
         | 
| 416 395 | 
             
                  connect_md = nil
         | 
| 417 396 | 
             
                  unless @connect_md_proc.nil?
         | 
| 418 397 | 
             
                    connect_md = @connect_md_proc.call(an_rpc.method, an_rpc.metadata)
         | 
| 419 398 | 
             
                  end
         | 
| 420 | 
            -
                  an_rpc.call.run_batch( | 
| 421 | 
            -
                                        SEND_INITIAL_METADATA => connect_md)
         | 
| 399 | 
            +
                  an_rpc.call.run_batch(SEND_INITIAL_METADATA => connect_md)
         | 
| 422 400 |  | 
| 423 401 | 
             
                  return nil unless available?(an_rpc)
         | 
| 424 402 | 
             
                  return nil unless implemented?(an_rpc)
         | 
| @@ -426,9 +404,9 @@ module GRPC | |
| 426 404 | 
             
                  # Create the ActiveCall
         | 
| 427 405 | 
             
                  GRPC.logger.info("deadline is #{an_rpc.deadline}; (now=#{Time.now})")
         | 
| 428 406 | 
             
                  rpc_desc = rpc_descs[an_rpc.method.to_sym]
         | 
| 429 | 
            -
                  c = ActiveCall.new(an_rpc.call,  | 
| 430 | 
            -
                                     rpc_desc. | 
| 431 | 
            -
                                      | 
| 407 | 
            +
                  c = ActiveCall.new(an_rpc.call, rpc_desc.marshal_proc,
         | 
| 408 | 
            +
                                     rpc_desc.unmarshal_proc(:input), an_rpc.deadline,
         | 
| 409 | 
            +
                                     metadata_received: true)
         | 
| 432 410 | 
             
                  mth = an_rpc.method.to_sym
         | 
| 433 411 | 
             
                  [c, mth]
         | 
| 434 412 | 
             
                end
         | 
| @@ -168,7 +168,7 @@ module GRPC | |
| 168 168 | 
             
                      # @param kw [KeywordArgs] the channel arguments, plus any optional
         | 
| 169 169 | 
             
                      #                         args for configuring the client's channel
         | 
| 170 170 | 
             
                      def initialize(host, creds, **kw)
         | 
| 171 | 
            -
                        super(host,  | 
| 171 | 
            +
                        super(host, creds, **kw)
         | 
| 172 172 | 
             
                      end
         | 
| 173 173 |  | 
| 174 174 | 
             
                      # Used define_method to add a method for each rpc_desc.  Each method
         | 
    
        data/src/ruby/lib/grpc/grpc_c.so
    CHANGED
    
    | Binary file | 
    
        data/src/ruby/pb/test/client.rb
    CHANGED
    
    | @@ -197,6 +197,25 @@ class PingPongPlayer | |
| 197 197 | 
             
              end
         | 
| 198 198 | 
             
            end
         | 
| 199 199 |  | 
| 200 | 
            +
            class BlockingEnumerator
         | 
| 201 | 
            +
              include Grpc::Testing
         | 
| 202 | 
            +
              include Grpc::Testing::PayloadType
         | 
| 203 | 
            +
             | 
| 204 | 
            +
              def initialize(req_size, sleep_time)
         | 
| 205 | 
            +
                @req_size = req_size
         | 
| 206 | 
            +
                @sleep_time = sleep_time
         | 
| 207 | 
            +
              end
         | 
| 208 | 
            +
             | 
| 209 | 
            +
              def each_item
         | 
| 210 | 
            +
                return enum_for(:each_item) unless block_given?
         | 
| 211 | 
            +
                req_cls = StreamingOutputCallRequest
         | 
| 212 | 
            +
                req = req_cls.new(payload: Payload.new(body: nulls(@req_size)))
         | 
| 213 | 
            +
                yield req
         | 
| 214 | 
            +
                # Sleep until after the deadline should have passed
         | 
| 215 | 
            +
                sleep(@sleep_time)
         | 
| 216 | 
            +
              end
         | 
| 217 | 
            +
            end
         | 
| 218 | 
            +
             | 
| 200 219 | 
             
            # defines methods corresponding to each interop test case.
         | 
| 201 220 | 
             
            class NamedTests
         | 
| 202 221 | 
             
              include Grpc::Testing
         | 
| @@ -315,11 +334,10 @@ class NamedTests | |
| 315 334 | 
             
              end
         | 
| 316 335 |  | 
| 317 336 | 
             
              def timeout_on_sleeping_server
         | 
| 318 | 
            -
                 | 
| 319 | 
            -
                 | 
| 320 | 
            -
                 | 
| 321 | 
            -
                resps  | 
| 322 | 
            -
                resps.each { |r| ppp.queue.push(r) }
         | 
| 337 | 
            +
                enum = BlockingEnumerator.new(27_182, 2)
         | 
| 338 | 
            +
                deadline = GRPC::Core::TimeConsts::from_relative_time(1)
         | 
| 339 | 
            +
                resps = @stub.full_duplex_call(enum.each_item, deadline: deadline)
         | 
| 340 | 
            +
                resps.each { } # wait to receive each request (or timeout)
         | 
| 323 341 | 
             
                fail 'Should have raised GRPC::BadStatus(DEADLINE_EXCEEDED)'
         | 
| 324 342 | 
             
              rescue GRPC::BadStatus => e
         | 
| 325 343 | 
             
                assert("#{__callee__}: status was wrong") do
         | 
| @@ -351,7 +369,7 @@ class NamedTests | |
| 351 369 | 
             
                op.execute
         | 
| 352 370 | 
             
                fail 'Should have raised GRPC:Cancelled'
         | 
| 353 371 | 
             
              rescue GRPC::Cancelled
         | 
| 354 | 
            -
                assert("#{__callee__}: call operation should be CANCELLED") { op.cancelled }
         | 
| 372 | 
            +
                assert("#{__callee__}: call operation should be CANCELLED") { op.cancelled? }
         | 
| 355 373 | 
             
              end
         | 
| 356 374 |  | 
| 357 375 | 
             
              def cancel_after_first_response
         | 
| @@ -362,7 +380,7 @@ class NamedTests | |
| 362 380 | 
             
                op.execute.each { |r| ppp.queue.push(r) }
         | 
| 363 381 | 
             
                fail 'Should have raised GRPC:Cancelled'
         | 
| 364 382 | 
             
              rescue GRPC::Cancelled
         | 
| 365 | 
            -
                assert("#{__callee__}: call operation should be CANCELLED") { op.cancelled }
         | 
| 383 | 
            +
                assert("#{__callee__}: call operation should be CANCELLED") { op.cancelled? }
         | 
| 366 384 | 
             
                op.wait
         | 
| 367 385 | 
             
              end
         | 
| 368 386 |  | 
    
        data/src/ruby/pb/test/server.rb
    CHANGED
    
    | @@ -188,11 +188,13 @@ class TestTarget < Grpc::Testing::TestService::Service | |
| 188 188 | 
             
                  begin
         | 
| 189 189 | 
             
                    GRPC.logger.info('interop-server: started receiving')
         | 
| 190 190 | 
             
                    reqs.each do |req|
         | 
| 191 | 
            -
                       | 
| 192 | 
            -
             | 
| 193 | 
            -
             | 
| 194 | 
            -
             | 
| 195 | 
            -
             | 
| 191 | 
            +
                      req.response_parameters.each do |params|
         | 
| 192 | 
            +
                        resp_size = params.size
         | 
| 193 | 
            +
                        GRPC.logger.info("read a req, response size is #{resp_size}")
         | 
| 194 | 
            +
                        resp = cls.new(payload: Payload.new(type: req.response_type,
         | 
| 195 | 
            +
                                                            body: nulls(resp_size)))
         | 
| 196 | 
            +
                        q.push(resp)
         | 
| 197 | 
            +
                      end
         | 
| 196 198 | 
             
                    end
         | 
| 197 199 | 
             
                    GRPC.logger.info('interop-server: finished receiving')
         | 
| 198 200 | 
             
                    q.push(self)
         | 
    
        data/src/ruby/spec/call_spec.rb
    CHANGED
    
    | @@ -96,7 +96,6 @@ describe GRPC::Core::CallOps do | |
| 96 96 | 
             
            end
         | 
| 97 97 |  | 
| 98 98 | 
             
            describe GRPC::Core::Call do
         | 
| 99 | 
            -
              let(:client_queue) { GRPC::Core::CompletionQueue.new }
         | 
| 100 99 | 
             
              let(:test_tag)  { Object.new }
         | 
| 101 100 | 
             
              let(:fake_host) { 'localhost:10101' }
         | 
| 102 101 |  | 
| @@ -154,7 +153,7 @@ describe GRPC::Core::Call do | |
| 154 153 | 
             
              end
         | 
| 155 154 |  | 
| 156 155 | 
             
              def make_test_call
         | 
| 157 | 
            -
                @ch.create_call( | 
| 156 | 
            +
                @ch.create_call(nil, nil, 'dummy_method', nil, deadline)
         | 
| 158 157 | 
             
              end
         | 
| 159 158 |  | 
| 160 159 | 
             
              def deadline
         | 
| @@ -37,7 +37,6 @@ end | |
| 37 37 |  | 
| 38 38 | 
             
            describe GRPC::Core::Channel do
         | 
| 39 39 | 
             
              let(:fake_host) { 'localhost:0' }
         | 
| 40 | 
            -
              let(:cq) { GRPC::Core::CompletionQueue.new }
         | 
| 41 40 |  | 
| 42 41 | 
             
              def create_test_cert
         | 
| 43 42 | 
             
                GRPC::Core::ChannelCredentials.new(load_test_certs[0])
         | 
| @@ -122,7 +121,7 @@ describe GRPC::Core::Channel do | |
| 122 121 | 
             
                  deadline = Time.now + 5
         | 
| 123 122 |  | 
| 124 123 | 
             
                  blk = proc do
         | 
| 125 | 
            -
                    ch.create_call( | 
| 124 | 
            +
                    ch.create_call(nil, nil, 'dummy_method', nil, deadline)
         | 
| 126 125 | 
             
                  end
         | 
| 127 126 | 
             
                  expect(&blk).to_not raise_error
         | 
| 128 127 | 
             
                end
         | 
| @@ -133,7 +132,7 @@ describe GRPC::Core::Channel do | |
| 133 132 |  | 
| 134 133 | 
             
                  deadline = Time.now + 5
         | 
| 135 134 | 
             
                  blk = proc do
         | 
| 136 | 
            -
                    ch.create_call( | 
| 135 | 
            +
                    ch.create_call(nil, nil, 'dummy_method', nil, deadline)
         | 
| 137 136 | 
             
                  end
         | 
| 138 137 | 
             
                  expect(&blk).to raise_error(RuntimeError)
         | 
| 139 138 | 
             
                end
         | 
| @@ -34,27 +34,23 @@ include GRPC::Core | |
| 34 34 | 
             
            shared_context 'setup: tags' do
         | 
| 35 35 | 
             
              let(:sent_message) { 'sent message' }
         | 
| 36 36 | 
             
              let(:reply_text) { 'the reply' }
         | 
| 37 | 
            -
              before(:example) do
         | 
| 38 | 
            -
                @client_tag = Object.new
         | 
| 39 | 
            -
                @server_tag = Object.new
         | 
| 40 | 
            -
              end
         | 
| 41 37 |  | 
| 42 38 | 
             
              def deadline
         | 
| 43 39 | 
             
                Time.now + 5
         | 
| 44 40 | 
             
              end
         | 
| 45 41 |  | 
| 46 | 
            -
              def server_allows_client_to_proceed
         | 
| 47 | 
            -
                recvd_rpc = @server.request_call | 
| 42 | 
            +
              def server_allows_client_to_proceed(metadata = {})
         | 
| 43 | 
            +
                recvd_rpc = @server.request_call
         | 
| 48 44 | 
             
                expect(recvd_rpc).to_not eq nil
         | 
| 49 45 | 
             
                server_call = recvd_rpc.call
         | 
| 50 | 
            -
                ops = { CallOps::SEND_INITIAL_METADATA =>  | 
| 51 | 
            -
                svr_batch = server_call.run_batch( | 
| 46 | 
            +
                ops = { CallOps::SEND_INITIAL_METADATA => metadata }
         | 
| 47 | 
            +
                svr_batch = server_call.run_batch(ops)
         | 
| 52 48 | 
             
                expect(svr_batch.send_metadata).to be true
         | 
| 53 49 | 
             
                server_call
         | 
| 54 50 | 
             
              end
         | 
| 55 51 |  | 
| 56 52 | 
             
              def new_client_call
         | 
| 57 | 
            -
                @ch.create_call( | 
| 53 | 
            +
                @ch.create_call(nil, nil, '/method', nil, deadline)
         | 
| 58 54 | 
             
              end
         | 
| 59 55 | 
             
            end
         | 
| 60 56 |  | 
| @@ -91,8 +87,7 @@ shared_examples 'basic GRPC message delivery is OK' do | |
| 91 87 | 
             
                  CallOps::SEND_INITIAL_METADATA => {},
         | 
| 92 88 | 
             
                  CallOps::SEND_MESSAGE => sent_message
         | 
| 93 89 | 
             
                }
         | 
| 94 | 
            -
                batch_result = call.run_batch( | 
| 95 | 
            -
                                              client_ops)
         | 
| 90 | 
            +
                batch_result = call.run_batch(client_ops)
         | 
| 96 91 | 
             
                expect(batch_result.send_metadata).to be true
         | 
| 97 92 | 
             
                expect(batch_result.send_message).to be true
         | 
| 98 93 |  | 
| @@ -101,8 +96,7 @@ shared_examples 'basic GRPC message delivery is OK' do | |
| 101 96 | 
             
                server_ops = {
         | 
| 102 97 | 
             
                  CallOps::RECV_MESSAGE => nil
         | 
| 103 98 | 
             
                }
         | 
| 104 | 
            -
                svr_batch = server_call.run_batch( | 
| 105 | 
            -
                                                  server_ops)
         | 
| 99 | 
            +
                svr_batch = server_call.run_batch(server_ops)
         | 
| 106 100 | 
             
                expect(svr_batch.message).to eq(sent_message)
         | 
| 107 101 | 
             
              end
         | 
| 108 102 |  | 
| @@ -118,8 +112,7 @@ shared_examples 'basic GRPC message delivery is OK' do | |
| 118 112 | 
             
                  CallOps::SEND_INITIAL_METADATA => {},
         | 
| 119 113 | 
             
                  CallOps::SEND_MESSAGE => sent_message
         | 
| 120 114 | 
             
                }
         | 
| 121 | 
            -
                batch_result = call.run_batch( | 
| 122 | 
            -
                                              client_ops)
         | 
| 115 | 
            +
                batch_result = call.run_batch(client_ops)
         | 
| 123 116 | 
             
                expect(batch_result.send_metadata).to be true
         | 
| 124 117 | 
             
                expect(batch_result.send_message).to be true
         | 
| 125 118 |  | 
| @@ -129,12 +122,50 @@ shared_examples 'basic GRPC message delivery is OK' do | |
| 129 122 | 
             
                  CallOps::RECV_MESSAGE => nil,
         | 
| 130 123 | 
             
                  CallOps::SEND_MESSAGE => reply_text
         | 
| 131 124 | 
             
                }
         | 
| 132 | 
            -
                svr_batch = server_call.run_batch( | 
| 133 | 
            -
                                                  server_ops)
         | 
| 125 | 
            +
                svr_batch = server_call.run_batch(server_ops)
         | 
| 134 126 | 
             
                expect(svr_batch.message).to eq(sent_message)
         | 
| 135 127 | 
             
                expect(svr_batch.send_message).to be true
         | 
| 136 128 | 
             
              end
         | 
| 137 129 |  | 
| 130 | 
            +
              it 'compressed messages can be sent and received' do
         | 
| 131 | 
            +
                call = new_client_call
         | 
| 132 | 
            +
                server_call = nil
         | 
| 133 | 
            +
                long_request_str = '0' * 2000
         | 
| 134 | 
            +
                long_response_str = '1' * 2000
         | 
| 135 | 
            +
                md = { 'grpc-internal-encoding-request' => 'gzip' }
         | 
| 136 | 
            +
             | 
| 137 | 
            +
                server_thread = Thread.new do
         | 
| 138 | 
            +
                  server_call = server_allows_client_to_proceed(md)
         | 
| 139 | 
            +
                end
         | 
| 140 | 
            +
             | 
| 141 | 
            +
                client_ops = {
         | 
| 142 | 
            +
                  CallOps::SEND_INITIAL_METADATA => md,
         | 
| 143 | 
            +
                  CallOps::SEND_MESSAGE => long_request_str
         | 
| 144 | 
            +
                }
         | 
| 145 | 
            +
                batch_result = call.run_batch(client_ops)
         | 
| 146 | 
            +
                expect(batch_result.send_metadata).to be true
         | 
| 147 | 
            +
                expect(batch_result.send_message).to be true
         | 
| 148 | 
            +
             | 
| 149 | 
            +
                # confirm the server can read the inbound message
         | 
| 150 | 
            +
                server_thread.join
         | 
| 151 | 
            +
                server_ops = {
         | 
| 152 | 
            +
                  CallOps::RECV_MESSAGE => nil,
         | 
| 153 | 
            +
                  CallOps::SEND_MESSAGE => long_response_str
         | 
| 154 | 
            +
                }
         | 
| 155 | 
            +
                svr_batch = server_call.run_batch(server_ops)
         | 
| 156 | 
            +
                expect(svr_batch.message).to eq(long_request_str)
         | 
| 157 | 
            +
                expect(svr_batch.send_message).to be true
         | 
| 158 | 
            +
             | 
| 159 | 
            +
                client_ops = {
         | 
| 160 | 
            +
                  CallOps::SEND_CLOSE_FROM_CLIENT => nil,
         | 
| 161 | 
            +
                  CallOps::RECV_INITIAL_METADATA => nil,
         | 
| 162 | 
            +
                  CallOps::RECV_MESSAGE => nil
         | 
| 163 | 
            +
                }
         | 
| 164 | 
            +
                batch_result = call.run_batch(client_ops)
         | 
| 165 | 
            +
                expect(batch_result.send_close).to be true
         | 
| 166 | 
            +
                expect(batch_result.message).to eq long_response_str
         | 
| 167 | 
            +
              end
         | 
| 168 | 
            +
             | 
| 138 169 | 
             
              it 'servers can ignore a client write and send a status' do
         | 
| 139 170 | 
             
                call = new_client_call
         | 
| 140 171 | 
             
                server_call = nil
         | 
| @@ -147,8 +178,7 @@ shared_examples 'basic GRPC message delivery is OK' do | |
| 147 178 | 
             
                  CallOps::SEND_INITIAL_METADATA => {},
         | 
| 148 179 | 
             
                  CallOps::SEND_MESSAGE => sent_message
         | 
| 149 180 | 
             
                }
         | 
| 150 | 
            -
                batch_result = call.run_batch( | 
| 151 | 
            -
                                              client_ops)
         | 
| 181 | 
            +
                batch_result = call.run_batch(client_ops)
         | 
| 152 182 | 
             
                expect(batch_result.send_metadata).to be true
         | 
| 153 183 | 
             
                expect(batch_result.send_message).to be true
         | 
| 154 184 |  | 
| @@ -158,8 +188,7 @@ shared_examples 'basic GRPC message delivery is OK' do | |
| 158 188 | 
             
                server_ops = {
         | 
| 159 189 | 
             
                  CallOps::SEND_STATUS_FROM_SERVER => the_status
         | 
| 160 190 | 
             
                }
         | 
| 161 | 
            -
                svr_batch = server_call.run_batch( | 
| 162 | 
            -
                                                  server_ops)
         | 
| 191 | 
            +
                svr_batch = server_call.run_batch(server_ops)
         | 
| 163 192 | 
             
                expect(svr_batch.message).to eq nil
         | 
| 164 193 | 
             
                expect(svr_batch.send_status).to be true
         | 
| 165 194 | 
             
              end
         | 
| @@ -176,8 +205,7 @@ shared_examples 'basic GRPC message delivery is OK' do | |
| 176 205 | 
             
                  CallOps::SEND_INITIAL_METADATA => {},
         | 
| 177 206 | 
             
                  CallOps::SEND_MESSAGE => sent_message
         | 
| 178 207 | 
             
                }
         | 
| 179 | 
            -
                batch_result = call.run_batch( | 
| 180 | 
            -
                                              client_ops)
         | 
| 208 | 
            +
                batch_result = call.run_batch(client_ops)
         | 
| 181 209 | 
             
                expect(batch_result.send_metadata).to be true
         | 
| 182 210 | 
             
                expect(batch_result.send_message).to be true
         | 
| 183 211 |  | 
| @@ -189,8 +217,7 @@ shared_examples 'basic GRPC message delivery is OK' do | |
| 189 217 | 
             
                  CallOps::SEND_MESSAGE => reply_text,
         | 
| 190 218 | 
             
                  CallOps::SEND_STATUS_FROM_SERVER => the_status
         | 
| 191 219 | 
             
                }
         | 
| 192 | 
            -
                svr_batch = server_call.run_batch( | 
| 193 | 
            -
                                                  server_ops)
         | 
| 220 | 
            +
                svr_batch = server_call.run_batch(server_ops)
         | 
| 194 221 | 
             
                expect(svr_batch.message).to eq sent_message
         | 
| 195 222 | 
             
                expect(svr_batch.send_status).to be true
         | 
| 196 223 | 
             
                expect(svr_batch.send_message).to be true
         | 
| @@ -202,8 +229,7 @@ shared_examples 'basic GRPC message delivery is OK' do | |
| 202 229 | 
             
                  CallOps::RECV_MESSAGE => nil,
         | 
| 203 230 | 
             
                  CallOps::RECV_STATUS_ON_CLIENT => nil
         | 
| 204 231 | 
             
                }
         | 
| 205 | 
            -
                batch_result = call.run_batch( | 
| 206 | 
            -
                                              client_ops)
         | 
| 232 | 
            +
                batch_result = call.run_batch(client_ops)
         | 
| 207 233 | 
             
                expect(batch_result.send_close).to be true
         | 
| 208 234 | 
             
                expect(batch_result.message).to eq reply_text
         | 
| 209 235 | 
             
                expect(batch_result.status).to eq the_status
         | 
| @@ -212,8 +238,7 @@ shared_examples 'basic GRPC message delivery is OK' do | |
| 212 238 | 
             
                server_ops = {
         | 
| 213 239 | 
             
                  CallOps::RECV_CLOSE_ON_SERVER => nil
         | 
| 214 240 | 
             
                }
         | 
| 215 | 
            -
                svr_batch = server_call.run_batch( | 
| 216 | 
            -
                                                  server_ops)
         | 
| 241 | 
            +
                svr_batch = server_call.run_batch(server_ops)
         | 
| 217 242 | 
             
                expect(svr_batch.send_close).to be true
         | 
| 218 243 | 
             
              end
         | 
| 219 244 | 
             
            end
         | 
| @@ -244,8 +269,7 @@ shared_examples 'GRPC metadata delivery works OK' do | |
| 244 269 | 
             
                      CallOps::SEND_INITIAL_METADATA => md
         | 
| 245 270 | 
             
                    }
         | 
| 246 271 | 
             
                    blk = proc do
         | 
| 247 | 
            -
                      call.run_batch( | 
| 248 | 
            -
                                     client_ops)
         | 
| 272 | 
            +
                      call.run_batch(client_ops)
         | 
| 249 273 | 
             
                    end
         | 
| 250 274 | 
             
                    expect(&blk).to raise_error
         | 
| 251 275 | 
             
                  end
         | 
| @@ -255,15 +279,14 @@ shared_examples 'GRPC metadata delivery works OK' do | |
| 255 279 | 
             
                  @valid_metadata.each do |md|
         | 
| 256 280 | 
             
                    recvd_rpc = nil
         | 
| 257 281 | 
             
                    rcv_thread = Thread.new do
         | 
| 258 | 
            -
                      recvd_rpc = @server.request_call | 
| 282 | 
            +
                      recvd_rpc = @server.request_call
         | 
| 259 283 | 
             
                    end
         | 
| 260 284 |  | 
| 261 285 | 
             
                    call = new_client_call
         | 
| 262 286 | 
             
                    client_ops = {
         | 
| 263 287 | 
             
                      CallOps::SEND_INITIAL_METADATA => md
         | 
| 264 288 | 
             
                    }
         | 
| 265 | 
            -
                    batch_result = call.run_batch( | 
| 266 | 
            -
                                                  client_ops)
         | 
| 289 | 
            +
                    batch_result = call.run_batch(client_ops)
         | 
| 267 290 | 
             
                    expect(batch_result.send_metadata).to be true
         | 
| 268 291 |  | 
| 269 292 | 
             
                    # confirm the server can receive the client metadata
         | 
| @@ -296,7 +319,7 @@ shared_examples 'GRPC metadata delivery works OK' do | |
| 296 319 | 
             
                  @bad_keys.each do |md|
         | 
| 297 320 | 
             
                    recvd_rpc = nil
         | 
| 298 321 | 
             
                    rcv_thread = Thread.new do
         | 
| 299 | 
            -
                      recvd_rpc = @server.request_call | 
| 322 | 
            +
                      recvd_rpc = @server.request_call
         | 
| 300 323 | 
             
                    end
         | 
| 301 324 |  | 
| 302 325 | 
             
                    call = new_client_call
         | 
| @@ -305,7 +328,7 @@ shared_examples 'GRPC metadata delivery works OK' do | |
| 305 328 | 
             
                    client_ops = {
         | 
| 306 329 | 
             
                      CallOps::SEND_INITIAL_METADATA => nil
         | 
| 307 330 | 
             
                    }
         | 
| 308 | 
            -
                    call.run_batch( | 
| 331 | 
            +
                    call.run_batch(client_ops)
         | 
| 309 332 |  | 
| 310 333 | 
             
                    # server gets the invocation
         | 
| 311 334 | 
             
                    rcv_thread.join
         | 
| @@ -314,8 +337,7 @@ shared_examples 'GRPC metadata delivery works OK' do | |
| 314 337 | 
             
                      CallOps::SEND_INITIAL_METADATA => md
         | 
| 315 338 | 
             
                    }
         | 
| 316 339 | 
             
                    blk = proc do
         | 
| 317 | 
            -
                      recvd_rpc.call.run_batch( | 
| 318 | 
            -
                                               server_ops)
         | 
| 340 | 
            +
                      recvd_rpc.call.run_batch(server_ops)
         | 
| 319 341 | 
             
                    end
         | 
| 320 342 | 
             
                    expect(&blk).to raise_error
         | 
| 321 343 | 
             
                  end
         | 
| @@ -324,7 +346,7 @@ shared_examples 'GRPC metadata delivery works OK' do | |
| 324 346 | 
             
                it 'sends an empty hash if no metadata is added' do
         | 
| 325 347 | 
             
                  recvd_rpc = nil
         | 
| 326 348 | 
             
                  rcv_thread = Thread.new do
         | 
| 327 | 
            -
                    recvd_rpc = @server.request_call | 
| 349 | 
            +
                    recvd_rpc = @server.request_call
         | 
| 328 350 | 
             
                  end
         | 
| 329 351 |  | 
| 330 352 | 
             
                  call = new_client_call
         | 
| @@ -333,7 +355,7 @@ shared_examples 'GRPC metadata delivery works OK' do | |
| 333 355 | 
             
                  client_ops = {
         | 
| 334 356 | 
             
                    CallOps::SEND_INITIAL_METADATA => nil
         | 
| 335 357 | 
             
                  }
         | 
| 336 | 
            -
                  call.run_batch( | 
| 358 | 
            +
                  call.run_batch(client_ops)
         | 
| 337 359 |  | 
| 338 360 | 
             
                  # server gets the invocation but sends no metadata back
         | 
| 339 361 | 
             
                  rcv_thread.join
         | 
| @@ -342,14 +364,13 @@ shared_examples 'GRPC metadata delivery works OK' do | |
| 342 364 | 
             
                  server_ops = {
         | 
| 343 365 | 
             
                    CallOps::SEND_INITIAL_METADATA => nil
         | 
| 344 366 | 
             
                  }
         | 
| 345 | 
            -
                  server_call.run_batch( | 
| 367 | 
            +
                  server_call.run_batch(server_ops)
         | 
| 346 368 |  | 
| 347 369 | 
             
                  # client receives nothing as expected
         | 
| 348 370 | 
             
                  client_ops = {
         | 
| 349 371 | 
             
                    CallOps::RECV_INITIAL_METADATA => nil
         | 
| 350 372 | 
             
                  }
         | 
| 351 | 
            -
                  batch_result = call.run_batch( | 
| 352 | 
            -
                                                client_ops)
         | 
| 373 | 
            +
                  batch_result = call.run_batch(client_ops)
         | 
| 353 374 | 
             
                  expect(batch_result.metadata).to eq({})
         | 
| 354 375 | 
             
                end
         | 
| 355 376 |  | 
| @@ -357,7 +378,7 @@ shared_examples 'GRPC metadata delivery works OK' do | |
| 357 378 | 
             
                  @valid_metadata.each do |md|
         | 
| 358 379 | 
             
                    recvd_rpc = nil
         | 
| 359 380 | 
             
                    rcv_thread = Thread.new do
         | 
| 360 | 
            -
                      recvd_rpc = @server.request_call | 
| 381 | 
            +
                      recvd_rpc = @server.request_call
         | 
| 361 382 | 
             
                    end
         | 
| 362 383 |  | 
| 363 384 | 
             
                    call = new_client_call
         | 
| @@ -366,7 +387,7 @@ shared_examples 'GRPC metadata delivery works OK' do | |
| 366 387 | 
             
                    client_ops = {
         | 
| 367 388 | 
             
                      CallOps::SEND_INITIAL_METADATA => nil
         | 
| 368 389 | 
             
                    }
         | 
| 369 | 
            -
                    call.run_batch( | 
| 390 | 
            +
                    call.run_batch(client_ops)
         | 
| 370 391 |  | 
| 371 392 | 
             
                    # server gets the invocation but sends no metadata back
         | 
| 372 393 | 
             
                    rcv_thread.join
         | 
| @@ -375,14 +396,13 @@ shared_examples 'GRPC metadata delivery works OK' do | |
| 375 396 | 
             
                    server_ops = {
         | 
| 376 397 | 
             
                      CallOps::SEND_INITIAL_METADATA => md
         | 
| 377 398 | 
             
                    }
         | 
| 378 | 
            -
                    server_call.run_batch( | 
| 399 | 
            +
                    server_call.run_batch(server_ops)
         | 
| 379 400 |  | 
| 380 401 | 
             
                    # client receives nothing as expected
         | 
| 381 402 | 
             
                    client_ops = {
         | 
| 382 403 | 
             
                      CallOps::RECV_INITIAL_METADATA => nil
         | 
| 383 404 | 
             
                    }
         | 
| 384 | 
            -
                    batch_result = call.run_batch( | 
| 385 | 
            -
                                                  client_ops)
         | 
| 405 | 
            +
                    batch_result = call.run_batch(client_ops)
         | 
| 386 406 | 
             
                    replace_symbols = Hash[md.each_pair.collect { |x, y| [x.to_s, y] }]
         | 
| 387 407 | 
             
                    expect(batch_result.metadata).to eq(replace_symbols)
         | 
| 388 408 | 
             
                  end
         | 
| @@ -393,9 +413,7 @@ end | |
| 393 413 | 
             
            describe 'the http client/server' do
         | 
| 394 414 | 
             
              before(:example) do
         | 
| 395 415 | 
             
                server_host = '0.0.0.0:0'
         | 
| 396 | 
            -
                @ | 
| 397 | 
            -
                @server_queue = GRPC::Core::CompletionQueue.new
         | 
| 398 | 
            -
                @server = GRPC::Core::Server.new(@server_queue, nil)
         | 
| 416 | 
            +
                @server = GRPC::Core::Server.new(nil)
         | 
| 399 417 | 
             
                server_port = @server.add_http2_port(server_host, :this_port_is_insecure)
         | 
| 400 418 | 
             
                @server.start
         | 
| 401 419 | 
             
                @ch = Channel.new("0.0.0.0:#{server_port}", nil, :this_channel_is_insecure)
         | 
| @@ -403,7 +421,7 @@ describe 'the http client/server' do | |
| 403 421 |  | 
| 404 422 | 
             
              after(:example) do
         | 
| 405 423 | 
             
                @ch.close
         | 
| 406 | 
            -
                @server.close( | 
| 424 | 
            +
                @server.close(deadline)
         | 
| 407 425 | 
             
              end
         | 
| 408 426 |  | 
| 409 427 | 
             
              it_behaves_like 'basic GRPC message delivery is OK' do
         | 
| @@ -425,11 +443,9 @@ describe 'the secure http client/server' do | |
| 425 443 | 
             
              before(:example) do
         | 
| 426 444 | 
             
                certs = load_test_certs
         | 
| 427 445 | 
             
                server_host = '0.0.0.0:0'
         | 
| 428 | 
            -
                @client_queue = GRPC::Core::CompletionQueue.new
         | 
| 429 | 
            -
                @server_queue = GRPC::Core::CompletionQueue.new
         | 
| 430 446 | 
             
                server_creds = GRPC::Core::ServerCredentials.new(
         | 
| 431 447 | 
             
                  nil, [{ private_key: certs[1], cert_chain: certs[2] }], false)
         | 
| 432 | 
            -
                @server = GRPC::Core::Server.new( | 
| 448 | 
            +
                @server = GRPC::Core::Server.new(nil)
         | 
| 433 449 | 
             
                server_port = @server.add_http2_port(server_host, server_creds)
         | 
| 434 450 | 
             
                @server.start
         | 
| 435 451 | 
             
                args = { Channel::SSL_TARGET => 'foo.test.google.fr' }
         | 
| @@ -438,7 +454,7 @@ describe 'the secure http client/server' do | |
| 438 454 | 
             
              end
         | 
| 439 455 |  | 
| 440 456 | 
             
              after(:example) do
         | 
| 441 | 
            -
                @server.close( | 
| 457 | 
            +
                @server.close(deadline)
         | 
| 442 458 | 
             
              end
         | 
| 443 459 |  | 
| 444 460 | 
             
              it_behaves_like 'basic GRPC message delivery is OK' do
         | 
| @@ -454,7 +470,7 @@ describe 'the secure http client/server' do | |
| 454 470 | 
             
                expected_md = { 'k1' => 'updated-v1', 'k2' => 'v2' }
         | 
| 455 471 | 
             
                recvd_rpc = nil
         | 
| 456 472 | 
             
                rcv_thread = Thread.new do
         | 
| 457 | 
            -
                  recvd_rpc = @server.request_call | 
| 473 | 
            +
                  recvd_rpc = @server.request_call
         | 
| 458 474 | 
             
                end
         | 
| 459 475 |  | 
| 460 476 | 
             
                call = new_client_call
         | 
| @@ -462,8 +478,7 @@ describe 'the secure http client/server' do | |
| 462 478 | 
             
                client_ops = {
         | 
| 463 479 | 
             
                  CallOps::SEND_INITIAL_METADATA => md
         | 
| 464 480 | 
             
                }
         | 
| 465 | 
            -
                batch_result = call.run_batch( | 
| 466 | 
            -
                                              client_ops)
         | 
| 481 | 
            +
                batch_result = call.run_batch(client_ops)
         | 
| 467 482 | 
             
                expect(batch_result.send_metadata).to be true
         | 
| 468 483 |  | 
| 469 484 | 
             
                # confirm the server can receive the client metadata
         |