| 
					
				 | 
			
			
				@@ -24,7 +24,7 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "src/core/ext/filters/client_channel/health/health_check_parser.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "src/core/ext/filters/client_channel/resolver_result_parsing.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "src/core/ext/filters/client_channel/service_config.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#include "src/core/ext/filters/message_size/message_size_filter.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include "src/core/ext/filters/message_size/message_size_parser.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "src/core/lib/gpr/string.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "test/core/util/port.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "test/core/util/test_config.h" 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1044,6 +1044,59 @@ TEST_F(MessageSizeParserTest, InvalidMaxResponseMessageBytes) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   EXPECT_TRUE(std::regex_search(s, match, e)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   GRPC_ERROR_UNREF(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+class HealthCheckParserTest : public ::testing::Test { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ protected: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  void SetUp() override { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ServiceConfig::Shutdown(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ServiceConfig::Init(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    EXPECT_TRUE(ServiceConfig::RegisterParser(UniquePtr<ServiceConfigParser>( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    New<HealthCheckParser>())) == 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+TEST_F(HealthCheckParserTest, Valid) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const char* test_json = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      "{\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      "  \"healthCheckConfig\": {\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      "    \"serviceName\": \"health_check_service_name\"\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      "    }\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      "}"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_error* error = GRPC_ERROR_NONE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  auto svc_cfg = ServiceConfig::Create(test_json, &error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ASSERT_TRUE(error == GRPC_ERROR_NONE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const auto* parsed_object = static_cast<grpc_core::HealthCheckParsedObject*>( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      svc_cfg->GetParsedGlobalServiceConfigObject(0)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ASSERT_TRUE(parsed_object != nullptr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_EQ(strcmp(parsed_object->service_name(), "health_check_service_name"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+TEST_F(HealthCheckParserTest, MultipleEntries) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const char* test_json = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      "{\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      "  \"healthCheckConfig\": {\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      "    \"serviceName\": \"health_check_service_name\"\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      "    },\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      "  \"healthCheckConfig\": {\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      "    \"serviceName\": \"health_check_service_name1\"\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      "    }\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      "}"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_error* error = GRPC_ERROR_NONE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  auto svc_cfg = ServiceConfig::Create(test_json, &error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  gpr_log(GPR_ERROR, "%s", grpc_error_string(error)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ASSERT_TRUE(error != GRPC_ERROR_NONE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  std::regex e( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      std::string("(Service config parsing " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  "error)(.*)(referenced_errors)(.*)(Global " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  "Params)(.*)(referenced_errors)(.*)(field:healthCheckConfig " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  "field:serviceName error:Duplicate entry)")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  std::smatch match; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  std::string s(grpc_error_string(error)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  EXPECT_TRUE(std::regex_search(s, match, e)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  GRPC_ERROR_UNREF(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }  // namespace testing 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }  // namespace grpc_core 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |