|
|
|
@ -37,6 +37,7 @@ |
|
|
|
|
#include <grpc/support/host_port.h> |
|
|
|
|
#include <grpc/support/log.h> |
|
|
|
|
#include <grpc/support/slice.h> |
|
|
|
|
#include <grpc/support/thd.h> |
|
|
|
|
|
|
|
|
|
#include "src/core/ext/client_config/initial_connect_string.h" |
|
|
|
|
#include "src/core/lib/iomgr/sockaddr.h" |
|
|
|
@ -139,7 +140,7 @@ static void start_rpc(int use_creds, int target_port) { |
|
|
|
|
state.op.reserved = NULL; |
|
|
|
|
GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch(state.call, &state.op, |
|
|
|
|
(size_t)(1), NULL, NULL)); |
|
|
|
|
grpc_completion_queue_next(state.cq, n_sec_deadline(1), NULL); |
|
|
|
|
grpc_completion_queue_next(state.cq, n_sec_deadline(5), NULL); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void cleanup_rpc(void) { |
|
|
|
@ -157,12 +158,29 @@ static void cleanup_rpc(void) { |
|
|
|
|
gpr_free(state.target); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void poll_server_until_read_done(test_tcp_server *server) { |
|
|
|
|
gpr_timespec deadline = n_sec_deadline(5); |
|
|
|
|
typedef struct { |
|
|
|
|
test_tcp_server *server; |
|
|
|
|
gpr_event *signal_when_done; |
|
|
|
|
} poll_args; |
|
|
|
|
|
|
|
|
|
static void actually_poll_server(void *arg) { |
|
|
|
|
poll_args *pa = arg; |
|
|
|
|
gpr_timespec deadline = n_sec_deadline(10); |
|
|
|
|
while (state.done == 0 && |
|
|
|
|
gpr_time_cmp(gpr_now(GPR_CLOCK_REALTIME), deadline) < 0) { |
|
|
|
|
test_tcp_server_poll(server, 1); |
|
|
|
|
test_tcp_server_poll(pa->server, 1); |
|
|
|
|
} |
|
|
|
|
gpr_event_set(pa->signal_when_done, (void *)1); |
|
|
|
|
gpr_free(pa); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void poll_server_until_read_done(test_tcp_server *server, |
|
|
|
|
gpr_event *signal_when_done) { |
|
|
|
|
gpr_thd_id id; |
|
|
|
|
poll_args *pa = gpr_malloc(sizeof(*pa)); |
|
|
|
|
pa->server = server; |
|
|
|
|
pa->signal_when_done = signal_when_done; |
|
|
|
|
gpr_thd_new(&id, actually_poll_server, pa, NULL); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void match_initial_magic_string(gpr_slice_buffer *buffer) { |
|
|
|
@ -180,20 +198,26 @@ static void match_initial_magic_string(gpr_slice_buffer *buffer) { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void test_initial_string(test_tcp_server *server, int secure) { |
|
|
|
|
gpr_event ev; |
|
|
|
|
gpr_event_init(&ev); |
|
|
|
|
grpc_test_set_initial_connect_string_function(set_magic_initial_string); |
|
|
|
|
poll_server_until_read_done(server, &ev); |
|
|
|
|
start_rpc(secure, server_port); |
|
|
|
|
poll_server_until_read_done(server); |
|
|
|
|
gpr_event_wait(&ev, gpr_inf_future(GPR_CLOCK_REALTIME)); |
|
|
|
|
match_initial_magic_string(&state.incoming_buffer); |
|
|
|
|
cleanup_rpc(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void test_initial_string_with_redirect(test_tcp_server *server, |
|
|
|
|
int secure) { |
|
|
|
|
gpr_event ev; |
|
|
|
|
gpr_event_init(&ev); |
|
|
|
|
int another_port = grpc_pick_unused_port_or_die(); |
|
|
|
|
grpc_test_set_initial_connect_string_function( |
|
|
|
|
reset_addr_and_set_magic_string); |
|
|
|
|
poll_server_until_read_done(server, &ev); |
|
|
|
|
start_rpc(secure, another_port); |
|
|
|
|
poll_server_until_read_done(server); |
|
|
|
|
gpr_event_wait(&ev, gpr_inf_future(GPR_CLOCK_REALTIME)); |
|
|
|
|
match_initial_magic_string(&state.incoming_buffer); |
|
|
|
|
cleanup_rpc(); |
|
|
|
|
} |
|
|
|
|