|
|
|
@ -67,12 +67,11 @@ static grpc_resolver *build_fake_resolver( |
|
|
|
|
typedef struct on_resolution_arg { |
|
|
|
|
grpc_channel_args *resolver_result; |
|
|
|
|
grpc_channel_args *expected_resolver_result; |
|
|
|
|
bool was_called; |
|
|
|
|
gpr_event ev; |
|
|
|
|
} on_resolution_arg; |
|
|
|
|
|
|
|
|
|
void on_resolution_cb(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { |
|
|
|
|
on_resolution_arg *res = arg; |
|
|
|
|
res->was_called = true; |
|
|
|
|
// We only check the addresses channel arg because that's the only one
|
|
|
|
|
// explicitly set by the test via
|
|
|
|
|
// grpc_fake_resolver_response_generator_set_response.
|
|
|
|
@ -84,6 +83,7 @@ void on_resolution_cb(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { |
|
|
|
|
grpc_lb_addresses_cmp(actual_lb_addresses, expected_lb_addresses) == 0); |
|
|
|
|
grpc_channel_args_destroy(exec_ctx, res->resolver_result); |
|
|
|
|
grpc_channel_args_destroy(exec_ctx, res->expected_resolver_result); |
|
|
|
|
gpr_event_set(&res->ev, (void*)1); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void test_fake_resolver() { |
|
|
|
@ -115,6 +115,7 @@ static void test_fake_resolver() { |
|
|
|
|
on_resolution_arg on_res_arg; |
|
|
|
|
memset(&on_res_arg, 0, sizeof(on_res_arg)); |
|
|
|
|
on_res_arg.expected_resolver_result = results; |
|
|
|
|
gpr_event_init(&on_res_arg.ev); |
|
|
|
|
grpc_closure *on_resolution = grpc_closure_create( |
|
|
|
|
on_resolution_cb, &on_res_arg, grpc_combiner_scheduler(combiner)); |
|
|
|
|
|
|
|
|
@ -125,7 +126,7 @@ static void test_fake_resolver() { |
|
|
|
|
grpc_resolver_next_locked(&exec_ctx, resolver, &on_res_arg.resolver_result, |
|
|
|
|
on_resolution); |
|
|
|
|
grpc_exec_ctx_flush(&exec_ctx); |
|
|
|
|
GPR_ASSERT(on_res_arg.was_called); |
|
|
|
|
GPR_ASSERT(gpr_event_wait(&on_res_arg.ev, grpc_timeout_seconds_to_deadline(5)) != NULL); |
|
|
|
|
|
|
|
|
|
// Setup update.
|
|
|
|
|
grpc_uri *uris_update[] = { |
|
|
|
@ -150,6 +151,7 @@ static void test_fake_resolver() { |
|
|
|
|
on_resolution_arg on_res_arg_update; |
|
|
|
|
memset(&on_res_arg_update, 0, sizeof(on_res_arg_update)); |
|
|
|
|
on_res_arg_update.expected_resolver_result = results_update; |
|
|
|
|
gpr_event_init(&on_res_arg_update.ev); |
|
|
|
|
on_resolution = grpc_closure_create(on_resolution_cb, &on_res_arg_update, |
|
|
|
|
grpc_combiner_scheduler(combiner)); |
|
|
|
|
|
|
|
|
@ -159,7 +161,7 @@ static void test_fake_resolver() { |
|
|
|
|
grpc_resolver_next_locked(&exec_ctx, resolver, |
|
|
|
|
&on_res_arg_update.resolver_result, on_resolution); |
|
|
|
|
grpc_exec_ctx_flush(&exec_ctx); |
|
|
|
|
GPR_ASSERT(on_res_arg.was_called); |
|
|
|
|
GPR_ASSERT(gpr_event_wait(&on_res_arg_update.ev, grpc_timeout_seconds_to_deadline(5)) != NULL); |
|
|
|
|
|
|
|
|
|
// Requesting a new resolution without re-senting the response shouldn't
|
|
|
|
|
// trigger the resolution callback.
|
|
|
|
@ -167,7 +169,7 @@ static void test_fake_resolver() { |
|
|
|
|
grpc_resolver_next_locked(&exec_ctx, resolver, &on_res_arg.resolver_result, |
|
|
|
|
on_resolution); |
|
|
|
|
grpc_exec_ctx_flush(&exec_ctx); |
|
|
|
|
GPR_ASSERT(!on_res_arg.was_called); |
|
|
|
|
GPR_ASSERT(gpr_event_wait(&on_res_arg.ev, grpc_timeout_milliseconds_to_deadline(100)) == NULL); |
|
|
|
|
|
|
|
|
|
GRPC_COMBINER_UNREF(&exec_ctx, combiner, "test_fake_resolver"); |
|
|
|
|
GRPC_RESOLVER_UNREF(&exec_ctx, resolver, "test_fake_resolver"); |
|
|
|
|