aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/ruby/spec/generic/client_stub_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'src/ruby/spec/generic/client_stub_spec.rb')
-rw-r--r--src/ruby/spec/generic/client_stub_spec.rb48
1 files changed, 36 insertions, 12 deletions
diff --git a/src/ruby/spec/generic/client_stub_spec.rb b/src/ruby/spec/generic/client_stub_spec.rb
index 9539e56c0f..d858c4e3fe 100644
--- a/src/ruby/spec/generic/client_stub_spec.rb
+++ b/src/ruby/spec/generic/client_stub_spec.rb
@@ -83,7 +83,12 @@ def sanity_check_values_of_accessors(op_view,
op_view.deadline.is_a?(Time)).to be(true)
end
-describe 'ClientStub' do
+def close_active_server_call(active_server_call)
+ active_server_call.send(:set_input_stream_done)
+ active_server_call.send(:set_output_stream_done)
+end
+
+describe 'ClientStub' do # rubocop:disable Metrics/BlockLength
let(:noop) { proc { |x| x } }
before(:each) do
@@ -96,7 +101,10 @@ describe 'ClientStub' do
end
after(:each) do
- @server.close(from_relative_time(2)) unless @server.nil?
+ unless @server.nil?
+ @server.shutdown_and_notify(from_relative_time(2))
+ @server.close
+ end
end
describe '#new' do
@@ -228,9 +236,17 @@ describe 'ClientStub' do
th.join
end
- it 'should receive UNAUTHENTICATED if call credentials plugin fails' do
+ it 'should receive UNAVAILABLE if call credentials plugin fails' do
server_port = create_secure_test_server
- th = run_request_response(@sent_msg, @resp, @pass)
+ server_started_notifier = GRPC::Notifier.new
+ th = Thread.new do
+ @server.start
+ server_started_notifier.notify(nil)
+ # Poll on the server so that the client connection can proceed.
+ # We don't expect the server to actually accept a call though.
+ expect { @server.request_call }.to raise_error(GRPC::Core::CallError)
+ end
+ server_started_notifier.wait
certs = load_test_certs
secure_channel_creds = GRPC::Core::ChannelCredentials.new(
@@ -249,17 +265,18 @@ describe 'ClientStub' do
end
creds = GRPC::Core::CallCredentials.new(failing_auth)
- unauth_error_occured = false
+ unavailable_error_occured = false
begin
get_response(stub, credentials: creds)
- rescue GRPC::Unauthenticated => e
- unauth_error_occured = true
+ rescue GRPC::Unavailable => e
+ unavailable_error_occured = true
expect(e.details.include?(error_message)).to be true
end
- expect(unauth_error_occured).to eq(true)
+ expect(unavailable_error_occured).to eq(true)
- # Kill the server thread so tests can complete
- th.kill
+ @server.shutdown_and_notify(Time.now + 3)
+ th.join
+ @server.close
end
it 'should raise ArgumentError if metadata contains invalid values' do
@@ -493,6 +510,7 @@ describe 'ClientStub' do
p 'remote_send failed (allowed because call expected to cancel)'
ensure
c.send_status(OK, 'OK', true)
+ close_active_server_call(c)
end
end
end
@@ -659,6 +677,7 @@ describe 'ClientStub' do
end
# can't fail since initial metadata already sent
server_call.send_status(@pass, 'OK', true)
+ close_active_server_call(server_call)
end
def verify_error_from_write_thread(stub, requests_to_push,
@@ -809,6 +828,7 @@ describe 'ClientStub' do
replys.each { |r| c.remote_send(r) }
c.send_status(status, status == @pass ? 'OK' : 'NOK', true,
metadata: server_trailing_md)
+ close_active_server_call(c)
end
end
@@ -819,6 +839,7 @@ describe 'ClientStub' do
expected_inputs.each { |i| expect(c.remote_read).to eq(i) }
replys.each { |r| c.remote_send(r) }
c.send_status(status, status == @pass ? 'OK' : 'NOK', true)
+ close_active_server_call(c)
end
end
@@ -844,6 +865,7 @@ describe 'ClientStub' do
end
c.send_status(status, status == @pass ? 'OK' : 'NOK', true,
metadata: server_trailing_md)
+ close_active_server_call(c)
end
end
@@ -862,6 +884,7 @@ describe 'ClientStub' do
c.remote_send(resp)
c.send_status(status, status == @pass ? 'OK' : 'NOK', true,
metadata: server_trailing_md)
+ close_active_server_call(c)
end
end
@@ -880,6 +903,7 @@ describe 'ClientStub' do
c.remote_send(resp)
c.send_status(status, status == @pass ? 'OK' : 'NOK', true,
metadata: server_trailing_md)
+ close_active_server_call(c)
end
end
@@ -888,12 +912,12 @@ describe 'ClientStub' do
secure_credentials = GRPC::Core::ServerCredentials.new(
nil, [{ private_key: certs[1], cert_chain: certs[2] }], false)
- @server = GRPC::Core::Server.new(nil)
+ @server = new_core_server_for_testing(nil)
@server.add_http2_port('0.0.0.0:0', secure_credentials)
end
def create_test_server
- @server = GRPC::Core::Server.new(nil)
+ @server = new_core_server_for_testing(nil)
@server.add_http2_port('0.0.0.0:0', :this_port_is_insecure)
end