Merge pull request #971 from tbetbetbe/grpc_ruby_cleanup_client_stub_initialize_fix_hostname_bug

Grpc ruby cleanup client stub initialize fix hostname bug
pull/974/head
Michael Lumish 10 years ago
commit 2425790a65
  1. 61
      src/ruby/lib/grpc/generic/client_stub.rb
  2. 12
      src/ruby/spec/client_server_spec.rb

@ -39,6 +39,25 @@ module GRPC
# Default deadline is 5 seconds.
DEFAULT_DEADLINE = 5
# setup_channel is used by #initialize to constuct a channel from its
# arguments.
def self.setup_channel(alt_chan, host, creds, **kw)
unless alt_chan.nil?
fail(TypeError, '!Channel') unless alt_chan.is_a?(Core::Channel)
return alt_chan
end
return Core::Channel.new(host, kw) if creds.nil?
fail(TypeError, '!Credentials') unless creds.is_a?(Core::Credentials)
Core::Channel.new(host, kw, creds)
end
# check_update_metadata is used by #initialize verify that it's a Proc.
def self.check_update_metadata(update_metadata)
return update_metadata if update_metadata.nil?
fail(TypeError, '!is_a?Proc') unless update_metadata.is_a?(Proc)
update_metadata
end
# Creates a new ClientStub.
#
# Minimally, a stub is created with the just the host of the gRPC service
@ -73,40 +92,17 @@ module GRPC
# @param update_metadata a func that updates metadata as described above
# @param kw [KeywordArgs]the channel arguments
def initialize(host, q,
channel_override:nil,
channel_override: nil,
deadline: DEFAULT_DEADLINE,
creds: nil,
update_metadata: nil,
**kw)
unless q.is_a? Core::CompletionQueue
fail(ArgumentError, 'not a CompletionQueue')
end
fail(TypeError, '!CompletionQueue') unless q.is_a?(Core::CompletionQueue)
@queue = q
# set the channel instance
if !channel_override.nil?
ch = channel_override
fail(ArgumentError, 'not a Channel') unless ch.is_a? Core::Channel
else
if creds.nil?
ch = Core::Channel.new(host, kw)
elsif !creds.is_a?(Core::Credentials)
fail(ArgumentError, 'not a Credentials')
else
ch = Core::Channel.new(host, kw, creds)
end
end
@ch = ch
@update_metadata = nil
unless update_metadata.nil?
unless update_metadata.is_a? Proc
fail(ArgumentError, 'update_metadata is not a Proc')
end
@update_metadata = update_metadata
end
@host = host
@ch = ClientStub.setup_channel(channel_override, host, creds, **kw)
@update_metadata = ClientStub.check_update_metadata(update_metadata)
alt_host = kw[Core::Channel::SSL_TARGET]
@host = alt_host.nil? ? host : alt_host
@deadline = deadline
end
@ -400,12 +396,7 @@ module GRPC
# @param deadline [TimeConst]
def new_active_call(ch, marshal, unmarshal, deadline = nil)
absolute_deadline = Core::TimeConsts.from_relative_time(deadline)
# It should be OK to to pass the hostname:port to create_call, but at
# the moment this fails a security check. This will be corrected.
#
# TODO: # remove this after create_call is updated
host = @host.split(':')[0]
call = @ch.create_call(ch, host, absolute_deadline)
call = @ch.create_call(ch, @host, absolute_deadline)
ActiveCall.new(call, @queue, marshal, unmarshal, absolute_deadline,
started: false)
end

@ -95,7 +95,7 @@ shared_context 'setup: tags' do
end
def new_client_call
@ch.create_call('/method', 'localhost', deadline)
@ch.create_call('/method', 'foo.test.google.fr', deadline)
end
end
@ -346,7 +346,7 @@ end
describe 'the secure http client/server' do
before(:example) do
certs = load_test_certs
server_host = 'localhost:0'
server_host = '0.0.0.0:0'
@client_queue = GRPC::Core::CompletionQueue.new
@server_queue = GRPC::Core::CompletionQueue.new
server_creds = GRPC::Core::ServerCredentials.new(nil, certs[1], certs[2])
@ -363,10 +363,10 @@ describe 'the secure http client/server' do
end
# TODO: uncomment after updating the to the new c api
# it_behaves_like 'basic GRPC message delivery is OK' do
# end
it_behaves_like 'basic GRPC message delivery is OK' do
end
# TODO: uncomment after updating the to the new c api
# it_behaves_like 'GRPC metadata delivery works OK' do
# end
it_behaves_like 'GRPC metadata delivery works OK' do
end
end

Loading…
Cancel
Save