diff options
Diffstat (limited to 'src/ruby/spec/generic/client_stub_spec.rb')
-rw-r--r-- | src/ruby/spec/generic/client_stub_spec.rb | 48 |
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 |