|  | @@ -616,8 +616,22 @@ describe 'ClientStub' do
 | 
	
		
			
				|  |  |          th.join
 | 
	
		
			
				|  |  |        end
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -      # TODO: add test for metadata-related ArgumentError in a bidi call once
 | 
	
		
			
				|  |  | -      # issue mentioned in https://github.com/grpc/grpc/issues/10526 is fixed
 | 
	
		
			
				|  |  | +      it 'should raise ArgumentError if metadata contains invalid values' do
 | 
	
		
			
				|  |  | +        @metadata.merge!(k3: 3)
 | 
	
		
			
				|  |  | +        stub = GRPC::ClientStub.new(@host, :this_channel_is_insecure)
 | 
	
		
			
				|  |  | +        expect do
 | 
	
		
			
				|  |  | +          get_responses(stub).collect { |r| r }
 | 
	
		
			
				|  |  | +        end.to raise_error(ArgumentError,
 | 
	
		
			
				|  |  | +                           /Header values must be of type string or array/)
 | 
	
		
			
				|  |  | +      end
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      it 'terminates if the call fails to start' do
 | 
	
		
			
				|  |  | +        # don't start the server
 | 
	
		
			
				|  |  | +        stub = GRPC::ClientStub.new(@host, :this_channel_is_insecure)
 | 
	
		
			
				|  |  | +        expect do
 | 
	
		
			
				|  |  | +          get_responses(stub, deadline: from_relative_time(0)).collect { |r| r }
 | 
	
		
			
				|  |  | +        end.to raise_error(GRPC::BadStatus)
 | 
	
		
			
				|  |  | +      end
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        it 'should send metadata to the server ok' do
 | 
	
		
			
				|  |  |          th = run_bidi_streamer_echo_ping_pong(@sent_msgs, @pass, true,
 | 
	
	
		
			
				|  | @@ -630,9 +644,9 @@ describe 'ClientStub' do
 | 
	
		
			
				|  |  |      end
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      describe 'without a call operation' do
 | 
	
		
			
				|  |  | -      def get_responses(stub)
 | 
	
		
			
				|  |  | +      def get_responses(stub, deadline: nil)
 | 
	
		
			
				|  |  |          e = stub.bidi_streamer(@method, @sent_msgs, noop, noop,
 | 
	
		
			
				|  |  | -                               metadata: @metadata)
 | 
	
		
			
				|  |  | +                               metadata: @metadata, deadline: deadline)
 | 
	
		
			
				|  |  |          expect(e).to be_a(Enumerator)
 | 
	
		
			
				|  |  |          e
 | 
	
		
			
				|  |  |        end
 | 
	
	
		
			
				|  | @@ -644,10 +658,10 @@ describe 'ClientStub' do
 | 
	
		
			
				|  |  |        after(:each) do
 | 
	
		
			
				|  |  |          @op.wait # make sure wait doesn't hang
 | 
	
		
			
				|  |  |        end
 | 
	
		
			
				|  |  | -      def get_responses(stub, run_start_call_first: false)
 | 
	
		
			
				|  |  | +      def get_responses(stub, run_start_call_first: false, deadline: nil)
 | 
	
		
			
				|  |  |          @op = stub.bidi_streamer(@method, @sent_msgs, noop, noop,
 | 
	
		
			
				|  |  |                                   return_op: true,
 | 
	
		
			
				|  |  | -                                 metadata: @metadata)
 | 
	
		
			
				|  |  | +                                 metadata: @metadata, deadline: deadline)
 | 
	
		
			
				|  |  |          expect(@op).to be_a(GRPC::ActiveCall::Operation)
 | 
	
		
			
				|  |  |          @op.start_call if run_start_call_first
 | 
	
		
			
				|  |  |          e = @op.execute
 |