|
|
|
@ -233,10 +233,40 @@ static grpc_end2end_test_fixture chttp2_create_fixture_micro_fullstack( |
|
|
|
|
return f; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
grpc_connectivity_state g_state = GRPC_CHANNEL_IDLE; |
|
|
|
|
|
|
|
|
|
static void state_changed(grpc_exec_ctx *exec_ctx, void *arg, int success) { |
|
|
|
|
if (g_state != GRPC_CHANNEL_READY) { |
|
|
|
|
grpc_subchannel_notify_on_state_change(exec_ctx, arg, &g_state, grpc_closure_create(state_changed, arg)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static grpc_connected_subchannel *connect_subchannel(grpc_subchannel *c) { |
|
|
|
|
grpc_pollset pollset; |
|
|
|
|
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; |
|
|
|
|
grpc_pollset_init(&pollset); |
|
|
|
|
grpc_subchannel_add_interested_party(&exec_ctx, c, &pollset); |
|
|
|
|
grpc_subchannel_notify_on_state_change(&exec_ctx, c, &g_state, grpc_closure_create(state_changed, c)); |
|
|
|
|
grpc_exec_ctx_flush(&exec_ctx); |
|
|
|
|
gpr_mu_lock(GRPC_POLLSET_MU(&pollset)); |
|
|
|
|
while (g_state != GRPC_CHANNEL_READY) { |
|
|
|
|
grpc_pollset_worker worker; |
|
|
|
|
grpc_pollset_work(&exec_ctx, &pollset, &worker, gpr_now(GPR_CLOCK_REALTIME), GRPC_TIMEOUT_SECONDS_TO_DEADLINE(1)); |
|
|
|
|
gpr_mu_unlock(GRPC_POLLSET_MU(&pollset)); |
|
|
|
|
grpc_exec_ctx_flush(&exec_ctx); |
|
|
|
|
gpr_mu_lock(GRPC_POLLSET_MU(&pollset)); |
|
|
|
|
} |
|
|
|
|
gpr_mu_unlock(GRPC_POLLSET_MU(&pollset)); |
|
|
|
|
grpc_subchannel_del_interested_party(&exec_ctx, c, &pollset); |
|
|
|
|
grpc_exec_ctx_finish(&exec_ctx); |
|
|
|
|
return grpc_subchannel_get_connected_subchannel(c); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void chttp2_init_client_micro_fullstack(grpc_end2end_test_fixture *f, |
|
|
|
|
grpc_channel_args *client_args) { |
|
|
|
|
micro_fullstack_fixture_data *ffd = f->fixture_data; |
|
|
|
|
grpc_connectivity_state conn_state; |
|
|
|
|
grpc_connected_subchannel *connected; |
|
|
|
|
char *ipv4_localaddr; |
|
|
|
|
|
|
|
|
|
gpr_asprintf(&ipv4_localaddr, "ipv4:%s", ffd->localaddr); |
|
|
|
@ -252,8 +282,10 @@ static void chttp2_init_client_micro_fullstack(grpc_end2end_test_fixture *f, |
|
|
|
|
/* here sniffed_subchannel should be ready to use */ |
|
|
|
|
GPR_ASSERT(conn_state == GRPC_CHANNEL_IDLE); |
|
|
|
|
GPR_ASSERT(ffd->sniffed_subchannel != NULL); |
|
|
|
|
|
|
|
|
|
connected = connect_subchannel(ffd->sniffed_subchannel); |
|
|
|
|
f->client = grpc_client_uchannel_create(ffd->sniffed_subchannel, client_args); |
|
|
|
|
grpc_client_uchannel_set_subchannel(f->client, ffd->sniffed_subchannel); |
|
|
|
|
grpc_client_uchannel_set_connected_subchannel(f->client, connected); |
|
|
|
|
gpr_log(GPR_INFO, "CHANNEL WRAPPING SUBCHANNEL: %p(%p)", f->client, |
|
|
|
|
ffd->sniffed_subchannel); |
|
|
|
|
|
|
|
|
|