static void run_test(const char *response_payload, size_t response_payload_length, grpc_status_code expected_status, const char *expected_detail) { test_tcp_server test_server; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; gpr_event ev; grpc_init(); gpr_event_init(&ev); server_port = grpc_pick_unused_port_or_die(); test_tcp_server_init(&test_server, on_connect, &test_server); test_tcp_server_start(&test_server, server_port); state.response_payload = response_payload; state.response_payload_length = response_payload_length; /* poll server until sending out the response */ poll_server_until_read_done(&test_server, &ev); start_rpc(server_port, expected_status, expected_detail); gpr_event_wait(&ev, gpr_inf_future(GPR_CLOCK_REALTIME)); /* clean up */ grpc_endpoint_shutdown(&exec_ctx, state.tcp); grpc_endpoint_destroy(&exec_ctx, state.tcp); grpc_exec_ctx_finish(&exec_ctx); cleanup_rpc(); test_tcp_server_destroy(&test_server); grpc_shutdown(); }
static void* gps_client(void* unused) { int client_fd = -1; LOG_ENTRY; client_fd = gps_proxy_socket_open(); if (client_fd < 0) { RPC_ERROR("failed to open the socket"); goto fail; } if (start_rpc(client_fd)) { RPC_ERROR("failed to connect to the RPC server"); goto fail; } goto done; fail: if (client_fd >= 0) { close(client_fd); } done: pthread_mutex_lock(&gps_mutex); pthread_cond_broadcast(&gps_cond); pthread_mutex_unlock(&gps_mutex); LOG_EXIT; return NULL; }
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); 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); gpr_event_wait(&ev, gpr_inf_future(GPR_CLOCK_REALTIME)); match_initial_magic_string(&state.incoming_buffer); cleanup_rpc(); }
static void call_op(grpc_call_element *elem, grpc_call_element *from_elem, grpc_call_op *op) { call_data *calld = elem->call_data; GPR_ASSERT(elem->filter == &grpc_client_channel_filter); GRPC_CALL_LOG_OP(GPR_INFO, elem, op); switch (op->type) { case GRPC_SEND_METADATA: grpc_metadata_buffer_queue(&calld->pending_metadata, op); break; case GRPC_SEND_DEADLINE: calld->deadline = op->data.deadline; op->done_cb(op->user_data, GRPC_OP_OK); break; case GRPC_SEND_START: /* filter out the start event to find which child to send on */ start_rpc(elem, op); break; case GRPC_CANCEL_OP: cancel_rpc(elem, op); break; case GRPC_SEND_MESSAGE: case GRPC_SEND_FINISH: case GRPC_REQUEST_DATA: if (calld->state == CALL_ACTIVE) { grpc_call_element *child_elem = grpc_child_call_get_top_element(calld->s.active.child_call); child_elem->filter->call_op(child_elem, elem, op); } else { op->done_cb(op->user_data, GRPC_OP_ERROR); } break; default: GPR_ASSERT(op->dir == GRPC_CALL_UP); grpc_call_next_op(elem, op); break; } }