|  | @@ -120,6 +120,14 @@ class CustomHealthCheckService : public HealthCheckServiceInterface {
 | 
	
		
			
				|  |  |    HealthCheckServiceImpl* impl_;  // not owned
 | 
	
		
			
				|  |  |  };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +void LoopCompletionQueue(ServerCompletionQueue* cq) {
 | 
	
		
			
				|  |  | +  void* tag;
 | 
	
		
			
				|  |  | +  bool ok;
 | 
	
		
			
				|  |  | +  while (cq->Next(&tag, &ok)) {
 | 
	
		
			
				|  |  | +    abort();  // Nothing should come out of the cq.
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  class HealthServiceEnd2endTest : public ::testing::Test {
 | 
	
		
			
				|  |  |   protected:
 | 
	
		
			
				|  |  |    HealthServiceEnd2endTest() {}
 | 
	
	
		
			
				|  | @@ -160,6 +168,7 @@ class HealthServiceEnd2endTest : public ::testing::Test {
 | 
	
		
			
				|  |  |        if (cq_thread_.joinable()) {
 | 
	
		
			
				|  |  |          cq_thread_.join();
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  | +      LoopCompletionQueue(cq_.get());
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -223,9 +232,9 @@ class HealthServiceEnd2endTest : public ::testing::Test {
 | 
	
		
			
				|  |  |    TestServiceImpl echo_test_service_;
 | 
	
		
			
				|  |  |    HealthCheckServiceImpl health_check_service_impl_;
 | 
	
		
			
				|  |  |    std::unique_ptr<Health::Stub> hc_stub_;
 | 
	
		
			
				|  |  | +  std::unique_ptr<ServerCompletionQueue> cq_;
 | 
	
		
			
				|  |  |    std::unique_ptr<Server> server_;
 | 
	
		
			
				|  |  |    std::ostringstream server_address_;
 | 
	
		
			
				|  |  | -  std::unique_ptr<ServerCompletionQueue> cq_;
 | 
	
		
			
				|  |  |    std::thread cq_thread_;
 | 
	
		
			
				|  |  |  };
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -242,69 +251,60 @@ TEST_F(HealthServiceEnd2endTest, DefaultHealthServiceDisabled) {
 | 
	
		
			
				|  |  |    SendHealthCheckRpc("", Status(StatusCode::UNIMPLEMENTED, ""));
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -// TEST_F(HealthServiceEnd2endTest, DefaultHealthService) {
 | 
	
		
			
				|  |  | -//   EnableDefaultHealthCheckService(true);
 | 
	
		
			
				|  |  | -//   EXPECT_TRUE(DefaultHealthCheckServiceEnabled());
 | 
	
		
			
				|  |  | -//   SetUpServer(true, false, nullptr);
 | 
	
		
			
				|  |  | -//   VerifyHealthCheckService();
 | 
	
		
			
				|  |  | -//
 | 
	
		
			
				|  |  | -//   // The default service has a size limit of the service name.
 | 
	
		
			
				|  |  | -//   const grpc::string kTooLongServiceName(201, 'x');
 | 
	
		
			
				|  |  | -//   SendHealthCheckRpc(kTooLongServiceName,
 | 
	
		
			
				|  |  | -//                      Status(StatusCode::INVALID_ARGUMENT, ""));
 | 
	
		
			
				|  |  | -// }
 | 
	
		
			
				|  |  | -//
 | 
	
		
			
				|  |  | -// void LoopCompletionQueue(ServerCompletionQueue* cq) {
 | 
	
		
			
				|  |  | -//   void* tag;
 | 
	
		
			
				|  |  | -//   bool ok;
 | 
	
		
			
				|  |  | -//   while (cq->Next(&tag, &ok)) {
 | 
	
		
			
				|  |  | -//     abort();  // Nothing should come out of the cq.
 | 
	
		
			
				|  |  | -//   }
 | 
	
		
			
				|  |  | -//   gpr_log(GPR_ERROR, "returning from thread");
 | 
	
		
			
				|  |  | -// }
 | 
	
		
			
				|  |  | -//
 | 
	
		
			
				|  |  | -// TEST_F(HealthServiceEnd2endTest, DefaultHealthServiceAsync) {
 | 
	
		
			
				|  |  | -//  EnableDefaultHealthCheckService(true);
 | 
	
		
			
				|  |  | -//  EXPECT_TRUE(DefaultHealthCheckServiceEnabled());
 | 
	
		
			
				|  |  | -//  SetUpServer(false, false, nullptr);
 | 
	
		
			
				|  |  | -//  cq_thread_ = std::thread(LoopCompletionQueue, cq_.get());
 | 
	
		
			
				|  |  | -//  VerifyHealthCheckService();
 | 
	
		
			
				|  |  | -//
 | 
	
		
			
				|  |  | -//  // The default service has a size limit of the service name.
 | 
	
		
			
				|  |  | -//  const grpc::string kTooLongServiceName(201, 'x');
 | 
	
		
			
				|  |  | -//  SendHealthCheckRpc(kTooLongServiceName,
 | 
	
		
			
				|  |  | -//                     Status(StatusCode::INVALID_ARGUMENT, ""));
 | 
	
		
			
				|  |  | -// }
 | 
	
		
			
				|  |  | -//
 | 
	
		
			
				|  |  | -// // Provide an empty service to disable the default service.
 | 
	
		
			
				|  |  | -// TEST_F(HealthServiceEnd2endTest, ExplicitlyDisableViaOverride) {
 | 
	
		
			
				|  |  | -//   EnableDefaultHealthCheckService(true);
 | 
	
		
			
				|  |  | -//   EXPECT_TRUE(DefaultHealthCheckServiceEnabled());
 | 
	
		
			
				|  |  | -//   std::unique_ptr<HealthCheckServiceInterface> empty_service;
 | 
	
		
			
				|  |  | -//   SetUpServer(true, true, std::move(empty_service));
 | 
	
		
			
				|  |  | -//   HealthCheckServiceInterface* service = server_->GetHealthCheckService();
 | 
	
		
			
				|  |  | -//   EXPECT_TRUE(service == nullptr);
 | 
	
		
			
				|  |  | -//
 | 
	
		
			
				|  |  | -//   ResetStubs();
 | 
	
		
			
				|  |  | -//
 | 
	
		
			
				|  |  | -//   SendHealthCheckRpc("", Status(StatusCode::UNIMPLEMENTED, ""));
 | 
	
		
			
				|  |  | -// }
 | 
	
		
			
				|  |  | -//
 | 
	
		
			
				|  |  | -// // Provide an explicit override of health checking service interface.
 | 
	
		
			
				|  |  | -// TEST_F(HealthServiceEnd2endTest, ExplicitlyOverride) {
 | 
	
		
			
				|  |  | -//   EnableDefaultHealthCheckService(true);
 | 
	
		
			
				|  |  | -//   EXPECT_TRUE(DefaultHealthCheckServiceEnabled());
 | 
	
		
			
				|  |  | -//   std::unique_ptr<HealthCheckServiceInterface> override_service(
 | 
	
		
			
				|  |  | -//       new CustomHealthCheckService(&health_check_service_impl_));
 | 
	
		
			
				|  |  | -//   HealthCheckServiceInterface* underlying_service = override_service.get();
 | 
	
		
			
				|  |  | -//   SetUpServer(false, true, std::move(override_service));
 | 
	
		
			
				|  |  | -//   HealthCheckServiceInterface* service = server_->GetHealthCheckService();
 | 
	
		
			
				|  |  | -//   EXPECT_TRUE(service == underlying_service);
 | 
	
		
			
				|  |  | -//
 | 
	
		
			
				|  |  | -//   ResetStubs();
 | 
	
		
			
				|  |  | -//
 | 
	
		
			
				|  |  | -//   VerifyHealthCheckService();
 | 
	
		
			
				|  |  | -// }
 | 
	
		
			
				|  |  | +TEST_F(HealthServiceEnd2endTest, DefaultHealthService) {
 | 
	
		
			
				|  |  | +  EnableDefaultHealthCheckService(true);
 | 
	
		
			
				|  |  | +  EXPECT_TRUE(DefaultHealthCheckServiceEnabled());
 | 
	
		
			
				|  |  | +  SetUpServer(true, false, nullptr);
 | 
	
		
			
				|  |  | +  VerifyHealthCheckService();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // The default service has a size limit of the service name.
 | 
	
		
			
				|  |  | +  const grpc::string kTooLongServiceName(201, 'x');
 | 
	
		
			
				|  |  | +  SendHealthCheckRpc(kTooLongServiceName,
 | 
	
		
			
				|  |  | +                     Status(StatusCode::INVALID_ARGUMENT, ""));
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +TEST_F(HealthServiceEnd2endTest, DefaultHealthServiceAsync) {
 | 
	
		
			
				|  |  | +  EnableDefaultHealthCheckService(true);
 | 
	
		
			
				|  |  | +  EXPECT_TRUE(DefaultHealthCheckServiceEnabled());
 | 
	
		
			
				|  |  | +  SetUpServer(false, false, nullptr);
 | 
	
		
			
				|  |  | +  cq_thread_ = std::thread(LoopCompletionQueue, cq_.get());
 | 
	
		
			
				|  |  | +  VerifyHealthCheckService();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // The default service has a size limit of the service name.
 | 
	
		
			
				|  |  | +  const grpc::string kTooLongServiceName(201, 'x');
 | 
	
		
			
				|  |  | +  SendHealthCheckRpc(kTooLongServiceName,
 | 
	
		
			
				|  |  | +                     Status(StatusCode::INVALID_ARGUMENT, ""));
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +// Provide an empty service to disable the default service.
 | 
	
		
			
				|  |  | +TEST_F(HealthServiceEnd2endTest, ExplicitlyDisableViaOverride) {
 | 
	
		
			
				|  |  | +  EnableDefaultHealthCheckService(true);
 | 
	
		
			
				|  |  | +  EXPECT_TRUE(DefaultHealthCheckServiceEnabled());
 | 
	
		
			
				|  |  | +  std::unique_ptr<HealthCheckServiceInterface> empty_service;
 | 
	
		
			
				|  |  | +  SetUpServer(true, true, std::move(empty_service));
 | 
	
		
			
				|  |  | +  HealthCheckServiceInterface* service = server_->GetHealthCheckService();
 | 
	
		
			
				|  |  | +  EXPECT_TRUE(service == nullptr);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  ResetStubs();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  SendHealthCheckRpc("", Status(StatusCode::UNIMPLEMENTED, ""));
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +// Provide an explicit override of health checking service interface.
 | 
	
		
			
				|  |  | +TEST_F(HealthServiceEnd2endTest, ExplicitlyOverride) {
 | 
	
		
			
				|  |  | +  EnableDefaultHealthCheckService(true);
 | 
	
		
			
				|  |  | +  EXPECT_TRUE(DefaultHealthCheckServiceEnabled());
 | 
	
		
			
				|  |  | +  std::unique_ptr<HealthCheckServiceInterface> override_service(
 | 
	
		
			
				|  |  | +      new CustomHealthCheckService(&health_check_service_impl_));
 | 
	
		
			
				|  |  | +  HealthCheckServiceInterface* underlying_service = override_service.get();
 | 
	
		
			
				|  |  | +  SetUpServer(false, true, std::move(override_service));
 | 
	
		
			
				|  |  | +  HealthCheckServiceInterface* service = server_->GetHealthCheckService();
 | 
	
		
			
				|  |  | +  EXPECT_TRUE(service == underlying_service);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  ResetStubs();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  VerifyHealthCheckService();
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  }  // namespace
 | 
	
		
			
				|  |  |  }  // namespace testing
 |