Skip to content

Commit a8ba47a

Browse files
authored
InsecureCredentials: singleton object (#28777)
* InsecureCredentials: Allow special case comparison * Update security connector * Use a singleton object instead
1 parent 608970f commit a8ba47a

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

src/core/lib/security/credentials/insecure/insecure_credentials.cc

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,10 @@ class InsecureServerCredentials final : public grpc_server_credentials {
5656
} // namespace grpc_core
5757

5858
grpc_channel_credentials* grpc_insecure_credentials_create() {
59-
return new grpc_core::InsecureCredentials();
59+
// Create a singleton object for InsecureCredentials so that channels to the
60+
// same target with InsecureCredentials can reuse the subchannels.
61+
static auto* creds = new grpc_core::InsecureCredentials();
62+
return creds->Ref().release();
6063
}
6164

6265
grpc_server_credentials* grpc_insecure_server_credentials_create() {

test/core/security/credentials_test.cc

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3541,6 +3541,32 @@ test_external_account_credentials_create_failure_invalid_workforce_pool_audience
35413541
GPR_ASSERT(url_creds == nullptr);
35423542
}
35433543

3544+
static void test_insecure_credentials_compare_success(void) {
3545+
auto* insecure_creds_1 = grpc_insecure_credentials_create();
3546+
auto* insecure_creds_2 = grpc_insecure_credentials_create();
3547+
GPR_ASSERT(grpc_core::QsortCompare(insecure_creds_1, insecure_creds_2) == 0);
3548+
grpc_arg arg_1 = grpc_channel_credentials_to_arg(insecure_creds_1);
3549+
grpc_channel_args args_1 = {1, &arg_1};
3550+
grpc_arg arg_2 = grpc_channel_credentials_to_arg(insecure_creds_2);
3551+
grpc_channel_args args_2 = {1, &arg_2};
3552+
GPR_ASSERT(grpc_channel_args_compare(&args_1, &args_2) == 0);
3553+
grpc_channel_credentials_release(insecure_creds_1);
3554+
grpc_channel_credentials_release(insecure_creds_2);
3555+
}
3556+
3557+
static void test_insecure_credentials_compare_failure(void) {
3558+
auto* insecure_creds = grpc_insecure_credentials_create();
3559+
auto* fake_creds = grpc_fake_transport_security_credentials_create();
3560+
GPR_ASSERT(grpc_core::QsortCompare(insecure_creds, fake_creds) != 0);
3561+
grpc_arg arg_1 = grpc_channel_credentials_to_arg(insecure_creds);
3562+
grpc_channel_args args_1 = {1, &arg_1};
3563+
grpc_arg arg_2 = grpc_channel_credentials_to_arg(fake_creds);
3564+
grpc_channel_args args_2 = {1, &arg_2};
3565+
GPR_ASSERT(grpc_channel_args_compare(&args_1, &args_2) != 0);
3566+
grpc_channel_credentials_release(insecure_creds);
3567+
grpc_channel_credentials_release(fake_creds);
3568+
}
3569+
35443570
int main(int argc, char** argv) {
35453571
grpc::testing::TestEnvironment env(argc, argv);
35463572
grpc_init();
@@ -3619,6 +3645,8 @@ int main(int argc, char** argv) {
36193645
test_external_account_credentials_create_failure_invalid_options_credential_source();
36203646
test_external_account_credentials_create_success_workforce_pool();
36213647
test_external_account_credentials_create_failure_invalid_workforce_pool_audience();
3648+
test_insecure_credentials_compare_success();
3649+
test_insecure_credentials_compare_failure();
36223650
grpc_shutdown();
36233651
return 0;
36243652
}

0 commit comments

Comments
 (0)