From 331e3782af23388a87d34c818ae205d15dacba1f Mon Sep 17 00:00:00 2001 From: Julien Boeuf <jboeuf@google.com> Date: Thu, 10 Dec 2015 14:44:35 -0800 Subject: [PATCH 1/2] Testing cached google default creds. --- test/core/security/credentials_test.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/test/core/security/credentials_test.c b/test/core/security/credentials_test.c index 5eb61180575..40a2332a117 100644 --- a/test/core/security/credentials_test.c +++ b/test/core/security/credentials_test.c @@ -917,6 +917,7 @@ static char *null_well_known_creds_path_getter(void) { static void test_google_default_creds_gce(void) { grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; grpc_composite_channel_credentials *creds; + grpc_channel_credentials *cached_creds; grpc_auth_metadata_context auth_md_ctx = {test_service_url, test_method, NULL, NULL}; grpc_flush_cached_google_default_credentials(); @@ -942,7 +943,13 @@ static void test_google_default_creds_gce(void) { grpc_exec_ctx_flush(&exec_ctx); grpc_exec_ctx_finish(&exec_ctx); + /* Check that we get a cached creds if we call + grpc_google_default_credentials_create again. */ + cached_creds = grpc_google_default_credentials_create(); + GPR_ASSERT(cached_creds == &creds->base); + /* Cleanup. */ + grpc_channel_credentials_release(cached_creds); grpc_channel_credentials_release(&creds->base); grpc_httpcli_set_override(NULL, NULL); grpc_override_well_known_credentials_path_getter(NULL); From 97e5147bd1ab47adb659fdb5306091a9342c7d9f Mon Sep 17 00:00:00 2001 From: Julien Boeuf <jboeuf@google.com> Date: Thu, 10 Dec 2015 15:06:45 -0800 Subject: [PATCH 2/2] One more test for default google creds. --- test/core/security/credentials_test.c | 40 ++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/test/core/security/credentials_test.c b/test/core/security/credentials_test.c index 40a2332a117..d3cdb079583 100644 --- a/test/core/security/credentials_test.c +++ b/test/core/security/credentials_test.c @@ -944,7 +944,10 @@ static void test_google_default_creds_gce(void) { grpc_exec_ctx_finish(&exec_ctx); /* Check that we get a cached creds if we call - grpc_google_default_credentials_create again. */ + grpc_google_default_credentials_create again. + GCE detection should not occur anymore either. */ + grpc_httpcli_set_override(httpcli_get_should_not_be_called, + httpcli_post_should_not_be_called); cached_creds = grpc_google_default_credentials_create(); GPR_ASSERT(cached_creds == &creds->base); @@ -955,6 +958,40 @@ static void test_google_default_creds_gce(void) { grpc_override_well_known_credentials_path_getter(NULL); } +static int default_creds_gce_detection_httpcli_get_failure_override( + grpc_exec_ctx *exec_ctx, const grpc_httpcli_request *request, + gpr_timespec deadline, grpc_httpcli_response_cb on_response, + void *user_data) { + /* No magic header. */ + grpc_httpcli_response response = http_response(200, ""); + GPR_ASSERT(strcmp(request->path, "/") == 0); + GPR_ASSERT(strcmp(request->host, "metadata.google.internal") == 0); + on_response(exec_ctx, user_data, &response); + return 1; +} + +static void test_no_google_default_creds(void) { + grpc_flush_cached_google_default_credentials(); + gpr_setenv(GRPC_GOOGLE_CREDENTIALS_ENV_VAR, ""); /* Reset. */ + grpc_override_well_known_credentials_path_getter( + null_well_known_creds_path_getter); + + /* Simulate a successful detection of GCE. */ + grpc_httpcli_set_override( + default_creds_gce_detection_httpcli_get_failure_override, + httpcli_post_should_not_be_called); + GPR_ASSERT(grpc_google_default_credentials_create() == NULL); + + /* Try a cached one. GCE detection should not occur anymore. */ + grpc_httpcli_set_override(httpcli_get_should_not_be_called, + httpcli_post_should_not_be_called); + GPR_ASSERT(grpc_google_default_credentials_create() == NULL); + + /* Cleanup. */ + grpc_httpcli_set_override(NULL, NULL); + grpc_override_well_known_credentials_path_getter(NULL); +} + typedef enum { PLUGIN_INITIAL_STATE, PLUGIN_GET_METADATA_CALLED_STATE, @@ -1131,6 +1168,7 @@ int main(int argc, char **argv) { test_google_default_creds_auth_key(); test_google_default_creds_refresh_token(); test_google_default_creds_gce(); + test_no_google_default_creds(); test_metadata_plugin_success(); test_metadata_plugin_failure(); test_get_well_known_google_credentials_file_path();