aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/core/security/oauth2_utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/core/security/oauth2_utils.c')
-rw-r--r--test/core/security/oauth2_utils.c43
1 files changed, 27 insertions, 16 deletions
diff --git a/test/core/security/oauth2_utils.c b/test/core/security/oauth2_utils.c
index e2331fbd97..fdbc6ea741 100644
--- a/test/core/security/oauth2_utils.c
+++ b/test/core/security/oauth2_utils.c
@@ -32,29 +32,31 @@
typedef struct {
gpr_mu *mu;
grpc_polling_entity pops;
- int is_done;
+ bool is_done;
char *token;
+
+ grpc_credentials_mdelem_array md_array;
+ grpc_closure closure;
} oauth2_request;
-static void on_oauth2_response(grpc_exec_ctx *exec_ctx, void *user_data,
- grpc_credentials_md *md_elems, size_t num_md,
- grpc_credentials_status status,
- const char *error_details) {
- oauth2_request *request = (oauth2_request *)user_data;
+static void on_oauth2_response(grpc_exec_ctx *exec_ctx, void *arg,
+ grpc_error *error) {
+ oauth2_request *request = (oauth2_request *)arg;
char *token = NULL;
grpc_slice token_slice;
- if (status == GRPC_CREDENTIALS_ERROR) {
- gpr_log(GPR_ERROR, "Fetching token failed.");
+ if (error != GRPC_ERROR_NONE) {
+ gpr_log(GPR_ERROR, "Fetching token failed: %s", grpc_error_string(error));
} else {
- GPR_ASSERT(num_md == 1);
- token_slice = md_elems[0].value;
+ GPR_ASSERT(request->md_array.size == 1);
+ token_slice = GRPC_MDVALUE(request->md_array.md[0]);
token = (char *)gpr_malloc(GRPC_SLICE_LENGTH(token_slice) + 1);
memcpy(token, GRPC_SLICE_START_PTR(token_slice),
GRPC_SLICE_LENGTH(token_slice));
token[GRPC_SLICE_LENGTH(token_slice)] = '\0';
}
+ grpc_credentials_mdelem_array_destroy(exec_ctx, &request->md_array);
gpr_mu_lock(request->mu);
- request->is_done = 1;
+ request->is_done = true;
request->token = token;
GRPC_LOG_IF_ERROR(
"pollset_kick",
@@ -68,6 +70,7 @@ static void do_nothing(grpc_exec_ctx *exec_ctx, void *unused,
char *grpc_test_fetch_oauth2_token_with_credentials(
grpc_call_credentials *creds) {
oauth2_request request;
+ memset(&request, 0, sizeof(request));
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
grpc_closure do_nothing_closure;
grpc_auth_metadata_context null_ctx = {"", "", NULL, NULL};
@@ -75,15 +78,23 @@ char *grpc_test_fetch_oauth2_token_with_credentials(
grpc_pollset *pollset = (grpc_pollset *)gpr_zalloc(grpc_pollset_size());
grpc_pollset_init(pollset, &request.mu);
request.pops = grpc_polling_entity_create_from_pollset(pollset);
- request.is_done = 0;
+ request.is_done = false;
GRPC_CLOSURE_INIT(&do_nothing_closure, do_nothing, NULL,
grpc_schedule_on_exec_ctx);
- grpc_call_credentials_get_request_metadata(
- &exec_ctx, creds, &request.pops, null_ctx, on_oauth2_response, &request);
+ GRPC_CLOSURE_INIT(&request.closure, on_oauth2_response, &request,
+ grpc_schedule_on_exec_ctx);
- grpc_exec_ctx_finish(&exec_ctx);
+ grpc_error *error = GRPC_ERROR_NONE;
+ if (grpc_call_credentials_get_request_metadata(
+ &exec_ctx, creds, &request.pops, null_ctx, &request.md_array,
+ &request.closure, &error)) {
+ // Synchronous result; invoke callback directly.
+ on_oauth2_response(&exec_ctx, &request, error);
+ GRPC_ERROR_UNREF(error);
+ }
+ grpc_exec_ctx_flush(&exec_ctx);
gpr_mu_lock(request.mu);
while (!request.is_done) {
@@ -94,7 +105,7 @@ char *grpc_test_fetch_oauth2_token_with_credentials(
grpc_polling_entity_pollset(&request.pops),
&worker, gpr_now(GPR_CLOCK_MONOTONIC),
gpr_inf_future(GPR_CLOCK_MONOTONIC)))) {
- request.is_done = 1;
+ request.is_done = true;
}
}
gpr_mu_unlock(request.mu);