| 
					
				 | 
			
			
				@@ -46,6 +46,7 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "src/core/lib/http/httpcli.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "src/core/lib/security/credentials/composite/composite_credentials.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include "src/core/lib/security/credentials/fake/fake_credentials.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "src/core/lib/security/credentials/google_default/google_default_credentials.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "src/core/lib/security/credentials/jwt/jwt_credentials.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "src/core/lib/security/credentials/oauth2/oauth2_credentials.h" 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -411,7 +412,7 @@ static grpc_security_status check_channel_oauth2_create_security_connector( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static void test_channel_oauth2_composite_creds(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_channel_args *new_args; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_channel_credentials_vtable vtable = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      NULL, check_channel_oauth2_create_security_connector}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      NULL, check_channel_oauth2_create_security_connector, NULL}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_channel_credentials *channel_creds = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       grpc_mock_channel_credentials_create(&vtable); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_call_credentials *oauth2_creds = 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -495,7 +496,7 @@ check_channel_oauth2_google_iam_create_security_connector( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static void test_channel_oauth2_google_iam_composite_creds(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_channel_args *new_args; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_channel_credentials_vtable vtable = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      NULL, check_channel_oauth2_google_iam_create_security_connector}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      NULL, check_channel_oauth2_google_iam_create_security_connector, NULL}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_channel_credentials *channel_creds = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       grpc_mock_channel_credentials_create(&vtable); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_call_credentials *oauth2_creds = 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1148,6 +1149,31 @@ static void test_get_well_known_google_credentials_file_path(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void test_channel_creds_duplicate_without_call_creds(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_channel_credentials *channel_creds = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      grpc_fake_transport_security_credentials_create(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_channel_credentials *dup = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      grpc_channel_credentials_duplicate_without_call_credentials( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          channel_creds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  GPR_ASSERT(dup == channel_creds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_channel_credentials_unref(dup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_call_credentials *call_creds = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      grpc_access_token_credentials_create("blah", NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_channel_credentials *composite_creds = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      grpc_composite_channel_credentials_create(channel_creds, call_creds, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_call_credentials_unref(call_creds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  dup = grpc_channel_credentials_duplicate_without_call_credentials( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      composite_creds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  GPR_ASSERT(dup == channel_creds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_channel_credentials_unref(dup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_channel_credentials_unref(channel_creds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_channel_credentials_unref(composite_creds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 int main(int argc, char **argv) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_test_init(argc, argv); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_init(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1182,6 +1208,7 @@ int main(int argc, char **argv) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   test_metadata_plugin_success(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   test_metadata_plugin_failure(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   test_get_well_known_google_credentials_file_path(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  test_channel_creds_duplicate_without_call_creds(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_shutdown(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |