|  | @@ -55,7 +55,8 @@ class ClientCallbackEnd2endTest : public ::testing::Test {
 | 
	
		
			
				|  |  |    void ResetStub() {
 | 
	
		
			
				|  |  |      ChannelArguments args;
 | 
	
		
			
				|  |  |      channel_ = server_->InProcessChannel(args);
 | 
	
		
			
				|  |  | -    stub_.reset(new GenericStub(channel_));
 | 
	
		
			
				|  |  | +    stub_ = grpc::testing::EchoTestService::NewStub(channel_);
 | 
	
		
			
				|  |  | +    generic_stub_.reset(new GenericStub(channel_));
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    void TearDown() override {
 | 
	
	
		
			
				|  | @@ -65,6 +66,36 @@ class ClientCallbackEnd2endTest : public ::testing::Test {
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    void SendRpcs(int num_rpcs) {
 | 
	
		
			
				|  |  | +    grpc::string test_string("");
 | 
	
		
			
				|  |  | +    for (int i = 0; i < num_rpcs; i++) {
 | 
	
		
			
				|  |  | +      EchoRequest request;
 | 
	
		
			
				|  |  | +      EchoResponse response;
 | 
	
		
			
				|  |  | +      ClientContext cli_ctx;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      test_string += "Hello world. ";
 | 
	
		
			
				|  |  | +      request.set_message(test_string);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      std::mutex mu;
 | 
	
		
			
				|  |  | +      std::condition_variable cv;
 | 
	
		
			
				|  |  | +      bool done = false;
 | 
	
		
			
				|  |  | +      stub_->experimental_async()->Echo(
 | 
	
		
			
				|  |  | +          &cli_ctx, &request, &response,
 | 
	
		
			
				|  |  | +          [&request, &response, &done, &mu, &cv](Status s) {
 | 
	
		
			
				|  |  | +            GPR_ASSERT(s.ok());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            EXPECT_EQ(request.message(), response.message());
 | 
	
		
			
				|  |  | +            std::lock_guard<std::mutex> l(mu);
 | 
	
		
			
				|  |  | +            done = true;
 | 
	
		
			
				|  |  | +            cv.notify_one();
 | 
	
		
			
				|  |  | +          });
 | 
	
		
			
				|  |  | +      std::unique_lock<std::mutex> l(mu);
 | 
	
		
			
				|  |  | +      while (!done) {
 | 
	
		
			
				|  |  | +        cv.wait(l);
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  void SendRpcsGeneric(int num_rpcs) {
 | 
	
		
			
				|  |  |      const grpc::string kMethodName("/grpc.testing.EchoTestService/Echo");
 | 
	
		
			
				|  |  |      grpc::string test_string("");
 | 
	
		
			
				|  |  |      for (int i = 0; i < num_rpcs; i++) {
 | 
	
	
		
			
				|  | @@ -80,7 +111,7 @@ class ClientCallbackEnd2endTest : public ::testing::Test {
 | 
	
		
			
				|  |  |        std::mutex mu;
 | 
	
		
			
				|  |  |        std::condition_variable cv;
 | 
	
		
			
				|  |  |        bool done = false;
 | 
	
		
			
				|  |  | -      stub_->experimental().UnaryCall(
 | 
	
		
			
				|  |  | +      generic_stub_->experimental().UnaryCall(
 | 
	
		
			
				|  |  |            &cli_ctx, kMethodName, send_buf.get(), &recv_buf,
 | 
	
		
			
				|  |  |            [&request, &recv_buf, &done, &mu, &cv](Status s) {
 | 
	
		
			
				|  |  |              GPR_ASSERT(s.ok());
 | 
	
	
		
			
				|  | @@ -98,9 +129,11 @@ class ClientCallbackEnd2endTest : public ::testing::Test {
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |    bool is_server_started_;
 | 
	
		
			
				|  |  |    std::shared_ptr<Channel> channel_;
 | 
	
		
			
				|  |  | -  std::unique_ptr<grpc::GenericStub> stub_;
 | 
	
		
			
				|  |  | +  std::unique_ptr<grpc::testing::EchoTestService::Stub> stub_;
 | 
	
		
			
				|  |  | +  std::unique_ptr<grpc::GenericStub> generic_stub_;
 | 
	
		
			
				|  |  |    TestServiceImpl service_;
 | 
	
		
			
				|  |  |    std::unique_ptr<Server> server_;
 | 
	
		
			
				|  |  |  };
 | 
	
	
		
			
				|  | @@ -115,6 +148,11 @@ TEST_F(ClientCallbackEnd2endTest, SequentialRpcs) {
 | 
	
		
			
				|  |  |    SendRpcs(10);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +TEST_F(ClientCallbackEnd2endTest, SequentialGenericRpcs) {
 | 
	
		
			
				|  |  | +  ResetStub();
 | 
	
		
			
				|  |  | +  SendRpcsGeneric(10);
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  }  // namespace
 | 
	
		
			
				|  |  |  }  // namespace testing
 | 
	
		
			
				|  |  |  }  // namespace grpc
 |